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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月30日 23时51分46秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
前端(三):样式继承与其他概念
2019-04-29
Ubuntu软件安装&卸载
2019-04-29
面试笔试易错知识点Java篇八
2019-04-29
弹性事务框架ETF4J——面向Java微服务的交易最终一致性解决方案
2019-04-29
【Scala 教程】Scala 条件与循环语句
2019-04-29
【Scala 教程】Scala 集合类型
2019-04-29
【Scala 教程】Scala 类、对象和特征
2019-04-29
【Scala 教程】Scala 模式匹配与异常处理
2019-04-29
JAVA 线程休眠 sleep 与 线程礼让 yield
2019-04-29
JAVA Lock锁
2019-04-29
JAVA 线程同步机制 synchronized
2019-04-29
MySQL 安装教程(无脑版)
2019-04-29
JAVA 简单实现UDP demo
2019-04-29
MySQL 事务--转账
2019-04-29
JAVA UDP简单实现实时发送消息
2019-04-29
IDEA 怎么删除一个Module
2019-04-29
JAVA 和MySQL使用JDBC连接
2019-04-29
JAVA 反射的性能测试
2019-04-29
HTML 初探
2019-04-29