# -*- 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())