CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-akshare

Comprehensive Python library for financial data acquisition providing access to Chinese and global market data.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

fundamental-analysis.mddocs/

Fundamental Analysis

AKShare provides comprehensive fundamental analysis capabilities with 47 functions in the STOCK_FUNDAMENTAL category. This covers financial statements, financial ratios, earnings forecasts, analyst recommendations, and company valuation metrics essential for equity research and investment analysis.

Financial Statement Data

Income Statement Analysis

Comprehensive Financial Indicators

import akshare as ak

def stock_financial_analysis_indicator_em(symbol: str) -> pd.DataFrame:
    """
    Comprehensive financial analysis indicators from East Money
    
    Parameters:
        symbol: Stock code (e.g., "000001")
        
    Returns:
        pd.DataFrame: Financial indicators with columns:
            - 指标名称 (Indicator): Financial metric name
            - 报告期 (Period): Reporting period
            - 指标值 (Value): Metric value
            - 同比增长率 (YoY_growth): Year-over-year growth rate
            - 行业平均 (Industry_avg): Industry average
            - 行业排名 (Industry_rank): Industry ranking
    """

# Get comprehensive financial analysis for Ping An Bank
financial_indicators = ak.stock_financial_analysis_indicator_em(symbol="000001")
print(financial_indicators.head())
#    指标名称     报告期     指标值  同比增长率  行业平均  行业排名
# 0   营业收入  2024Q3  1234.56    12.34   987.65      5
# 1   净利润    2024Q3   456.78     8.76   321.09      3
# 2   ROE      2024Q3    15.67     1.23    12.45      2
# 3   ROA      2024Q3     1.89     0.34     1.45      4

Financial Abstract Data

import akshare as ak

def stock_financial_abstract(symbol: str = "000001") -> pd.DataFrame:
    """
    Financial statement abstract and key metrics
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Financial abstract with columns:
            - 报告期 (Period): Reporting period
            - 营业收入 (Revenue): Operating revenue
            - 营业收入同比增长 (Revenue_growth): Revenue YoY growth
            - 净利润 (Net_profit): Net profit
            - 净利润同比增长 (Profit_growth): Net profit YoY growth
            - 每股收益 (EPS): Earnings per share
            - 净资产收益率 (ROE): Return on equity
            - 每股净资产 (BVPS): Book value per share
            - 每股经营现金流 (CFPS): Cash flow per share
    """

# Get financial abstract
financial_abstract = ak.stock_financial_abstract(symbol="000001")
print(financial_abstract.head())
#     报告期     营业收入  营业收入同比增长    净利润  净利润同比增长   每股收益    净资产收益率  每股净资产  每股经营现金流
# 0  2024Q3    1567.89        12.34   234.56        8.76    0.89       15.67     5.67        1.23
# 1  2024Q2    1456.78        10.23   212.34        7.89    0.81       14.89     5.45        1.15

Balance Sheet Data

Balance Sheet by Report Period

import akshare as ak

def stock_balance_sheet_by_report_em(symbol: str = "000001") -> pd.DataFrame:
    """
    Balance sheet data by reporting period
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Balance sheet items with columns:
            - 报告期 (Period): Reporting period
            - 货币资金 (Cash): Cash and equivalents
            - 总资产 (Total_assets): Total assets
            - 总负债 (Total_liabilities): Total liabilities
            - 股东权益合计 (Total_equity): Total shareholders' equity
            - 资产负债率 (Debt_ratio): Debt-to-assets ratio
            - 流动比率 (Current_ratio): Current ratio
            - 速动比率 (Quick_ratio): Quick ratio
    """

def stock_balance_sheet_by_yearly_em(symbol: str = "000001") -> pd.DataFrame:
    """
    Annual balance sheet data
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Annual balance sheet data
    """

# Get quarterly balance sheet data
balance_sheet_q = ak.stock_balance_sheet_by_report_em(symbol="000001")

# Get annual balance sheet data
balance_sheet_y = ak.stock_balance_sheet_by_yearly_em(symbol="000001")

Cash Flow Statement

Cash Flow Analysis

import akshare as ak

def stock_cash_flow_sheet_by_report_em(symbol: str = "000001") -> pd.DataFrame:
    """
    Cash flow statement by reporting period
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Cash flow data with columns:
            - 报告期 (Period): Reporting period
            - 经营活动现金流量净额 (Operating_cf): Operating cash flow
            - 投资活动现金流量净额 (Investing_cf): Investing cash flow
            - 筹资活动现金流量净额 (Financing_cf): Financing cash flow
            - 现金及现金等价物净增加额 (Net_cf): Net change in cash
            - 自由现金流 (Free_cf): Free cash flow
    """

def stock_cash_flow_sheet_by_yearly_em(symbol: str = "000001") -> pd.DataFrame:
    """
    Annual cash flow statement data
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Annual cash flow data
    """

