python绘图练习——股票分析(一):基础分析

此篇文章将通过对股票数据进行基础分析来实际运用python的绘图库。
首先,引入所需要的库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


然后,导入股票数据,这里选用了特斯拉,通用汽车和福特汽车三只股票2012年到2016年的数据。这里是直接使用的下载好的csv文件,另外也可以直接利用python从雅虎或者Quandl上加载数据,具体方法就不过多解释了。


Tesla=pd.read_csv('Tesla_Stock.csv',index_col='Date')
Tesla.index=pd.to_datetime(Tesla.index)

GM=pd.read_csv('GM_stock.csv',index_col='Date')
GM.index=pd.to_datetime(GM.index)

Ford=pd.read_csv('Ford_Stock.csv',index_col='Date')
Ford.index=pd.to_datetime(Ford.index)

1.这里使用pd.to_datetime将数据集时间转化为时间序列,便于股票的分析。

首先看看数据长相:

Tesla.head()

python绘图练习——股票分析(一):基础分析_第1张图片

数据集包含了股票的开盘价、收盘价、每日最低价与最高价、交易量等信息。
接下来,我们来看看三支股票的开盘价走势:


plt.figure(figsize=(16,6))
Tesla['Open'].plot()
GM['Open'].plot()
Ford['Open'].plot()
plt.legend(['Tesla','GM','Ford'],loc='upper right')

python绘图练习——股票分析(一):基础分析_第2张图片
1.plt.legend用于设置图像的图例,loc是图例位置,upper right代表图例在右上角。

接下来看看成交量:

plt.figure(figsize=(16,6))
Tesla['Volume'].plot()
GM['Volume'].plot()
Ford['Volume'].plot()
plt.legend(['Tesla','GM','Ford'],loc='upper right')
plt.xlim(Tesla.index[0],Tesla.index[-1])

python绘图练习——股票分析(一):基础分析_第3张图片
1.这里plt.xlim设置x轴的范围。

通过图形,我们可以看到frod在其中有一天有异常的交易量,我们可以通过python定位这一天:

Ford['Volume'].argmax()

这里写图片描述
关于那天发生的事可以看这里:Ford warns that 2014 profit margins will fall

接着我们来看看3只股票的交易总额:


Tesla['Total Traded']=Tesla['Open']*Tesla['Volume']
GM['Total Traded']=GM['Open']*GM['Volume']
Ford['Total Traded']=Ford['Open']*Ford['Volume']

plt.figure(figsize=(16,6))
Tesla['Total Traded'].plot()
GM['Total Traded'].plot()
Ford['Total Traded'].plot()
plt.legend(['Tesla','GM','Ford'],loc='upper right')
plt.xlim(Tesla.index[0],Tesla.index[-1])

python绘图练习——股票分析(一):基础分析_第4张图片
可以看到Tesla在其中也有一天存在异常,具体新闻:Tesla is on a hot streak again

接下来看看通用汽车这只股票的收盘价及其移动平均线:

GM['Close'].plot(figsize=(16,6),xlim=(GM.index[0],GM.index[-1]),label='Close')
GM['Close'].rolling(50).mean().plot(label='GM MA50')
GM['Close'].rolling(200).mean().plot(label='GM MA200')
plt.legend()

python绘图练习——股票分析(一):基础分析_第5张图片
1.使用DataFrame的rolling()函数得到移动平均值。
2.由于在上面的语句中已经提前输入了标签,所以在plt.legend中无需再输入。

接下来,我们可以通过绘图看看三只股票大概的相关关系:


from pandas.plotting import scatter_matrix
stockOpen=pd.DataFrame(columns=['Tesla','GM','Ford'],index=GM.index)
stockOpen['Tesla']=Tesla['Open']
stockOpen['GM']=GM['Open']
stockOpen['Ford']=Ford['Open']
#stockOpen = pd.concat([Tesla['Open'],GM['Open'],Ford['Open']],axis=1)
scatter_matrix(stockOpen.dropna(), alpha=0.2, figsize=(9, 9), hist_kwds={'bins':50})

python绘图练习——股票分析(一):基础分析_第6张图片
另外还可以通过seaborn库中的pairplot函数绘制:

import seaborn as sns
sns.pairplot(stockOpen.dropna())

python绘图练习——股票分析(一):基础分析_第7张图片
从图上可以看出,通用汽车和福特汽车的股票有比较明显的正相关性。

接着,我们可以尝试通过计算每只股票的日收益率:

Tesla['Return']=(Tesla['Close']-Tesla['Close'].shift(1))/Tesla['Close'].shift(1)
Tesla=Tesla.dropna()

import ffn
GM['Return']=ffn.to_returns(GM['Close'])

Ford['Return']=Ford['Close'].pct_change(1)
Ford=Ford.dropna()

1.这里了三种方法来计算日收益率,第一种是直接使用计算公式计算;第二种是导入专用于金融领域的第三方库ffn.to_returns函数计算;第三种是利用pandas自带的函数pct_change(1)进行计算。
使用直方图来观察一下Tesla的收益率:

plt.hist(Tesla['Return'],bins=50)

python绘图练习——股票分析(一):基础分析_第8张图片

同时也可以使用核密度图进行观察:

sns.kdeplot(Tesla['Return'],label='Tesla')
GM['Return'].plot(kind='kde',label='GM')
Ford['Return'].plot(kind='kde',label='Ford')
plt.ylim(0,35)
plt.legend()

python绘图练习——股票分析(一):基础分析_第9张图片
1.同样,kde图也可以使用seaborn中的函数。

箱图也是一种很好的观察收益率分布的图形:

box_df = pd.concat([Tesla['Return'],GM['Return'],Ford['Return']],axis=1)
box_df.columns = ['Tesla Returns','GM Returns','Ford Returns']
box_df.plot(kind='box',figsize=(8,11),colormap='jet')

python绘图练习——股票分析(一):基础分析_第10张图片
从图中我们可以看出,三支股票的平均日收益率大致为0,但是Tesla的日收益率上下波动明显大于GM和Ford。

最后,我们可以来计算一下三只股票的累计收益率:


Tesla['Cumulative Return']=(1+Tesla['Return']).cumprod()
GM['Cumulative Return']=(1+GM['Return']).cumprod()
Ford['Cumulative Return']=(1+Ford['Return']).cumprod()


Tesla['Cumulative Return'].plot(label='Tesla',figsize=(16,8),title='Cumulative Return')
Ford['Cumulative Return'].plot(label='Ford')
GM['Cumulative Return'].plot(label='GM')
plt.legend()

python绘图练习——股票分析(一):基础分析_第11张图片
1.使用cumprod函数可以计算DataFrame中指定列的累乘积。
从图中可以明显看出,Tesla的累积收益率远大于其它两只股票,但其波动也十分明显。

你可能感兴趣的:(量化投资,数据分析)