TuShare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据来源方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,TuShare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。
其支持获取的股市数据有:交易数据、投资参考数据、股票分类数据、基本面数据、龙虎榜数据、宏观经济数据、新闻事件数据、银行间同业拆放利率等大类,每个大类下面又细分一些小类。
一、安装与升级
同其他python模块的安装使用方法一样,即可以通过pip、easy_install 工具包进行安装,也可以通过源码包进行安装。
方式1:pip install tushare
方式2:访问https://pypi.python.org/pypi/tushare/下载安装
从github上的源码包可以看出,作者非常的勤奋,更新的速度非常快,所以也可以通过如下方法进行升级:
1 2 3 4 5 6 7 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="pln">pip install tushare </span><span class="pun">–</span><span class="pln">upgrade</span> </li> </ol> |
二、数据获取相关
这里以最经常使用的几个交易指标为例,做下汇总。
1、历史数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#一次性获取全部日k线数据</span> </li> <li class="L2"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln">start</span><span class="pun">=</span><span class="str">'2015-05-01'</span><span class="pun">,</span><span class="pln">end</span><span class="pun">=</span><span class="str">'2015-06-18'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#指定时间区间</span> </li> <li class="L3"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln">ktype</span><span class="pun">=</span><span class="str">'W'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#获取周k线数据</span> </li> <li class="L4"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln">ktype</span><span class="pun">=</span><span class="str">'M'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#获取月k线数据</span> </li> <li class="L5"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln">ktype</span><span class="pun">=</span><span class="str">'5'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#获取5分钟k线数据</span> </li> <li class="L6"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln">ktype</span><span class="pun">=</span><span class="str">'15'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#获取15分钟k线数据</span> </li> <li class="L7"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln">ktype</span><span class="pun">=</span><span class="str">'30'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#获取30分钟k线数据</span> </li> <li class="L8"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln">ktype</span><span class="pun">=</span><span class="str">'60'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#获取60分钟k线数据</span> </li> <li class="L9"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'sh'</span><span class="pun">)</span><span class="com">#获取上证指数k线数据,其它参数与个股一致,下同</span> </li> <li class="L0"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'sz'</span><span class="pun">)</span><span class="com">#获取深圳成指k线数据</span> </li> <li class="L1"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'hs300'</span><span class="pun">)</span><span class="com">#获取沪深300指数k线数据</span> </li> <li class="L2"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'sz50'</span><span class="pun">)</span><span class="com">#获取上证50指数k线数据</span> </li> <li class="L3"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'zxb'</span><span class="pun">)</span><span class="com">#获取中小板指数k线数据</span> </li> <li class="L4"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'cyb'</span><span class="pun">)</span><span class="com">#获取创业板指数k线数据</span> </li> </ol> |
关于复权的概念不了解,这里略过。接下来看实时数据。
2、实时数据
获取当天所有的行情信息,无法指定具体某一支的行情
1 2 3 4 5 6 7 8 9 10 11 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_today_all</span><span class="pun">()</span> </li> </ol> |
历史分笔与实时分笔(买卖盘统计):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_tick_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln">date</span><span class="pun">=</span><span class="str">'2014-01-09'</span><span class="pun">)</span> </li> <li class="L2"> <span class="pln">df</span><span class="pun">.</span><span class="pln">head</span><span class="pun">(</span><span class="lit">10</span><span class="pun">)</span> </li> <li class="L3"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_today_ticks</span><span class="pun">(</span><span class="str">'601333'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#当天历史分笔</span> </li> <li class="L4"> <span class="pln">df</span><span class="pun">.</span><span class="pln">head</span><span class="pun">(</span><span class="lit">10</span><span class="pun">)</span> </li> <li class="L5"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L6"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_realtime_quotes</span><span class="pun">(</span><span class="str">'000581'</span><span class="pun">)</span><span class="pln"> </span><span class="com">#Single stock symbol</span> </li> <li class="L7"> <span class="pln">df</span><span class="pun">[[</span><span class="str">'code'</span><span class="pun">,</span><span class="str">'name'</span><span class="pun">,</span><span class="str">'price'</span><span class="pun">,</span><span class="str">'bid'</span><span class="pun">,</span><span class="str">'ask'</span><span class="pun">,</span><span class="str">'volume'</span><span class="pun">,</span><span class="str">'amount'</span><span class="pun">,</span><span class="str">'time'</span><span class="pun">]]</span> </li> <li class="L8"> <span class="com">#symbols from a list</span> </li> <li class="L9"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_realtime_quotes</span><span class="pun">([</span><span class="str">'600848'</span><span class="pun">,</span><span class="str">'000980'</span><span class="pun">,</span><span class="str">'000981'</span><span class="pun">])</span> </li> <li class="L0"> <span class="com">#from a Series</span> </li> <li class="L1"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_realtime_quotes</span><span class="pun">(</span><span class="pln">df</span><span class="pun">[</span><span class="str">'code'</span><span class="pun">].</span><span class="pln">tail</span><span class="pun">(</span><span class="lit">10</span><span class="pun">))</span><span class="pln"> </span><span class="com">#一次获取10个股票的实时分笔数据</span> </li> </ol> |
3、大盘指数
1 2 3 4 5 6 7 8 9 10 11 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_index</span><span class="pun">()</span> </li> </ol> |
4、新股数据
获取打新数据:
1 2 3 4 5 6 7 8 9 10 11 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">new_stocks</span><span class="pun">()</span> </li> </ol> |
5、基本面数据
基本面数据里包含选股的很多依据指标,如:市盈率、市净率、每股收益、净利润、季报、应收账款周转率、净利润增长率(%)、流动比率、速动比率、现金流量比率等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_stock_basics</span><span class="pun">()</span> </li> <li class="L2"> <span class="com">#获取2015年第1季度的业绩报表数据</span> </li> <li class="L3"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_report_data</span><span class="pun">(</span><span class="lit">2015</span><span class="pun">,</span><span class="lit">1</span><span class="pun">)</span> </li> <li class="L4"> <span class="com">#获取2015年第1季度的盈利能力数据</span> </li> <li class="L5"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_profit_data</span><span class="pun">(</span><span class="lit">2015</span><span class="pun">,</span><span class="lit">1</span><span class="pun">)</span> </li> <li class="L6"> <span class="com">#获取2015年第1季度的营运能力数据</span> </li> <li class="L7"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_operation_data</span><span class="pun">(</span><span class="lit">2015</span><span class="pun">,</span><span class="lit">1</span><span class="pun">)</span> </li> <li class="L8"> <span class="com">#获取2015年第1季度的成长能力数据</span> </li> <li class="L9"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_growth_data</span><span class="pun">(</span><span class="lit">2015</span><span class="pun">,</span><span class="lit">1</span><span class="pun">)</span> </li> <li class="L0"> <span class="com">#获取2015年第1季度的偿债能力数据</span> </li> <li class="L1"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_debtpaying_data</span><span class="pun">(</span><span class="lit">2015</span><span class="pun">,</span><span class="lit">1</span><span class="pun">)</span> </li> <li class="L2"> <span class="com">#获取2015年第1季度的现金流量数据</span> </li> <li class="L3"> <span class="pln">ts</span><span class="pun">.</span><span class="pln">get_cashflow_data</span><span class="pun">(</span><span class="lit">2015</span><span class="pun">,</span><span class="lit">1</span><span class="pun">)</span> </li> </ol> |
三、数据存储
tushare自身提供了常用的数据保存格式:csv格式、excel格式、HDF5文件格式、JSON格式、mysql关系数据库、nosql数据库。
1、to_csv方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'000875'</span><span class="pun">)</span> </li> <li class="L2"> <span class="com">#直接保存</span> </li> <li class="L3"> <span class="pln">df</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="str">'c:/day/000875.csv'</span><span class="pun">)</span> </li> <li class="L4"> <span class="com">#选择保存</span> </li> <li class="L5"> <span class="pln">df</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="str">'c:/day/000875.csv'</span><span class="pun">,</span><span class="pln">columns</span><span class="pun">=[</span><span class="str">'open'</span><span class="pun">,</span><span class="str">'high'</span><span class="pun">,</span><span class="str">'low'</span><span class="pun">,</span><span class="str">'close'</span><span class="pun">])</span> </li> </ol> |
某些时候,可能需要将一些同类数据保存在一个大文件中,这时候就需要将数据追加在同一个文件里,简单举例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> os</span> </li> <li class="L2"> <span class="pln">filename </span><span class="pun">=</span><span class="pln"> </span><span class="str">'c:/day/bigfile.csv'</span> </li> <li class="L3"> <span class="kwd" style="font-weight:bold;">for</span><span class="pln"> code </span><span class="kwd" style="font-weight:bold;">in</span><span class="pln"> </span><span class="pun">[</span><span class="str">'000875'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'600848'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'000981'</span><span class="pun">]:</span> </li> <li class="L4"> <span class="pln"> df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="pln">code</span><span class="pun">)</span> </li> <li class="L5"> <span class="pln"> </span><span class="kwd" style="font-weight:bold;">if</span><span class="pln"> os</span><span class="pun">.</span><span class="pln">path</span><span class="pun">.</span><span class="pln">exists</span><span class="pun">(</span><span class="pln">filename</span><span class="pun">):</span> </li> <li class="L6"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="pln">filename</span><span class="pun">,</span><span class="pln"> mode</span><span class="pun">=</span><span class="str">'a'</span><span class="pun">,</span><span class="pln"> header</span><span class="pun">=</span><span class="kwd" style="font-weight:bold;">None</span><span class="pun">)</span> </li> <li class="L7"> <span class="pln"> </span><span class="kwd" style="font-weight:bold;">else</span><span class="pun">:</span> </li> <li class="L8"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">to_csv</span><span class="pun">(</span><span class="pln">filename</span><span class="pun">)</span> </li> </ol> |
2、to_excel方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'000875'</span><span class="pun">)</span> </li> <li class="L2"> <span class="com">#直接保存</span> </li> <li class="L3"> <span class="pln">df</span><span class="pun">.</span><span class="pln">to_excel</span><span class="pun">(</span><span class="str">'c:/day/000875.xlsx'</span><span class="pun">)</span> </li> <li class="L4"> <span class="com">#设定数据位置(从第3行,第6列开始插入数据)</span> </li> <li class="L5"> <span class="pln">df</span><span class="pun">.</span><span class="pln">to_excel</span><span class="pun">(</span><span class="str">'c:/day/000875.xlsx'</span><span class="pun">,</span><span class="pln"> startrow</span><span class="pun">=</span><span class="lit">2</span><span class="pun">,</span><span class="pln">startcol</span><span class="pun">=</span><span class="lit">5</span><span class="pun">)</span> </li> </ol> |
3、to_hdf方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'000875'</span><span class="pun">)</span> </li> <li class="L2"> <span class="pln">df</span><span class="pun">.</span><span class="pln">to_hdf</span><span class="pun">(</span><span class="str">'c:/day/hdf.h5'</span><span class="pun">,</span><span class="str">'000875'</span><span class="pun">)</span> </li> <li class="L3"> <span class="pun">或</span> </li> <li class="L4"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L5"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'000875'</span><span class="pun">)</span> </li> <li class="L6"> <span class="pln">store </span><span class="pun">=</span><span class="pln"> </span><span class="typ" style="font-weight:bold;">HDFStore</span><span class="pun">(</span><span class="str">'c:/day/store.h5'</span><span class="pun">)</span> </li> <li class="L7"> <span class="pln">store</span><span class="pun">[</span><span class="str">'000875'</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> df</span> </li> <li class="L8"> <span class="pln">store</span><span class="pun">.</span><span class="pln">close</span><span class="pun">()</span> </li> </ol> |
4、to_json方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'000875'</span><span class="pun">)</span> </li> <li class="L2"> <span class="pln">df</span><span class="pun">.</span><span class="pln">to_json</span><span class="pun">(</span><span class="str">'c:/day/000875.json'</span><span class="pun">,</span><span class="pln">orient</span><span class="pun">=</span><span class="str">'records'</span><span class="pun">)</span> </li> <li class="L3"> <span class="com">#或者直接使用</span> </li> <li class="L4"> <span class="kwd" style="font-weight:bold;">print</span><span class="pln"> df</span><span class="pun">.</span><span class="pln">to_json</span><span class="pun">(</span><span class="pln">orient</span><span class="pun">=</span><span class="str">'records'</span><span class="pun">)</span> </li> </ol> |
5、to_sql方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">from</span><span class="pln"> sqlalchemy </span><span class="kwd" style="font-weight:bold;">import</span><span class="pln"> create_engine</span> </li> <li class="L1"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L2"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_tick_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln"> date</span><span class="pun">=</span><span class="str">'2014-12-22'</span><span class="pun">)</span> </li> <li class="L3"> <span class="pln">engine </span><span class="pun">=</span><span class="pln"> create_engine</span><span class="pun">(</span><span class="str">'mysql://user:passwd@127.0.0.1/db_name?charset=utf8'</span><span class="pun">)</span> </li> <li class="L4"> <span class="com">#存入数据库</span> </li> <li class="L5"> <span class="pln">df</span><span class="pun">.</span><span class="pln">to_sql</span><span class="pun">(</span><span class="str">'tick_data'</span><span class="pun">,</span><span class="pln">engine</span><span class="pun">)</span> </li> <li class="L6"> <span class="com">#追加数据到现有表</span> </li> <li class="L7"> <span class="com">#df.to_sql('tick_data',engine,if_exists='append')</span> </li> </ol> |
如下图:
5、写入mongodb
通过官方的示例来看,并没有直接提供写入mongodb的方法,不过mongodb支持json格式的输入,这里“曲线救国 ” 下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> pymongo</span> </li> <li class="L1"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> json</span> </li> <li class="L2"> <span class="pln">conn </span><span class="pun">=</span><span class="pln"> pymongo</span><span class="pun">.</span><span class="typ" style="font-weight:bold;">Connection</span><span class="pun">(</span><span class="str">'127.0.0.1'</span><span class="pun">,</span><span class="pln"> port</span><span class="pun">=</span><span class="lit">27017</span><span class="pun">)</span> </li> <li class="L3"> <span class="pln">df </span><span class="pun">=</span><span class="pln"> ts</span><span class="pun">.</span><span class="pln">get_tick_data</span><span class="pun">(</span><span class="str">'600848'</span><span class="pun">,</span><span class="pln">date</span><span class="pun">=</span><span class="str">'2014-12-22'</span><span class="pun">)</span> </li> <li class="L4"> <span class="pln">conn</span><span class="pun">.</span><span class="pln">db</span><span class="pun">.</span><span class="pln">tickdata</span><span class="pun">.</span><span class="pln">replace</span><span class="pun">(</span><span class="pln">json</span><span class="pun">.</span><span class="pln">loads</span><span class="pun">(</span><span class="pln">df</span><span class="pun">.</span><span class="pln">to_json</span><span class="pun">(</span><span class="pln">orient</span><span class="pun">=</span><span class="str">'records'</span><span class="pun">)))</span> </li> </ol> |
四、数据绘图
上面都是拾人牙慧的东西,这里来一点点干货。由 tushare 处理输出的格式已经经过整形,所以可以结合pandas模块可以很好的进行汇图,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L1"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> pandas </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> pd</span> </li> <li class="L2"> <span class="pln">df</span><span class="pun">=</span><span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600415'</span><span class="pun">,</span><span class="pln">start</span><span class="pun">=</span><span class="str">'2015-04-01'</span><span class="pun">,</span><span class="pln">end</span><span class="pun">=</span><span class="str">'2015-06-18'</span><span class="pun">)</span> </li> <li class="L3"> <span class="com"># 所有的结果汇图</span> </li> <li class="L4"> <span class="pln">df</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">()</span> </li> <li class="L5"> <span class="com"># 只将stock最高值进行汇图</span> </li> <li class="L6"> <span class="pln">df</span><span class="pun">.</span><span class="pln">high</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">()</span> </li> <li class="L7"> <span class="com"># 指定绘图的四个量,并指定线条颜色</span> </li> <li class="L8"> <span class="kwd" style="font-weight:bold;">with</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">plot_params</span><span class="pun">.</span><span class="pln">use</span><span class="pun">(</span><span class="str">'x_compat'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd" style="font-weight:bold;">True</span><span class="pun">):</span> </li> <li class="L9"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">open</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">color</span><span class="pun">=</span><span class="str">'g'</span><span class="pun">)</span> </li> <li class="L0"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">close</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">color</span><span class="pun">=</span><span class="str">'y'</span><span class="pun">)</span> </li> <li class="L1"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">high</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">color</span><span class="pun">=</span><span class="str">'r'</span><span class="pun">)</span> </li> <li class="L2"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">low</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">color</span><span class="pun">=</span><span class="str">'b'</span><span class="pun">)</span> </li> <li class="L3"> <span class="com"># 指定绘图的长宽尺度及背景网格</span> </li> <li class="L4"> <span class="kwd" style="font-weight:bold;">with</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">plot_params</span><span class="pun">.</span><span class="pln">use</span><span class="pun">(</span><span class="str">'x_compat'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd" style="font-weight:bold;">True</span><span class="pun">):</span> </li> <li class="L5"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">high</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">color</span><span class="pun">=</span><span class="str">'r'</span><span class="pun">,</span><span class="pln">figsize</span><span class="pun">=(</span><span class="lit">10</span><span class="pun">,</span><span class="lit">4</span><span class="pun">),</span><span class="pln">grid</span><span class="pun">=</span><span class="str">'on'</span><span class="pun">)</span> </li> <li class="L6"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">low</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">color</span><span class="pun">=</span><span class="str">'b'</span><span class="pun">,</span><span class="pln">figsize</span><span class="pun">=(</span><span class="lit">10</span><span class="pun">,</span><span class="lit">4</span><span class="pun">),</span><span class="pln">grid</span><span class="pun">=</span><span class="str">'on'</span><span class="pun">)</span> </li> </ol> |
上面绘制了四个图,这里只选取第四张图具体可以看下效果:
默认上面的方法,只会输出图片,无法保存图片,所以可以通过matplotlib模块的savefig函数保存图片到指定的位置,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<ol class="linenums" style="margin-left:0px;"> <li class="L0"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> matplotlib</span> </li> <li class="L1"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> tushare </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> ts</span> </li> <li class="L2"> <span class="kwd" style="font-weight:bold;">import</span><span class="pln"> pandas </span><span class="kwd" style="font-weight:bold;">as</span><span class="pln"> pd</span> </li> <li class="L3"> <span class="pln">fig </span><span class="pun">=</span><span class="pln"> matplotlib</span><span class="pun">.</span><span class="pln">pyplot</span><span class="pun">.</span><span class="pln">gcf</span><span class="pun">()</span> </li> <li class="L4"> <span class="pln">df</span><span class="pun">=</span><span class="pln">ts</span><span class="pun">.</span><span class="pln">get_hist_data</span><span class="pun">(</span><span class="str">'600415'</span><span class="pun">,</span><span class="pln">start</span><span class="pun">=</span><span class="str">'2015-04-01'</span><span class="pun">,</span><span class="pln">end</span><span class="pun">=</span><span class="str">'2015-06-18'</span><span class="pun">)</span> </li> <li class="L5"> <span class="kwd" style="font-weight:bold;">with</span><span class="pln"> pd</span><span class="pun">.</span><span class="pln">plot_params</span><span class="pun">.</span><span class="pln">use</span><span class="pun">(</span><span class="str">'x_compat'</span><span class="pun">,</span><span class="pln"> </span><span class="kwd" style="font-weight:bold;">True</span><span class="pun">):</span> </li> <li class="L6"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">high</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">color</span><span class="pun">=</span><span class="str">'r'</span><span class="pun">,</span><span class="pln">figsize</span><span class="pun">=(</span><span class="lit">10</span><span class="pun">,</span><span class="lit">4</span><span class="pun">),</span><span class="pln">grid</span><span class="pun">=</span><span class="str">'on'</span><span class="pun">)</span> </li> <li class="L7"> <span class="pln"> df</span><span class="pun">.</span><span class="pln">low</span><span class="pun">.</span><span class="pln">plot</span><span class="pun">(</span><span class="pln">color</span><span class="pun">=</span><span class="str">'b'</span><span class="pun">,</span><span class="pln">figsize</span><span class="pun">=(</span><span class="lit">10</span><span class="pun">,</span><span class="lit">4</span><span class="pun">),</span><span class="pln">grid</span><span class="pun">=</span><span class="str">'on'</span><span class="pun">)</span> </li> <li class="L8"> <span class="pln"> fig</span><span class="pun">.</span><span class="pln">savefig</span><span class="pun">(</span><span class="str">'F:/graph.png'</span><span class="pun">)</span> </li> </ol> |
matplotlib模块绘图部分可以参看如下页面: