财报分析实战:3个Python脚本自动计算ROE、毛利率等10项核心财务比率
财报分析实战3个Python脚本自动计算ROE、毛利率等10项核心财务比率在量化投资和企业财务分析领域能够快速准确地计算关键财务指标是做出明智决策的基础。传统手动计算不仅效率低下还容易出错而Python的自动化处理能力可以彻底改变这一局面。本文将提供三个即插即用的Python脚本帮助开发者一键生成10个最具价值的财务比率涵盖盈利能力、偿债能力和运营效率三大维度。1. 环境准备与数据获取在开始编写财务指标计算脚本前需要确保Python环境已安装必要的库。推荐使用Anaconda创建独立环境conda create -n financial_analysis python3.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_nameBalanceSheet) income_statement pd.read_excel(file_path, sheet_nameIncomeStatement) cash_flow pd.read_excel(file_path, sheet_nameCashFlow) 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(kindbar) plt.title(f{ticker} Financial Ratios) plt.ylabel(Ratio Value) plt.xticks(rotation45) plt.tight_layout() plt.show() return all_ratios实际项目中我们还需要考虑多期数据对比分析同行业公司对标异常值检测与处理自动化报告生成# 多期数据分析示例 def multi_period_analysis(ticker, years5): 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)