Skip to content

数据分析

概述

数据分析是财报分析 Agent 的核心环节。本章介绍如何计算关键财务指标、进行趋势分析和同业对比。

财务指标体系

指标分类

类别指标计算公式意义
估值市盈率 (P/E)股价 / 每股收益估值高低
市净率 (P/B)股价 / 每股净资产资产溢价
市销率 (P/S)市值 / 营收收入估值
盈利毛利率(营收-成本) / 营收产品盈利能力
净利率净利润 / 营收整体盈利能力
ROE净利润 / 股东权益股东回报
ROA净利润 / 总资产资产利用效率
偿债流动比率流动资产 / 流动负债短期偿债能力
速动比率(流动资产-存货) / 流动负债快速偿债能力
资产负债率总负债 / 总资产财务杠杆
成长营收增长率(本期-上期) / 上期业务扩张速度
净利润增长率(本期-上期) / 上期盈利增长速度

指标计算实现

基础指标计算类

python
class FinancialMetrics:
    """财务指标计算器"""

    def __init__(self, ticker_symbol):
        self.symbol = ticker_symbol
        self.ticker = yf.Ticker(ticker_symbol)
        self.info = self.ticker.info

    def get_valuation_metrics(self):
        """估值指标"""
        return {
            "市盈率": self.info.get("trailingPE"),
            "市净率": self.info.get("priceToBook"),
            "市销率": self.info.get("priceToSalesTrailing12Months"),
            "EV/EBITDA": self.info.get("enterpriseToEbitda"),
        }

    def get_profitability_metrics(self):
        """盈利能力指标"""
        return {
            "毛利率": self.info.get("grossMargins"),
            "营业利润率": self.info.get("operatingMargins"),
            "净利率": self.info.get("profitMargins"),
            "ROE": self.info.get("returnOnEquity"),
            "ROA": self.info.get("returnOnAssets"),
        }

    def get_solvency_metrics(self):
        """偿债能力指标"""
        return {
            "流动比率": self.info.get("currentRatio"),
            "速动比率": self.info.get("quickRatio"),
            "资产负债率": self.info.get("debtToEquity"),
        }

    def get_growth_metrics(self):
        """成长性指标"""
        return {
            "营收增长率": self.info.get("revenueGrowth"),
            "净利润增长率": self.info.get("earningsGrowth"),
            "每股收益增长率": self.info.get("earningsQuarterlyGrowth"),
        }

使用示例

python
# 计算苹果公司的财务指标
metrics = FinancialMetrics("AAPL")

print("=== 估值指标 ===")
for k, v in metrics.get_valuation_metrics().items():
    print(f"{k}: {v}")

print("\n=== 盈利能力 ===")
for k, v in metrics.get_profitability_metrics().items():
    if v:
        print(f"{k}: {v:.2%}")

杜邦分析法

原理

杜邦分析法将 ROE 分解为三个驱动因素:

ROE = 净利率 × 资产周转率 × 权益乘数
    = (净利润/营收) × (营收/总资产) × (总资产/股东权益)

实现代码

python
def dupont_analysis(ticker_symbol):
    """杜邦分析"""
    ticker = yf.Ticker(ticker_symbol)

    # 获取财务数据
    income = ticker.financials
    balance = ticker.balance_sheet

    # 提取关键数据
    net_income = income.loc["Net Income"].iloc[0]
    revenue = income.loc["Total Revenue"].iloc[0]
    total_assets = balance.loc["Total Assets"].iloc[0]
    equity = balance.loc["Stockholders Equity"].iloc[0]

    # 计算杜邦三因素
    net_margin = net_income / revenue
    asset_turnover = revenue / total_assets
    equity_multiplier = total_assets / equity

    # 计算 ROE
    roe = net_margin * asset_turnover * equity_multiplier

    return {
        "净利率": f"{net_margin:.2%}",
        "资产周转率": f"{asset_turnover:.2f}",
        "权益乘数": f"{equity_multiplier:.2f}",
        "ROE": f"{roe:.2%}",
    }

# 使用
result = dupont_analysis("AAPL")
for k, v in result.items():
    print(f"{k}: {v}")

趋势分析

同比增长计算

python
def calculate_yoy_growth(df, column):
    """计算同比增长率"""
    df = df.sort_index()
    df[f"{column}_YoY"] = df[column].pct_change() * 100
    return df

# 示例:计算营收同比增长
financials = ticker.financials.T
financials = calculate_yoy_growth(financials, "Total Revenue")
print(financials[["Total Revenue", "Total Revenue_YoY"]])

多期趋势分析

python
def analyze_trend(values, periods=4):
    """分析趋势方向"""
    if len(values) < 2:
        return "数据不足"

    recent = values[:periods]

    # 计算增长率
    growth_rates = []
    for i in range(len(recent) - 1):
        if recent[i+1] != 0:
            rate = (recent[i] - recent[i+1]) / abs(recent[i+1])
            growth_rates.append(rate)

    avg_growth = sum(growth_rates) / len(growth_rates)

    if avg_growth > 0.1:
        return "强劲增长"
    elif avg_growth > 0:
        return "稳定增长"
    elif avg_growth > -0.1:
        return "轻微下滑"
    else:
        return "明显下滑"

同业对比

行业对比分析

python
def compare_peers(symbols, metrics_list):
    """同业对比分析"""
    results = []

    for symbol in symbols:
        ticker = yf.Ticker(symbol)
        info = ticker.info

        row = {"股票": symbol, "公司": info.get("shortName")}
        for metric in metrics_list:
            row[metric] = info.get(metric)

        results.append(row)

    return pd.DataFrame(results)

# 对比科技巨头
peers = ["AAPL", "MSFT", "GOOGL", "META"]
metrics = ["trailingPE", "priceToBook", "profitMargins", "returnOnEquity"]

comparison = compare_peers(peers, metrics)
print(comparison)

异常检测

指标异常判断

python
def detect_anomalies(metrics):
    """检测财务指标异常"""
    warnings = []

    # 估值异常
    pe = metrics.get("市盈率", 0)
    if pe and pe < 0:
        warnings.append("⚠️ 市盈率为负,公司可能亏损")
    elif pe and pe > 100:
        warnings.append("⚠️ 市盈率过高,估值可能偏贵")

    # 偿债能力异常
    current_ratio = metrics.get("流动比率", 0)
    if current_ratio and current_ratio < 1:
        warnings.append("⚠️ 流动比率低于1,存在短期偿债风险")

    debt_ratio = metrics.get("资产负债率", 0)
    if debt_ratio and debt_ratio > 200:
        warnings.append("⚠️ 资产负债率过高,财务杠杆风险大")

    # 盈利能力异常
    roe = metrics.get("ROE", 0)
    if roe and roe < 0:
        warnings.append("⚠️ ROE 为负,股东权益在缩水")

    return warnings

注意事项

  1. 数据时效性:财务数据有滞后性,季报通常滞后 1-2 个月
  2. 行业差异:不同行业的指标标准不同,需按行业对比
  3. 会计政策:不同公司会计政策可能不同,影响指标可比性
  4. 一次性项目:需剔除非经常性损益的影响

下一步

数据分析完成,开始用 AI 生成分析洞察。

继续:AI 分析 →


← 返回数据获取 | 返回项目三

最近更新

基于 Apache 2.0 许可发布