pandas 学习汇总12 - 描述性统计(比较全 tcy)
发布日期:2021-06-29 14:48:06 浏览次数:2 分类:技术文章

本文共 5414 字,大约阅读时间需要 18 分钟。

描述性统计 2018/12/4

1.统计函数说明: 

大部分是聚合函数(因此产生低维结果)采用 轴参数(通过名称或整数)可选level参数,该参数仅在对象具有分层索引时才适用可选skipna参数,一般默认排除系列输入上的NA值。  

2.窗口函数: 

df.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)# 用途:滚动窗口计算 按指定周期计算,如2周期求和df.expanding(min_periods=1, center=False, axis=0)# 用途:提供扩展转换。累计计算,如累加求和df.rolling(window=2)['income'].sum()              #先建一个窗口,然后默认根据标签移动,求2天的和df.expanding(min_periods=2,axis=0)['income'].sum()#求2天的累计和,保留中间结果说明:除 sum 函数外还可用其他统计函数如: count、mean、median、min、max、std、var、quantile、apply、cov、corr等# 详细用途参考本人博文窗口函数注意:# cumsum()及cumprod() 保留NaN值位置。与expanding()和rolling()有些不同  

3.1.Series实例:

s=pd.Series([10,20,-30,40,np.nan,50])s2=pd.Series([1,2,3,4,5,6])s.unique()             # 返回Series对象的唯一值 见实例s.nunique(dropna=True) # 返回对象中唯一元素的数量,默认排除na值s.count() #非na值数量  #返回标量s.sum()   #元素总和    #返回标量s.mean()  #平均值      #返回标量s.mad()   #平均绝对离差 #返回标量s.median()#中值   #返回标量s.min()   #最小值 #返回标量s.max()   #最大值 #返回标量s.nlargest([n, keep='first')  # 返回序列最大的n个元素。s.nsmallest([n, keep= 'last') # 返回序列最小的n个元素。s.ptp() #max-min # 返回标量s.abs()  #绝对值       #返回序列s.prod() #所有元素连乘  #返回标量s.std()  #样本标准差    #返回标量s.var()  #方差         #返回标量s.sem()  #标准误   #返回标量s.std()/(n**0.5)s.skew() #样本偏度 #返回标量s.kurt() #样本峰度 #返回标量# s.argmin() #不推荐使用s.idxmin()   #最小值索引值 #返回标量# s.argmax() #不推荐使用s.idxmax()   #最大值索引值 #返回标量s.quantile(q=0.5) # 样本分位数(值为%)#返回50%处标量s.autocorr(lag=1) # Lag-N自相关;默认1阶自相关 返回标量s.cov(s2)         # 计算与S2的协方差,不包括缺失值 返回标量 

3.2.Series其他实例1:- 相关性 

s.corr(other[, method, min_periods]) # 计算与其他系列的相关性,不包括缺失值# 参考本人博文:pandas统计学-相关性系数(pearson、spearman、kendall,pointbiserialr)s.corr(s1) #0.5508422083307387

Series实例 2:- unique唯一值

pd.Series([2,1,3,3,2,1], name='A').unique()#array([2, 1, 3], dtype=int64)# 无序分类将按顺序返回类别pd.Series(pd.Categorical(list('baabc'))).unique()# [b, a, c]# Categories (3, object): [b, a, c]# 有序分类保留了类别排序。pd.Series(pd.Categorical(list('baabc'), categories=list('abc'),ordered=True)).unique()# [b, a, c]# Categories (3, object): [a < b < c]  

Series实例 3:- mode

s.mode()#模式 返回最常出现的值忽略na值# 0 -30.0# 1 10.0# 2 20.0# 3 40.0# 4 50.0# dtype: float64:  

Series实例 4:- 累计计算

s.cumsum()#样本值累计和 非聚合函数形状同原数组;na处无输出# 结果   原数据# 0 10.0 10 10# 1 30.0 20 10+20# 2 0.0 -30 10+20-30# 3 40.0 40 10+20-30+40# 4 NaN na# 5 90.0 50 10+20-30+40+50# dtype: float64s.cumprod()#样本值累积乘 非聚合函数形状同原数组,保留中间结果# 输出 计算过程# 0 10.0 10# 1 200.0 10*20# 2 -6000.0 10*20*(-30)# 3 -240000.0 10*20*(-30)*40# 4 NaN# 5 -12000000.0 10*20*(-30)*40*50# dtype: float64s.cummin() #累积最小值,保留中间结果s.cummax() #累积最大值,保留中间结果# 输出    原数据# 0 10.0  10# 1 20.0  20# 2 20.0 -30# 3 40.0  40# 4 NaN   na# 5 50.0  50# dtype: float64  

Series实例 5:- diff一阶差分

s.diff()#计算一阶差分# 输出    原数据# 0 NaN    10# 1 10.0   20  20-10# 2 -50.0 -30 -30-20# 3 70.0   40  40-(-30)# 4 NaN    na# 5 NaN    50# dtype: float64 

Series实例  6:- pct_change周期百分百变换 

