一、Pandas数据类型介绍
Pandas基于numpy实现。与numpy相比,numpy更关注数据的组织,而pandas则更关注数据的表达和索引。
Pandas包括两种数据类型:Series和DataFrame
其中,Series是具有相同索引的一组数据的表示。而DataFrame是具有相同索引的多组数据的表示,各组数据具有不同的含义。
Series可通过列表、ndarray等数据来创建,可使用index、value来索引其中的值。
DataFrame可通过列表、ndarray、字典等数据来创建,可通过index、columns、value来索引其中的值。
#Series类型创建
dat = pd.Series(np.arange(5)+1)
print(dat)
0 1
1 2
2 3
3 4
4 5
dtype: int32
# DataFrame类型创建
dl = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5, 101.2, 101.3, 102.0, 100.1],
'同比':[120.7, 127.3, 119.4, 140.9, 101.4],
'定基':[121.4, 127.8, 120.0, 145.5, 101.6]}
d = pd.DataFrame(dl, index=['c1','c2','c3','c4','c5'])
print(d)
print( d['城市'] ) #索引DataFrame中“城市”列的数据
二、Pandas数据分析例子
下面使用pandas分析“十年期国债收益率”和“十年期国债期货价格”的相关性。
首先,准备数据,这里使用两者在2015年7月29日至2020年7月29日五年间的数据。可在这个网址下载。
准备好数据后,读取数据,并对数据进行清洗(整理),最后求解两种数据之间的Pearson相关系数。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#读取csv文件,取相应的“日期”与“收盘列数据”
data1 = pd.read_csv('data/中国十年期国债收益率历史数据.csv', usecols=['日期', '收盘'])
data2 = pd.read_csv('data/上证国债指数历史数据.csv', usecols=['日期', '收盘'])
#结果得到
#data1的大小为 1312 rows× 2 columns
#data2的大小为 929 rows× 2 columns
#两者之间的日期并非是一一对应的,所以取数据较少的一方data2为参考,找出与其日期相应的data1数据
rate_data = pd.DataFrame() #国债收益率数据
future_data = pd.DataFrame() #期货价格数据
for i in range(len(data2)):
for j in range(100): # 日期相同的数据索引可能会有差距,设置100的容错
if (i+j) > len(data1):
break
if data2['日期'].iloc[i] == data1['日期'].iloc[i+j]:
rate_data = rate_data.append(data2.loc[i])
future_data = future_data.append(data1.loc[i+j])
break
#对index逆序,使columns中的日期是按照时间顺序排列的
rate_data = rate_data.iloc[::-1,:]
future_data = future_data.iloc[::-1,:]
#求解两类数据的相关性
rate_data['收盘'].corr(future_data['收盘']) #结果为-0.88,表示存在极强负相关的关系
#用matplotlib绘图看看
d1 = (rate_data['收盘'] - rate_data['收盘'].mean())/rate_data['收盘'].std() #归一化
d2 = (future_data['收盘'] - future_data['收盘'].mean())/future_data['收盘'].std()
plt.plot(d1,label="rate")
plt.plot(d2, label="future")
plt.legend()
plt.savefig("走势图.jpg")
plt.show()
结果如图:
两者的pearson相关系数为 - 0.88 , 表示存在极强负相关的关系
相关系数 | 相关性 |
---|---|
0.8-1.0 | 极强相关 |
0.6-0.8 | 强相关 |
0.4-0.6 | 中等程度相关 |
0.2-0.4 | 弱相关 |
0.0-0.2 | 极弱相关或无相关 |