Tushare Pro 新版發布,數據更穩定質量更好,歡迎注冊使用。

數據存儲模塊主要是引導用戶将數據保存在本地磁盤或數據庫服務器上,便于後期的量化分析和回測使用,在以文件格式保存在電腦磁盤的方式上,調用的是pandas本身自帶的方法,此處會羅列常用的參數和說明,另外,也會通過實例,展示操作的方法。在存入DataBase方面,也提供了簡單的處理方式,本文将給出簡單的python代碼。

  • 保存為csv格式
  • 保存為Excel格式
  • 保存為HDF5文件格式
  • 保存為JSON格式
  • 存入MySQL等關系型數據庫
  • 存入NoSQL數據庫

CSV文件

pandas的DataFrame和Series對象提供了直接保存csv文件格式的方法,通過參數設定,輕松将數據内容保存在本地磁盤。

常用參數說明:

  • path_or_buf: csv文件存放路徑或者StringIO對象
  • sep : 文件内容分隔符,默認為,逗号
  • na_rep: 在遇到NaN值時保存為某字符,默認為’‘空字符
  • float_format: float類型的格式
  • columns: 需要保存的列,默認為None
  • header: 是否保存columns名,默認為True
  • index: 是否保存index,默認為True
  • mode : 創建新文件還是追加到現有文件,默認為新建
  • encoding: 文件編碼格式
  • date_format: 日期格式

注:在設定path時,如果目錄不存在,程序會提示IOError,請先确保目錄已經存在于磁盤中。

調用方法:

import tushare as ts

df = ts.get_hist_data('000875')
#直接保存
df.to_csv('c:/day/000875.csv')

#選擇保存
df.to_csv('c:/day/000875.csv',columns=['open','high','low','close'])

追加數據的方式:

某些時候,可能需要将一些同類數據保存在一個大文件中,這時候就需要将數據追加在同一個文件裡,簡單舉例如下:

import tushare as ts
import os

filename = 'c:/day/bigfile.csv'
for code in ['000875', '600848', '000981']:
    df = ts.get_hist_data(code)
    if os.path.exists(filename):
        df.to_csv(filename, mode='a', header=None)
    else:
        df.to_csv(filename)

【注:如果是不考慮header,直接df.to_csv(filename, mode=’a’)即可,否則,每次循環都會把columns名稱也append進去】

Excel文件

pandas将數據保存為MicroSoft Excel文件格式。

常用參數說明:

  • excel_writer: 文件路徑或者ExcelWriter對象
  • sheet_name:sheet名稱,默認為Sheet1
  • sep : 文件内容分隔符,默認為,逗号
  • na_rep: 在遇到NaN值時保存為某字符,默認為’‘空字符
  • float_format: float類型的格式
  • columns: 需要保存的列,默認為None
  • header: 是否保存columns名,默認為True
  • index: 是否保存index,默認為True
  • encoding: 文件編碼格式
  • startrow: 在數據的頭部留出startrow行空行
  • startcol :在數據的左邊留出startcol列空列

調用方法:

import tushare as ts

df = ts.get_hist_data('000875')
#直接保存
df.to_excel('c:/day/000875.xlsx')

#設定數據位置(從第3行,第6列開始插入數據)
df.to_excel('c:/day/000875.xlsx', startrow=2,startcol=5)

HDF5文件

pandas利用PyTables包将數據保存為HDF5格式的文件。需要确認的是,運行時PyTables包的版本需要 >=3.0.0。

常用參數說明:

  • path_or_buf: 文件路徑或者HDFStore對象
  • key:HDF5中的group标識
  • mode : 包括 {‘a’追加, ‘w’寫入, ‘r’隻讀, ‘r+’等同于a但文件必須已經存在}, 默認是 ‘a’
  • format:‘fixed(f)|table(t)’,默認‘fixed’,f适合快速讀寫,不能追加數據 t适合從文件中查找和選擇數據
  • append: 适用于table(t)模式追加數據,默認Flase
  • complevel: 壓縮級别1-9, 默認0
  • complib: 壓縮類型{‘zlib’, ‘bzip2’, ‘lzo’, ‘blosc’, None}默認None

調用方法:

import tushare as ts

df = ts.get_hist_data('000875')
df.to_hdf('c:/day/hdf.h5','000875')

方法2:

import tushare as ts

df = ts.get_hist_data('000875')
store = HDFStore('c:/day/store.h5')
store['000875'] = df
store.close()

JSON文件

pandas生成Json格式的文件或字符串。

常用參數說明:

  • path_or_buf: json文件存放路徑
  • orient:json格式順序,包括columns,records,index,split,values,默認為columns
  • force_ascii: 将字符轉ASCII,默認為True

調用方法:

import tushare as ts

df = ts.get_hist_data('000875')
df.to_json('c:/day/000875.json',orient='records')

#或者直接使用
print df.to_json(orient='records')

MySQL數據庫

pandas提供了将數據便捷存入關系型數據庫的方法,在新版的pandas中,主要是已sqlalchemy方式與數據建立連接,支持MySQL、Postgresql、Oracle、MS SQLServer、SQLite等主流數據庫。本例以MySQL數據庫為代表,展示将獲取到的股票數據存入數據庫的方法,其他類型數據庫請參考sqlalchemy官網文檔的create_engine部分。

常用參數說明:

  • name:表名,pandas會自動創建表結構
  • con:數據庫連接,最好是用sqlalchemy創建engine的方式來替代con
  • flavor:數據庫類型 {‘sqlite’, ‘mysql’}, 默認‘sqlite’,如果是engine此項可忽略
  • schema:指定數據庫的schema,默認即可
  • if_exists:如果表名已存在的處理方式 {‘fail’, ‘replace’, ‘append’},默認‘fail’
  • index:将pandas的Index作為一列存入數據庫,默認是True
  • index_label:Index的列名
  • chunksize:分批存入數據庫,默認是None,即一次性全部寫人數據庫
  • dtype:設定columns在數據庫裡的數據類型,默認是None

調用方法:

from sqlalchemy import create_engine
import tushare as ts

df = ts.get_tick_data('600848', date='2014-12-22')
engine = create_engine('mysql://user:passwd@127.0.0.1/db_name?charset=utf8')

#存入數據庫
df.to_sql('tick_data',engine)

#追加數據到現有表
#df.to_sql('tick_data',engine,if_exists='append')

MongoDB

pandas目前沒有提供直接存入MongoDB的方法,不過依然很簡單,而且方式很多,用戶可根據自身的業務特點選擇存儲的結構方式。

使用方法:

import pymongo
import json

conn = pymongo.Connection('127.0.0.1', port=27017)
df = ts.get_tick_data('600848',date='2014-12-22')

conn.db.tickdata.insert(json.loads(df.to_json(orient='records')))