22、Python数据分析从入门到放弃(二十二)金融图表绘制
2018-09-25 16:16阅读:
21、Python数据分析从入门到放弃(二十二)金融图表绘制
金融数据分析
- 可以用爬虫爬取google和yahoo的数据
- 更方便的是直接用tushare
- 向量化操作比for循环单条操作省时省力
- matplotlib.finance 有大量可以使用的金融图表
- 使用tushare可以获得分时数据
In [1]:
import datetime import
pandas as pd
import numpy as
np import tushare
as ts import
matplotlib.pyplot as plt
import matplotlib from
matplotlib.dates import
date2num, DateFormatter
import matplotlib.finance as
mpf %matplotlib inline
#取茅台的交易数据 maotai_data =
ts.get_k_data(code='600519',
start='2017-01-01',
end='2017-07-01')
#将交易日期设置为索引
maotai_data.set_index('date',
inplace=True)
print(maotai_data.head())
print(maotai_data.tail())
open close high low volume code date 2017-01-03 324.689 324.961
327.331 323.261 20763.0 600519 2017-01-04 325.019 341.813 342.066
325.000 65257.0 600519 2017-01-05 339.958 336.792 341.366 335.529
41704.0 600519 2017-01-06 336.694 340.696 349.457 336.170 68095.0
600519 2017-01-09 337.821 338.511 342.755 336.597 35405.0 600519
open close high low volume code date 2017-06-26 459.439 470.774
471.085 458.458 52932.0 600519 2017-06-27 468.967 470.211 471.085
467.054 27980.0 600519 2017-06-28 470.201 461.663 470.201 459.429
37728.0 600519 2017-06-29 462.634 459.439 463.654 456.515 35092.0
600519 2017-06-30 457.982 458.312 460.556 454.378 22427.0
600519
D:\Anaconda2\envs\py3\lib\site-packages\matplotlib\cbook\deprecation.py:106:
MatplotlibDeprecationWarning: The finance module has been
deprecated in mpl 2.0 and will be removed in mpl 2.2. Please use
the module mpl_finance instead. warnings.warn(message,
mplDeprecation, stacklevel=1)
In [2]:
#可视化收盘价
maotai_data['close'].plot(figsize=(12,
5))
Out[2]:
In [3]:
# 计算对数收益率 #慢
maotai_data['ret_loop']
= 0.0 for i
in
range(1,
maotai_data.shape[0]):
maotai_data['ret_loop'][i]
=
np.log(maotai_data['close'][i]
/
maotai_data['close'][i
- 1]) # 向量化操作,快
maotai_data['return']
=
np.log(maotai_data['close']
/
maotai_data['close'].shift(1))
print(maotai_data.head())
print(maotai_data.tail())
D:\Anaconda2\envs\py3\lib\site-packages\ipykernel_launcher.py:5:
SettingWithCopyWarning: A value is trying to be set on a copy of a
slice from a DataFrame See the caveats in the documentation:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
'''
open close high low volume code ret_loop \ date 2017-01-03 324.689
324.961 327.331 323.261 20763.0 600519 0.000000 2017-01-04 325.019
341.813 342.066 325.000 65257.0 600519 0.050559 2017-01-05 339.958
336.792 341.366 335.529 41704.0 600519 -0.014798 2017-01-06 336.694
340.696 349.457 336.170 68095.0 600519 0.011525 2017-01-09 337.821
338.511 342.755 336.597 35405.0 600519 -0.006434 return date
2017-01-03 NaN 2017-01-04 0.050559 2017-01-05 -0.014798 2017-01-06
0.011525 2017-01-09 -0.006434 open close high low volume code
ret_loop \ date 2017-06-26 459.439 470.774 471.085 458.458 52932.0
600519 0.024964 2017-06-27 468.967 470.211 471.085 467.054 27980.0
600519 -0.001197 2017-06-28 470.201 461.663 470.201 459.429 37728.0
600519 -0.018346 2017-06-29 462.634 459.439 463.654 456.515 35092.0
600519 -0.004829 2017-06-30 457.982 458.312 460.556 454.378 22427.0
600519 -0.002456 return date 2017-06-26 0.024964 2017-06-27
-0.001197 2017-06-28 -0.018346 2017-06-29 -0.004829 2017-06-30
-0.002456
In [4]:
#K线图 - matplotlib.finance.candlestick2_ochl
df=maotai_data.reset_index()
fig, ax =
plt.subplots(figsize=(12,
5))
mpf.candlestick2_ochl(ax,
df['open'],
df['close'],
df['high'],
df['low'],
width=0.3,
colorup='r',
colordown='g')
ax.set_xticklabels(df['date'])
plt.grid(True)
plt.xticks(rotation=45)
plt.ylabel('Stock
Price')
plt.xlabel('Date')
plt.show()
In [5]:
df =
df[['date',
'open',
'close',
'high', 'low']]
df['date']
=
pd.to_datetime(df['date'])
df['date']
=
df['date'].apply(date2num)
fig, ax =
plt.subplots(figsize=(12,
5)) # 蜡烛图
mpf.candlestick_ochl(ax,
df.values,
width=.6,
colorup='r',
colordown='g')
ax.xaxis_date()
ax.autoscale_view()
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
plt.grid(True)
plt.xticks(rotation=45)
plt.ylabel('Stock
Price'