python 科研数据分析统计服_科学网—[转载][转帖]利用python进行数据分析-汇总和计算描述统计 - 严志雁的博文...

第五章:pandas入门

第三节,汇总和计算描述统计

DataFrame当中的一些数学和统计方法

>>> df=DataFrame([[1.4, np.nan],[7.1, -4.5],[np.nan, np.nan], [0.75, -1.3]], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])

>>> df

····one two

a 1.40 NaN

b 7.10 -4.5

c NaN NaN

d 0.75 -1.3

调用DataFrame的sum方法将会返回一个含有列小计的Series,得到的结果是每一列的数字加和,NA值会自动被排除

>>> df.sum()

one 9.25 #columns 1

two -5.80 #columns 2

dtype: float64

如果加入axis=1这个参数将会对行进行求和运算,NA值会自动被排除

>>> df.sum(axis=1)

a 1.40

b 2.60

c NaN

d -0.55

dtype: float64

NA值会自动被排除,除非整个切片(这里指行或者列)都是NA,通过skipna选项可以禁用该功能

>>> df.mean(axis=1, skipna=False)

a NaN

b 1.300

c NaN

d -0.275

dtype: float64

计算结果是如果进行的是行加和计算,如果该行有NaN值则结果用NaN值的最终结果表示,如果该列有NaN值则结果用NaN值的最终结果表示

表5-9:约简方法的选项

| 选项 | 说明 |

| axis | 约简的轴。DataFrame的行用0,列用1 |

| skipna | 排除缺失值,默认值为True |

| level | 如果轴是层次化索引的(即MultiIndex),则根据level分组约简 |

idxmin和idxmax表示间接统计(得到的是最小值或最大值的索引)

>>> df

····one two

a 1.40 NaN

b 7.10 -4.5

c NaN NaN

d 0.75 -1.3

>>> df.idxmax() #输出最大值的索引

one b

two d

dtype: object

>>> df.cumsum() #输出每一列的按照行进行累加和结果

····one two

a 1.40 NaN

b 8.50 -4.5

c NaN NaN

d 9.25 -5.8

describe()方法能够得到多个汇总结果

>>> df.describe()

···· one two

count 3.000000 2.000000 #除缺失值以外的元素数量

mean 3.083333 -2.900000 #平均值

std 3.493685 2.262742 #标准偏差

min 0.750000 -4.500000 #最小值

25% 1.075000 -3.700000

50% 1.400000 -2.900000

75% 4.250000 -2.100000

max 7.100000 -1.300000 #最大值

>>> obj=Series(['a', 'a', 'b', 'c']*4)

>>> obj

0 a

1 a

2 b

3 c

4 a

5 a

6 b

7 c

8 a

9 a

10 b

11 c

12 a

13 a

14 b

15 c

dtype: object

>>> obj.describe()

count 16 #元素总量

unique 3 #元素种类

top a #第一个元素

freq 8 #元素出现最多的频率

dtype: object

表5-10:描述和汇总统计

| 方法 | 说明 |

| count | 非NA值的数量 |

| describe | 针对Series或各DataFrame列计算汇总统计 |

| min、max | 计算最小值和最大值 |

| argmin、argmax | 计算能够获取到最小值和最大值的索引位置(整数) |

| idxmin、idxmax | 计算能够获取到最小值和最大值的索引值 |

| quantile | 计算样本的分位数(0到1) |

| sum | 值的总和 |

| mean | 值的平均数 |

| median | 值的算术中位数(50%分位数) |

| mad | 根据平均值计算平均绝对离差 |

| var | 样本值的方差 |

| std | 样本值的标准差 |

| skew | 样本值的偏度(三阶矩) |

| kurt | 样本值的峰度(四阶矩) |

| cumsum | 样本值的累计和 |

| cummin、cummax | 样本值的累计最大值和累计最小值 |

| cumprod | 样本值的累计积 |

| diff | 计算一阶差分(对时间序列很有用) |

| pct_change | 计算百分数变化 |

2,相关系数与协方差

>>> import pandas.io.data as web

Traceback (most recent call last):

File "", line 1, in

File "/home/D05/language/Python-2.7.13/lib/python2.7/site-packages/pandas/io/data.py", line 2, in

"The pandas.io.data module is moved to a separate package "

