22、Python数据分析从入门到放弃(二十二)金融图表绘制
(2018-09-25 16:16:55)
标签:
python入门金融数据图表 |
分类: Python |
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()