tushare安装

Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集清洗加工 到 数据存储的过程,数据多样易获取,在数据分析,机器学习,股票预测等领域都可以被广泛的应用。从tushare获取到的数据为dataframe格式,无需重新对数据进行清洗,可以直接将数据存储至csv或者数据库中。

官网链接如下:https://tushare.pro/。其包括股票,基金,期权,债券,期货等多种数据。数据种类如下:https://tushare.pro/document/1?doc_id=108

tushare可以作为一个第三方库安装到python环境中。建议通过anaconda来安装python(anaconda可以通过创建虚拟的python环境,避免受其他版本的影响)。可以通过pip进行安装

pip  install tushare

点击查看anaconda详细安装教程。(如下载过慢可以将切换下载镜像至国内镜像)

tushare使用(将数据存储到mysql中)

1、首先,通过注册用户的token来获得tushare权限。

#获取使用接口
def get_token():ts.set_token("2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")pro=ts.pro_api()return pro

2、接着,通过获取的tushare的api[ts.pro_api()]来调用tushare数据接口。这里以获取股票的日常信息为例。

##获取数据列表
def get_data_list(cursor,sql,conn):cursor.execute(sql)res=cursor.fetchall()conn.commit()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+100if(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"]]daily=pd.concat([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.io.sql.to_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 prodef get_date():now_time=datetime.datetime.now()date=(now_time+datetime.timedelta(days=-1)).strftime("%Y%m%d") #获取后一天return datedef start_con():conn = pymysql.connect(host="localhost",user="root",password="123",database="jinzheng",charset="utf8")cursor = conn.cursor() return conn,cursordef end_con(cursor,conn):cursor.close()conn.close()##获取数据列表
def get_data_list(cursor,sql,conn):cursor.execute(sql)res=cursor.fetchall()conn.commit()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+100if(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"]]daily=pd.concat([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.columns=['pro_ts_code','pro_trade_date','pro_yield_money','daily_yield_radio']daily['gmt_create']=datetime.datetime.now()daily['gmt_modified']=datetime.datetime.now()return dailydef 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"]]daily=pd.concat([daily,part],ignore_index=True)daily["trade_date"]=daily["trade_date"].apply(get_date_format)return dailydef 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.io.sql.to_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.columns=["pro_income_daily_radio","pro_income_trade_date","pro_income_close","pro_income_open","pro_income_ts_code"]daily["is_share"]=statedaily["gmt_create"]=datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')daily["gmt_modified"]=datetime.datetime.strftime(datetime.datetime.now(), '%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_income_trade_date=%s WHERE pro_income_ts_code=%s"# sql="INSERT INTO  product_library_income(pro_income_ts_code,pro_income_open,pro_income_close,pro_income_change,is_share,gmt_create,gmt_modified) VALUES(%s,%s,%s,%s,%s,%s,%s)"cursor.execute(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_code']))conn.commit()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):#更新pro_yieldto_mysql_pro(pro_yield)#更新pro_incomeupdate_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_yieldto_mysql_pro(fd_share_yield)
#         更新pro_incomeupdate_income(fd_share_data,0)print("运行了")else:print("今日无基金待更新的数据")end_con(cursor,conn)

tushare使用教程(附代码)相关推荐

  1. PyTorch 模型训练实用教程(附代码)

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx PyTorch 能在短时间内被众多研究人员和工程师接受并推崇是因为其有着诸多优点,如采用 Py ...

  2. Gmsh剖三维网格教程附代码

    文章目录 前言 一.程序代码 二.程序结果 1. 带有点标号的结果图 2. 没有点标号的结果图 三.总结 前言 前面写过三篇关于Gmsh的教程: 有限元剖网格之Gmsh安装与使用入门 Gmsh剖一维网 ...

  3. uniapp获取手机号(详细教程附代码)

    uniapp获取手机号(详细教程附代码) 一.获取code 二.通过code获取获取openId 和 session_key 三.让用户授权(同意后需要对数据解密) 个人小程序不能使用这个功能,必须是 ...

  4. 【目标检测】基于yolov3的血细胞检测和计数(无bug教程+附代码+数据集)

    多的不说,少的不唠,先看检测效果图: 共检测三类:红细胞RBC.白细胞WBC.血小板Platelets Hello,大家好,我是augustqi.今天给大家带来的保姆级教程是:基于yolov3的血细胞 ...

  5. ROS项目开发实战(三)——使用QT进行ROS的GUI界面设计(详细教程附代码!!!)

    序 本篇博客主要介绍怎么使用qt对ros进行gui设计与调试,包括使用列表视图显示ROS话题发布与接收的消息,点击QT按钮按钮进行ros消息的发布. 在阅读本文之前没有安装QT与配置环境可以参考博文: ...

  6. Flex 3编程入门级教程附代码下载

    <script type="text/javascript"> </script> <script type="text/javascrip ...

  7. 11种 Matplotlib 科研论文图表教程(附代码)

    Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形.通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图, ...

  8. ❤️自动化-文件路径管理-详细教程附代码⚡

    项目路径管理,你也可以理解为路径参数化.便于统一管理,不至于随着项目越来越大,功能越来越多,还需要一个个py文件打开寻找.直接找到对应的统一的路径管理文件,查阅进行增删改即可.

  9. python没有代码提示怎么设置_Python Kite 使用教程 轻量级代码提示

    1: 概述 今天升级annacoda 插件 spyder (4.0.0 )的时候 提示安装kite ,这是什么玩意? 下载下来试一试? 原来:就是一个代码提示插件.. 说白了" 就是让开发者 ...

最新文章

  1. CentOS yum 源的配置与使用
  2. Windows保护模式学习笔记(五)—— 任务段任务门
  3. Bing搜索核心技术BitFunnel原理
  4. python计算面积折线图_Python交互图表可视化Bokeh:4. 折线图| 面积图
  5. python数据结构之字典(未完成)
  6. WSDM Cup 2019自然语言推理任务获奖解题思路
  7. 计算机网络项目——最小网元设计(阶段二)
  8. java web 手机验证_JAVA-WEB,好知网,登录注册,手机验证
  9. 拷贝构造函数——防篡改
  10. debian 配置linuxptp 软件时间戳
  11. 常用评价指标及其Python实现
  12. 从零开始的数模学习(5):TOPSIS法(评价类模型)
  13. 以管理员身份进入linux,ubuntu 以管理员身份运行程序
  14. 工业4.0的网络技术(TSN)
  15. 数据压缩算法—LZ77 vs LZ78
  16. android圆环头像,Android实现带圆环的圆形头像
  17. 手机总是自动重启怎么处理
  18. 超级计算机排行榜历年,历代游戏主机浮点运算能力排行榜 究竟谁才是真正的性能怪兽...
  19. SpringBoot-使用分页插件(PageHelper)
  20. SAP物料货架寿命管理

热门文章

  1. 毕设 计算机 硬件相关,计算机系统维护_毕设论文.doc
  2. 上海迪士尼盛大开幕 高德地图带你玩转迪士尼
  3. React使用axios的坑:每次都要请求两次,而且前后端相同配置,有的url可以,有的确不可以
  4. book review----Philosophical Issues in Tourism (Aspects of Tourism)
  5. java使用poi导出ppt图表——环形图/空心饼图
  6. xargs笔记——xargs和mv配合
  7. atmel c keil 包_Atmel SAM D21开发板试用心得 ——利用Keil5,全速运行
  8. 完美正方形(DFS 暴力搜索)
  9. 小米盒子3s刷机为国际版系统android TV 8.0
  10. OpenCV-Python图形图像处理:split通道拆分和数组矩阵访问通道