# Get cash flow data
cash_flow_q = ak.stock_cash_flow_sheet_by_report_em(symbol="000001")
cash_flow_y = ak.stock_cash_flow_sheet_by_yearly_em(symbol="000001")

Financial Ratio Analysis

Profitability Ratios

Detailed Financial Ratios

import akshare as ak

def stock_financial_hk_report_em(symbol: str) -> pd.DataFrame:
    """
    Hong Kong listed stock financial ratios
    
    Parameters:
        symbol: HK stock code
        
    Returns:
        pd.DataFrame: Financial ratios and metrics
    """

def stock_roe_em(symbol: str = "000001") -> pd.DataFrame:
    """
    Return on Equity (ROE) analysis and components
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: ROE decomposition with columns:
            - 报告期 (Period): Reporting period
            - 净资产收益率 (ROE): Return on equity
            - 净利润率 (Net_margin): Net profit margin
            - 资产周转率 (Asset_turnover): Asset turnover ratio
            - 权益乘数 (Equity_multiplier): Equity multiplier
            - 杜邦分析 (DuPont): DuPont analysis components
    """

# Get ROE analysis
roe_analysis = ak.stock_roe_em(symbol="000001")
print(roe_analysis.head())
#     报告期   净资产收益率  净利润率  资产周转率  权益乘数
# 0  2024Q3      15.67     8.45      0.89     2.08
# 1  2024Q2      14.89     8.12      0.87     2.11

Valuation Metrics

Market Valuation Indicators

import akshare as ak

def stock_a_pe_lg() -> pd.DataFrame:
    """
    A-share market PE ratio distribution
    
    Returns:
        pd.DataFrame: Market PE statistics and distribution
    """

def stock_a_indicator_lg() -> pd.DataFrame:
    """
    A-share market valuation indicators
    
    Returns:
        pd.DataFrame: Market-wide valuation metrics including:
            - 平均市盈率 (Avg_PE): Average P/E ratio
            - 平均市净率 (Avg_PB): Average P/B ratio
            - 平均股息率 (Avg_dividend): Average dividend yield
            - 总市值 (Total_mv): Total market cap
            - 流通市值 (Float_mv): Floating market cap
    """

# Get market PE distribution
market_pe = ak.stock_a_pe_lg()

# Get market valuation indicators
market_valuation = ak.stock_a_indicator_lg()

Earnings and Forecasts

Earnings Forecast Data

Analyst Earnings Forecasts

import akshare as ak

def stock_profit_forecast() -> pd.DataFrame:
    """
    Earnings forecast summary across all stocks
    
    Returns:
        pd.DataFrame: Earnings forecasts with columns:
            - 代码 (Code): Stock code
            - 名称 (Name): Stock name
            - 2024预测每股收益 (EPS_2024F): 2024 forecast EPS
            - 2025预测每股收益 (EPS_2025F): 2025 forecast EPS
            - 2026预测每股收益 (EPS_2026F): 2026 forecast EPS
            - 预测PE (Forecast_PE): Forward P/E ratio
            - 预测收益增长率 (Growth_rate): Forecast earnings growth
    """

def stock_profit_forecast_ths(symbol: str) -> pd.DataFrame:
    """
    Individual stock earnings forecast from Tonghuashun
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Detailed earnings forecasts for individual stock
    """

# Get overall earnings forecasts
earnings_forecasts = ak.stock_profit_forecast()
print(earnings_forecasts.head())
#     代码    名称   2024预测每股收益  2025预测每股收益  2026预测每股收益  预测PE  预测收益增长率
# 0  000001  平安银行      1.45        1.67        1.89    7.2       15.2
# 1  000002   万科A        0.89        1.02        1.15   8.7       14.6

# Get individual stock forecast
individual_forecast = ak.stock_profit_forecast_ths(symbol="000001")

Earnings Surprise Analysis

import akshare as ak

def stock_profit_forecast_em(symbol: str) -> pd.DataFrame:
    """
    East Money earnings forecast and consensus
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Consensus earnings forecasts with:
            - 机构数量 (Num_analysts): Number of analysts
            - 预测均值 (Consensus): Consensus estimate
            - 预测最高 (High_estimate): Highest estimate
            - 预测最低 (Low_estimate): Lowest estimate
            - 标准差 (Std_dev): Standard deviation
    """

# Get consensus earnings data
consensus_earnings = ak.stock_profit_forecast_em(symbol="000001")

Revenue Forecasts

Revenue Growth Projections

import akshare as ak

def stock_revenue_forecast_em(symbol: str) -> pd.DataFrame:
    """
    Revenue forecast data from East Money
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Revenue projections and growth rates
    """

