数据分析与处理"/>
Pandas:数据分析与处理
1. 分组分析
分组分析是指根据分组字段将分析对象划分成不同的部分,以对比分析各组之间差异性的一种分析方法。
常用的统计指标有:计数,求和,平均值。
常用命令形式如下:
df.groupby(by=[‘分类1’,‘分类2’,…])[‘被统计的列’].agg({列名1:统计函数1, 列名2:统计函数2,…})
参数说明:
- by 表示用于分组的列
- [] 表示用于统计的列
- .agg 表示统计别名显示统计值的名称,统计函数用于统计数据。常用的统计函数有:size表示计数, sum表示求和, mean表示求均值。
import numpy as np
from pandas import read_exceldf = read_excel(r'/Users/nxcjh/lianjia/log/project/pylearn/examples/i_nuc.xls', sheet_name='Sheet7')
print(df.head())print(df.groupby('班级')['军训','英语','体育','性别'].mean())'''groupby可将列名直接当作分组对象,分组中,数值列会被聚合,非数值列会从结果中排除,当by不止一个分组对象(列名)时,需要使用list。
'''print(df.groupby(['班级','性别'])['军训'].agg({'总分':np.sum, '人数':np.size, '平均值':np.mean, '方差':np.var, '标准差':np.std, '最高分':np.max, '最低分': np.min}))
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几
0 2308024241 23080242 成龙 男 76 78 77 40 23 60
1 2308024244 23080242 周怡 女 66 91 75 47 47 44
2 2308024251 23080242 张波 男 85 81 75 45 45 60
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71
4 2308024219 23080242 封印 女 73 88 92 61 47 46军训 英语 体育
班级
23080242 81.333333 70.833333 73.000000
23080243 85.500000 71.000000 60.666667
23080244 64.375000 75.000000 75.375000总分 人数 平均值 方差 标准差 最高分 最低分
班级 性别
23080242 女 167 2 83.500000 144.500000 12.020815 92 75男 321 4 80.250000 38.250000 6.184658 89 75
23080243 女 258 3 86.000000 12.000000 3.464102 90 84男 255 3 85.000000 1.000000 1.000000 86 84
23080244 女 93 2 46.500000 4324.500000 65.760931 93 0男 422 6 70.333333 1211.866667 34.811875 91 0/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:13: FutureWarning: using a dict on a Series for aggregation
is deprecated and will be removed in a future versiondel sys.path[0]
2. 分布分析
分布分析是指根据分析的目的,将数据(定量数据)进行等距或不等距的分组,研究各组分布规律的一种分析方法。
import numpy as np
from pandas import read_excel
import pandas as pddf = read_excel(r'/Users/nxcjh/lianjia/log/project/pylearn/examples/i_nuc.xls', sheet_name='Sheet7')df['总分'] = df.英语+df.体育+df.军训+df.数分+df.高代+df.解几# print(df.head())
# print(df['总分'].describe())bins = [min(df.总分)-1, 400, 450, max(df.总分)+1]
labels = ['400分及以下','400到500','500分及以上']df_n = pd.cut(df.总分, bins, labels=labels)
df['分类'] = df_n
print(df)
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几 总分 分类
0 2308024241 23080242 成龙 男 76 78 77 40 23 60 354 400分及以下
1 2308024244 23080242 周怡 女 66 91 75 47 47 44 370 400分及以下
2 2308024251 23080242 张波 男 85 81 75 45 45 60 391 400分及以下
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71 400 400分及以下
4 2308024219 23080242 封印 女 73 88 92 61 47 46 407 400到500
5 2308024201 23080242 迟培 男 60 50 89 71 76 71 417 400到500
6 2308024347 23080243 李华 女 67 61 84 61 65 78 416 400到500
7 2308024307 23080243 陈田 男 76 79 86 69 40 69 419 400到500
8 2308024326 23080243 余皓 男 66 67 85 65 61 71 415 400到500
9 2308024320 23080243 李嘉 女 62 0 90 60 67 77 356 400分及以下
10 2308024342 23080243 李上初 男 76 90 84 60 66 60 436 400到500
11 2308024310 23080243 郭窦 女 79 67 84 64 64 79 437 400到500
12 2308024435 23080244 姜毅涛 男 77 71 0 61 73 76 358 400分及以下
13 2308024432 23080244 赵宇 男 74 74 88 68 70 71 445 400到500
14 2308024446 23080244 周路 女 76 80 0 61 74 80 371 400分及以下
15 2308024421 23080244 林建祥 男 72 72 81 63 90 75 453 500分及以上
16 2308024433 23080244 李大强 男 79 76 77 78 70 70 450 400到500
17 2308024428 23080244 李侧通 男 64 96 91 69 60 77 457 500分及以上
18 2308024402 23080244 王慧 女 73 74 93 70 71 75 456 500分及以上
19 2308024422 23080244 李晓亮 男 85 60 85 72 72 83 457 500分及以上
print(df.groupby(by=['分类'])['学号'].agg({'人数':np.size}))
人数
分类
400分及以下 7
400到500 9
500分及以上 4/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: using a dict on a Series for aggregation
is deprecated and will be removed in a future version"""Entry point for launching an IPython kernel.
3. 交叉分析
交叉分析通常用于分析两个或两个以上分组变量之间的关系,以交叉表形式进行变量间关系的对比分析。
一般分为定量, 定量分组交叉;定量,定性分组交叉;定性,定性分组交叉。
常用命令格式如下:
pivot_table(values, index, columns, aggfunc, fill_value)
参数说明:
- values:表示数据透视表中的值;
- index:表示数据透视表中的行;
- columns:表示数据透视表中的列;
- aggfunc:表示统计函数;
- fill_value:表示NA值的统一替换。
- 返回值:透视表中的结果。
from pandas import pivot_table
from pandas import read_excel
import pandas as pd
import numpy as npdf = read_excel(r'/Users/nxcjh/lianjia/log/project/pylearn/examples/i_nuc.xls', sheet_name='Sheet7')print(df.head())
学号 班级 姓名 性别 英语 体育 军训 数分 高代 解几
0 2308024241 23080242 成龙 男 76 78 77 40 23 60
1 2308024244 23080242 周怡 女 66 91 75 47 47 44
2 2308024251 23080242 张波 男 85 81 75 45 45 60
3 2308024249 23080242 朱浩 男 65 50 80 72 62 71
4 2308024219 23080242 封印 女 73 88 92 61 47 46
print(df.pivot_table(index=['班级','姓名'])) #对所有的数据进行透视。
体育 军训 学号 总分 数分 英语 解几 高代
班级 姓名
23080242 周怡 91 75 2308024244 370 47 66 44 47封印 88 92 2308024219 407 61 73 46 47张波 81 75 2308024251 391 45 85 60 45成龙 78 77 2308024241 354 40 76 60 23朱浩 50 80 2308024249 400 72 65 71 62迟培 50 89 2308024201 417 71 60 71 76
23080243 余皓 67 85 2308024326 415 65 66 71 61李上初 90 84 2308024342 436 60 76 60 66李华 61 84 2308024347 416 61 67 78 65李嘉 0 90 2308024320 356 60 62 77 67郭窦 67 84 2308024310 437 64 79 79 64陈田 79 86 2308024307 419 69 76 69 40
23080244 周路 80 0 2308024446 371 61 76 80 74姜毅涛 71 0 2308024435 358 61 77 76 73李侧通 96 91 2308024428 457 69 64 77 60李大强 76 77 2308024433 450 78 79 70 70李晓亮 60 85 2308024422 457 72 85 83 72林建祥 72 81 2308024421 453 63 72 75 90王慧 74 93 2308024402 456 70 73 75 71赵宇 74 88 2308024432 445 68 74 71 70
print(df.pivot_table(['军训','英语','体育','性别'],index=['班级','姓名'])) #选取部分列进行透视
体育 军训 英语
班级 姓名
23080242 周怡 91 75 66封印 88 92 73张波 81 75 85成龙 78 77 76朱浩 50 80 65迟培 50 89 60
23080243 余皓 67 85 66李上初 90 84 76李华 61 84 67李嘉 0 90 62郭窦 67 84 79陈田 79 86 76
23080244 周路 80 0 76姜毅涛 71 0 77李侧通 96 91 64李大强 76 77 79李晓亮 60 85 85林建祥 72 81 72王慧 74 93 73赵宇 74 88 74
df['总分'] = df.英语+df.体育+df.军训+df.数分+df.高代+df.解几bins = [min(df.总分)-1, 400, 450, max(df.总分)+1]
labels = ['400分及以下','400到500','500分及以上']df['分类'] = pd.cut(df.总分, bins, labels=labels)print(df.pivot_table(values=['总分'],index=['分类'], columns=['性别'], aggfunc=[np.size, np.mean]))
size mean 总分 总分
性别 女 男 女 男
分类
400分及以下 3 4 365.666667 375.750000
400到500 3 6 420.000000 430.333333
500分及以上 1 3 456.000000 455.666667
4. 结构分析
结构分析是在分组分析以及交叉分析的基础上,计算各组成部分所占的比重,进而分析总体的内部特征的一种分析方法。
这里分组主要是指定性分组,定性分组一般看结构,它的重点在于计算各组成部分占总体的比重。
参数 axis说明:
- 0 表示对列操作
- 1 表示对行操作
import numpy as np
import pandas as pd
from pandas import read_excel
from pandas import pivot_tabledf = read_excel(r'/Users/nxcjh/lianjia/log/project/pylearn/examples/i_nuc.xls', sheet_name='Sheet7')
df['总分'] = df.英语+df.体育+df.军训+df.数分+df.高代+df.解几df_ptr = df.pivot_table(values=['总分'],index=['班级'],columns=['性别'],aggfunc=[np.sum])print(df_ptr.sum(axis=1)) #按照列合并
班级
23080242 2339
23080243 2479
23080244 3447
dtype: int64
print(df_ptr.sum(axis=0)) #按照行操作
性别
sum 总分 女 2813男 5452
dtype: int64
print(df_ptr.div(df_ptr.sum(axis=1),axis=0)) #按照列占比
sum 总分
性别 女 男
班级
23080242 0.332193 0.667807
23080243 0.487697 0.512303
23080244 0.239919 0.760081
print(df_ptr.div(df_ptr.sum(axis=0),axis=1)) #按照行占比
sum 总分
性别 女 男
班级
23080242 0.276218 0.286500
23080243 0.429790 0.232942
23080244 0.293992 0.480558
更多推荐
Pandas:数据分析与处理
发布评论