财报分析实战: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)