5行搞定全股票池日線本地?cái)?shù)據(jù)庫(kù)
5行不夠的話就再多幾行
那么多數(shù)據(jù)狗热,還是放在數(shù)據(jù)庫(kù)里面吧
有時(shí)候想要簡(jiǎn)單對(duì)股票日線級(jí)別數(shù)據(jù)進(jìn)行一點(diǎn)分析瑟枫,然而當(dāng)數(shù)據(jù)量特別大,比如說全股票池的時(shí)候慷妙,用tushare提供的各種API接口去一一拉取,就只能祈禱自己的網(wǎng)速比較給力了膝擂,不然各種url open timeout讓你懷疑人生。這個(gè)時(shí)候架馋,把數(shù)據(jù)保存到本地就顯得十分有必要了。
作為一名小白叉寂,其實(shí)我是想把股票數(shù)據(jù)保存成csv的,什么to_csv,read_csv,各種輕松寫意。然而局服,保存3000多份文件,實(shí)在有點(diǎn)暗搓搓驳遵。還是老老實(shí)實(shí)研究一下怎么放到數(shù)據(jù)庫(kù)里面比較靠譜。
最終堤结,黨組織的決定是,使用MySQL作為數(shù)據(jù)庫(kù)竞穷,MySQLdb作為python和MySQL之前的橋梁。
安裝MySQL和MySQLdb頗費(fèi)周折来庭,但是這里略去不表,直接進(jìn)入正題月弛。
這里就是正題
from sqlalchemy import create_engine
import pandas as pd
import tushare as ts
import MySQLdb
basic = ts.get_stock_basics()
basic.head()
basic.index
Index([u'603157', u'002901', u'300570', u'603321', u'603386', u'300610',
u'002893', u'603559', u'002898', u'603648',
...
u'603103', u'601086', u'600806', u'600432', u'300709', u'300708',
u'300707', u'300706', u'300705', u'300654'],
dtype='object', name=u'code', length=3394)
p = ts.get_k_data('600806', start='2017-01-01')
engine = create_engine('mysql+mysqldb://root:12345@localhost/test')
p.to_sql('600806', engine)
data = pd.read_sql_table('600806', engine)
data.head()
中間啰嗦幾句
- create_engine 的用法帽衙,dialect+driver://username:password@host:port/database
- 讀寫數(shù)據(jù)庫(kù)都沒問題厉萝,現(xiàn)在只要對(duì)basic的index(股票代碼)進(jìn)行遍歷,把股票的代碼作為table name榨崩,k_data數(shù)據(jù)存入其中,本地的數(shù)據(jù)就可以建立起來了
- 可以每天或者每周update一下這個(gè)數(shù)據(jù)庫(kù)
engine = create_engine('mysql+mysqldb://root:12345@localhost/stock')
for code in basic.index:
p = ts.get_k_data(code, start='2017-01-01')
p.to_sql(code, engine)
好了翩剪,股票日線數(shù)據(jù)本地化大功告成。