本系列文章配套代码获取有以下三种途径:
-
可以在以下网站查看,该网站是使用JupyterLite搭建的web端Jupyter环境,因此无需在本地安装运行环境即可使用,首次运行浏览器需要下载一些配置文件(大约20M):
https://returu.github.io/Python_Data_Analysis/lab/index.html
-
也可以通过百度网盘获取,需要在本地配置代码运行环境,环境配置可以查看【Python基础】2.搭建Python开发环境:
链接: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的corr和cov方法会分别以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
6dtype: float64
1>>> returns.corrwith(volume)
2AAPL -0.075565
3GOOG -0.007067
4IBM -0.204849
5MSFT -0.092950
6dtype: float64
本篇文章来源于微信公众号: 码农设计师