# Get revenue forecasts
revenue_forecasts = ak.stock_revenue_forecast_em(symbol="000001")

Analyst Coverage and Recommendations

Analyst Recommendations

Stock Recommendations

import akshare as ak

def stock_recommend() -> pd.DataFrame:
    """
    Stock analyst recommendations summary
    
    Returns:
        pd.DataFrame: Recommendation data with columns:
            - 代码 (Code): Stock code
            - 名称 (Name): Stock name
            - 最新评级 (Latest_rating): Latest rating
            - 上次评级 (Previous_rating): Previous rating
            - 目标价 (Target_price): Price target
            - 机构名称 (Institution): Research institution
            - 分析师 (Analyst): Analyst name
            - 评级日期 (Rating_date): Rating date
    """

def stock_recommend_detail(symbol: str) -> pd.DataFrame:
    """
    Detailed analyst recommendations for individual stock
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Detailed recommendation history
    """

# Get overall recommendations
recommendations = ak.stock_recommend()
print(recommendations.head())
#     代码    名称  最新评级  上次评级   目标价     机构名称    分析师    评级日期
# 0  000001  平安银行   买入     增持   12.50   中金公司    张三   2024-12-01
# 1  000002   万科A    增持     买入    9.80   国泰君安    李四   2024-11-30

# Get individual stock recommendations
stock_recommendations = ak.stock_recommend_detail(symbol="000001")

Rating Distribution Analysis

import akshare as ak

def stock_rating_all() -> pd.DataFrame:
    """
    Comprehensive stock rating distribution
    
    Returns:
        pd.DataFrame: Rating statistics across all stocks
    """

def stock_rating_change() -> pd.DataFrame:
    """
    Recent rating changes and upgrades/downgrades
    
    Returns:
        pd.DataFrame: Rating change activity
    """

# Get rating distribution
rating_distribution = ak.stock_rating_all()

# Get recent rating changes
rating_changes = ak.stock_rating_change()

Company Quality Analysis

Dividend Analysis

Dividend History and Yield

import akshare as ak

def stock_dividend_detail(symbol: str) -> pd.DataFrame:
    """
    Detailed dividend history for individual stock
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Dividend history with columns:
            - 分红年度 (Year): Dividend year
            - 送股比例 (Bonus_ratio): Bonus share ratio
            - 转增比例 (Conversion_ratio): Capital reserve conversion
            - 派息比例 (Dividend_ratio): Cash dividend ratio
            - 除权除息日 (Ex_date): Ex-dividend date
            - 股息率 (Yield): Dividend yield
    """

# Get dividend history
dividend_history = ak.stock_dividend_detail(symbol="000001")

Corporate Governance

Shareholding Structure

import akshare as ak

def stock_holder_em(symbol: str) -> pd.DataFrame:
    """
    Shareholding structure and major shareholders
    
    Parameters:
        symbol: Stock code
        
    Returns:
        pd.DataFrame: Shareholder information with columns:
            - 股东名称 (Shareholder): Shareholder name
            - 持股数量 (Shares): Number of shares held
            - 持股比例 (Percentage): Ownership percentage
            - 股东性质 (Type): Shareholder type
            - 报告期 (Period): Reporting period
    """

# Get shareholding structure
shareholders = ak.stock_holder_em(symbol="000001")

Fundamental Analysis Workflows

Comprehensive Company Analysis

import akshare as ak
import pandas as pd

def comprehensive_fundamental_analysis(symbol: str) -> dict:
    """
    Complete fundamental analysis for a stock
    
    Parameters:
        symbol: Stock code
        
    Returns:
        dict: Comprehensive fundamental data
    """
    
    analysis = {}
    
    try:
        # Financial statements and ratios
        analysis['financial_indicators'] = ak.stock_financial_analysis_indicator_em(symbol)
        analysis['financial_abstract'] = ak.stock_financial_abstract(symbol)
        analysis['balance_sheet'] = ak.stock_balance_sheet_by_report_em(symbol)
        analysis['cash_flow'] = ak.stock_cash_flow_sheet_by_report_em(symbol)
        analysis['roe_analysis'] = ak.stock_roe_em(symbol)
        
        # Forward-looking data
        analysis['earnings_forecast'] = ak.stock_profit_forecast_ths(symbol)
        analysis['consensus_estimates'] = ak.stock_profit_forecast_em(symbol)
        analysis['revenue_forecast'] = ak.stock_revenue_forecast_em(symbol)
        
        # Analyst coverage
        analysis['recommendations'] = ak.stock_recommend_detail(symbol)
        
        # Corporate information
        analysis['dividend_history'] = ak.stock_dividend_detail(symbol)
        analysis['shareholders'] = ak.stock_holder_em(symbol)
        
    except Exception as e:
        print(f"Error retrieving data for {symbol}: {e}")
    
    return analysis

