【Python统计分析】描述统计:describe命令及groupby/pd.crosstab/pivot_table的应用
程序员文章站
2024-02-13 16:56:34
...
1. 连续变量的统计描述
1. 直接使用汇总函数(绝大部分分组状态下也可以使用)
count() #计数时包含NaN值 size() #计数时包含NaN值
sum()
mean() std()
min() max()
skew() #偏度系数 kurt() #峰度系数
median() quantile()
apply()
cov() #相关系数 corr() #协相关系数
argmax() #最值对应的绝对位置(整数)
idxmax #最值对应的索引值
例子:
print(ccss.median())
ccss.s3.mean()
ccss.groupby('s0').mean()
ccss.groupby('s0').s3.mean()
ccss.groupby('s0')['s3','index1'].mean()
ccss.s3.plot.hist()
ccss.s3.plot.box()
2. describe命令
ccss.describe()
ccss.groupby('s0').s3.describe(percentiles = [.05,.1])
3. statsmodels实现
(其实这种方式做统计分析不是很灵活)
#基于DescrStatsW类,可计算的统计量
from statsmodels.stats import weightstats as ws
nobs() sum()
sum_weights() mean()
quantile(probs) var()
std() std_mean()
sumsquares()
例子:
des = ws.DescrStatsW(ccss)
des = ws.DescrStatsW(ccss.loc[:,['index1','index1a']])
des.quantile([.05,.1,.5,.9,.95])
des.nobs #返回有多少列。无参函数不写括号,否则将报错
des.var #注意:statsmdels对数据格式严格,混入字符型变量报错
二、分类变量的统计描述
1. 单变量的频数统计
ccss.time.value_counts() ##列出频数表
ccss.s3.value_counts(bins = 20)
ccss.s5.value_counts(True) ##列出百分比表
ccss.s5.value_counts().plot.pie()
2. 交叉表
方法一:groupby(简单易用)
top_10 = (df.groupby(['name'])['ext price','quantity'].agg({
'ext price': 'sum',
'quantity': 'count'
}).sort_values(by='ext price',
ascending=False
))[:10].reset_index()
top_10.rename(columns={'name': 'Name',
'ext price': 'Sales',
'quantity': 'Purchases'
},
inplace=True)
方法二:pd.crosstab(专用于计算分组频率)
pd.crosstab(ccss.s2,ccss.s0).plot.bar()
pd.crosstab([ccss.s2,ccss.o1],[ccss.s0,ccss.s5])
#给出百分比,合计
pd.crosstab(ccss.s2,ccss.s0,normalize = 0,margins = True)
#频数堆积条图
pd.crosstab(ccss.s2,ccss.s0).plot.bar(stacked = True)
#百分比堆积条数
pd.crosstab(ccss.s2,ccss.s0,normalize = 0).plot.bar(stacked = True)
方法三:pivot_table(万能,但也比较繁琐)
tips.pivot_table(row=['sex', 'smoker'])
tips.pivot_table(values=['tip_pct', 'size'], index=['sex', 'day'], columns='smoker')
tips.pivot_table(values=['tip_pct', 'size'], index=['sex', 'day'], columns='smoker', margins=True)
#使用count或len可以得到有关分组大小的交叉表
tips.pivot_table('tip_pct', index=['sex', 'smoker'], columns='day', aggfunc=len, margins=True)
#根据性别和用手习惯对这段数据进行统计汇总
data.pivot_table(values = 'Sample',index = 'Gender',columns = 'Handedness',aggfunc = len,margins = True)
上一篇: python地图可视化
下一篇: Ext二级联动下拉框