ImportError: The pandas.io.data module is moved to a separate package (pandas-datareader). After installing the pandas-datareader package (https://github.com/pydata/pandas-datareader), you can change the import ``from pandas.io import data, wb`` to ``from pandas_datareader import data, wb``.

提示的是模块迁移这个信息

所以根据提示要进行模块安装

./pip2.7 install pandas-datareader -i https://pypi.tuna.tsinghua.edu.cn/simple/

首先安装pandas-datareader模块

>>> import pandas_datareader.data as web

>>> all_data={}

>>> for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']:

...····all_data[ticker]=wb.get_data_yahoo(ticker, '1/1/2000', '1/1/2010')

...

>>> price=DataFrame({tic: data['Adj Close'] for tic, data in all_data.iteritems()})

>>> volume=DataFrame({tic: data['Volume'] for tic, data in all_data.iteritems()})

>>> price.tail()

····AAPL GOOG IBM MSFT

Date

2009-12-24 26.866302 307.241699 107.624130 25.316008

2009-12-28 27.196602 309.422516 109.058350 25.454838

2009-12-29 26.874012 307.698730 108.679207 25.634502

2009-12-30 27.200455 309.352966 109.272659 25.283342

2009-12-31 27.083506 307.986847 107.896149 24.891350

>>> returns=price.pct_change() #计算价格的百分数变化

>>> returns.tail()

····AAPL GOOG IBM MSFT

Date

2009-12-24 0.034340 0.011117 0.004384 0.002587

2009-12-28 0.012294 0.007098 0.013326 0.005484

2009-12-29 -0.011861 -0.005571 -0.003477 0.007058

2009-12-30 0.012147 0.005376 0.005461 -0.013699

2009-12-31 -0.004300 -0.004416 -0.012597 -0.015504

Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。与此类似,cov用于计算协方差

>>> returns.MSFT.corr(returns.IBM)

0.49435859704574198

>>> returns.MSFT.cov(returns.IBM)

0.00021582143441601349

DataFrame的corr和cov方法将以DataFrame的形式返回完整的相关系数或协方差矩阵

>>> returns.corr()

····AAPL GOOG IBM MSFT

AAPL 1.000000 0.470676 0.412392 0.423597

GOOG 0.470676 1.000000 0.390689 0.443586

IBM 0.412392 0.390689 1.000000 0.494359

MSFT 0.423597 0.443586 0.494359 1.000000

对角线是自己对自己的相关系数,所以值为1

>>> returns.cov()

····AAPL GOOG IBM MSFT

AAPL 0.001030 0.000303 0.000254 0.000309

GOOG 0.000303 0.000580 0.000142 0.000205

IBM 0.000254 0.000142 0.000369 0.000216

MSFT 0.000309 0.000205 0.000216 0.000516

利用DataFrame的corrwith方法,你可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Serise(针对各个列进行计算)

>>> returns.corrwith(returns.IBM)

AAPL 0.412392

GOOG 0.390689

IBM 1.000000

MSFT 0.494359

dtype: float64

传入一个DataFrame则会计算按列名配对的相关系数。计算百分比简化与成交量的相关系数

>>> returns.corrwith(volume)

AAPL -0.057665

GOOG 0.062647

IBM -0.006592

MSFT -0.014228

dtype: float64

传入axis=1即可按行进行计算。在计算相关系数之前,所有的数据项都会按标签对齐

3,唯一值、值计数以及成员资格

unique函数,可得到Series中的唯一值数组

>>> obj=Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])

>>> uniques=obj.unique()

>>> uniques

array(['c', 'a', 'd', 'b'], dtype=object)

unique函数返回的唯一值是未排序的,如果需要进行唯一值返回结果排序,可利用.unique().sort() (obj.unique().sort

built-in method sort of numpy.ndarray object at 0x2af6939d5f30)该方法返回一个对象关系,但不知如何输出结果

value_counts()用于计算一个Series中各个值出现的频率

>>> obj.value_counts()

c 3

a 3

b 2

d 1

`dtype: int64

value_counts()返回结果是按照频率降序排列的,所以也可按照索引值的顺序排列

>>> pd.value_counts(obj.values, sort=False)

a 3

c 3

b 2

d 1

dtype: int64

pd.value_counts()利用pandas中的value_counts方法,将对象obj.values方法放入括号内,并加入sort的参数

isin方法,可用于判断矢量化集合的成员资格,可用于选取Series中或DataFrame列中数据的子集

>>> mask=obj.isin(['b', 'c'])

>>> mask

0 True

1 False

2 False

3 False

4 False

5 True

6 True

7 True

8 True

dtype: bool

isin函数返回的是一个布尔型的逻辑矩阵,通过矩阵的布尔型关系,能够提取相关的结果

>>> obj[mask]

0 c

5 b

6 b

7 c

8 c

dtype: object

根据mask的布尔型True的结果,可输出行索引为True的对象

表5-11:唯一值、值计数、成员资格方法

| 方法 | 说明 |

| isin | 计算一个表示“Series各值是否包含于传入的值序列中”的布尔型数组 |

| unique | 计算Series中的唯一值数组,按发现的顺序返回 |

| value_counts | 返回一个Series,其索引为唯一值,其值为频率,按计数值降序排列 |

————————————————

版权声明:本文为CSDN博主「genome_denovo」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/genome_denovo/article/details/78015343

转载本文请联系原作者获取授权,同时请注明本文来自严志雁科学网博客。

链接地址:http://blog.sciencenet.cn/blog-1195113-1206976.html

上一篇:训练集与测试集合的选取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值