数据预处理

核磁干货 | RESTplus计算核磁静息态指标 大家好,上期 茗创科技 分享了“爱马仕”的计算脑电功能连接的工具包,今天给大家推荐这款静息态 fMRI 数据分析工具包--RESTplus RESTplus是基于SPM 开发的 fMRI 批处理软件,具有页面简洁,易于理解和操作,功能丰富等特点。 大家还记之前推过的SPM场图校正手册吗?忘记的朋友可以复习一下哦~ SPM场图校正手册 不会核磁数据处理的朋友也可以联系我们~~ 在具体描述如何使用RESTplus进行数据处理之前,我们先确... 阅读详情

title: 数据预处理
category: 数据分析基础

Dataframe 的数据预处理

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['STFangsong']
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format = 'svg'
  1. 加载数据

    • read_csv
    • read_excel
    • read_sql
  2. 数据抽取

    • 布尔索引
    • query
    • drop
  3. 数据清洗

    • 缺失值:isnullisnadropnafillna
    • 重复值:duplicateddrop_duplicatesnunique
    • 异常值:replacedrop
      • Z-score
      • IQR
      • DBScan
      • Isolation Forest
    • 预处理:applytransformapplymap
      • str:extract(regexp)contains
      • dt:yearquartermonthdayweekday
      • to_datetime
      • cut(data,bins)qcut(data,[0,0.1,0.25,0.5,0.75,0.9,1])
  4. 数据透视

    • 分组:groupby --> agg
    • 透视表:pivot_table --> indexcolumnsvaluesaggfunc
    • 交叉表:crosstab
    • 排序:sort_values(by,ascending)sort_index(level)
    • 取头部:nlargestnsmallest
  5. 可视化

    • 绘图:plot
      • kind:linescatterpiebarbarhhistboxplot
      • figsize
  6. 业务洞察

数据分析师岗位信息数据预处理

导入数据

df = pd.read_csv('../files/data/lagou.csv',
                 usecols=['city', 'companyFullName', 'companyLabelList', 'companySize', 'district', 
             'education', 'financeStage', 'industryField', 'positionName', 'salary',
             'workYear'])
df
citycompanyFullNamecompanyLabelListcompanySizedistricteducationfinanceStageindustryFieldpositionNamesalaryworkYear
0北京达疆网络科技(上海)有限公司['年底双薪', '绩效奖金', '岗位晋升', '定期体检']2000人以上大兴区本科D轮及以上消费生活数据分析岗15k-30k3-5年
1北京北京音娱时光科技有限公司['年底双薪', '绩效奖金', '带薪年假', '免费健身']50-150人海淀区本科A轮移动互联网数据分析10k-18k1-3年
2北京北京千喜鹤餐饮管理有限公司[]2000人以上海淀区本科未融资消费生活数据分析20k-30k3-5年
3北京吉林省海生电子商务有限公司[]少于15人朝阳区本科不需要融资电商数据分析33k-50k3-5年
4北京韦博网讯科技(北京)有限公司[]50-150人朝阳区本科未融资电商,软件开发数据分析10k-15k1-3年
....................................
3135天津清博津商(天津)教育科技有限公司[]15-50人和平区不限不需要融资数据服务,教育审核实习生(春节短期)1k-2k应届毕业生
3136天津上海礼紫股权投资基金管理有限公司[]500-2000人河北区不限未融资金融运营助理6k-8k不限
3137天津北京达佳互联信息技术有限公司['股票期权', '弹性工作', '定期体检', '岗位晋升']2000人以上西青区本科D轮及以上文娱丨内容运营编辑团队leader8k-15k3-5年
3138天津北京河狸家信息技术有限公司['高配福利', '弹性时间', 'BAT¥', '逗逼伙伴']500-2000人和平区不限C轮移动互联网商家运营-天津6k-8k不限
3139天津北京河狸家信息技术有限公司['高配福利', '弹性时间', 'BAT¥', '逗逼伙伴']500-2000人和平区本科C轮移动互联网运营实习生-天津2k-4k应届毕业生

3140 rows × 11 columns

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3140 entries, 0 to 3139
Data columns (total 11 columns):
 #   Column            Non-Null Count  Dtype 
---  ------            --------------  ----- 
 0   city              3140 non-null   object
 1   companyFullName   3140 non-null   object
 2   companyLabelList  3140 non-null   object
 3   companySize       3140 non-null   object
 4   district          3133 non-null   object
 5   education         3140 non-null   object
 6   financeStage      3140 non-null   object
 7   industryField     3140 non-null   object
 8   positionName      3140 non-null   object
 9   salary            3140 non-null   object
 10  workYear          3140 non-null   object
