学习了一段时间python,学以致用,结合财报练练手。
代码环境:WIN10、Aanconda3、Jupyter notebook
第三方库:pandas 、os、tuahare、datetime、time
总体思路:
第1步:获得A股股票代码
第2步:循环所有股票代码,获取每个股票代码的利润表、资产负债表、现金流量表
针对三个财务报表,构建3个函数,函数代码结构类似
第1步:得到个股利润表数据
第2步:检测是否有保存过的数据,如果有添加到末尾
第3步: 保存为CSV文件
具体代码:
引入第三方库
#引入第三方库
import pandas as pd
import os
import tushare as ts
import datetime
import time
第1个函数,获取利润表
# 第1个函数,获取每个股票的利润表,
# 文件路径:C:\DataAnalysis\Data\00.LirunbiaoCN
def stockLirunbiao(ticker, folder):
# 第1步:得到个股利润表数据
dfLirunbiao = pro.income(ts_code = ticker )
# 第2步:检测是否有曾经查询过的数据,如果有添加到末尾
file = folder + '/' + ticker + '.csv'
if os.path.lexists(file):
history = pd.read_csv(file, index_col = 0)
dflirunbiao.append(history)
# 第3步:保存为CSV文件
dfLirunbiao .to_csv(file)
print('dfLirunbiao for [' + ticker + '] got.')
第2个函数:获取资产负债表
# 第2个函数,获取每个股票的资产负债表,
#文件路径C:\DataAnalysis\Data\00.ZichanfuzhaibiaoCN
def stockZichanfuzhaibiao(ticker, folder):
# 第1步:得到个股资产负债表数据
dfZichanfuzhaibiao = pro.balancesheet(ts_code = ticker)
# 第2步:检测是否有曾经查询过的数据,如果有添加到末尾
file = folder + '/' + ticker + '.csv'
if os.path.lexists(file):
history = pd.read_csv(file, index_col=0)
dfZichanfuzhaibiao.append(history)
# 第3步:保存为CSV文件
dfZichanfuzhaibiao.to_csv(file)
print('dfZichanfuzhaibiao for [' + ticker + '] got.')
第3个函数:获取现金流量表
# 第3个函数,获取每个股票的现金流量表,
# 文件路径:C:\DataAnalysis\Data\00.XianjinliuliangbiaoCN
def stockXianjinliuliangbiao(ticker, folder):
# 第1步:得到个股现金流量表数据
dfXianjinliuliangbiao = pro.cashflow(ts_code=ticker)
# 第2步:检测是否有曾经查询过的数据,如果有添加到末尾
file = folder + '/' + ticker + '.csv'
if os.path.lexists(file):
history = pd.read_csv(file, index_col=0)
dfXianjinliuliangbiao .append(history)
#第3步:保存为CSV文件
dfXianjinliuliangbiao .to_csv(file)
print('dfXianjinliuliangbiao for [' + ticker + '] got.')
初始化Tushare库接口
#Tushare初始化
#输入tushare pro版Token
ts.set_token('接口密钥')
#初始化pro接口
pro = ts.pro_api()
获取股票代码
#第1步。获得A股股票代码
tickersRawData = pro.stock_basic()
tickers = tickersRawData["ts_code"].unique().tolist()
print(tickers)
循环股票代码,获取三个财务报表
#第2步。循环所有股票代码,获取每个股票代码的利润表、资产负债表、现金流量表
for i, ticker in enumerate(tickers):
print('完成循环', i, '/', len(tickers))
try:
stockLirunbiao(ticker, folder='../data/00.LirunbiaoCN')
stockZichanfuzhaibiao(ticker, folder='../data/00.ZichanfuzhaibiaoCN')
stockXianjinliuliangbiao(ticker, folder='../data/00.XianjinliuliangbiaoCN')
time.sleep(2)
except:
pass
if i > 7:
break
print('全部完成 for all stocks got.')