天天看點

tushare股票清單mysql_量化交易的利器----tushare(九)資料存儲

69.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進去】

70.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)

71.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()

72.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')

73.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:[email protected]/db_name?charset=utf8')

#存入資料庫

df.to_sql('tick_data',engine)

#追加資料到現有表

#df.to_sql('tick_data',engine,if_exists='append')

74.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')))