dtypes: object(11)
memory usage: 270.0+ KB

筛选出数据分析岗位

# 将df['positionName']处理成字符串后使用str.contains('数据分析')查找到包含数据分析关键字的岗位(返回布尔值)后使用布尔索引
temp_df = df[df['positionName'].str.contains('数据分析')]

将薪资处理成上下限的均值

# 捕获组捕获薪资上下限
# str.extract(正则表达式) - 抽取正则表达式捕获组目标值
avg_salary = temp_df.salary.str.extract(r'(\d+)[Kk]?-(\d+)[Kk]').applymap(int).mean(axis = 1)
temp_df['salary'] = avg_salary
temp_df
C:\Users\zs\AppData\Local\Temp/ipykernel_12772/422559916.py:4: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  temp_df['salary'] = avg_salary
citycompanyFullNamecompanyLabelListcompanySizedistricteducationfinanceStageindustryFieldpositionNamesalaryworkYear
0北京达疆网络科技(上海)有限公司['年底双薪', '绩效奖金', '岗位晋升', '定期体检']2000人以上大兴区本科D轮及以上消费生活数据分析岗22.53-5年
1北京北京音娱时光科技有限公司['年底双薪', '绩效奖金', '带薪年假', '免费健身']50-150人海淀区本科A轮移动互联网数据分析14.01-3年
2北京北京千喜鹤餐饮管理有限公司[]2000人以上海淀区本科未融资消费生活数据分析25.03-5年
3北京吉林省海生电子商务有限公司[]少于15人朝阳区本科不需要融资电商数据分析41.53-5年
4北京韦博网讯科技(北京)有限公司[]50-150人朝阳区本科未融资电商,软件开发数据分析12.51-3年
....................................
3065天津北京达佳互联信息技术有限公司['股票期权', '弹性工作', '定期体检', '岗位晋升']2000人以上西青区本科D轮及以上文娱丨内容数据分析专员9.01-3年
3069天津林之尚沃(天津)国际贸易有限公司[]15-50人和平区本科不需要融资医疗丨健康数据分析专员8.01-3年
3070天津林之尚沃(天津)国际贸易有限公司[]15-50人和平区本科不需要融资医疗丨健康数据分析实习生3.0不限
3071天津西安格蒂电力有限公司['技能培训', '带薪年假', '绩效奖金', '岗位晋升']500-2000人河北区大专未融资企业服务ETL/大数据/数据分析/实施9.03-5年
3088天津谷川联行有限公司['年底双薪', '技能培训', '带薪年假', '绩效奖金']150-500人西青区本科不需要融资软件开发,企业服务BI工程师/数据分析师(天津)10.0不限

1515 rows × 11 columns

将工作经验改为最低要求

# 使用正则表达式将工作经验改为最低要求
import re

def work_experience(content):
    matcher = re.search(r'\d+',content)
    result = matcher.group() if matcher else '0'
    return int(result)

temp_df['workYear'] = temp_df.workYear.apply(work_experience)
temp_df
# apply - 作用在某行/某列  applymap - 作用在每个单元格
C:\Users\zs\AppData\Local\Temp/ipykernel_12772/490244383.py:9: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  temp_df['workYear'] = temp_df.workYear.apply(work_experience)
citycompanyFullNamecompanyLabelListcompanySizedistricteducationfinanceStageindustryFieldpositionNamesalaryworkYear
0北京达疆网络科技(上海)有限公司['年底双薪', '绩效奖金', '岗位晋升', '定期体检']2000人以上大兴区本科D轮及以上消费生活数据分析岗22.53
1北京北京音娱时光科技有限公司['年底双薪', '绩效奖金', '带薪年假', '免费健身']50-150人海淀区本科A轮移动互联网数据分析14.01
2北京北京千喜鹤餐饮管理有限公司[]2000人以上海淀区本科未融资消费生活数据分析25.03
3北京吉林省海生电子商务有限公司[]少于15人朝阳区本科不需要融资电商数据分析41.53
4北京韦博网讯科技(北京)有限公司[]50-150人朝阳区本科未融资电商,软件开发数据分析12.51
....................................
3065天津北京达佳互联信息技术有限公司['股票期权', '弹性工作', '定期体检', '岗位晋升']2000人以上西青区本科D轮及以上文娱丨内容数据分析专员9.01
3069天津林之尚沃(天津)国际贸易有限公司[]15-50人和平区本科不需要融资医疗丨健康数据分析专员8.01
3070天津林之尚沃(天津)国际贸易有限公司[]15-50人和平区本科不需要融资医疗丨健康数据分析实习生3.00
3071天津西安格蒂电力有限公司['技能培训', '带薪年假', '绩效奖金', '岗位晋升']500-2000人河北区大专未融资企业服务ETL/大数据/数据分析/实施9.03
3088天津谷川联行有限公司['年底双薪', '技能培训', '带薪年假', '绩效奖金']150-500人西青区本科不需要融资软件开发,企业服务BI工程师/数据分析师(天津)10.00

