python 相关系数、协方差、唯一值、值计数、成员资格-----python进行数据分析

目录

汇总和计算描述统计

相关系数与协方差

唯一值,值计数及成员资格


汇总和计算描述统计

Na值会被自动排除,通过skipna选项可以禁用该功能

>>> 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
>>> df.sum()
one    9.25
two   -5.80
dtype: float64
>>> df.sum(axis=1)
a    1.40
b    2.60
c    0.00
d   -0.55
dtype: float64
>>> df.mean(axis=1,skipna=False)
a      NaN
b    1.300
c      NaN
d   -0.275
dtype: float64
>>> df.sum(axis=1,skipna=False)
a     NaN
b    2.60
c     NaN
d   -0.55
dtype: float64

相关系数与协方差

下面的数据来自Yahoo!Finance的股票价格和成交量:

最后显示的是价格的百分数变化。

>>> import pandas_datareader.data as web
>>> web
<module 'pandas_datareader.data' from 'D:\python\lib\site-packages\pandas_datareader\data.pyc'>
>>> all_data={}
>>> for ticker in {'AAPL','IBM','MSFT','GOOG'}:
...     all_data[ticker] = web.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()})
>>> returns = price.pct_change()
>>> returns.tail()
                AAPL      GOOG       IBM      MSFT
Date                                              
2009-12-24  0.034340  0.011117  0.004385  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.013698
2009-12-31 -0.004300 -0.004416 -0.012597 -0.015504

Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数,

与此相似,cov用于计算协方差。

>>> returns.MSFT.corr(returns.IBM)
0.49253706924390167
>>> returns.MSFT.cov(returns.IBM)
0.00021557776646297303

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

>>> returns.corr()
          AAPL      GOOG       IBM      MSFT
AAPL  1.000000  0.470676  0.412392  0.422852
GOOG  0.470676  1.000000  0.390689  0.438313
IBM   0.412392  0.390689  1.000000  0.492537
MSFT  0.422852  0.438313  0.492537  1.000000
>>> returns.cov()
          AAPL      GOOG       IBM      MSFT
AAPL  0.001030  0.000303  0.000254  0.000309
GOOG  0.000303  0.000580  0.000142  0.000204
IBM   0.000254  0.000142  0.000369  0.000216
MSFT  0.000309  0.000204  0.000216  0.000519

利用DataFrame的corrwith方法,你可以计算其列或行跟另一个Series或DataFrame之间的相关系数。

传入一个Series将返回一个Series

在计算相关系数之前,所有数据都会按标签对齐

>>> returns.corrwith(returns.IBM)
AAPL    0.412392
GOOG    0.390689
IBM     1.000000
MSFT    0.492537
dtype: float64
>>> returns.corrwith(volume)
AAPL   -0.057665
GOOG    0.062647
IBM    -0.006592
MSFT   -0.016101
dtype: float64

唯一值,值计数及成员资格

从一维Series中抽取信息

Unique代表Series中的唯一值数组,返回的唯一值是未排序的,

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

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

>>> from pandas import DataFrame,Series
Backend TkAgg is interactive backend. Turning interactive mode on.
>>> import numpy as np
>>> import pandas as pd
>>> obj = Series(['c','a','d','a','a','b','b','c','c'])
>>> uniques = obj.unique()
>>> uniques 
array(['c', 'a', 'd', 'b'], dtype=object)
>>> obj.value_counts()
c    3
a    3
b    2
d    1
dtype: int64
>>> pd.value_counts(obj.values,sort=False)
a    3
c    3
b    2
d    1
dtype: int64
>>> 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
>>> obj[mask]
0    c
5    b
6    b
7    c
8    c
dtype: object

如果希望得到DataFrame中多个相关列的柱状图。如下

将pandas.value_count传给DataFrame的apply函数,就会变成元素次数统计。

>>> data = DataFrame({'Qu1':[1,3,4,3,4],'Qu2':[2,3,1,2,3],'Qu3':[1,5,2,4,4]})
>>> data
   Qu1  Qu2  Qu3
0    1    2    1
1    3    3    5
2    4    1    2
3    3    2    4
4    4    3    4
>>> result = data.apply(pd.value_counts).fillna(0)
>>> result
   Qu1  Qu2  Qu3
1  1.0  1.0  1.0
2  0.0  2.0  1.0
3  2.0  2.0  0.0
4  2.0  0.0  2.0
5  0.0  0.0  1.0

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海人001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值