基于tushare的股票数据构建1

基于tushare的股票数据构建<一>

tushare中提供了很多非常优秀的数据结构,但是并不是所有的数据都对自己有用,这里需要进行构建自己的数据库以方便后续进行数据建模

tushare数据

tushare是完全免费的一个数据源,不只是有股票数据,还有很多期货数据,有着和谐的社区,为了防止有人恶意的申请接口,造成数据拥堵,tushare采用的是注册账号的方式,注册完账号后生成自己的token,之后接口申请的时候带上token就能获取数据。

注册地址:https://tushare.pro/register?reg=261052

积分制度:为了促进维护tushare社区,采用的是积分制度,积分越高具有的权限越大,不过通常注册后送的积分就能够获取到足够的信息了,积分永不消失

数据分类

本次只处理两种类型的数据,一种是基于季度更新数据,另外一种是公司的基本信息数据,进行数据整合与归类

按照季度进行更新的数据主要是关于很多季度报的信息数据,公司的基本信息数据大多都是不怎么变更的信息,比如上市公司所属行业,公司董事等信息。

主要逻辑

数据都是基于tushare上的接口,比如利润表,资产负债表等

前期准备工作:设计好mysql数据库

1从tushare上获取到需要的数据信息

2对数据进行清洗,变换成需要的数据类型等

3将信息整合起来进行存储

需要注意的是单纯的存储信息是比较容易的,但是自己的数据库需要保证信息的准确性与即时性,所以需要对信息进行更新

存储并非一次促成的,可能存储断点续存的需求,所以需要对重复数据进行识别与判定

数据规范表

字段非常多,数据量很大,需要进行数据归类,具有相似结构的数据进行归类存储,这里需要自己事先设计好数据规范表,方便以后进行查询与更改

一下给出我自己的数据规范表,这也是mysql数据的设计方式

按报表数据整合表:这个表是根据数据更新周期为季度的的整合数据,我认为这些数据对我的模型有用
通用字段

  1. 股票代码(ts_code)
    ts_code
  2. 报告日期(end_date)
    report_date
  3. 交易所(jys)
    jys
    财务数据
    主营业务构成
  4. 主营业务来源(bz_item)
    bz_item
  5. 主营业务收入(bz_sales)
    bz_sales
  6. 主营业务利润(bz_profit)
    bz_profit
  7. 主营业务成本(bz_cost)
    bz_cost
  8. 主营业务构成是否有数据(if_have_zyywgc)
    if_have_zyywgc,1表示有,0表示无
    利润表
  9. 基本每股收益(basic_eps)
    basic_eps
  10. 稀释每股收益(diluted_eps)
diluted_eps
  1. 营业总收入(total_revenue)
total_revenue
  1. 营业收入(revenue)
revenue
  1. 营业总成本(total_cogs)
total_cogs
  1. 营业支出(oper_exp)
oper_exp
  1. 营业利润(operate_profit)
operate_profit
  1. 利润总额(total_profit)
total_profit
  1. 所得税费用(income_tax)
income_tax
  1. 净利润-含少数股东损益(n_income)
n_income
  1. 净利润-不含少数股东损益(n_income_attr_p)
n_income_attr_p
  1. 年初未分配利润(undist_profit)
undist_profit
  1. 可分配利润(distable_profit)
distable_profit
  1. 利润表是否有数据(if_have_lrb)
if_have_lrb,1表示有,0表示无
资产负债表
  1. 末期总股本(total_share)
total_share
  1. 为未分配利润(undistr_porfit)
undistr_porfit
  1. 货币资金(money_cap)
money_cap
  1. 应收账款(accounts_receiv)
accounts_receiv
  1. 固定资产(fix_assets)
fix_assets
  1. 无形资产(intan_assets)
intan_assets
  1. 研发支出(r_and_d)
r_and_d
  1. 商誉(goodwill)
goodwill
  1. 资产总计(total_assets)
total_assets
  1. 应付账款(acct_payable)
acct_payable
  1. 应交税费(taxes_payable)
taxes_payable
  1. 资产负债表是否有数据(if_have_zcfzb)
if_have_zcfzb,1表示有,0表示无
现金流量表
  1. 净利润(net_profit)
net_profit
  1. 支付的各项税费(c_paid_for_taxes)
c_paid_for_taxes
  1. 处置固定资产、无形资产、其他长期资产收回的现金净额(n_recp_disp_fiolta)
n_recp_disp_fiolta
  1. 处置子公司及其他营业单位收到的现金净额(n_recp_disp_sobu)
n_recp_disp_sobu
  1. 投资支付现金(c_paid_invest)
c_paid_invest
  1. 取得子公司、及其他营业单位支付的现金净额(n_disp_subs_oth_biz)
n_disp_subs_oth_biz
  1. 汇率变动对现金的影响(eff_fx_flu_cash)
eff_fx_flu_cash
  1. 债务转为资本(conv_debt_into_cap)
conv_debt_into_cap
  1. 现金末期余额(end_bal_cash)
end_bal_cash
  1. 减现金初期余额(beg_bal_cash)
beg_bal_cash
  1. 现金流量表是否有数据(if_have_xjllb)
if_have_xjllb,1表示有,0表示无
市场参考数据
前十大股东
  1. 前十股东名(holder_name)
holder_name
  1. 前十持有数量(hold_amount)
hold_amount
  1. 持有比例(hold_ratio)
hold_ratio
  1. 前十大股东是否有数据(if_have_qsdgd)
if_have_qsdgd,1表示有,0表示无
前十大流通股东
  1. 流通股东名称(holder_name)
lt_holder_name
  1. 持有数量(hold_amount)
lt_hold_amount

  1. 持有比例(lt_hold_ratio)
lt_hold_ratio,数据源网页无法获取,后续计算处理

  1. 前十大流通股东是否有数据(if_have_ltqsdgd)
if_have_ltqsdgd,1表示有,0表示无
概念明细

  1. 股票名称(name)
name

  1. 概念id(id)
gn_id

  1. 概念名称(concept_name)
concept_name
  1. 概念股明细列表是否有数据(if_have_gngmxlb)
if_have_gngmxlb,1表示有,0表示无

以上是基于季度的数据整合,我通过多个接口获取我想要的信息

股票的基本信息也是需要的,比如某股票是属于哪个版块,哪个行业,哪些概念,董事,董秘等,这些都关系到选股的时候需要参考的信息

股票基本数据整合表
股票列表信息

  1. 股票代码(ts_code)
    ts_code
  2. 代码(symbol)
    symbol
  3. 名称(name)
    stock_name
  4. 所在地区(area)
    area
  5. 所属行业(industry)
    Industry
  6. 市场类型(market)
    market
  7. 上市时间(list_date)
    list_date
  8. 是否沪深港通标的(is_hs)
    is_hs,N表示否,H表示沪股通,S表示深沪通
    沪深股通成分股
  9. 沪深港通类型(hs_type)
    hs_type,SH上海,SZ深圳
  10. 纳入沪深港通时间(in_date)
    in_date
  11. 剔除沪深港通时间(out_date)
    out_date
  12. 是否沪深港通最新数据(is_new)
    is_new,1是,0否
  13. 沪深港通数据是否存在(if_have_hsgtcf)
    if_have_hsgtcf,1存在,0不存在
    上市公司基本信息
  14. 法人代表(chairman)
    chairman
  15. 总经理(manager)
    manager
  16. 董秘(secretary)
    secretary
  17. 注册资本(reg_capital)
    reg_capital
  18. 所在省份(province)
    province
  19. 所在城市(city)
    city
  20. 公司简介(introduction)
    introduction
  21. 员工人数(employees)
    employees
  22. 主要业务及产品(main_business)
    main_business
  23. 经营范围(business_scope)
    business_scope
  24. 是否存在上市公司基本信息(if_have_base_info)
    if_have_base_info
  25. 更新日期(up_date)
    up_date

数据获取前的mysql表格创建

mysql表格是基于自己设计的数据规范表而言的,这种一个mysql表57个字段,加上主键id共58个字段,至少我是记不清每个字段的含义以及字段名的,所以需要事先自己定好,并写好注释,方便以后自己查询与维护

CREATE TABLE `quarterly_list` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ts_code` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '股票代码',
  `report_date` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '报告日期',
  `jys` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '交易所',
  `bz_item` text CHARACTER SET utf8 COMMENT '主营业务来源',
  `bz_sales` text CHARACTER SET utf8 COMMENT '主营业务收入',
  `bz_profit` text CHARACTER SET utf8 COMMENT '主营业务利润',
  `bz_cost` text CHARACTER SET utf8 COMMENT '主营业务成本',
  `if_have_zyywgc` int(11) DEFAULT NULL COMMENT '主营业务构成是否有数据',
  `basic_eps` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '每股基本收益',
  `diluted_eps` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '稀释每股收益',
  `total_revenue` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '营业总收入',
  `revenue` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '营业收入',
  `total_cogs` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '营业总成本',
  `oper_exp` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '营业支出',
  `operate_profit` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '营业利润',
  `total_profit` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '利润总额',
  `income_tax` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '所得税费用',
  `n_income` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '净利润_含少数股东损益',
  `n_income_attr_p` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '净利润_不含少数股东损益',
  `undist_profit` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '年初未分配利润',
  `distable_profit` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '可分配利润',
  `if_have_lrb` int(11) DEFAULT NULL COMMENT '利润表是否有数据',
  `total_share` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '总股本',
  `undistr_porfit` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '未分配利润',
  `money_cap` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '货币资金',
  `accounts_receiv` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '应收账款',
  `fix_assets` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '固定资产',
  `intan_assets` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '无形资产',
  `r_and_d` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '研发支出',
  `goodwill` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '商誉',
  `total_assets` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '资产总计',
  `acct_payable` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '应付账款',
  `taxes_payable` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '应交税费',
  `if_have_zcfzb` int(11) DEFAULT NULL COMMENT '资产负债表是否有数据',
  `net_profit` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '净利润',
  `c_paid_for_taxes` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '支付的各项税费',
  `n_recp_disp_fiolta` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '处置固定资产、无形资产、其他长期资产收回的现金净额',
  `n_recp_disp_sobu` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '处置子公司及其他营业单位收到的现金净额',
  `c_paid_invest` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '投资支付金额',
  `n_disp_subs_oth_biz` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '取得子公司、及其他营业单位支付的现金净额',
  `eff_fx_flu_cash` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '汇率变动对现金的影响',
  `conv_debt_into_cap` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '债务转为资本',
  `end_bal_cash` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '现金末期余额',
  `beg_bal_cash` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '减现金初期余额',
  `if_have_xjllb` int(11) DEFAULT NULL COMMENT '现金流量表是否有数据',
  `holder_name` text CHARACTER SET utf8 COMMENT '前十股东',
  `hold_amount` text CHARACTER SET utf8 COMMENT '前十持有量',
  `hold_ratio` text CHARACTER SET utf8 COMMENT '持有比例',
  `if_have_qsdgd` int(11) DEFAULT NULL COMMENT '前十大股东是否有数据',
  `lt_holder_name` text CHARACTER SET utf8 COMMENT '流通股东名称',
  `lt_hold_amount` text CHARACTER SET utf8 COMMENT '流通股东持有量',
  `lt_hold_ratio` text CHARACTER SET utf8 COMMENT '流通股东持有比例',
  `if_have_ltqsdgd` int(11) DEFAULT NULL,
  `name_stock` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `gn_id` text CHARACTER SET utf8 COMMENT '概念id',
  `concept_name` text CHARACTER SET utf8 COMMENT '概念名称',
  `if_have_gngmxlb` int(11) DEFAULT NULL COMMENT '概念明细列表是否有数据',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

股票基本信息配置表

CREATE TABLE `stock_base_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ts_code` varchar(255) DEFAULT NULL COMMENT '股票标识',
  `symbol` varchar(255) DEFAULT NULL COMMENT '股票代码',
  `stock_name` varchar(255) DEFAULT NULL COMMENT '股票名称',
  `area` varchar(255) DEFAULT NULL COMMENT '所在地区',
  `industry` varchar(255) DEFAULT NULL COMMENT '所属行业',
  `market` varchar(255) DEFAULT NULL COMMENT '市场类型',
  `list_date` varchar(255) DEFAULT NULL COMMENT '上市时间',
  `is_hs` varchar(255) DEFAULT NULL COMMENT '是否沪深港通标的',
  `hs_type` varchar(255) DEFAULT NULL COMMENT '沪深港通类型',
  `in_date` varchar(255) DEFAULT NULL COMMENT '纳入沪深港通时间',
  `out_date` varchar(255) DEFAULT NULL COMMENT '剔除沪深港通时间',
  `is_new` varchar(255) DEFAULT NULL COMMENT '是否沪深港通最新数据',
  `if_have_hsgtcf` int(255) DEFAULT NULL COMMENT '沪深港通数据是否存在',
  `chairman` varchar(255) DEFAULT NULL COMMENT '法人代表',
  `manager` varchar(255) DEFAULT NULL COMMENT '总经理',
  `secretary` varchar(255) DEFAULT NULL COMMENT '董秘',
  `reg_capital` varchar(255) DEFAULT NULL COMMENT '注册资本',
  `province` varchar(255) DEFAULT NULL COMMENT '所在省份',
  `city` varchar(255) DEFAULT NULL COMMENT '所在城市',
  `introduction` text COMMENT '公司简介',
  `employees` varchar(255) DEFAULT NULL COMMENT '员工人数',
  `main_business` text COMMENT '主要业务及产品',
  `business_scope` text COMMENT '经营范围',
  `if_have_base_info` int(11) DEFAULT NULL COMMENT '是否存在上市公司基本信息',
  `up_date` date DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3617 DEFAULT CHARSET=utf8;

mysql表格设计完成

导包与配置

这里需要用到pndas进行数据处理,时间社会,tushare导入,下载配置,配置mysql的信息

import tushare as ts
import pandas as pd
from datetime import datetime
import pymysql

LINK_MYSQL = {
   
    'host': '127.0.0.1',
    'port': 3306,
    'user': 'root',
    'passwd': 'Python_123456',
    'charset': 'utf8',
    'db': 'stock',  # 自己的mysql库
}

ts.set_token('填写你自己的token')
pro = ts.pro_api()

不知道怎么获取token的可以直接进入到tushare主页里面的说明,或者参考本人的前一篇文章

需要定义一个判定函数,不是每次从接口中都返回自己期望的数据,有时候因为网络延迟等原因造成数据丢失也是很正常的,有时候别人本来就没有更新数据,当然返回的是空所以需要对获取的数据进行判定

# 定义对获取数据进行判定的函数
def judge_data(data):
    # 判定数据是否为空 如果为空则返回false
    return False if len(data) == 0 else True

用于判定返回的data数据数据是否存储

按季度更新的信息整合

主营业务构成

通过主营业务构成接口进行数据获取

# 定义获取 财务数据 主营业务构成
def get_finance_main_business(stocks_label, period):
    # 进行数据获取
    df = pro.fina_mainbz(ts_code=f'{stocks_label}', type='P', period=period,
                         fields='bz_item,bz_sales,bz_profit,bz_cost,update_flag')  # 用于标识是否更新过
    # 进行数据判别
    if judge_data(df):
        # 表示有数据
        return {
   'bz_item': '||'.join(list(df.bz_item.values)),
                'bz_sales': '||'.join([str(i) for i in list(df.bz_sales.values)]),
                'bz_profit': '||'.join([str(i) for i in list(df.bz_profit.values)]),
                'bz_cost': '||'.join([str(i) for i in list(df.bz_profit.values)]),
                'if_have_zyywgc': 1
                }
    else:
        # 表示数据为空
        return {
   'bz_item': None, 'bz_sales': None, 'bz_profit': None, 'bz_cost': None,
                'if_have_zyywgc': 0}  # 最后一个用来标注该表没有获取到数据

当获取具体的某个股票信息的主营业务信息的时候,这里需要进行数据的拼接,一个公司的主营业务可以有多个,个数上并不是一定的,这里采用的是字符串拼接的方式,把字段bz_item等多条字段使用||进行拼接成新的字符串存储

利润表

获取利润表信息

# 获取 财务数据 利润表
def get_finance_profit_statement
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值