1515 rows × 11 columns

图表绘制

# 1. 找出各大城市(city)数据分析岗位的需求量并绘制柱状图。
temp_ser = temp_df.groupby('city').positionName.count()
temp_ser.plot(kind = 'bar',figsize = (8,4),color = '#98C3A1')
plt.xticks(rotation = 0)
plt.yticks(np.arange(50,551,100))
plt.xlabel('城市')
plt.ylabel('招聘需求数')
plt.title('各大城市数据分析岗位的需求量')
for i in range(temp_ser.size):
    plt.text(i,temp_ser[i] + 5,temp_ser[i],ha = 'center')
plt.show()
    
# 2. 找出不同领域(industryField)对数据分析的需求量并绘制饼图。
# 1)、将不同领域做划分并统计各个领域需求量

# 法一:
# temp_ser1 = temp_df['industryField'].str.extract(r'([\u4e00-\u4e27\u4e29-\u9fa5]+)[,\u4e28]?([\u4e00-\u9fa5]+)?')[0].value_counts()

# 法二:
temp_ser1 = temp_df.industryField.str.split(r'[,,、|丨\s]', expand = True)[0].value_counts()
# 2)、作图
temp_ser1.nlargest(10).plot(kind = 'pie',autopct = '%.2f%%', figsize = (8,4))
plt.title('不同领域(industryField)对数据分析的需求量Top10')
# plt.legend(loc = 'upper right')
plt.show()
    
# 3. 分析各城市的薪资水平并绘制柱状图和折线图。
temp_ser2 = np.round(temp_df.groupby('city').salary.mean(),2)
temp_ser2.plot(kind = 'bar',figsize = (8,4), color = '#17BECF')
plt.plot(temp_ser2.index,temp_ser2,color = '#98C3A1')
plt.xticks(rotation = 0)
plt.ylabel('薪资(单位:K)')
plt.grid(axis='y', alpha = 0.5, linestyle = '--')
for i in range(temp_ser2.size):
    plt.text(i,temp_ser2[i] + 0.2,temp_ser2[i],ha = 'center')
plt.title('各城市的薪资水平')
plt.show()
    

2020销售数据预处理

导入数据

sales_df = pd.read_excel('../files/data/2020年销售数据-2.xlsx')
sales_df
销售日期销售区域销售渠道销售订单品牌售价销售数量销售额Unnamed: 8Unnamed: 9...Unnamed: 13Unnamed: 14Unnamed: 15Unnamed: 16Unnamed: 17Unnamed: 18Unnamed: 19Unnamed: 20Unnamed: 21Unnamed: 22
02020-01-01上海拼多多182894-455八匹马99838217NaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
12020-01-01上海抖音205635-402八匹马219296351NaN行标签...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
22020-01-01上海天猫205654-021八匹马1698514365NaN1月...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
32020-01-01上海天猫205654-519八匹马169142366NaN2月...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
42020-01-01上海天猫377781-010皮皮虾2496115189NaN3月...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
..................................................................
19402020-12-30北京京东D89677花花姑娘269266994NaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
19412020-12-30福建实体182719-050八匹马79977663NaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
19422020-12-31福建实体G70083花花姑娘2695514795NaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
19432020-12-31福建抖音211471-902/704八匹马59593481NaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
19442020-12-31福建天猫211807-050八匹马99272673NaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN

1945 rows × 23 columns

sales_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1945 entries, 0 to 1944
Data columns (total 23 columns):
 #   Column       Non-Null Count  Dtype         
