0
# Fundamental Analysis
1
2
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.
3
4
## Financial Statement Data
5
6
### Income Statement Analysis
7
8
#### Comprehensive Financial Indicators
9
```python { .api }
10
import akshare as ak
11
12
def stock_financial_analysis_indicator_em(symbol: str) -> pd.DataFrame:
13
"""
14
Comprehensive financial analysis indicators from East Money
15
16
Parameters:
17
symbol: Stock code (e.g., "000001")
18
19
Returns:
20
pd.DataFrame: Financial indicators with columns:
21
- 指标名称 (Indicator): Financial metric name
22
- 报告期 (Period): Reporting period
23
- 指标值 (Value): Metric value
24
- 同比增长率 (YoY_growth): Year-over-year growth rate
25
- 行业平均 (Industry_avg): Industry average
26
- 行业排名 (Industry_rank): Industry ranking
27
"""
28
29
# Get comprehensive financial analysis for Ping An Bank
30
financial_indicators = ak.stock_financial_analysis_indicator_em(symbol="000001")
31
print(financial_indicators.head())
32
# 指标名称 报告期 指标值 同比增长率 行业平均 行业排名
33
# 0 营业收入 2024Q3 1234.56 12.34 987.65 5
34
# 1 净利润 2024Q3 456.78 8.76 321.09 3
35
# 2 ROE 2024Q3 15.67 1.23 12.45 2
36
# 3 ROA 2024Q3 1.89 0.34 1.45 4
37
```
38
39
#### Financial Abstract Data
40
```python { .api }
41
import akshare as ak
42
43
def stock_financial_abstract(symbol: str = "000001") -> pd.DataFrame:
44
"""
45
Financial statement abstract and key metrics
46
47
Parameters:
48
symbol: Stock code
49
50
Returns:
51
pd.DataFrame: Financial abstract with columns:
52
- 报告期 (Period): Reporting period
53
- 营业收入 (Revenue): Operating revenue
54
- 营业收入同比增长 (Revenue_growth): Revenue YoY growth
55
- 净利润 (Net_profit): Net profit
56
- 净利润同比增长 (Profit_growth): Net profit YoY growth
57
- 每股收益 (EPS): Earnings per share
58
- 净资产收益率 (ROE): Return on equity
59
- 每股净资产 (BVPS): Book value per share
60
- 每股经营现金流 (CFPS): Cash flow per share
61
"""
62
63
# Get financial abstract
64
financial_abstract = ak.stock_financial_abstract(symbol="000001")
65
print(financial_abstract.head())
66
# 报告期 营业收入 营业收入同比增长 净利润 净利润同比增长 每股收益 净资产收益率 每股净资产 每股经营现金流
67
# 0 2024Q3 1567.89 12.34 234.56 8.76 0.89 15.67 5.67 1.23
68
# 1 2024Q2 1456.78 10.23 212.34 7.89 0.81 14.89 5.45 1.15
69
```
70
71
### Balance Sheet Data
72
73
#### Balance Sheet by Report Period
74
```python { .api }
75
import akshare as ak
76
77
def stock_balance_sheet_by_report_em(symbol: str = "000001") -> pd.DataFrame:
78
"""
79
Balance sheet data by reporting period
80
81
Parameters:
82
symbol: Stock code
83
84
Returns:
85
pd.DataFrame: Balance sheet items with columns:
86
- 报告期 (Period): Reporting period
87
- 货币资金 (Cash): Cash and equivalents
88
- 总资产 (Total_assets): Total assets
89
- 总负债 (Total_liabilities): Total liabilities
90
- 股东权益合计 (Total_equity): Total shareholders' equity
91
- 资产负债率 (Debt_ratio): Debt-to-assets ratio
92
- 流动比率 (Current_ratio): Current ratio
93
- 速动比率 (Quick_ratio): Quick ratio
94
"""
95
96
def stock_balance_sheet_by_yearly_em(symbol: str = "000001") -> pd.DataFrame:
97
"""
98
Annual balance sheet data
99
100
Parameters:
101
symbol: Stock code
102
103
Returns:
104
pd.DataFrame: Annual balance sheet data
105
"""
106
107
# Get quarterly balance sheet data
108
balance_sheet_q = ak.stock_balance_sheet_by_report_em(symbol="000001")
109
110
# Get annual balance sheet data
111
balance_sheet_y = ak.stock_balance_sheet_by_yearly_em(symbol="000001")
112
```
113
114
### Cash Flow Statement
115
116
#### Cash Flow Analysis
117
```python { .api }
118
import akshare as ak
119
120
def stock_cash_flow_sheet_by_report_em(symbol: str = "000001") -> pd.DataFrame:
121
"""
122
Cash flow statement by reporting period
123
124
Parameters:
125
symbol: Stock code
126
127
Returns:
128
pd.DataFrame: Cash flow data with columns:
129
- 报告期 (Period): Reporting period
130
- 经营活动现金流量净额 (Operating_cf): Operating cash flow
131
- 投资活动现金流量净额 (Investing_cf): Investing cash flow
132
- 筹资活动现金流量净额 (Financing_cf): Financing cash flow
133
- 现金及现金等价物净增加额 (Net_cf): Net change in cash
134
- 自由现金流 (Free_cf): Free cash flow
135
"""
136
137
def stock_cash_flow_sheet_by_yearly_em(symbol: str = "000001") -> pd.DataFrame:
138
"""
139
Annual cash flow statement data
140
141
Parameters:
142
symbol: Stock code
143
144
Returns:
145
pd.DataFrame: Annual cash flow data
146
"""
147
148
# Get cash flow data
149
cash_flow_q = ak.stock_cash_flow_sheet_by_report_em(symbol="000001")
150
cash_flow_y = ak.stock_cash_flow_sheet_by_yearly_em(symbol="000001")
151
```
152
153
## Financial Ratio Analysis
154
155
### Profitability Ratios
156
157
#### Detailed Financial Ratios
158
```python { .api }
159
import akshare as ak
160
161
def stock_financial_hk_report_em(symbol: str) -> pd.DataFrame:
162
"""
163
Hong Kong listed stock financial ratios
164
165
Parameters:
166
symbol: HK stock code
167
168
Returns:
169
pd.DataFrame: Financial ratios and metrics
170
"""
171
172
def stock_roe_em(symbol: str = "000001") -> pd.DataFrame:
173
"""
174
Return on Equity (ROE) analysis and components
175
176
Parameters:
177
symbol: Stock code
178
179
Returns:
180
pd.DataFrame: ROE decomposition with columns:
181
- 报告期 (Period): Reporting period
182
- 净资产收益率 (ROE): Return on equity
183
- 净利润率 (Net_margin): Net profit margin
184
- 资产周转率 (Asset_turnover): Asset turnover ratio
185
- 权益乘数 (Equity_multiplier): Equity multiplier
186
- 杜邦分析 (DuPont): DuPont analysis components
187
"""
188
189
# Get ROE analysis
190
roe_analysis = ak.stock_roe_em(symbol="000001")
191
print(roe_analysis.head())
192
# 报告期 净资产收益率 净利润率 资产周转率 权益乘数
193
# 0 2024Q3 15.67 8.45 0.89 2.08
194
# 1 2024Q2 14.89 8.12 0.87 2.11
195
```
196
197
### Valuation Metrics
198
199
#### Market Valuation Indicators
200
```python { .api }
201
import akshare as ak
202
203
def stock_a_pe_lg() -> pd.DataFrame:
204
"""
205
A-share market PE ratio distribution
206
207
Returns:
208
pd.DataFrame: Market PE statistics and distribution
209
"""
210
211
def stock_a_indicator_lg() -> pd.DataFrame:
212
"""
213
A-share market valuation indicators
214
215
Returns:
216
pd.DataFrame: Market-wide valuation metrics including:
217
- 平均市盈率 (Avg_PE): Average P/E ratio
218
- 平均市净率 (Avg_PB): Average P/B ratio
219
- 平均股息率 (Avg_dividend): Average dividend yield
220
- 总市值 (Total_mv): Total market cap
221
- 流通市值 (Float_mv): Floating market cap
222
"""
223
224
# Get market PE distribution
225
market_pe = ak.stock_a_pe_lg()
226
227
# Get market valuation indicators
228
market_valuation = ak.stock_a_indicator_lg()
229
```
230
231
## Earnings and Forecasts
232
233
### Earnings Forecast Data
234
235
#### Analyst Earnings Forecasts
236
```python { .api }
237
import akshare as ak
238
239
def stock_profit_forecast() -> pd.DataFrame:
240
"""
241
Earnings forecast summary across all stocks
242
243
Returns:
244
pd.DataFrame: Earnings forecasts with columns:
245
- 代码 (Code): Stock code
246
- 名称 (Name): Stock name
247
- 2024预测每股收益 (EPS_2024F): 2024 forecast EPS
248
- 2025预测每股收益 (EPS_2025F): 2025 forecast EPS
249
- 2026预测每股收益 (EPS_2026F): 2026 forecast EPS
250
- 预测PE (Forecast_PE): Forward P/E ratio
251
- 预测收益增长率 (Growth_rate): Forecast earnings growth
252
"""
253
254
def stock_profit_forecast_ths(symbol: str) -> pd.DataFrame:
255
"""
256
Individual stock earnings forecast from Tonghuashun
257
258
Parameters:
259
symbol: Stock code
260
261
Returns:
262
pd.DataFrame: Detailed earnings forecasts for individual stock
263
"""
264
265
# Get overall earnings forecasts
266
earnings_forecasts = ak.stock_profit_forecast()
267
print(earnings_forecasts.head())
268
# 代码 名称 2024预测每股收益 2025预测每股收益 2026预测每股收益 预测PE 预测收益增长率
269
# 0 000001 平安银行 1.45 1.67 1.89 7.2 15.2
270
# 1 000002 万科A 0.89 1.02 1.15 8.7 14.6
271
272
# Get individual stock forecast
273
individual_forecast = ak.stock_profit_forecast_ths(symbol="000001")
274
```
275
276
#### Earnings Surprise Analysis
277
```python { .api }
278
import akshare as ak
279
280
def stock_profit_forecast_em(symbol: str) -> pd.DataFrame:
281
"""
282
East Money earnings forecast and consensus
283
284
Parameters:
285
symbol: Stock code
286
287
Returns:
288
pd.DataFrame: Consensus earnings forecasts with:
289
- 机构数量 (Num_analysts): Number of analysts
290
- 预测均值 (Consensus): Consensus estimate
291
- 预测最高 (High_estimate): Highest estimate
292
- 预测最低 (Low_estimate): Lowest estimate
293
- 标准差 (Std_dev): Standard deviation
294
"""
295
296
# Get consensus earnings data
297
consensus_earnings = ak.stock_profit_forecast_em(symbol="000001")
298
```
299
300
### Revenue Forecasts
301
302
#### Revenue Growth Projections
303
```python { .api }
304
import akshare as ak
305
306
def stock_revenue_forecast_em(symbol: str) -> pd.DataFrame:
307
"""
308
Revenue forecast data from East Money
309
310
Parameters:
311
symbol: Stock code
312
313
Returns:
314
pd.DataFrame: Revenue projections and growth rates
315
"""
316
317
# Get revenue forecasts
318
revenue_forecasts = ak.stock_revenue_forecast_em(symbol="000001")
319
```
320
321
## Analyst Coverage and Recommendations
322
323
### Analyst Recommendations
324
325
#### Stock Recommendations
326
```python { .api }
327
import akshare as ak
328
329
def stock_recommend() -> pd.DataFrame:
330
"""
331
Stock analyst recommendations summary
332
333
Returns:
334
pd.DataFrame: Recommendation data with columns:
335
- 代码 (Code): Stock code
336
- 名称 (Name): Stock name
337
- 最新评级 (Latest_rating): Latest rating
338
- 上次评级 (Previous_rating): Previous rating
339
- 目标价 (Target_price): Price target
340
- 机构名称 (Institution): Research institution
341
- 分析师 (Analyst): Analyst name
342
- 评级日期 (Rating_date): Rating date
343
"""
344
345
def stock_recommend_detail(symbol: str) -> pd.DataFrame:
346
"""
347
Detailed analyst recommendations for individual stock
348
349
Parameters:
350
symbol: Stock code
351
352
Returns:
353
pd.DataFrame: Detailed recommendation history
354
"""
355
356
# Get overall recommendations
357
recommendations = ak.stock_recommend()
358
print(recommendations.head())
359
# 代码 名称 最新评级 上次评级 目标价 机构名称 分析师 评级日期
360
# 0 000001 平安银行 买入 增持 12.50 中金公司 张三 2024-12-01
361
# 1 000002 万科A 增持 买入 9.80 国泰君安 李四 2024-11-30
362
363
# Get individual stock recommendations
364
stock_recommendations = ak.stock_recommend_detail(symbol="000001")
365
```
366
367
#### Rating Distribution Analysis
368
```python { .api }
369
import akshare as ak
370
371
def stock_rating_all() -> pd.DataFrame:
372
"""
373
Comprehensive stock rating distribution
374
375
Returns:
376
pd.DataFrame: Rating statistics across all stocks
377
"""
378
379
def stock_rating_change() -> pd.DataFrame:
380
"""
381
Recent rating changes and upgrades/downgrades
382
383
Returns:
384
pd.DataFrame: Rating change activity
385
"""
386
387
# Get rating distribution
388
rating_distribution = ak.stock_rating_all()
389
390
# Get recent rating changes
391
rating_changes = ak.stock_rating_change()
392
```
393
394
## Company Quality Analysis
395
396
### Dividend Analysis
397
398
#### Dividend History and Yield
399
```python { .api }
400
import akshare as ak
401
402
def stock_dividend_detail(symbol: str) -> pd.DataFrame:
403
"""
404
Detailed dividend history for individual stock
405
406
Parameters:
407
symbol: Stock code
408
409
Returns:
410
pd.DataFrame: Dividend history with columns:
411
- 分红年度 (Year): Dividend year
412
- 送股比例 (Bonus_ratio): Bonus share ratio
413
- 转增比例 (Conversion_ratio): Capital reserve conversion
414
- 派息比例 (Dividend_ratio): Cash dividend ratio
415
- 除权除息日 (Ex_date): Ex-dividend date
416
- 股息率 (Yield): Dividend yield
417
"""
418
419
# Get dividend history
420
dividend_history = ak.stock_dividend_detail(symbol="000001")
421
```
422
423
### Corporate Governance
424
425
#### Shareholding Structure
426
```python { .api }
427
import akshare as ak
428
429
def stock_holder_em(symbol: str) -> pd.DataFrame:
430
"""
431
Shareholding structure and major shareholders
432
433
Parameters:
434
symbol: Stock code
435
436
Returns:
437
pd.DataFrame: Shareholder information with columns:
438
- 股东名称 (Shareholder): Shareholder name
439
- 持股数量 (Shares): Number of shares held
440
- 持股比例 (Percentage): Ownership percentage
441
- 股东性质 (Type): Shareholder type
442
- 报告期 (Period): Reporting period
443
"""
444
445
# Get shareholding structure
446
shareholders = ak.stock_holder_em(symbol="000001")
447
```
448
449
## Fundamental Analysis Workflows
450
451
### Comprehensive Company Analysis
452
```python { .api }
453
import akshare as ak
454
import pandas as pd
455
456
def comprehensive_fundamental_analysis(symbol: str) -> dict:
457
"""
458
Complete fundamental analysis for a stock
459
460
Parameters:
461
symbol: Stock code
462
463
Returns:
464
dict: Comprehensive fundamental data
465
"""
466
467
analysis = {}
468
469
try:
470
# Financial statements and ratios
471
analysis['financial_indicators'] = ak.stock_financial_analysis_indicator_em(symbol)
472
analysis['financial_abstract'] = ak.stock_financial_abstract(symbol)
473
analysis['balance_sheet'] = ak.stock_balance_sheet_by_report_em(symbol)
474
analysis['cash_flow'] = ak.stock_cash_flow_sheet_by_report_em(symbol)
475
analysis['roe_analysis'] = ak.stock_roe_em(symbol)
476
477
# Forward-looking data
478
analysis['earnings_forecast'] = ak.stock_profit_forecast_ths(symbol)
479
analysis['consensus_estimates'] = ak.stock_profit_forecast_em(symbol)
480
analysis['revenue_forecast'] = ak.stock_revenue_forecast_em(symbol)
481
482
# Analyst coverage
483
analysis['recommendations'] = ak.stock_recommend_detail(symbol)
484
485
# Corporate information
486
analysis['dividend_history'] = ak.stock_dividend_detail(symbol)
487
analysis['shareholders'] = ak.stock_holder_em(symbol)
488
489
except Exception as e:
490
print(f"Error retrieving data for {symbol}: {e}")
491
492
return analysis
493
494
def sector_fundamental_comparison(sector_stocks: list) -> pd.DataFrame:
495
"""
496
Compare fundamental metrics across sector stocks
497
498
Parameters:
499
sector_stocks: List of stock codes in the same sector
500
501
Returns:
502
pd.DataFrame: Comparative fundamental analysis
503
"""
504
505
comparison_data = []
506
507
for symbol in sector_stocks:
508
try:
509
# Get key metrics
510
indicators = ak.stock_financial_analysis_indicator_em(symbol)
511
abstract = ak.stock_financial_abstract(symbol)
512
513
# Extract key metrics for comparison
514
stock_data = {
515
'symbol': symbol,
516
'revenue_growth': None, # Extract from indicators
517
'profit_growth': None, # Extract from abstract
518
'roe': None, # Extract from indicators
519
'pe_ratio': None, # Calculate or extract
520
'debt_ratio': None # Extract from balance sheet
521
}
522
523
comparison_data.append(stock_data)
524
525
except Exception as e:
526
print(f"Error processing {symbol}: {e}")
527
528
return pd.DataFrame(comparison_data)
529
530
# Usage examples
531
# comprehensive_data = comprehensive_fundamental_analysis("000001")
532
# sector_comparison = sector_fundamental_comparison(["000001", "000002", "600036"])
533
```
534
535
### Screening and Ranking
536
```python { .api }
537
import akshare as ak
538
539
def fundamental_screening(criteria: dict) -> pd.DataFrame:
540
"""
541
Screen stocks based on fundamental criteria
542
543
Parameters:
544
criteria: Dictionary of screening criteria
545
546
Returns:
547
pd.DataFrame: Stocks meeting the criteria
548
"""
549
550
# Get overall market data
551
earnings_forecasts = ak.stock_profit_forecast()
552
recommendations = ak.stock_recommend()
553
554
# Apply screening logic
555
screened_stocks = []
556
557
for _, row in earnings_forecasts.iterrows():
558
symbol = row['代码']
559
560
# Apply criteria (example logic)
561
if (criteria.get('min_growth', 0) <= row.get('预测收益增长率', 0) and
562
criteria.get('max_pe', 100) >= row.get('预测PE', 0)):
563
564
screened_stocks.append({
565
'symbol': symbol,
566
'name': row.get('名称'),
567
'forecast_eps_growth': row.get('预测收益增长率'),
568
'forward_pe': row.get('预测PE')
569
})
570
571
return pd.DataFrame(screened_stocks)
572
573
def create_fundamental_dashboard(symbols: list) -> dict:
574
"""
575
Create fundamental analysis dashboard for multiple stocks
576
577
Parameters:
578
symbols: List of stock symbols to analyze
579
580
Returns:
581
dict: Dashboard data for fundamental analysis
582
"""
583
584
dashboard = {
585
'earnings_forecasts': {},
586
'financial_health': {},
587
'valuation_metrics': {},
588
'analyst_coverage': {}
589
}
590
591
for symbol in symbols:
592
try:
593
dashboard['earnings_forecasts'][symbol] = ak.stock_profit_forecast_em(symbol)
594
dashboard['financial_health'][symbol] = ak.stock_financial_analysis_indicator_em(symbol)
595
dashboard['analyst_coverage'][symbol] = ak.stock_recommend_detail(symbol)
596
597
except Exception as e:
598
print(f"Error creating dashboard for {symbol}: {e}")
599
600
return dashboard
601
602
# Usage examples
603
screening_criteria = {
604
'min_growth': 10, # Minimum 10% earnings growth
605
'max_pe': 20 # Maximum P/E ratio of 20
606
}
607
608
# screened_results = fundamental_screening(screening_criteria)
609
# dashboard = create_fundamental_dashboard(["000001", "000002", "600036"])
610
```
611
612
## Data Quality and Coverage
613
614
### Data Characteristics
615
- **Reporting Frequency**: Quarterly and annual financial statements
616
- **Forecast Horizon**: Typically 1-3 years forward-looking estimates
617
- **Analyst Coverage**: Major research institutions and independent analysts
618
- **Historical Depth**: Multi-year financial statement history
619
620
### Update Schedule
621
- **Financial Statements**: Updated after quarterly earnings releases
622
- **Analyst Forecasts**: Updated continuously as analysts revise estimates
623
- **Recommendations**: Updated as analysts issue new research reports
624
- **Dividend Data**: Updated after dividend announcements
625
626
### Common Applications
627
1. **Equity Valuation**: DCF modeling and relative valuation analysis
628
2. **Investment Screening**: Identifying stocks meeting specific criteria
629
3. **Risk Assessment**: Financial health and leverage analysis
630
4. **Sector Analysis**: Comparative fundamental analysis within industries
631
5. **Earnings Analysis**: Tracking earnings trends and analyst expectations
632
6. **Dividend Investing**: Identifying sustainable dividend-paying stocks
633
634
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.