pandas 学习汇总12 - 描述性统计(比较全 tcy)

描述性统计 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: float64

s.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: float64

s.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: float64

s.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.5
s.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')).T

np.sum(df['A']) #A列求和=0.0
np.sum(df['A'].values) #A列求和=nan
df.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: float64

df.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: float64

df.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 ,freq
df.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: int64

df = 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)

   是描述均数抽样分布的离散程度及衡量均数抽样误差大小的尺度,
   反映的是样本均数之间的变异。标准误不是标准差,是多个样本平均数的标准差。
   标准误用来衡量抽样误差。越小表明样本统计量与总体参数的值越接近,样本对总体越有代表性,
   用样本统计量推断总体参数的可靠度越大。因此,标准误是统计推断可靠性的指标。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值