---  ------       --------------  -----         
 0   销售日期         1945 non-null   datetime64[ns]
 1   销售区域         1945 non-null   object        
 2   销售渠道         1945 non-null   object        
 3   销售订单         1945 non-null   object        
 4   品牌           1945 non-null   object        
 5   售价           1945 non-null   int64         
 6   销售数量         1945 non-null   int64         
 7   销售额          1945 non-null   int64         
 8   Unnamed: 8   0 non-null      float64       
 9   Unnamed: 9   40 non-null     object        
 10  Unnamed: 10  35 non-null     object        
 11  Unnamed: 11  12 non-null     object        
 12  Unnamed: 12  14 non-null     object        
 13  Unnamed: 13  14 non-null     object        
 14  Unnamed: 14  13 non-null     object        
 15  Unnamed: 15  12 non-null     object        
 16  Unnamed: 16  6 non-null      object        
 17  Unnamed: 17  7 non-null      object        
 18  Unnamed: 18  6 non-null      object        
 19  Unnamed: 19  6 non-null      object        
 20  Unnamed: 20  6 non-null      object        
 21  Unnamed: 21  6 non-null      object        
 22  Unnamed: 22  10 non-null     object        
dtypes: datetime64[ns](1), float64(1), int64(3), object(18)
memory usage: 349.6+ KB

根据销售日期划分销售季度

sales_df['年'] = sales_df.销售日期.dt.year
sales_df['季度'] = sales_df.销售日期.dt.quarter
sales_df['月份'] = sales_df.销售日期.dt.month
sales_df
销售日期销售区域销售渠道销售订单品牌售价销售数量销售额Unnamed: 8Unnamed: 9...Unnamed: 16Unnamed: 17Unnamed: 18Unnamed: 19Unnamed: 20Unnamed: 21Unnamed: 22季度月份
02020-01-01上海拼多多182894-455八匹马99838217NaNNaN...NaNNaNNaNNaNNaNNaNNaN202011
12020-01-01上海抖音205635-402八匹马219296351NaN行标签...NaNNaNNaNNaNNaNNaNNaN202011
22020-01-01上海天猫205654-021八匹马1698514365NaN1月...NaNNaNNaNNaNNaNNaNNaN202011
32020-01-01上海天猫205654-519八匹马169142366NaN2月...NaNNaNNaNNaNNaNNaNNaN202011
42020-01-01上海天猫377781-010皮皮虾2496115189NaN3月...NaNNaNNaNNaNNaNNaNNaN202011
..................................................................
19402020-12-30北京京东D89677花花姑娘269266994NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412
19412020-12-30福建实体182719-050八匹马79977663NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412
19422020-12-31福建实体G70083花花姑娘2695514795NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412
19432020-12-31福建抖音211471-902/704八匹马59593481NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412
19442020-12-31福建天猫211807-050八匹马99272673NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412

1945 rows × 26 columns

计算销售额

sales_df['销售额'] = sales_df.售价 * sales_df.销售数量
sales_df
销售日期销售区域销售渠道销售订单品牌售价销售数量销售额Unnamed: 8Unnamed: 9...Unnamed: 16Unnamed: 17Unnamed: 18Unnamed: 19Unnamed: 20Unnamed: 21Unnamed: 22季度月份
02020-01-01上海拼多多182894-455八匹马99838217NaNNaN...NaNNaNNaNNaNNaNNaNNaN202011
12020-01-01上海抖音205635-402八匹马219296351NaN行标签...NaNNaNNaNNaNNaNNaNNaN202011
22020-01-01上海天猫205654-021八匹马1698514365NaN1月...NaNNaNNaNNaNNaNNaNNaN202011
32020-01-01上海天猫205654-519八匹马169142366NaN2月...NaNNaNNaNNaNNaNNaNNaN202011
42020-01-01上海天猫377781-010皮皮虾2496115189NaN3月...NaNNaNNaNNaNNaNNaNNaN202011
..................................................................
19402020-12-30北京京东D89677花花姑娘269266994NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412
19412020-12-30福建实体182719-050八匹马79977663NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412
19422020-12-31福建实体G70083花花姑娘2695514795NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412
19432020-12-31福建抖音211471-902/704八匹马59593481NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412
19442020-12-31福建天猫211807-050八匹马99272673NaNNaN...NaNNaNNaNNaNNaNNaNNaN2020412

1945 rows × 26 columns

各维度拆解及透视

# 1、统计月度销售额
sales_df.groupby('月份').销售额.sum()
月份
1     5409855
2     4608455
3     4164972
4     3996770
5     3239005
6     2817936
7     3501304
8     2948189
9     2632960
10    2375385
11    2385283
12    1691973
Name: 销售额, dtype: int64
# 同时计算作用多个聚合函数
sales_df.groupby('月份').销售额.agg([np.sum, np.max, np.min])
sumamaxamin
月份
154098551151041035
246084551334111668
3416497293906990
439967701143121089
53239005859141185
62817936116303690
7350130483930944
829481891067111896
92632960120807948
102375385875271089
112385283683241185
12169197394905897
# 2、统计品牌销售占比
temp = sales_df.groupby('品牌').销售额.sum()
temp.plot(kind = 'pie', autopct = '%.2f%%')
plt.show()
    
# 3、统计各地区月度销售额
# sales_df.groupby(['销售区域', '月份']).销售额.sum()
pd.pivot_table(data = sales_df,
              columns=['月份'],
              index = ['销售区域'],
               values = ['销售额'],
              aggfunc = np.sum,   # 指定聚合函数(默认为np.mean)
              fill_value=0,   # 空值填充值
              margins=True,   # 是否显示总计
              margins_name='总计'   # 设置总计名字
              )
销售额
月份123456789101112总计
销售区域
上海1679125168952710611931082187841199785404863906734937110769341210882516952804111610489
北京18782341807787136066612059898073001216432121908364572739007767160867866859614612477717
南京0000008410320071096202153071767301
安徽0003413085541550000000895463
广东003881800000469390365191039518801617949
江苏00053707900000000537079
浙江0024835400004395080000687862
福建185249611111411106579830207103635181610057728365862776999958070748625835247910178227
总计54098554608455416497239967703239005281793635013042948189263296023753852385283169197339772087
# 4、统计各渠道品牌销量
sales_df.groupby(['销售渠道','品牌']).销售额.sum()
销售渠道  品牌  
京东    八匹马     1030702
      啊哟喂      148487
      壁虎       984961
      皮皮虾     1362590
      花花姑娘    4167728
天猫    八匹马     1722144
      啊哟喂      190694
      壁虎      1489656
      皮皮虾     2511090
      花花姑娘    7785319
实体    八匹马      843010
      啊哟喂       99498
      壁虎       702396
      皮皮虾     1269346
      花花姑娘    2234169
抖音    八匹马      622542
      啊哟喂      108039
      壁虎       619105
      皮皮虾      833905
      花花姑娘    2599314
拼多多   八匹马     1116248
      啊哟喂      146441
      壁虎       882861
      皮皮虾     1915340
      花花姑娘    4386502
Name: 销售额, dtype: int64
sales_df.pivot_table(index = ['销售渠道'],
                    columns=['品牌'],
                    values = ['销售额'],
                    aggfunc=np.sum,
                    margins=True,
                    margins_name='总计')
销售额
品牌八匹马啊哟喂壁虎皮皮虾花花姑娘总计
销售渠道
京东1030702148487984961136259041677287694468
天猫172214419069414896562511090778531913698903
实体84301099498702396126934622341695148419
抖音62254210803961910583390525993144782905
拼多多1116248146441882861191534043865028447392
总计5334646693159467897978922712117303239772087
# 统计不同售价区间月度销量占比
# 1)、查找最小值
min_price = sales_df['售价'].min()
max_price = sales_df['售价'].max()
min_price,max_price
(59, 1499)
# 2)、分箱
bins = np.arange(min_price,max_price + 1, 180)
bins
array([  59,  239,  419,  599,  779,  959, 1139, 1319, 1499], dtype=int64)
cate = pd.cut(sales_df.售价, bins)
sales_df.groupby([cate,'月份']).销售数量.sum()
售价                月份
(90.75, 95.75]    1       0
                  2       0
                  3       0
                  4       0
                  5       0
                       ... 
(115.75, 120.75]  8     178
                  9      61
                  10      0
                  11    199
                  12     77
Name: 销售数量, Length: 72, dtype: int64
# 3)、分箱数据透视各品牌月度求和
sales_df_ = pd.pivot_table(data = sales_df,
              index = cate,
              columns=['月份'],
              values = ['销售数量'],
              aggfunc = np.sum)
