tushare使⽤教程(附代码)
tushare安装
Tushare是⼀个免费、开源的python财经数据接⼝包。主要实现对股票等⾦融数据从数据采集、清洗加⼯ 到 数据存储的过程,数据多样易获取,在数据分析,机器学习,股票预测等领域都可以被⼴泛的应⽤。从tushare获取到的数据为dataframe格式,⽆需重新对数据进⾏清洗,可以直接将数据存储⾄csv或者数据库中。
tushare可以作为⼀个第三⽅库安装到python环境中。建议通过anaconda来安装python(anaconda可以通过创建虚拟的python环境,避免受其他版本的影响)。可以通过pip进⾏安装
pip install tushare
(如下载过慢可以将切换下载镜像⾄国内镜像)
tushare使⽤(将数据存储到mysql中)
1、⾸先,通过注册⽤户的token来获得tushare权限。
#获取使⽤接⼝
def get_token():
ts.set_token("2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
pro=ts.pro_api()
return pro
2、接着,通过获取的tushare的api[ts.pro_api()]来调⽤t。这⾥以获取股票的⽇常信息为例。
##获取数据列表
def get_data_list(cursor,sql,conn):
res=cursor.fetchall()
connmit()
ts_codes_list=list(res)
ts_codes_list=[",".join(list(x)) for x in ts_codes_list]
return ts_codes_list
##获取数据
def get_data(ts_codes_list,pro):
daily=pd.DataFrame(columns=["ts_code","trade_date","open","close","change","pre_close"]) ##获取相应的列信息
for i in range(0,len(ts_codes_list),100): ##由于积分的限制,积分较低情况吓,每次只能请求100条数据。
j=i+100
if(j>=len(ts_codes_list)):
j=len(ts_codes_list)
name=",".join(ts_codes_list[i:j])
part= pro.daily(ts_code=name, trade_date=get_date())[["ts_code","trade_date","open","close","change","pre_close"]]
at([daily,part],ignore_index=True) ##对每次去除的数据进⾏拼装合并
daily["trade_date"]=daily["trade_date"].apply(get_date_format)
return daily
3、将数据存储⾄数据库中,由于提取出的tushare股票数据应经过清洗,所以可以直接存储⾄数据库中。
def to_mysql_pro(data):
#建⽴连接,username替换为⽤户名,passwd替换为密码,test替换为数据库名
#conn = create_engine('mysql+pymysql://root:NEULYP@39.99.252.203/JZ_QM',encoding='utf8')
conn = create_engine('mysql+pymysql://root:123@localhost/jinzheng',encoding='utf8')
#写⼊数据,table_name为表名,‘replace’表⽰如果同名表存在就替换掉
pd._sql(data, "pro_yield", conn, if_exists='append',index=False)
本程序提取的最后存储的数据格式为:
要想对股票数据更好地进⾏处理可以通过numpy库,与pandas库对数据进⾏处理与切⽚。通过sqlalchemy,pumysql来对数据进⾏存储。
要想关注更多tushare的使⽤情况,可以加⼊Tushare⾼校和机构⽤户 (849918679),或者加⼊⾼级⽤户QQ(1038535887)与更多伙伴⼀起交流。
附完整代码:(,才可完整运⾏)
import tushare as ts
import pandas as pd
import datetime
from sqlalchemy import create_engine
from decimal import Decimal
import pymysql
import warnings
warnings.filterwarnings("ignore")
#获取使⽤接⼝
def get_token():
ts.set_token("2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
pro=ts.pro_api()
return pro
def get_date():
now_time=w()
date=(now_time+datetime.timedelta(days=-1)).strftime("%Y%m%d") #获取后⼀天
return date
def start_con():
conn = t(
host="localhost",
user="root",password="123",
mysql社区版国内镜像下载database="jinzheng",
charset="utf8")
cursor = conn.cursor()
return conn,cursor
def end_con(cursor,conn):
cursor.close()
conn.close()
##获取数据列表
def get_data_list(cursor,sql,conn):
res=cursor.fetchall()
connmit()
ts_codes_list=list(res)
ts_codes_list=[",".join(list(x)) for x in ts_codes_list]
return ts_codes_list
##获取数据
##获取数据
def get_data(ts_codes_list,pro):
daily=pd.DataFrame(columns=["ts_code","trade_date","open","close","change","pre_close"])
for i in range(0,len(ts_codes_list),100):
j=i+100
if(j>=len(ts_codes_list)):
j=len(ts_codes_list)
name=",".join(ts_codes_list[i:j])
part= pro.daily(ts_code=name, trade_date=get_date())[["ts_code","trade_date","open","close","change","pre_close"]]
at([daily,part],ignore_index=True)
daily["trade_date"]=daily["trade_date"].apply(get_date_format)
return daily
##对数据进⾏筛选
def handle_data(daily):
daily["daily_yield_radio"]=daily['change']/daily['pre_close']
daily["daily_yield_radio"].apply(get_decimal)
daily=daily[['ts_code','trade_date','close','daily_yield_radio']]
daily['gmt_create']=w()
daily['gmt_modified']=w()
return daily
def get_decimal(x):
return round(Decimal(x),3)
def get_fd_data(ts_codes_list):
daily=pd.DataFrame(columns=["ts_code","trade_date","open","close","change","pre_close"])
for i in ts_codes_list:
part= pro.fund_daily(ts_code=i, trade_date=get_date())[["ts_code","trade_date","open","close","change","pre_close"]]
at([daily,part],ignore_index=True)
daily["trade_date"]=daily["trade_date"].apply(get_date_format)
return daily
def to_mysql_pro(data):
#建⽴连接,username替换为⽤户名,passwd替换为密码,test替换为数据库名
#conn = create_engine('mysql+pymysql://root:NEULYP@39.99.252.203/JZ_QM',encoding='utf8')
conn = create_engine('mysql+pymysql://root:123@localhost/jinzheng',encoding='utf8')
#写⼊数据,table_name为表名,‘replace’表⽰如果同名表存在就替换掉
pd._sql(data, "pro_yield", conn, if_exists='append',index=False)
def get_date_format(x):
return x[:4]+"/"+x[4:6]+"/"+x[6:]
def update_income(daily,state):
daily["change"]=daily["change"]/daily["pre_close"]
daily=daily[["change","trade_date","close","open","ts_code"]]
daily["is_share"]=state
daily["gmt_create"]=datetime.datetime.strftime(w(), '%Y-%m-%d %H:%M:%S')
daily["gmt_modified"]=datetime.datetime.strftime(w(), '%Y-%m-%d %H:%M:%S')
for j,i in daily.iterrows():
sql="update product_library_income SET pro_income_open=%s,pro_income_close=%s,pro_income_daily_radio=%s,is_share=%s,gmt_modified=%s,pro_inc # sql="INSERT INTO product_library_income(pro_income_ts_code,pro_income_open,pro_income_close,pro_income_change,is_share,gmt_create,gmt_mo ute(sql,(i['pro_income_open'],i['pro_income_close'],i['pro_income_daily_radio'],state,i['gmt_modified'],i['pro_income_trade_date'],i['pro_income_ts connmit()
if __name__=="__main__":
sql_fd_share='SELECT fd_share_ts_code FROM fd_share_info'
sql_share='SELECT share_ts_code FROM share_info'
pro=get_token()
conn,cursor=start_con()
share_list=get_data_list(cursor,sql_share,conn)
share_data=get_data(share_list,pro)
pro_yield=handle_data(share_data)
if(pro_yield.shape[0]!=0):
if(pro_yield.shape[0]!=0):
#更新pro_yield
to_mysql_pro(pro_yield)
#更新pro_income
update_income(share_data,1)
print("运⾏了")
else:
print("今⽇⽆股票待更新的数据")
share_list_fd=get_data_list(cursor,sql_fd_share,conn) fd_share_data=get_fd_data(share_list_fd)
fd_share_yield=handle_data(fd_share_data)
if(fd_share_yield.shape[0]!=0):
# 更新pro_yield
to_mysql_pro(fd_share_yield)
# 更新pro_income
update_income(fd_share_data,0)
print("运⾏了")
else:
print("今⽇⽆基⾦待更新的数据")
end_con(cursor,conn)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论