# -*- coding: utf-8 -*- #1,基本统计分析 ================== 常用统计函数: size:计数,不需要括号 sum():求和 mean():均值 var():方差 std():标准差 ================== import pandas as pd df = pd.read_excel(r'd:\rz.xlsx',sheet_name='Sheet3') print(df.数分.describe()) print(df.describe()) print(df.解几.size) print(df.解几.sum()) print(df.解几.var()) import numpy as np print(np.average(df['数分'])) #用numpy的ave函数求均值 print(df.mode()) #计算众数 #2,分组分析 ================== 根据分组字段将分析对象划分成不同的部分,以对比分析各组之间差异性。 df.groupby(by=['分类1','分类2',...])['被统计的列'].agg({列名1:统计函数1, 列名2:统计函数2,...}) by表示按列进行分组,常用统计函数有size计数,sum求和,mean求均值 ================== import numpy as np from pandas import read_excel df = read_excel(r'd:\rz.xlsx',sheet_name='Sheet3') #英语、体育、军训列的分数必须为int,否则结果会空 print(df.groupby(by='班级')['英语','体育','军训'].mean()) print(df.groupby(by=['班级','性别'])['军训'].agg( {'总分':np.sum, '人数':np.size, '平均值':np.mean, '方差':np.var, '标准差':np.std, '最高分':np.max, '最低分':np.min})) #3,分布分析 #根据分析的目的,将数据进行等距或不等距分组,研究各组分布规律。 import pandas as pd import numpy df = pd.read_excel(r'd:\rz.xlsx',sheet_name='Sheet3') df['总分']=df.英语+df.体育+df.军训+df.数分+df.高代+df.解几 #将数据分为3段 bins=[min(df.总分)-1,400,450,max(df.总分)+1] #给3段数据贴标签 labels=['400以下','400到450','450以上'] df['总分分层']=pd.cut(df.总分,bins,labels=labels) print(df) #4,交叉分析 ================== 分析两个或以上分组变量之间的关系,以交叉表形式进行变量间关系的对比分析。 pivot_table(values,index,columns,aggfunc,fill_value),将数据列透视为新表。 values表示透视新表中的值,可选参数 index透视表中的索引,必选参数 columns透视表中的列,用来分割数据,可选参数 aggfunc统计函数,可选参数 fill_value表示NA值的统一替换,可选参数 ================== #接上面代码 #按index进行分组,透视所有int列 print(df.pivot_table(index=['班级','姓名'])) #透视指定列 print(df.pivot_table(['军训','英语','体育'],index=['班级','姓名'])) #按index进行分组,透视values列,列名按性别分开显示 print(df.pivot_table(values=['总分'], index=['总分分层'], columns=['性别'], aggfunc=[numpy.size,numpy.mean])) #5,结构分析 #在分组分析及交叉分析的基础之上,计算各组成部分所占的比重。 df_pt=df.pivot_table(values=['总分'], index=['班级'], columns=['性别'], aggfunc=[numpy.sum]) print(df_pt) print("!!!!",df_pt.sum()) #默认按行合计 print("@@@@",df_pt.sum(axis=1)) #按列合计 print("####",df_pt.div(df_pt.sum(axis=1),axis=0)) #按列占比 print("$$$$",df_pt.div(df_pt.sum(axis=0),axis=1)) #按行占比 #6,相关分析 ================== 研究现象之间是否存在某种依赖关系,并对具有依赖关系的现象探讨相关方向和程度 DataFrame.corr() 计算每列两两之间的相似度,返回DataFrame Series.corr() 计算该序列与传入的序列之间的相关度,返回一个数值型,大小为相关度 ================== import pandas as pd import numpy as np df = pd.read_excel(r'd:\rz.xlsx',sheet_name='Sheet3') print(df['高代'].corr(df['数分'])) print(df.loc[:,['英语','体育','军训','解几','数分','高代']].corr())