加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

22、Python数据分析从入门到放弃(二十二)金融图表绘制

(2018-09-25 16:16:55)
标签:

python

入门

金融数据

图表

分类: Python

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')
plt.xlabel('Date')
plt.show()
In [6]:

df=maotai_data.reset_index()

df = df[['date', 'open', 'close', 'low', 'high']]
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].apply(date2num)


fig, ax = plt.subplots(figsize=(12, 5))
mpf.plot_day_summary_oclh(ax, df.values, 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')
plt.xlabel('Date')
plt.show()
In [7]:

stock_data = ts.get_k_data(code='600519', ktype='5')
stock_data['date'] = pd.to_datetime(stock_data['date'])
# stock_data.set_index('date', inplace=True)
print(stock_data.head())
print(stock_data.tail())

                 date    open   close    high     low  volume    code
0 2018-09-07 14:55:00  650.22  650.10  650.22  649.95   450.0  600519
1 2018-09-07 15:00:00  650.10  650.97  650.97  650.04   442.0  600519
2 2018-09-10 09:35:00  652.20  642.22  652.99  642.22  1553.0  600519
3 2018-09-10 09:40:00  642.22  643.50  646.90  642.22  1053.0  600519
4 2018-09-10 09:45:00  643.50  641.40  644.30  640.80  1367.0  600519
                   date    open   close    high     low  volume    code
525 2018-09-25 14:40:00  697.20  697.00  697.75  696.52   368.0  600519
526 2018-09-25 14:45:00  696.90  697.00  697.20  696.70   269.0  600519
527 2018-09-25 14:50:00  697.00  696.27  697.20  696.27   253.0  600519
528 2018-09-25 14:55:00  696.27  696.49  696.49  696.00   456.0  600519
529 2018-09-25 15:00:00  696.49  697.02  697.18  696.49   326.0  600519
In [8]:

fig, ax = plt.subplots(figsize=(12, 5))
stock_data['close'].plot(ax=ax)
plt.show()

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有