Pandas札记5_协方差、相关系数

浏览: 1679

导入模块

import numpy as np
import pandas as pd
import pandas_datareader.data as web
all_data = {ticker: web.get_data_yahoo(ticker)
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']}
price = pd.DataFrame({ticker: data['Adj Close']
for ticker, data in all_data.items()})
volume = pd.DataFrame({ticker: data['Volume']
for ticker, data in all_data.items()})
# 价格变化的百分数
returns = price.pct_change()
returns.tail()

计算相关系数、协方差

# 计算两个列属性的相关系数
returns['MSFT'].corr(returns['IBM'])

# 计算协方差
returns['MSFT'].cov(returns['IBM'])

# 可以使用带点的属性方式
returns.MSFT.corr(returns.IBM)

image.png

计算某个DF数据的协方差和相关系数

# 相关系数和协方差矩阵
print(returns.corr)
returns.cov
# corrwith计算一个S和另一个DF之间的相关系数
returns.corrwith(returns.IBM)

# volumn成交量
returns.corrwith(volume)

# 表示按列计算
returns.corrwith(volume, axis="columns").head()

image.png

唯一值、值计数和成员资格

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

image.png

唯一值unique

# unique()方法进行筛选唯一值
# 结果未排序,可以通过uniques.sort()进行排序
uniques = obj.unique()
uniques

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

# value_counts():统计元素出现的频率;降序排列
# 可以用于任何的数组或者序列
>>obj.value_counts()

# 结果
a 3
c 3
b 2
d 1
dtype: int64

>>pd.value_counts(obj.values, sort=False)
# 结果
c 3
a 3
b 2
d 1
dtype: int64
# isin⽤于判断⽮量化集合的成员资格
# 有点类似于Python中的 in:判断元素是否在对象中
# 返回的值是布尔值
mask = obj.isin(['b', 'c'])
mask

image.png

to_match = pd.Series(['c', 'a', 'b', 'b', 'c', 'a'])
unique_vals = pd.Series(['c', 'b', 'a'])
pd.Index(unique_vals).get_indexer(to_match)

# 结果
array([0, 2, 1, 1, 0, 2], dtype=int64)

# 判断to_match中的每个元素在Index中的索引是多少
# get_indexer:得到索引号
pd.Index(unique_vals).get_indexer(to_match)

# 结果
array([0, 2, 1, 1, 0, 2], dtype=int64)
data = pd.DataFrame({'Qu1': [1, 3, 4, 3, 4],   # DF类型数据的创建
'Qu2': [2, 3, 1, 2, 3],
'Qu3': [1, 5, 2, 4, 4]})
data

image.png


apply函数用法

# apply中传进来的是函数
# pd.value_counts是统计元素出现频率的函数
# fillna(0)表示补充0
result = data.apply(pd.value_counts).fillna(0)
result

image.png

推荐 0
本文由 皮大大 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册