Python 使用 Tushare 库进行杜邦分析:获取上市公司财务数据并计算关键指标
使用 Tushare 库进行杜邦分析:获取上市公司财务数据并计算关键指标
本代码使用 Python 的 Tushare 库,从上交所获取所有正常上市公司的财务数据,并进行杜邦分析计算,得出净资产报酬率、营业净利率、总资产周转率和权益乘数等关键指标。代码还包含数据清洗和接口调用频率控制等操作,为数据分析和投资决策提供基础数据。
import pandas as pd
import tushare as ts
import numpy as np
import time
# 初始化tushare接口
pro = ts.pro_api('75fe6c69bb10c996a556a402dde9fdf6e691dfdd2c30ff028ebd5a37')
# (1)获取上交所所有正常上市公司的股票代码
code_sheet = pro.stock_basic(exchange = 'SSE') # 获取上交所股票信息,存为表格
code_list = code_sheet['ts_code'] # 提取股票代码这一列存为列表code_list备用
print(code_list)
# (2)批量获取上市公司财务数据
data = pd.DataFrame() # 新建一个空表
for i in range(len(code_list)):
# 由于我们最多需要10年的数据,因此start date从2009年1月1日开始
a = pro.income(ts_code = code_list[i],start_date = '20090101', fields = 'ts_code,end_date,n_income, revenue') # 净利润和营业收入从利润表获取
b = pro.balancesheet(ts_code = code_list[i],start_date = '20090101', fields = 'ts_code,end_date,total_assets, total_hldr_eqy_inc_min_int') # 总资产和股东权益从资产负债表获取
c = pd.merge(a,b) # 把a和b两张表横向拼接为表c
data = data.append(c) # 把表c纵向拼接到总数据表data里
time.sleep(0.4) # 获取完一家公司的信息后暂停0.4s,因为普通账户在60s内每个接口调用次数不能多于200次
print(i) # 方便查看当前获取到第几家上市公司的数据
# (3)数据清洗
# 清除重复数据
data.drop_duplicates(inplace = True)
# 只保留年报数据,且只保留2010年12月31日及以后的
data = data[data['end_date'].isin(['20101231','20111231','20121231','20131231','20141231','20151231','20161231','20171231','20181231','20191231'])]
# 对列索引重命名
data = data.rename(columns = {'ts_code':'股票代码','end_date':'报告日','revenue':'营业收入','n_income':'净利润','total_assets':'总资产','total_hldr_eqy_inc_min_int':'股东权益'})
# (4)计算杜邦分析各比率
# 净资产报酬率
data['roe'] = data['净利润']/data['股东权益']
# 营业净利率
data['营业净利率'] = data['净利润']/data['营业收入']
# 总资产周转率
data['总资产周转率'] = data['营业收入']/data['总资产']
# 权益乘数
data['权益乘数'] = data['总资产']/data['股东权益']
代码功能说明:
- 导入库: 导入必要的库,包括 pandas 用于数据处理、tushare 用于获取金融数据、numpy 用于数值计算和 time 用于控制接口调用频率。
- 初始化Tushare接口: 使用您的 Tushare API 密钥初始化接口。
- 获取股票代码: 使用
pro.stock_basic()获取上交所所有正常上市公司的股票代码,并存储为code_list列表。 - 批量获取财务数据: 使用循环遍历
code_list,并使用pro.income()和pro.balancesheet()分别获取每个公司的利润表和资产负债表数据。将数据合并后追加到data数据框中。 - 数据清洗: 对数据进行清洗,包括删除重复数据、保留年报数据(2010年12月31日及以后)、重命名列索引等操作。
- 计算杜邦分析指标: 根据公式计算净资产报酬率、营业净利率、总资产周转率和权益乘数,并将结果作为新的列添加到
data数据框中。
注意事项:
- Tushare 接口在 60 秒内每个接口调用次数不能多于 200 次,因此使用
time.sleep(0.4)控制接口调用频率,避免接口调用过于频繁而导致错误。 - 请将代码中的 API 密钥替换为您的实际密钥。
- 您还可以根据需要修改代码,例如更改数据获取时间范围、添加其他财务指标等。
使用场景:
- 进行上市公司财务分析和数据挖掘
- 构建投资策略和模型
- 研究企业盈利能力和资产效率
- 进行数据可视化和报表生成
进一步扩展:
- 可以将计算出的杜邦分析指标进行可视化分析,例如绘制趋势图、散点图等,更直观地观察上市公司财务状况。
- 可以将代码与其他数据源整合,例如将上市公司财务数据与宏观经济数据结合,进行更深入的分析。
- 可以将代码封装成函数,方便重复使用,提高代码效率。
最后,希望本代码能够帮助您更好地理解和应用杜邦分析,进行更有效的数据分析和投资决策。
原文地址: https://www.cveoy.top/t/topic/owDR 著作权归作者所有。请勿转载和采集!