新浪博客

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'

我的更多文章

下载客户端阅读体验更佳

APP专享