文章目录
- 一、基本统计分析
- 二、分组分析
- 三、分布分析
- 四、交叉分析
- 综合练习
代码环境基于Jupyter Notebook
一、基本统计分析
参数一览:
size:注意不需要括号
count():计数
sum():求和
mean():求均值
var():求方差
std():求标准差
max():求最大值
min():求最小值
median():中位数
mode():众数
decribe( ):默认会自动对数值型特征的数据进行统计
from pandas import read_excel
df=read_excel(r'C:\Users\彦哥\Desktop\i_nuc.xls','Sheet7')
df
#对数据作count(计数),mean(平均),std(标准差),min(最小值),25%,50%,75%,max(最大值)分析
df.describe()
#对数分取30%,50%,60%位置的数值
df['数分'].describe(percentiles=[0.3,0.5,0.6])
二、分组分析
import numpy as np
#对军训列先按班级分组,再按性别分组,计算和、大小、平均值、方差、标准差、最大值和最小值
#方法一(推荐)
df1=df.groupby(by=['班级','性别'])['军训'].agg(['sum','size','mean','var','std','max','min'])
df1.rename(columns={'sum':'总分','size':'人数','mean':'平均分','var':'方差','std':'标准差','max':'最大值','min':'最小值'},inplace=True)
df1
#方法二
df.groupby(by=['班级','性别'])['军训'].agg({
'总分':np.sum,'人数':np.size,'平均分':np.mean,'方差':np.var,'标准差':np.std,'最大值':np.max,'最小值':np.min
})
三、分布分析
分布分析是指根据分析的目的,将数据(定量数据)进行等距或不等距的分组,研究各组分布规律的一种分析方法。
#将各科分数相加
df['总分']=df['英语']+df['体育']+df['军训']+df['数分']+df['高代']+df['解几']
#将总分分为三个层次并用其替换分数
df['总分分层']=pd.cut(df['总分'], [0,400,450,500], labels=["400及以下","400-450","450以上"], include_lowest=True, right=False)
df
四、交叉分析
交叉分析通常用于分析两个或者两个以上分组变量之间的关系,以交叉表形式进行变量间关系的对比分析。
参数一览:
values:数据透视表中的值
index:数据透视表中的行
columns:数据透视表中的列
aggfunc:统计函数
fill_value:NA值的统一替换
#按照总分三个层次和性别作为分类依据,分别作count,sum,mean计算
df.pivot_table(index=['总分分层'],# 行
columns=['性别'],# 列
values=['总分'],# 计算用的值
aggfunc=['count', 'sum', 'mean'])# 采用的函数
综合练习
1.请读入“素材”文件夹中的“i_nuc.xls”文件中的Sheet7工作表存入数据框df,并查看其前5行数据。
import pandas as pd
from pandas import read_excel
df=read_excel(r'C:\Users\彦哥\Desktop\i_nuc.xls','Sheet7')
df.loc[0:4]
- 对df做描述性统计:
(1)求df中各科成绩的人数、均值、标准差、最大值、最小值以及分位数(1/4,1/2,3/4)存入数据框df1,并查看df1的数据。
df1=df.describe()
df1
(2)将df中的军训成绩先按照班级,再按性别统计其总分、人数、平均值、方差、标准差、最高分、最低分存入数据框df2,并查看df2的数据。
df2=df.groupby(by=['班级','性别'])['军训'].agg(['sum','size','mean','var','std','max','min'])
df2
3.数据透视
(1)计算df中各科成绩的和,并添加到“总分”列,并查看df最后5行的数据。
df['总分']=df['英语']+df['体育']+df['军训']+df['数分']+df['高代']+df['解几']
df.loc[15:20]
(2)将总分按照区间[0,400,450,600]划分三个类别“一般”、“较好”、“优秀”,并添加到“类别”列,并查看df行标签为6-10(含边界值)的5行数据。
df['类别']=pd.cut(df['总分'], [0,400,450,600], labels=["一般","较好","优秀"], include_lowest=True, right=False)
df.loc[6:10]
(3)对经过(2)处理的df建立如下图所示的数据透视效果。
df.pivot_table(index=['类别'], columns=['性别'], values=['总分'], aggfunc=['count', 'mean'])