sales_df_
销售数量
月份123456789101112
售价
(59, 239]393041523412340736952800278622752388294732712651
(239, 419]387431224295286219502736255420842219232320371892
(419, 599]272221942228281322821459226017421656128819221049
(599, 779]10678646615036214557136445894548221
(779, 959]4561873031802211274161388302050
(959, 1139]3563483192472313693342280095
(1139, 1319]382414201993823911989118113032
(1319, 1499]108104059000370000
ser = sales_df_.sum()
sales_df_ = np.round(sales_df_.divide(ser) * 100, 2)
sales_df_
销售数量
月份123456789101112
售价
(59, 239]30.4836.4730.3633.1740.8835.6631.1630.9533.7241.3643.5146.18
(239, 419]30.0427.4238.2227.8721.5834.8428.5728.3531.3432.6027.1032.96
(419, 599]21.1119.2719.8327.3925.2518.5825.2823.7023.3918.0825.5718.28
(599, 779]8.277.595.884.906.875.797.978.768.326.371.090.37
(779, 959]3.541.642.701.752.451.624.651.881.170.002.730.00
(959, 1139]2.763.062.842.412.560.461.044.650.400.000.001.66
(1139, 1319]2.963.640.181.940.423.041.331.211.671.590.000.56
(1319, 1499]0.840.910.000.570.000.000.000.500.000.000.000.00
sales_df_.applymap(lambda x: f'{x}%')
销售数量
月份123456789101112
售价
(59, 239]30.48%36.47%30.36%33.17%40.88%35.66%31.16%30.95%33.72%41.36%43.51%46.18%
(239, 419]30.04%27.42%38.22%27.87%21.58%34.84%28.57%28.35%31.34%32.6%27.1%32.96%
(419, 599]21.11%19.27%19.83%27.39%25.25%18.58%25.28%23.7%23.39%18.08%25.57%18.28%
(599, 779]8.27%7.59%5.88%4.9%6.87%5.79%7.97%8.76%8.32%6.37%1.09%0.37%
(779, 959]3.54%1.64%2.7%1.75%2.45%1.62%4.65%1.88%1.17%0.0%2.73%0.0%
(959, 1139]2.76%3.06%2.84%2.41%2.56%0.46%1.04%4.65%0.4%0.0%0.0%1.66%
(1139, 1319]2.96%3.64%0.18%1.94%0.42%3.04%1.33%1.21%1.67%1.59%0.0%0.56%
(1319, 1499]0.84%0.91%0.0%0.57%0.0%0.0%0.0%0.5%0.0%0.0%0.0%0.0%
df1 = pd.DataFrame({
    "类别": ["手机", "手机", "手机", "手机", "手机", "电脑", "电脑", "电脑", "电脑"],
    "品牌": ["华为", "华为", "华为", "小米", "小米", "华为", "华为", "小米", "小米"],
    "等级": ["A类", "B类", "A类", "B类", "C类", "A类", "B类", "C类", "A类"],
    "A组": [1, 2, 2, 3, 3, 4, 5, 6, 7],
    "B组": [2, 4, 5, 5, 6, 6, 8, 9, 9]
})
df1
类别品牌等级A组B组
0手机华为A类12
1手机华为B类24
2手机华为A类25
3手机小米B类35
4手机小米C类36
5电脑华为A类46
6电脑华为B类58
7电脑小米C类69
8电脑小米A类79
# 任务1:A组手机和电脑各卖出多少台
# 法一:
# df1.groupby(['类别','等级']).A组.sum()
# 法二:
pd.pivot_table(data = df1,
              index = ['类别'],
              columns=['等级'],
              values = ['A组'],
              aggfunc=np.sum,
              margins=True,
              margins_name='总计')
A组
等级A类B类C类总计
类别
手机35311
电脑115622
总计1410933
# 任务2:A组不同品牌的手机和电脑各卖出多少台
pd.pivot_table(data = df1,
              index = ['类别'],
              columns=['品牌'],
              values = ['A组'],
              aggfunc=np.sum,
              margins=True,
              margins_name='总计')
A组
品牌华为小米总计
类别
手机5611
电脑91322
总计141933
# 任务3:不同品牌的手机和电脑,A组和B组各卖出多少台
pd.pivot_table(data = df1,
              index = ['类别'],
              columns=['品牌'],
              values = ['A组','B组'],
              aggfunc=np.sum,
              margins=True,
              margins_name='总计')
A组B组
品牌华为小米总计华为小米总计
类别
手机5611111122
电脑91322141832
总计141933252954
df_luohu = pd.read_csv('../files/data/2018年北京积分落户数据.csv')
df_luohu
idnamebirthdaycompanyscore
01杨效丰1972-12北京利德华福电气技术有限公司122.59
12纪丰伟1974-12北京航天数据股份有限公司121.25
23王永1974-05品牌联盟(北京)咨询股份公司118.96
34杨静1975-07中科专利商标代理有限责任公司118.21
45张凯江1974-11北京阿里巴巴云计算技术有限公司117.79
..................
60146015孙宏波1978-08华为海洋网络有限公司北京科技分公司90.75
60156016刘丽香1976-11福斯(上海)流体设备有限公司北京分公司90.75
60166017周崧1977-10赢创德固赛(中国)投资有限公司90.75
60176018赵妍1979-07澳科利耳医疗器械(北京)有限公司90.75
60186019贺锐1981-06北京宝洁技术有限公司90.75

