财报分析实战:3个Python脚本自动计算ROE、毛利率等10项核心财务比率
·
财报分析实战:3个Python脚本自动计算ROE、毛利率等10项核心财务比率
在量化投资和企业财务分析领域,能够快速准确地计算关键财务指标是做出明智决策的基础。传统手动计算不仅效率低下,还容易出错,而Python的自动化处理能力可以彻底改变这一局面。本文将提供三个即插即用的Python脚本,帮助开发者一键生成10个最具价值的财务比率,涵盖盈利能力、偿债能力和运营效率三大维度。
1. 环境准备与数据获取
在开始编写财务指标计算脚本前,需要确保Python环境已安装必要的库。推荐使用Anaconda创建独立环境:
conda create -n financial_analysis python=3.8
conda activate financial_analysis
pip install pandas numpy yfinance requests
对于上市公司财务数据获取,我们有两种主流方式:
方式一:使用Yahoo Finance API获取实时数据
import yfinance as yf
def get_financial_data(ticker):
company = yf.Ticker(ticker)
# 获取资产负债表
balance_sheet = company.balance_sheet
# 获取利润表
income_statement = company.income_stmt
# 获取现金流量表
cash_flow = company.cashflow
return balance_sheet, income_statement, cash_flow
方式二:从本地Excel导入历史数据
import pandas as pd
def import_from_excel(file_path):
balance_sheet = pd.read_excel(file_path, sheet_name='BalanceSheet')
income_statement = pd.read_excel(file_path, sheet_name='IncomeStatement')
cash_flow = pd.read_excel(file_path, sheet_name='CashFlow')
return balance_sheet, income_statement, cash_flow
提示:对于A股上市公司,可以使用Tushare或AKShare等专门针对中国市场的金融数据接口
2. 盈利能力指标计算脚本
盈利能力是评估公司价值的关键维度。以下脚本可自动计算ROE、毛利率、净利率和核心利润贡献度四大指标:
def calculate_profitability_ratios(income_stmt, balance_sheet):
"""
计算盈利能力指标
:param income_stmt: 利润表DataFrame
:param balance_sheet: 资产负债表DataFrame
:return: 包含盈利能力指标的字典
"""
ratios = {}
# 获取必要数据
net_income = income_stmt.loc['Net Income']
total_revenue = income_stmt.loc['Total Revenue']
cost_of_revenue = income_stmt.loc['Cost of Revenue']
operating_income = income_stmt.loc['Operating Income']
shareholders_equity = balance_sheet.loc['Total Stockholder Equity']
# 计算ROE(净资产收益率)
ratios['ROE'] = net_income / shareholders_equity
# 计算毛利率
gross_profit = total_revenue - cost_of_revenue
ratios['Gross Margin'] = gross_profit / total_revenue
# 计算净利率
ratios['Net Margin'] = net_income / total_revenue
# 计算核心利润贡献度
ratios['Core Profit Ratio'] = operating_income / net_income
return ratios
关键指标解释:
| 指标名称 | 计算公式 | 健康范围 | 分析意义 |
|---|---|---|---|
| ROE | 净利润/股东权益 | 15%-20%+ | 衡量股东投资回报率 |
| 毛利率 | (营收-成本)/营收 | 行业相关 | 反映产品/服务直接盈利能力 |
| 净利率 | 净利润/营收 | 行业相关 | 综合盈利能力指标 |
| 核心利润贡献度 | 营业利润/净利润 | >70% | 判断盈利质量 |
注意:不同行业的合理指标范围差异很大,科技公司通常有更高的毛利率,而零售业则较低
3. 偿债能力指标计算脚本
偿债能力分析对评估公司财务健康至关重要。以下脚本计算流动比率、速动比率、资产负债率和利息保障倍数:
def calculate_liquidity_ratios(balance_sheet, income_stmt):
"""
计算偿债能力指标
:param balance_sheet: 资产负债表DataFrame
:param income_stmt: 利润表DataFrame
:return: 包含偿债能力指标的字典
"""
ratios = {}
# 获取必要数据
current_assets = balance_sheet.loc['Total Current Assets']
current_liabilities = balance_sheet.loc['Total Current Liabilities']
inventory = balance_sheet.loc['Inventory']
total_assets = balance_sheet.loc['Total Assets']
total_liabilities = balance_sheet.loc['Total Liabilities']
ebit = income_stmt.loc['EBIT']
interest_expense = income_stmt.loc['Interest Expense']
# 计算流动比率
ratios['Current Ratio'] = current_assets / current_liabilities
# 计算速动比率(酸性测试比率)
quick_assets = current_assets - inventory
ratios['Quick Ratio'] = quick_assets / current_liabilities
# 计算资产负债率
ratios['Debt to Asset Ratio'] = total_liabilities / total_assets
# 计算利息保障倍数
ratios['Interest Coverage'] = ebit / interest_expense
return ratios
偿债能力指标应用场景:
- 短期债权人 最关注流动比率和速动比率
- 长期投资者 更看重资产负债率和利息保障倍数
- 行业对比 时要注意不同行业的资本结构差异
典型问题处理:
# 处理利息支出为零的情况
if interest_expense == 0:
ratios['Interest Coverage'] = float('inf') # 设为无穷大
4. 运营效率指标计算脚本
运营效率指标反映公司管理资产的效能。以下脚本计算应收账款周转率、存货周转率和总资产周转率:
def calculate_efficiency_ratios(income_stmt, balance_sheet):
"""
计算运营效率指标
:param income_stmt: 利润表DataFrame
:param balance_sheet: 资产负债表DataFrame
:return: 包含运营效率指标的字典
"""
ratios = {}
# 获取必要数据
total_revenue = income_stmt.loc['Total Revenue']
accounts_receivable = balance_sheet.loc['Accounts Receivable']
inventory = balance_sheet.loc['Inventory']
total_assets = balance_sheet.loc['Total Assets']
# 计算应收账款周转率
ratios['Receivables Turnover'] = total_revenue / accounts_receivable
# 计算存货周转率
ratios['Inventory Turnover'] = total_revenue / inventory
# 计算总资产周转率
ratios['Asset Turnover'] = total_revenue / total_assets
return ratios
周转率指标的行业差异:
| 行业 | 应收账款周转率 | 存货周转率 | 总资产周转率 |
|---|---|---|---|
| 零售 | 高(50+) | 高(10+) | 中(1.5-3) |
| 制造 | 中(8-12) | 中(6-8) | 低(0.5-1) |
| 科技 | 高(20+) | 无/低 | 中(0.7-1.5) |
5. 综合应用与可视化
将三个脚本整合并添加可视化功能:
import matplotlib.pyplot as plt
def analyze_company(ticker):
# 获取数据
balance_sheet, income_stmt, cash_flow = get_financial_data(ticker)
# 计算各类指标
profit_ratios = calculate_profitability_ratios(income_stmt, balance_sheet)
liquidity_ratios = calculate_liquidity_ratios(balance_sheet, income_stmt)
efficiency_ratios = calculate_efficiency_ratios(income_stmt, balance_sheet)
# 合并所有指标
all_ratios = {**profit_ratios, **liquidity_ratios, **efficiency_ratios}
# 可视化展示
plt.figure(figsize=(12, 6))
pd.Series(all_ratios).plot(kind='bar')
plt.title(f'{ticker} Financial Ratios')
plt.ylabel('Ratio Value')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
return all_ratios
实际项目中,我们还需要考虑:
- 多期数据对比分析
- 同行业公司对标
- 异常值检测与处理
- 自动化报告生成
# 多期数据分析示例
def multi_period_analysis(ticker, years=5):
ratios_history = []
for year in range(2023-years, 2023):
# 获取历史数据(需要相应API支持)
data = get_historical_data(ticker, year)
ratios = analyze_company(data)
ratios_history.append(ratios)
# 转换为DataFrame便于分析
return pd.DataFrame(ratios_history)
更多推荐



所有评论(0)