注:文中用到的数据文件可以在资源中免费获取。
基本统计
函数 说明 count() 非空元素计算 min() 最小值 max() 最大值 idxmin() 最小值的位置 idxmax() 最大值的位置 quantile(0.1 )10%分位数 sum() 求和 mean() 均值 median() 中位数 mode() 众数 var() 方差 std() 标准差 mad() 平均绝对偏差 describe() 一次性输出多个描述性统计指标
>> > import pandas as pd
>> > df= pd. read_excel( r"d:\sjcltest.xlsx" , "Sheet3" )
>> > df
学号 班级 姓名 性别 英语
0 2308024241 23080242 小龙 男 76
1 2308024244 23080242 小怡 女 66
2 2308024201 23080242 小培 男 60
3 2308024347 23080242 小华 女 67
describe() 的使用较为方便,可以一次性查看多项统计信息,实际应用中会经常通过该函数来检查数据。
>> > import pandas as pd
>> > df= pd. read_excel( r"d:\sjcltest.xlsx" , "Sheet3" )
>> > df. 英语. describe( )
count 4.000000
mean 67.250000
std 6.601767
min 60.000000
25 % 64.500000
50 % 66.500000
75 % 69.250000
max 76.000000
Name: 英语, dtype: float64
结果值 意义 count 一列的元素个数 mean 一列数据的平均值 std 一列数据的均方差;(方差的算术平方根,反应一个数据集的离散程度:越大,数据间得到差异越小,数据集中的数据离散程度越低) min 一列数据中的最小值 max 一列数据中的最大值 20% 一列数据中前25%的数据的平均值 50% 一列数据中前50%的数据的平均值 75% 一列数据中,前75%的数据的平均值
>> > import pandas as pd
>> > df= pd. read_excel( r"d:\sjcltest.xlsx" , "Sheet1" )
>> > df[ [ 'math' , 'physical' ] ] . describe( )
math physical
count 4.000000 5.000000
mean 81.000000 72.600000
std 5.830952 18.447222
min 76.000000 52.000000
25 % 76.000000 56.000000
50 % 80.500000 75.000000
75 % 85.500000 85.000000
max 87.000000 95.000000
>> > df[ [ 'math' , 'physical' ] ] . mean( )
math 81.0
physical 72.6
dtype: float64
分组分析
分组分析是根据分组字段将分析对象划分成不同的部分,以进行对比分析各组之间的差异性的一种分析方法。常用的统计指标:size 计数、sum 求和、mean 均值、median() 中位数、min() 最小值、max() 最大值
groupby( by= [ 分组列1 , 分组列2 , . . . ] ) [ 统计列1 , 统计列2 , . . . ] . 统计函数( )
先建立分组,再用统计函数
>> > import pandas as pd
>> > import numpy as np
>> > df= pd. read_excel( r"d:\sjcltest.xlsx" , "Sheet3" )
>> > fzl= df. groupby( by= [ '班级' ] )
>> > fzl[ [ '英语' ] ] . mean( )
英语
班级
23080242 67.25
>> > df. groupby( by= [ '班级' ] ) [ [ '英语' ] ] . mean( )
英语
班级
23080242 67.25
>> > tjl= fzl[ '英语' ] . agg( [ ( '总分' , 'sum' ) , ( '人数' , 'size' ) , ( '平均值' , 'mean' ) , ( '最高分' , 'max' ) , ( '最低分' , 'min' ) ] )
>> > tjl
总分 人数 平均值 最高分 最低分
班级
23080242 269 4 67.25 76 60
>> > tj2= fzl[ '英语' ] . agg( [ 'sum' , 'size' , 'mean' , 'max' , 'min' ] )
>> > tj2
sum size mean max min
班级
23080242 269 4 67.25 76 60
>> > df. groupby( by= [ '班级' , '性别' ] ) [ '英语' ] . agg( [ ( '总分' , 'sum' ) , ( '人数' , 'size' ) , ( '平均值' , 'mean' ) , ( '最高分' , 'max' ) , ( '最低分' , 'min' ) ] )
总分 人数 平均值 最高分 最低分
班级 性别
23080242 女 133 2 66.5 67 66
男 136 2 68.0 76 60
分布分析
分布分析是指根据分析的目的,将数据(定量数据)进行等距或不等距的分组,进而研究各组分布规律的一种分析方法。 简单来说:就是新增一列,将原来的数据按照其性质归入新的类别中。
cut( series, bins, right= True , labels= NULL)
>> > import pandas as pd
>> > df= pd. read_excel( r"d:\sjcltest.xlsx" , "Sheet3" )
>> > bins= [ 0 , 60 , 70 , 80 , 90 , 101 ]
>> > labels= [ "不及格" , "及格" , "中等" , "良好" , "优秀" ]
>> > df[ '英语分级' ] = pd. cut( df. 英语, bins, right= False , labels= labels)
>> > print ( df[ [ '姓名' , '英语' , '英语分级' ] ] )
姓名 英语 英语分级
0 小龙 76 中等
1 小怡 66 及格
2 小培 60 及格
3 小华 67 及格
交叉分析
通常用于分析两个或两个以上分组变量之间的关系,以交叉表形式进行变量间关系的对比分析。
>> > import pandas as pd
>> > import numpy as np
>> > pivot_table( values, index, columns, aggfunc, fill_value)
>> > df_pt= pd. pivot_table( df, index= "英语分级" , columns= "班级" , aggfunc= [ np. size] )
>> > df_pt
size
姓名 学号 性别 英语
班级 23080242 23080242 23080242 23080242
英语分级
及格 3.0 3 3.0 3
中等 1.0 1 1.0 1
>> > df_pt. columns
MultiIndex( [ ( 'size' , '姓名' , 23080242 ) ,
( 'size' , '学号' , 23080242 ) ,
( 'size' , '性别' , 23080242 ) ,
( 'size' , '英语' , 23080242 ) ] ,
names= [ None , None , '班级' ] )
>> > df_pt. columns[ 0 ]
( 'size' , '姓名' , 23080242 )
>> > df_pt. columns[ 2 ]
( 'size' , '性别' , 23080242 )
>> > df_pt. columns[ 2 ] [ 1 ]
'性别'
>> > df1= pd. pivot_table( df[ [ '班级' , '英语' , '英语分级' ] ] , index= "班级" , columns= "英语分级" , aggfunc= [ np. size] , fill_value= 0 )
>> > df1
size
英语
英语分级 及格 中等
班级
23080242 3 1
结构分析
结构分析是在分组的基础上,计算各组成部分所占的比重,进而分析总体的内部特征的一种分析方法。
>> > df1. div( df1. sum ( axis= 1 ) , axis= 0 )
size
英语
英语分级 及格 中等
班级
23080242 0.75 0.25
>> > df1. div( df1. sum ( axis= 0 ) , axis= 1 )
size
英语
英语分级 及格 中等
班级
23080242 1.0 1.0
相关分析
相关分析是研究现象之间是否存在某种依存关系,并对具体有依存关系的现象探讨其相关方向以及相关程度,是研究随机变量之间的相关关系的一种统计方法。 相关系数:可以用来描述定量变量之间的关系。
相关系数r 绝对值的取值范围 相关程度 0<=r<0.3 低相关度 0.3<=r<0.8 中度相关度 0.8<=r<=1 高度相关度
>> > df[ '英语' ] . corr( df[ '学号' ] )
0.21041816377780612
>> > df[ [ '英语' , '学号' , '班级' ] ] . corr( )
英语 学号 班级
英语 1.000000 0.210418 NaN
学号 0.210418 1.000000 NaN
班级 NaN NaN NaN