6019 rows × 5 columns

# 1. 根据company将落户人员分组,统计每个公司有多少积分落户人员?
luohu_ser = df_luohu.groupby('company').id.count()
luohu_ser.nlargest(20).plot(kind = 'bar',figsize = (8,4))
for i in range(luohu_ser.nlargest(20).size):
    plt.text(i,luohu_ser.nlargest(20)[i] + 1,luohu_ser.nlargest(20)[i],ha = 'center')
plt.show()
    
# 2. 根据年龄将落户人员分组,统计每个年龄段有多少人(建议5岁一个年龄段)?
from datetime import datetime

date = pd.to_datetime(df_luohu.birthday)
df_luohu['age'] = (datetime(2018,7,1) - date).dt.days // 365
bins = np.arange(30,61,5)
box = pd.cut(df_luohu.age,bins,right = False)
ser = df_luohu.groupby(box).name.count()
ser.plot(kind = 'bar')
plt.xticks(rotation = 0)
for i in range(ser.size):
    plt.text(i,ser[i]+30,ser[i],ha = 'center')   #数字居中显示
plt.show()
    
# 3. 根据落户积分将落户人员分组,统计每个积分段有多少人?
max_score = df_luohu['score'].max()
min_score = df_luohu['score'].min()

bins = np.arange(min_score,max_score,5)
box = pd.cut(df_luohu.score,bins,right = False)
ser = df_luohu.groupby(box).name.count()
ser.plot(kind = 'bar')
for i in range(ser.size):
    plt.text(i,ser[i]+30,ser[i],ha = 'center')   #数字居中显示
plt.show()


数据预处理Python数据预处理常见操作   文章总结了拿到原始数据后,做数据预处理的常见操作。后续会根据总结不断更新。 目录一、数据查看二、数据转换三、数据清洗1.异常值2.重复值3.缺失值四、数据获取五、数据合并1.join,基于index连接DataFrame的列2.merge,基于column连接,类似SQL的join3.concat,合并相同的Excel或给DataFrame添加行或列时使用六、其他操作1.数据分组聚合2.列表生... 阅读详情

相关推荐

python数据预处理

Python数据分析与可视化中,数据处理是一个关键的步骤,它包括数据预处理数据分析数据可视化。数据预处理数据分析的第一步,它包括数据清洗、数据整合、数据转换等步骤。数据清洗的目的是消除异常值、缺失值和重复值,以确保数据的质量和准确性。数据整合则是将不同来源和格式的数据进行整合,形成一个统一的数据集。数据转换则是对数据进行必要的转换,以便于分析和可视化。数据分析数据处理的重点,它包括探索性分析和预测性分析。探索性分析主要是对数据进行描述性统计、可视化、相关性分析等,以了解数据的分布、特征和规律。

2303_76177437的博客 1702

HarmonyOS Next模型轻量化中的数据处理优化

协同优化顺序在数据处理与模型结构优化、量化等技术协同应用时,要注意优化顺序。一般来说,先进行数据处理,如数据增强和预处理,为模型训练提供更好的数据基础;然后进行模型结构优化,如剪枝,减少模型的参数量和计算复杂度;最后进行量化处理,进一步压缩模型大小和提高计算效率。如果顺序不当,可能会影响优化效果。例如,如果先进行量化再进行剪枝,可能会因为量化后的参数表示范围有限,导致错误地评估神经元的重要性,影响剪枝效果。数据与模型适配数据处理和模型优化要相互适配。

same4869的博客 1239

Sklearn中数据预处理

数据预处理 Sklearn中的模块preprocessing:几乎包含数据预处理的所有内容 数据无量纲化 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布 的需求,这种需求统称为将数据“无量纲化”。 数据的无量纲化可以是线性的,也可以是非线性的。线性的无量纲化包括中心化(Zero-centered或者Mean subtraction)处理和缩放处理(Scale)。中心化的本质是让所有记录减去一个固定值,即让数据样本数...

sshi9的博客 5653

销售数据预处理

实验目的: 1.熟悉Linux系统、MySQL、Insight等系统和软件的安装和使用; 2.了解大数据处理的基本流程; 3.熟悉数据抽取、转换、装在方法; 4.熟悉在不同类型数据库之间进行数据相互导入导出 实验内容: 本实验对两个数据源:employee_info_table.sql代表员工信息表;sales_info_table.sql表示销售信息表做数据预处理。 实验过程: 1.实验准备: 1.1启动数据库: sudo -i service mysql start mysql -uroot -p123

小菜菜的博客 953