s.pct_change()#计算指定周期的百分数变化,默认1即# res=(现在值 -上个值)/上个值;若现在值为na用前进方向的值替代# 输出结果     原数据 分析# 0 NaN        10# 1 1.000000   20 (20-10)/10# 2 -2.500000 -30 (-30-20)/20# 3 -2.333333  na (40+30)/(-30) 此数值为na用下一个值40替代# 4 0.000000   40 上一个值为na,此处为0# 5 0.250000   50 (50-40)/40# dtype: float64s.pct_change(2)# 输出结果     原数据 分析# 0 NaN        10# 1 NaN        20# 2 -4.000000 -30 (-30-10)/10# 3 1.000000   na (40-20)/20 此数值为na用下一个值40替代# 4 -2.333333  40 (40+30)/(-30)# 5 0.250000   50 (50-40)/40 此数值为na用下一个值40替代# dtype: float64

Series实例  7:- 汇总统计 

s.describe(percentiles=[.05, .25, .75, .95])#输出特定百分位数包括0.5s.describe()#汇总统计# count 5.000000# mean 18.000000# std 31.144823# min -30.000000# 25% 10.000000# 50% 20.000000# 75% 40.000000# max 50.000000# dtype: float64  

Series实例 8:- pct_change周期百分百变换

pd.Series([-1,6,1,1,2,np.NaN,3,5]).rank() # 沿轴计算数值数据等级(1到n)。# 0 1.0# 1 7.0# 2 2.5# 3 2.5# 4 4.0# 5 NaN# 6 5.0# 7 6.0# dtype: float64   

Series实例 9:- rank 

pd.Series([-1,6,1,1,2,np.NaN,3,5]).rank() # 沿轴计算数值数据等级(1到n)。# 0 1.0# 1 7.0# 2 2.5# 3 2.5# 4 4.0# 5 NaN# 6 5.0# 7 6.0# dtype: float64

4.DataFrame 实例1:

df=pd.DataFrame([[-1 ,2,np.nan,4,-5,],[10,20,-30,40,50],[100,-200,300,400,500],[np.nan ,True ,False,False,True]],columns=list('abcde'),index=list('ABCD')).Tnp.sum(df['A']) #A列求和=0.0np.sum(df['A'].values) #A列求和=nandf.sum(0) #列求和,bool值转换成0,1参与计算# A 0.0 -1+2+4-5# B 90.0 10+20-30+40+50# C 1100.0 100-200+300+400+500# D 2.0 1+0+0+1# dtype: float64df.sum(1)#行求和,bool值转换成0,1参与计算# a 109.0 -1+10+100# b -177.0 2+20-200+1# c 270.0 -30+300+0# d 444.0 4+40+400+0# e 546.0 -5+50+500+1# dtype: float64df.sum(0, skipna=False)#不忽略缺失值# A NaN #A列有na值# B 90.0# C 1100.0# D NaN #D列有na值# dtype: float64

DataFrame 实例2: 

df.describe() #混合类型简要输出count ,unique ,top ,freqdf.describe(include=['object'])df.describe(include=['number'])df.describe(include='all')  

5.值计数(直方图) /模式

s.value_counts()#每个元素数量,忽略na,返回系列;仅仅能用于系列data = np.random.randint(0, 7, size=50)s = pd.Series(data)s.value_counts()pd.value_counts(data)# 3 11# 0 9# 5 8# 6 7# 1 7# 4 5# 2 3# dtype: int64# 获得Series或DataFrame中值的最常出现的值(模式):s = pd.Series([1, 1, 3, 3, 3, 5, 5, 7, 7, 7])s.mode()# 0 3# 1 7# dtype: int64df = pd.DataFrame({"A": np.random.randint(0, 7, size=50),"B": np.random.randint(-10, 15, size=50)})df.mode()# A B# # 0 2 -5

6.离散化和量化

可以使用cut()(基于值的qcut()区间)和(基于样本分位数的区间)功能来对连续值进行离散化# 详细见本人博文 ‘’统计:pd.cut与pd.qcut数字按区间划分‘’

7.备注:概念 

平均绝对离差:mad是所有单个观测值与算术平均值的偏差的绝对值的平均。    平均绝对误差可以避免误差相互抵消的问题,因而可以准确反映实际预测误差的大小标准误:sem即样本均数的标准差,s.std()/(n**0.5)   是描述均数抽样分布的离散程度及衡量均数抽样误差大小的尺度,   反映的是样本均数之间的变异。标准误不是标准差,是多个样本平均数的标准差。   标准误用来衡量抽样误差。越小表明样本统计量与总体参数的值越接近,样本对总体越有代表性,   用样本统计量推断总体参数的可靠度越大。因此,标准误是统计推断可靠性的指标。

 

转载地址:https://chunyou.blog.csdn.net/article/details/84800700 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:pandas 学习汇总13 - 函数应用- 将自定义或其他库函数应用于Pandas对象( tcy)
下一篇:pandas 学习汇总11 - 统计:pd.cut与pd.qcut数字按区间划分( tcy)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月30日 23时51分46秒