1. pandas主要包括两种数据结构:Series和DataFrame
Series是一种类似于一维数组的对象,它由一组数据以及一组与之相关的的数据标签组成。
import pandas as pd
obj = pd.Series([4,7,-5,3])
obj
Out[3]:
0 4
1 7
2 -5
3 3
dtype: int64
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。它既有行索引也有列索引,可以看作是由Series组成的索引。
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year': [2000,2001,2002,2001,2002],
'pop': [1.5,1.7,3.6,2.4,2.9]}
frame=pd.DataFrame(data)
frame
Out[6]:
pop state year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002
2. 基本功能
相关系数和协方差:例子的数据来自于yahoo!Finance的股票价格和成交量。
首先我们来获取数据:
from pandas_datareader import data as pdr
import datetime
import fix_yahoo_finance as yf
yf.pdr_override()
all_data={}
start=datetime.datetime(2010,1,1)
end = datetime.date.today()
price = pd.DataFrame({tic:data['Adj Close']
for tic,data in all_data.items()})
price.tail()
Out[18]:
AAPL GOOG IBM MSFT
Date
2018-05-07 184.448746 1054.790039 141.647583 96.220001
2018-05-08 185.335327 1053.910034 141.430008 95.809998
2018-05-09 186.640305 1082.760010 142.610001 96.940002
2018-05-10 189.309998 1097.569946 144.240005 97.910004
2018-05-11 188.589996 1098.260010 144.139999 97.699997
volume = pd.DataFrame({tic:data['Volume']
for tic,data in all_data.items()})
volume.tail()
Out[20]:
AAPL GOOG IBM MSFT
Date
2018-05-07 42451400 1466100 3657000 24242000
2018-05-08 28402800 1217700 5369100 23484600
2018-05-09 23211200 2032800 4196000 27327400
2018-05-10 27989300 1443000 3726600 22388100
2018-05-11 25806600 1201200 3069400 16745900
计算价格的百分数变化
returns = price.pct_change()
returns.tail()
Out[30]:
AAPL GOOG IBM MSFT
Date
2018-05-07 0.007235 0.006277 -0.004795 0.011139
2018-05-08 0.004807 -0.000834 -0.001536 -0.004261
2018-05-09 0.007041 0.027374 0.008343 0.011794
2018-05-10 0.014304 0.013678 0.011430 0.010006
2018-05-11 -0.003803 0.000629 -0.000693 -0.002145
使用corr计算相关系数和使用cov计算协方差
returns.MSFT.corr(returns.IBM)
Out[31]: 0.47950250217991136
returns.MSFT.cov(returns.IBM)
Out[32]: 8.241273703776968e-05
DataFrame的corr和cov方法将以DataFrame的形式返回完整的相关系数和协方差矩阵
returns.corr()
Out[33]:
AAPL GOOG IBM MSFT
AAPL 1.000000 0.426565 0.360545 0.413081
GOOG 0.426565 1.000000 0.397492 0.505282
IBM 0.360545 0.397492 1.000000 0.479503
MSFT 0.413081 0.505282 0.479503 1.000000
returns.cov()
Out[34]:
AAPL GOOG IBM MSFT
AAPL 0.000260 0.000105 0.000070 0.000095
GOOG 0.000105 0.000234 0.000073 0.000110
IBM 0.000070 0.000073 0.000145 0.000082
MSFT 0.000095 0.000110 0.000082 0.000204