预计的数据分析流程以及一些问题

1.数据预处理(到smooth) SPM12 (去掉前10层,时间层校正,头动校正,功能像结构像对齐,结构像分割,Normalise到标准空间,Smooth) 2.数据预处理之detrend和filter,回归掉CSF和WM的协变量,然后用Scrubbing去头动伪迹,24PF去头动伪迹 GRETNA(大概需要整理一下文件夹的结构,所以这个软件需要的文件夹结构是怎样?) 或者DPARSF或者...

Iris_bysshqx17的博客 5631

销售数据分析的最佳实践

1.背景介绍 销售数据分析是企业在竞争激烈的市场环境中取得稳定发展的关键。通过对销售数据进行深入分析,企业可以发现市场趋势、客户需求、产品销售性能等关键信息,从而制定有效的销售策略和营销活动,提高销售效果。 在大数据时代,销售数据的规模和复杂性不断增加,传统的数据分析方法已经无法满足企业的需求。因此,我们需要学习和掌握一些最佳实践,提高销售数据分析的效率和准确性。 本文将从以下六个方面介绍销...

AI天才研究院 1154

Python数据预处理

数据预处理是指在机器学习、数据分析数据挖掘等领域中,对原始数据进行一系列的处理和转换,以便为后续的分析和建模做好准备。数据预处理数据科学项目中的重要步骤,因为原始数据往往存在各种质量问题,如缺失值、异常值、重复数据、不一致的格式等,这些问题会直接影响模型的性能和最终结果的准确性。因此在数据分析中,对数据数据预处理是必不可少的一个环节。

weixin_61663117的博客 2833

spss数据预处理步骤_数据预处理详解

简介由于当今数据的数量庞大且来自于各种不同类型的来源,因此出现数据异常的可能性不断增加。鉴于高质量数据可生成更好的模型和预测,数据预处理的重要性与日俱增,并且已经成为数据科学/机器学习/AI 管道中的基本步骤。在本文中,我们将探讨数据处理需求,并讨论用于完成此流程中每个步骤的不同方法。在数据收集过程中,存在三个影响数据质量的主要因素:准确率:与期望值之间存在偏差的错误值。数据不准确的原因多种多样,...

weixin_36289742的博客 7007

Pandas常用数据预处理方法

1.日期格式转换 输入日期列为object、string类型,格式是“9/14/2021”,需要转换成pandas中可计算的日期格式。实际运行后输出为“2021-09-14”。 import pandas as pd dataframe2['日期'] = pd.to_datetime(dataframe2['日期'], format='%m/%d/%Y').dt.date 2.设置列名并删除指定列 把‘指标’列的数据当做列名后,删除‘指标’列。 data.columns = data.loc['指标

A15216110998的专栏 1710

《深度学习实战》第1章 深度学习的发展介绍

参考书籍《深度学习实战》杨云、杜飞著 第1章 深度学习的发展介绍 介绍 python是一种非常简单易学的解释性语言。由于强大的开源库支持(numpy,scipy,matplotlib),其广泛应用于科学计算中。如果你励志成为一名数据科学家或数据“攻城狮”,那python就是你必须学会的工具之一。接下来我们将简短的介绍下python, numpy, matplotlib的使用。本章教程内容主要参考于斯坦福大学cs228课程的python教程,详情可使用该网址查看 https://github.com/kule

qq_37402392的博客 528

matlab wsd,matlab-restplus&gretna—MRI

整理:杨艳蓉预处理输入路径和调用restplus的指令打开Pipeline数据文件所在地址数据文件运行的起始文件去除的数目可改动时间层校正的层数与磁共振设备有关,需要根据磁共振技师提供的信息进行修改。38为层数,可修改中间的为等差数列,写法为[1:2:37 2:2:38],写完后回车键可以自动生成体素大小可以改变,如改为[4 4 4]平滑的数值可以改变,如改为[8 8 8]此处可以根据需要进行勾选...

weixin_35317737的博客 3185

使用spm预处理fMRI数据

使用spm预处理fMRI数据

kakaviuviu的博客 4324

电商精准营销—数据预处理概述

#coding:utf8 import pandas as pd # 导入pandas库 import numpy as np # 导入numpy库 def choose_data(data): #选择变量'user_id', 'time', 'model_id', 'type', 'cate', 'brand',选取time在2016-02-01及以后的数据(包含2016-02-01)且type=6,数据类型如下: # user_id sku_id ...

m0_53208849的博客 3428
上一篇: Pandas - Review
HoneyGrapefruit
博客等级 码龄7年 408粉丝 54原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值