基本的统计分析函数
适用于Series和DataFrame类型
方法 |
说明 |
|
.sum() |
计算数据的总和,按0轴计算,下同 |
|
.count() |
非NaN值的数量 |
|
.mean() .median() |
计算数据的算术平均值、算术中位数 |
|
.var() .std() |
计算数据的方差、标准差 |
|
.min().max() |
计算数据的最小值、最大值 |
|
.describe() |
针对0轴(各列)的统计汇总 |
适用于Series类型
方法 |
说明 |
.argmin() .argmax() |
计算数据最大值、最小值所在位置的索引位置(自动索引) |
.idxmin() .idxmax() |
计算数据最大值、最小值所在位置的索引(自定义索引) |
数据的累计统计分析
适用于Series和DataFrame类型,累计计算
方法 |
说明 |
.cumsum() |
依次给出前1、2、…、n个数的和 |
.cumprod() |
依次给出前1、2、…、n个数的积 |
.cummax() |
依次给出前1、2、…、n个数的最大值 |
.cummin() |
依次给出前1、2、…、n个数的最小值 |
适用于Series和DataFrame类型,滚动计算(窗口计算)
方法 |
说明 |
.rolling(w).sum() |
依次计算相邻w个元素的和 |
.rolling(w).mean() |
依次计算相邻w个元素的算术平均值 |
.rolling(w).var() |
依次计算相邻w个元素的方差 |
.rolling(w).std() |
依次计算相邻w个元素的标准差 |
.rolling(w).min() .max() |
依次计算相邻w个元素的最小值和最大值 |
数据的相关性分析
两个事物,表示为X和Y,如何判断它们之间的存在相关性?
相关性
•X增大,Y增大,两个变量正相关
•X增大,Y减小,两个变量负相关
•X增大,Y无视,两个变量不相关
协方差
•协方差>0, X和Y正相关
•协方差<0, X和Y负相关
•协方差=0, X和Y独立无关
pearson相关系数
0.8‐1.0 极强相关
•0.6‐0.8 强相关
•0.4‐0.6 中等程度相关
•0.2‐0.4 弱相关
•0.0‐0.2 极弱相关或无相关
r取值范围[‐1,1]
适用于Series和DataFrame类型
方法 |
说明 |
.cov() |
计算协方差矩阵 |
.corr() |
计算相关系数矩阵, Pearson、Spearman、Kendall等系数 |
pandas数据特征分析小结
一组数据的摘要
方法 |
说明 |
排序 |
.sort_index() .sort_values() |
基本统计函数 |
.describe() |
累计统计函数 |
.cum*() .rolling().*() |
相关性分析 |
.corr() .cov() |
代码实例
# -*- coding: utf-8 -*- # @File : pandas_func.py # @Date : 2018-05-20 # pandas基本的统计分析函数 import pandas as pd import numpy as np # Series对象 s = pd.Series([9, 8, 7, 6], index=["a", "b", "c", "d"]) print(s) """ a 9 b 8 c 7 d 6 dtype: int64 """ # 数据概要 print(s.describe()) """ count 4.000000 mean 7.500000 std 1.290994 min 6.000000 25% 6.750000 50% 7.500000 75% 8.250000 max 9.000000 dtype: float64 """ # 类型 print(type(s.describe())) # <class 'pandas.core.series.Series'> # 从概要中取数据 print(s.describe()["count"]) # 4.0 print(s.describe()["max"]) # 9.0 # DataFrame对象 fd = pd.DataFrame(np.arange(12).reshape(3, 4), index=["a", "b", "c"]) print(fd) """ 0 1 2 3 a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 """ # 概要 print(fd.describe()) """ 0 1 2 3 count 3.0 3.0 3.0 3.0 mean 4.0 5.0 6.0 7.0 std 4.0 4.0 4.0 4.0 min 0.0 1.0 2.0 3.0 25% 2.0 3.0 4.0 5.0 50% 4.0 5.0 6.0 7.0 75% 6.0 7.0 8.0 9.0 max 8.0 9.0 10.0 11.0 """ # 类型 print(type(fd.describe())) # <class 'pandas.core.frame.DataFrame'> # 取出列概要信息 print(fd.describe()[2]) """ count 3.0 mean 6.0 std 4.0 min 2.0 25% 4.0 50% 6.0 75% 8.0 max 10.0 Name: 2, dtype: float64 """ # 获取行 print(fd.describe().ix["count"]) """ 0 3.0 1 3.0 2 3.0 3 3.0 Name: count, dtype: float64 """ # 数据的累计统计分析 print(fd) """ 0 1 2 3 a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 """ # 依次给出前1、2、…、n个数的和 print(fd.cumsum()) """ 0 1 2 3 a 0 1 2 3 b 4 6 8 10 c 12 15 18 21 """ # 依次给出前1、2、…、n个数的积 print(fd.cumprod()) """ 0 1 2 3 a 0 1 2 3 b 0 5 12 21 c 0 45 120 231 """ # 依次给出前1、2、…、n个数的最大值 print(fd.cummax()) """ 0 1 2 3 a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 """ # 依次给出前1、2、…、n个数的最小值 print(fd.cummin()) """ 0 1 2 3 a 0 1 2 3 b 0 1 2 3 c 0 1 2 3 """ print(fd) """ 0 1 2 3 a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 """ # 相邻2个数求和 print(fd.rolling(2).sum()) """ 0 1 2 3 a NaN NaN NaN NaN b 4.0 6.0 8.0 10.0 c 12.0 14.0 16.0 18.0 """ # 相邻3个数求和 print(fd.rolling(3).sum()) """ 0 1 2 3 a NaN NaN NaN NaN b NaN NaN NaN NaN c 12.0 15.0 18.0 21.0 """ # 实例,房价增幅与M2增幅的相关性 hprice = pd.Series([3.04, 22.93, 12.75, 22.6, 12.33], index=["2008", "2009", "2010", "2011", "2012"]) m2 = pd.Series([8.18, 18.38, 9.13, 7.82, 6.69], index=["2008", "2009", "2010", "2011", "2012"]) print(hprice.corr(m2)) # 0.5239439145220387 """ ## pearson相关系数 0.8‐1.0 极强相关 •0.6‐0.8 强相关 •0.4‐0.6 中等程度相关 •0.2‐0.4 弱相关 •0.0‐0.2 极弱相关或无相关 """ # 绘制成图 from matplotlib import pyplot as plt plt.plot(hprice) plt.plot(m2) plt.savefig("price", dpi=600) plt.show()