注:文中用到的数据文件可以在资源中免费获取。
基本统计
- 常用统计函数表
函数 | 说明 |
---|---|
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() #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,...].统计函数()
#参数说明:
#by:用于分组的列
#中括号:用于统计的列
#统计函数用于统计数据
先建立分组,再用统计函数
>>>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)
#series 需要分组的数据
#bins 分组的依据数据
#right 分组的时候右边是否闭合
#labels 分组的自定义标签,可以不自定义
>>>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)
#values 数据透视表中的值
#index 数据透视表中的行
#columns 数据透视表中的列
#aggfunc 统计函数,默认为mean
#fill_value NA的值统一替换
#返回值:数据透视表的结果
>>>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
#也可以将统计为0的赋值为零,默认为nan
结构分析
- 结构分析是在分组的基础上,计算各组成部分所占的比重,进而分析总体的内部特征的一种分析方法。
>>>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
知识点整理不易,如果对你有帮助,给个免费的赞支持一下吧!