DataFrame数据分析

注:文中用到的数据文件可以在资源中免费获取。

基本统计

  • 常用统计函数表
函数说明
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')])
              总分  人数   平均值  最高分  最低分
班级       性别                         
23080242133   2  66.5   67   66136   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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来做什么好呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值