前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python在Finance上的应用4 :处理股票数据进阶

Python在Finance上的应用4 :处理股票数据进阶

作者头像
万能数据的小草
发布2020-02-10 18:09:32
1.9K0
发布2020-02-10 18:09:32
举报
文章被收录于专栏:万能的小草

欢迎来到Python for Finance教程系列的第4部分。 在本教程中,我们将基于Adj Close列创建烛形/ OHLC图,这将允许我介绍重新采样和其他一些数据可视化概念。

名为烛形图的OHLC图表是一种将开盘价,最高价,最低价和收盘价数据全部集中在一个很好的格式中的图表。 另外,它有漂亮的颜色和前面提到的美丽的图表?

在之前的教程中已经涉及的codes:

代码语言:javascript
复制
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_datareader.data as web
style.use('ggplot')
df = pd.read_csv(r"C:\Users\HP\Desktop\TSLA.csv", parse_dates=True, index_col=0)

不幸的是,即使创建OHLC数据,也不能直接从Pandas利用内置函数制作烛形图。我确信这个图表类型终有一天将会被提供,现在不是没关系,但我们会做到这一点! 首先,我们需要导入两个库

代码语言:javascript
复制
from matplotlib.finance import candlestick_ohlc
import matplotlib.dates as mdates

第一个导入是来自matplotlib的OHLC图形类型,第二个导入是特殊的mdates类型,这是matplotlib图形的日期类型。Pandas自动为你处理,但就像我说的那样,我们没有烛形图的奢侈品。

首先,我们需要适当的OHLC数据。 目前的数据确实有OHLC的价值,除非我错了,特斯拉从未有过送转,但你永远不会是这样的幸运。 因此,我们将创建自己的OHLC数据,这也将使能够显示来自Pandas的另一个数据转换:

代码语言:javascript
复制
df_ohlc = df['Adj Close'].resample('10D').ohlc()

我们在这里所做的是创建一个基于df ['Adj Close']列的新数据框,重新封装10天的窗口,并且重采样是一个ohlc(开高低关闭)。我们也可以用.mean()或.sum()做10天的平均值或10天的总和。请记住,这10天的平均值是10天的平均值,而不是移动平均值。由于我们的数据是每日数据,因此将其重新采样为10天的数据会显着缩小数据的大小。这是你可以如何规范化多个数据集。有时,您可能会在每个月的一个月初记录一次数据,每个月末记录的其他数据,以可能终每周记录一些数据。您可以将该数据框重新采样到月末,每个月,并有效地将所有数据归一化!如果你喜欢的话,这是更高级的Pandas功能,你可以从中了解更多。

我们想要绘制烛形数据以及成交量数据。我们不必重新采样数据,应该,因为它与10D定价数据相比太细致。

代码语言:javascript
复制
df_volume = df['Volume'].resample('10D').sum()

在这对成交量求和,因为我们确实想知道这10天内交易的总量,但也可以使用平均值。 现在如果我们这样做:

代码语言:javascript
复制
print(df_ohlc.head())

得到:

代码语言:javascript
复制
open     high     low   closeDate      
2015-01-01  222.410  222.410  191.87  191.93
2015-01-21  196.570  220.990  196.57  217.48
2015-02-10  216.290  217.110  202.88  203.34
2015-03-02  197.325  202.435  188.68  198.08
2015-03-22  199.630  210.900  185.00  210.90

正如之前想的一样,现在想要将这些信息移动到matplotlib中,并将日期转换为mdates版本。 由于仅仅只要在Matplotlib中绘制列,所以实际上不希望日期成为索引,可以这样做:

代码语言:javascript
复制
df_ohlc = df_ohlc.reset_index()

现在的日期只是一个普通的列。 接下来,我们要转换它:

代码语言:javascript
复制
df_ohlc['Date'] = df_ohlc['Date'].map(mdates.date2num)

接下来开始制图:

代码语言:javascript
复制
fig = plt.figure()
ax1 = plt.subplot2grid((6,1), (0,0), rowspan=5, colspan=1)
ax2 = plt.subplot2grid((6,1), (5,0), rowspan=1, colspan=1,sharex=ax1)
ax1.xaxis_date()

除了ax1.xaxis_date()之外,已经看到过的所有内容。 这对我们来说就是将轴从原始的生成号码转换为日期。

现在我们可以绘制烛形图:

代码语言:javascript
复制
candlestick_ohlc(ax1, df_ohlc.values, width=2, colorup='g')

接着加上成交量:

代码语言:javascript
复制
ax2.fill_between(df_volume.index.map(mdates.date2num), df_volume.values, 0)

fill_between函数将绘制x,y,然后填充/之间的内容。 在我们的例子中,我们选择0。

代码语言:javascript
复制
plt.show()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小草学Python和SQL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档