首页Python【Python数据分析】2...

【Python数据分析】24.相关性和协方差


本系列文章配套代码获取有以下三种途径:

  • 可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):

https://returu.github.io/Python_Data_Analysis/lab/index.html
链接:https://pan.baidu.com/s/1MYkeYeVAIRqbxezQECHwcA?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Python_Data_Analysis

根据《Python for Data Analysis 3rd Edition》翻译整理

—————-————————————-

一些汇总统计,例如相关性和协方差,是根据多个参数计算出来的。

1.读取数据:

下面示例使用的数据是:从雅虎财经获得的股票价格和交易量数据,数据格式为二进制pickle文件。

 1# 股价数据
2>>> price = pd.read_pickle("data/yahoo_price.pkl")
3>>> price
4                  AAPL        GOOG         IBM       MSFT
5Date
62010-01-04   27.990226  313.062468  113.304536  25.884104
72010-01-05   28.038618  311.683844  111.935822  25.892466
82010-01-06   27.592626  303.826685  111.208683  25.733566
92010-01-07   27.541619  296.753749  110.823732  25.465944
102010-01-08   27.724725  300.709808  111.935822  25.641571
11...                ...         ...         ...        ...
122016-10-17  117.550003  779.960022  154.770004  57.220001
132016-10-18  117.470001  795.260010  150.720001  57.660000
142016-10-19  117.120003  801.500000  151.259995  57.529999
152016-10-20  117.059998  796.969971  151.520004  57.250000
162016-10-21  116.599998  799.369995  149.630005  59.660000
17
18[1714 rows x 4 columns]
19
20
21# 交易量数据
22>>> volume = pd.read_pickle("data/yahoo_volume.pkl")
23>>> volume
24                 AAPL      GOOG       IBM      MSFT
25Date
262010-01-04  123432400   3927000   6155300  38409100
272010-01-05  150476200   6031900   6841400  49749600
282010-01-06  138040000   7987100   5605300  58182400
292010-01-07  119282800  12876600   5840600  50559700
302010-01-08  111902700   9483900   4197200  51197400
31...               ...       ...       ...       ...
322016-10-17   23624900   1089500   5890400  23830000
332016-10-18   24553500   1995600  12770600  19149500
342016-10-19   20034600    116600   4632900  22878400
352016-10-20   24125800   1734200   4023100  49455600
362016-10-21   22384800   1260500   4401900  79974200
37
38[1714 rows x 4 columns]

然后通过pct_change()方法计算当前元素与先前元素的相差百分比。

 1# pct_change()用于计算当前元素与先前元素的相差百分比
2# 以最后一列的最后两行数据为例——(59.660000-57.250000)/57.250000
3>>> returns = price.pct_change()
4>>> returns
5                AAPL      GOOG       IBM      MSFT
6Date
72010-01-04       NaN       NaN       NaN       NaN
82010-01-05  0.001729 -0.004404 -0.012080  0.000323
92010-01-06 -0.015906 -0.025209 -0.006496 -0.006137
102010-01-07 -0.001849 -0.023280 -0.003462 -0.010400
112010-01-08  0.006648  0.013331  0.010035  0.006897
12...              ...       ...       ...       ...
132016-10-17 -0.000680  0.001837  0.002072 -0.003483
142016-10-18 -0.000681  0.019616 -0.026168  0.007690
152016-10-19 -0.002979  0.007846  0.003583 -0.002255
162016-10-20 -0.000512 -0.005652  0.001719 -0.004867
172016-10-21 -0.003930  0.003011 -0.012474  0.042096
18
19[1714 rows x 4 columns]

2.计算相关性和协方差

Series 的 corr方法计算两个 Series 中重叠的、非 NA、按索引对齐的值的相关性。相应的,cov方法计算协方差。

1>>> returns["MSFT"].corr(returns["IBM"])
20.4997636114415114
3
4>>> returns["MSFT"].cov(returns["IBM"])
58.870655479703546e-05

另外,由于 MSFT 是有效的 Python 变量名,还可以使用更简洁的语法来选择这些列。

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

DataFrame的corrcov方法会分别以DataFrame的形式返回相关性和协方差矩阵。

 1>>> returns.corr()
2          AAPL      GOOG       IBM      MSFT
3AAPL  1.000000  0.407919  0.386817  0.389695
4GOOG  0.407919  1.000000  0.405099  0.465919
5IBM   0.386817  0.405099  1.000000  0.499764
6MSFT  0.389695  0.465919  0.499764  1.000000
7
8>>> returns.cov()
9          AAPL      GOOG       IBM      MSFT
10AAPL  0.000277  0.000107  0.000078  0.000095
11GOOG  0.000107  0.000251  0.000078  0.000108
12IBM   0.000078  0.000078  0.000146  0.000089
13MSFT  0.000095  0.000108  0.000089  0.000215

3.corrwith 方法

使用 DataFrame 的 corrwith 方法,可以计算 DataFrame 的列或行与另一个 Series 或 DataFrame 之间的相关性。

该方法传递一个包含有为每一列计算相关性值的Series 。

1>>> returns.corrwith(returns["IBM"])
2AAPL    0.386817
3GOOG    0.405099
4IBM     1.000000
5MSFT    0.499764
6dtypefloat64
传递一个DataFrame时,会计算匹配到列名的相关性数据。
下面的示例,计算的是价格百分比变化与交易量的相关性。
1>>> returns.corrwith(volume)
2AAPL   -0.075565
3GOOG   -0.007067
4IBM    -0.204849
5MSFT   -0.092950
6dtypefloat64
传递 axis=”columns” 会逐行执行操作。在所有情况下,数据点已经在计算相关性之前按标签进行了对齐。


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments