python tushare量化股票大数据分析整合版

前言:对前面的代码功能进行一次简要整合,简要添加了多线程功能:
1.tushare股票数据本地csv格式。
2.csv格式文件mysql化。
3.tushare股票数据分析word文档化。
代码如下:

import os
import docx
import time
import pymysql
import datetime
import warnings
import pandas as pd
import tushare as ts
import threading
import dateutil.parser
from docx.shared import Cm, Inches
from docx.shared import RGBColor,Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
warnings.filterwarnings('ignore')

#pd.set_option()就是pycharm输出控制显示的设置
pd.set_option('expand_frame_repr', False)#True就是可以换行显示。设置成False的时候不允许换行
pd.set_option('display.max_columns', None)# 显示所有列
#pd.set_option('display.max_rows', None)# 显示所有行
pd.set_option('colheader_justify', 'centre')# 显示居中

#os.chdir()用于改变当前工作目录到指定的路径
#此路径必须改为放数据的路径且中间的不能缺失任何一天数据,例如get_analysis_stockdata('20200101', '20200106'),
#那么你放数据文件夹内不能缺少任何一个这段时期内的交易数据文件,否则报错
#tushare的流通市值跟总市值单位是‘万元’,成交额单位是‘千元’,代码都将他们转化成亿单位,方便阅读分析
os.chdir('D:/stock_data/')  #保存的绝对路径,需要自己修改跟创建,就是切换默认的工作目录到你设置的路径
pro = ts.pro_api('要到tushare官网注册个账户然后将token复制到这里,可以的话请帮个忙用文章末我分享的链接注册,谢谢')

#df_basic = pro.stock_basic() 获取基础信息数据,包括股票代码、名称、上市日期、退市日期等
#df_daily = pro.daily()  获取所有股票日行情信息,或通过通用行情接口获取数据,包含了前后复权数据,停牌期间不提供数据
#df_daily_basic = pro.daily_basic()获取全部股票每日重要的基本面指标,可用于选股分析、报表展示等。

def get_all_stockdata(st_date, ed_date):
    trade_d = pro.trade_cal(exchange='SSE', is_open='1',start_date=st_date,end_date=ed_date,fields='cal_date')
    for date in trade_d['cal_date'].values:
        df_basic = pro.stock_basic(exchange='', list_status='L')    #再获取所有股票的基本信息
        df_daily = pro.daily(trade_date=date)    # 先获得所有股票的行情数据,成交额单位是千元,成交量是手
        df_daily_basic = pro.daily_basic(ts_code='', trade_date=date,fields='ts_code, turnover_rate, turnover_rate_f,'
                                                                            ' volume_ratio, pe, pe_ttm, pb, ps, ps_ttm,'
                                                                            ' dv_ratio, dv_ttm, total_share, float_share,'
                                                                            ' free_share, total_mv, circ_mv ')    #获取每日指标,单位是万股,万元
        #基本数据跟行情数据合并,再跟每日指标数据合并生成一个csv数据文件
        df_first = pd.merge(left=df_basic, right=df_daily, on='ts_code', how='outer')    #on='ts_code'以ts_code为索引,合并数据,how='outer',取并集
        df_all = pd.merge(left=df_first, right=df_daily_basic, on='ts_code', how='outer')
        #数据清洗,删除symbol列数据,跟ts_code数据重复
        df_all = df_all.drop('symbol', axis=1)
        for w in ['name', 'area', 'industry', 'market']:    #在'name', 'area', 'industry', 'market'列内循环填充NaN值
            df_all[w].fillna('问题股', inplace=True)
        df_all['amount'] = df_all['amount']/100000    #千转亿
        df_all['circ_mv'] = df_all['circ_mv']/10000    #万转亿
        df_all['total_mv'] = df_all['total_mv']/10000    #万转亿

        df_all['ts_code'] = df_all['ts_code'].astype(str)    #强制转换成str字符串格式
        df_all['list_date'] = pd.to_datetime(df_all['list_date'])    #本地储存前一定要先转化成日期格式先
        df_all['trade_date'] = pd.to_datetime(df_all['trade_date'])

        df_all.to_csv(str(date) + '_ts.csv', index=False, encoding='gbk')    #保存数据,不保存索引,如果index=True,则保存索引会多出一列
        #print(df_all.dtypes)
        print('%s download complete.' % (str(date)))
    return df_all

#将csv导入本地mysql数据库
#连接 Mysql 数据库
def output_mysql():
    try:
        conn = pymysql.connect(host='localhost', user='root', password='你的密码', db='你创建的数据库', charset='utf8')
        cur = conn.cursor()
        print('数据库连接成功!')
        print(' ')
    except:
        print('数据库连接失败!')

    #读取任意文件夹下的csv文件
    #获取程序所在路径及该路径下所有文件名称
    os.chdir('D:/stock_data/')
    path = os.getcwd()
    files = os.listdir(path)

    #遍历所有文件
    i = 0
    for file in files:
        #判断文件是不是csv文件,file.split('.')[-1]获取‘.’后的csv字符串
        if file.split('.')[-1] in ['csv']:
            i += 1
            #构建一个表名称,供后期SQL语句调用,file.split('.')[0]获取的是.csv前面的名字
            filename = file.split('.')[0]
            filename = 'tab_' + filename

            #使用pandas库读取csv文件的所有内容,结果f是一个数据框,保留了表格的数据存储方式,是pandas的数据存储结构。
            f = pd.read_csv(file, encoding='gbk')

            #获取数据框的标题行(即字段名称),将来作为sql语句中的字段名称。
            columns = f.columns.tolist()
            #print(columns)<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wilburzzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值