def sector_fundamental_comparison(sector_stocks: list) -> pd.DataFrame:
    """
    Compare fundamental metrics across sector stocks
    
    Parameters:
        sector_stocks: List of stock codes in the same sector
        
    Returns:
        pd.DataFrame: Comparative fundamental analysis
    """
    
    comparison_data = []
    
    for symbol in sector_stocks:
        try:
            # Get key metrics
            indicators = ak.stock_financial_analysis_indicator_em(symbol)
            abstract = ak.stock_financial_abstract(symbol)
            
            # Extract key metrics for comparison
            stock_data = {
                'symbol': symbol,
                'revenue_growth': None,  # Extract from indicators
                'profit_growth': None,   # Extract from abstract
                'roe': None,            # Extract from indicators
                'pe_ratio': None,       # Calculate or extract
                'debt_ratio': None      # Extract from balance sheet
            }
            
            comparison_data.append(stock_data)
            
        except Exception as e:
            print(f"Error processing {symbol}: {e}")
    
    return pd.DataFrame(comparison_data)

# Usage examples
# comprehensive_data = comprehensive_fundamental_analysis("000001")
# sector_comparison = sector_fundamental_comparison(["000001", "000002", "600036"])

Screening and Ranking

import akshare as ak

def fundamental_screening(criteria: dict) -> pd.DataFrame:
    """
    Screen stocks based on fundamental criteria
    
    Parameters:
        criteria: Dictionary of screening criteria
        
    Returns:
        pd.DataFrame: Stocks meeting the criteria
    """
    
    # Get overall market data
    earnings_forecasts = ak.stock_profit_forecast()
    recommendations = ak.stock_recommend()
    
    # Apply screening logic
    screened_stocks = []
    
    for _, row in earnings_forecasts.iterrows():
        symbol = row['代码']
        
        # Apply criteria (example logic)
        if (criteria.get('min_growth', 0) <= row.get('预测收益增长率', 0) and
            criteria.get('max_pe', 100) >= row.get('预测PE', 0)):
            
            screened_stocks.append({
                'symbol': symbol,
                'name': row.get('名称'),
                'forecast_eps_growth': row.get('预测收益增长率'),
                'forward_pe': row.get('预测PE')
            })
    
    return pd.DataFrame(screened_stocks)

def create_fundamental_dashboard(symbols: list) -> dict:
    """
    Create fundamental analysis dashboard for multiple stocks
    
    Parameters:
        symbols: List of stock symbols to analyze
        
    Returns:
        dict: Dashboard data for fundamental analysis
    """
    
    dashboard = {
        'earnings_forecasts': {},
        'financial_health': {},
        'valuation_metrics': {},
        'analyst_coverage': {}
    }
    
    for symbol in symbols:
        try:
            dashboard['earnings_forecasts'][symbol] = ak.stock_profit_forecast_em(symbol)
            dashboard['financial_health'][symbol] = ak.stock_financial_analysis_indicator_em(symbol)
            dashboard['analyst_coverage'][symbol] = ak.stock_recommend_detail(symbol)
            
        except Exception as e:
            print(f"Error creating dashboard for {symbol}: {e}")
    
    return dashboard

# Usage examples
screening_criteria = {
    'min_growth': 10,  # Minimum 10% earnings growth
    'max_pe': 20       # Maximum P/E ratio of 20
}

# screened_results = fundamental_screening(screening_criteria)
# dashboard = create_fundamental_dashboard(["000001", "000002", "600036"])

Data Quality and Coverage

Data Characteristics

  • Reporting Frequency: Quarterly and annual financial statements
  • Forecast Horizon: Typically 1-3 years forward-looking estimates
  • Analyst Coverage: Major research institutions and independent analysts
  • Historical Depth: Multi-year financial statement history

Update Schedule

  • Financial Statements: Updated after quarterly earnings releases
  • Analyst Forecasts: Updated continuously as analysts revise estimates
  • Recommendations: Updated as analysts issue new research reports
  • Dividend Data: Updated after dividend announcements

Common Applications

  1. Equity Valuation: DCF modeling and relative valuation analysis
  2. Investment Screening: Identifying stocks meeting specific criteria
  3. Risk Assessment: Financial health and leverage analysis
  4. Sector Analysis: Comparative fundamental analysis within industries
  5. Earnings Analysis: Tracking earnings trends and analyst expectations
  6. Dividend Investing: Identifying sustainable dividend-paying stocks

The fundamental analysis capabilities in AKShare provide comprehensive tools for equity research, company valuation, and investment decision-making based on financial statement analysis and forward-looking estimates.

Install with Tessl CLI

npx tessl i tessl/pypi-akshare

docs

economic-data.md

financial-instruments.md

fundamental-analysis.md

index.md

market-indices.md

stock-data.md

tile.json