python使用Akshare與Streamlit實現股票估值分析教程(圖文代碼)
一、前言
入職測試中的一道題,要求:從Akshare下載某一個股票近十年的財務報表包括,資產負債表,利潤表,現金流量表,保存到本地Csv文件,對該公司進行財務分析,如提取近五年,營業(yè)收入,凈利潤數據,并且算出同比增長,以上的分析以圖表顯示,用戶可以很方便的看出發(fā)展趨勢,通過streamlit 以web形式展示。
二、核心知識點梳理
1、Akshare數據獲取
用于從新浪財經接口獲取上市公司財務報表(資產負債表、利潤表、現金流量表)。
關鍵函數:
ak.stock_financial_report_sina(),需指定股票代碼和報表類型。
2、Pandas數據處理
數據清洗:解析日期、設置索引、排序。
計算衍生指標:凈利潤、同比增長率。
單位轉換:將數值單位從“元”轉換為“億元”。
3、Matplotlib可視化
繪制雙軸趨勢圖(營業(yè)收入與凈利潤)。
同比增長率折線圖,標注數據標簽。
圖表格式優(yōu)化:日期格式化、網格線、中文字體支持。
4、Streamlit Web應用
快速構建交互式儀表盤,支持多標簽頁布局。
數據動態(tài)展示:表格、圖表、指標卡片的實時渲染。
5、財務分析基礎
凈利潤 = 營業(yè)總收入 - 營業(yè)總成本。
同比增長率 =(當期值 - 去年同期值)/ 去年同期值 × 100%。
二、代碼逐段解析
1、導入依賴庫
import akshare as ak import pandas as pd import streamlit as st import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter
作用:
akshare:獲取股票財務數據。pandas:數據清洗與計算。streamlit:構建Web界面。matplotlib:生成可視化圖表。
2、數據獲取與保存
# 獲取貴州茅臺近十年財務報表
balance_sheet = ak.stock_financial_report_sina(stock="sh600519", symbol="資產負債表").head(40)
income_statement = ak.stock_financial_report_sina(stock="sh600519", symbol="利潤表").head(40)
cash_flow = ak.stock_financial_report_sina(stock="sh600519", symbol="現金流量表").head(40)
# 保存為CSV文件
balance_sheet.to_csv('C:/Users/Hp/Desktop/Test1/balance_sheet.csv', index=False)#要填你要保存的地址
income_statement.to_csv('C:/Users/Hp/Desktop/Test1/income_statement.csv', index=False)
cash_flow.to_csv('C:/Users/Hp/Desktop/Test1/cash_flow.csv', index=False)關鍵參數:
stock="sh600519":指定股票代碼(貴州茅臺)。symbol:指定報表類型(資產負債表/利潤表/現金流量表)。.head(40):取前40行數據(按季度存儲,10年共40個季度)。
注意事項:
文件路徑需根據本地環(huán)境修改(如
C:/Users/Hp/Desktop/Test1/)。
3、數據處理與指標計算
# 讀取數據并設置日期索引
bs_data = pd.read_csv('C:/Users/Hp/Desktop/Test1/balance_sheet.csv', parse_dates=['報告日'], index_col='報告日').head(20)
is_data = pd.read_csv('C:/Users/Hp/Desktop/Test1/income_statement.csv', parse_dates=['報告日'], index_col='報告日').head(20)
cf_data = pd.read_csv('C:/Users/Hp/Desktop/Test1/cash_flow.csv', parse_dates=['報告日'], index_col='報告日').head(20)
# 按日期排序
bs_data = bs_data.sort_values(by='報告日')
is_data = is_data.sort_values(by='報告日')
cf_data = cf_data.sort_values(by='報告日')
# 計算凈利潤
is_data['總凈利潤'] = is_data['營業(yè)總收入'] - is_data['營業(yè)總成本']
# 計算同比增長率
is_data['營收同比增長'] = (is_data['營業(yè)收入'] - is_data['營業(yè)收入'].shift(4)) / is_data['營業(yè)收入'].shift(4) * 100
is_data['總凈利潤同比增長'] = (is_data['總凈利潤'] - is_data['總凈利潤'].shift(4)) / is_data['總凈利潤'].shift(4) * 100
# 單位轉換為億元
is_data['營業(yè)收入_億元'] = is_data['營業(yè)收入'] / 1e8
is_data['總凈利潤_億元'] = is_data['總凈利潤'] / 1e8關鍵操作:
parse_dates=['報告日']:將日期列解析為時間戳。.shift(4):取4期前的數據(季度數據,4期即去年同期)。單位轉換:將原始數據除以1e8(即10^8),轉換為“億元”。
4、Streamlit可視化展示
# 創(chuàng)建Web界面
st.title('貴州茅臺(600519)財務分析儀表板')
# 設置中文字體
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 分標簽頁展示
tab1, tab2 = st.tabs(["財務指標趨勢", "同比增長分析"])
with tab1:
# 營業(yè)收入與凈利潤趨勢圖
fig1, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))
ax1.plot(is_data.index, is_data['營業(yè)收入_億元'], label='營業(yè)收入', color='#1f77b4', marker='o')
ax2.plot(is_data.index, is_data['總凈利潤_億元'], label='總凈利潤', color='#2ca02c', marker='s')
# 設置圖表格式(略)
st.pyplot(fig1)
with tab2:
# 同比增長率分析
growth_data = is_data[['營收同比增長', '總凈利潤同比增長']].dropna()
fig2, ax = plt.subplots(figsize=(12, 6))
ax.plot(growth_data.index, growth_data['營收同比增長'], label='營收同比增長率', color='#d62728', marker='^')
ax.plot(growth_data.index, growth_data['總凈利潤同比增長'], label='凈利潤同比增長率', color='#ff7f0e', marker='d')
# 設置圖表格式(略)
st.pyplot(fig2)
# 展示核心數據表格
st.subheader("核心財務數據")
col1, col2 = st.columns(2)
with col1:
st.dataframe(is_data[['營業(yè)收入_億元', '總凈利潤_億元']].tail(1).style.format("{:.2f}"))
with col2:
st.dataframe(growth_data[['營收同比增長', '總凈利潤同比增長']].tail(1).style.format("{:.1f}%"))功能亮點:
雙標簽頁設計,分別展示趨勢與增長率。
數據表格動態(tài)更新,始終顯示最新季度結果。
三、運行與效果
1、安裝依賴:
pip install akshare pandas streamlit matplotlib
2、啟動應用:
streamlit run C:\Users\Hp\Desktop\py\Test1.py
3、效果展示:



四、總結
到此這篇關于python使用Akshare與Streamlit實現股票估值分析教程(圖文代碼)的文章就介紹到這了,更多相關python用Akshare與Streamlit實現股票分析內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python程序運行添加命令行參數argparse模塊具體用法詳解
這篇文章主要給大家介紹了關于python程序運行添加命令行參數argparse模塊具體用法的相關資料,argparse是Python內置的一個用于命令項選項與參數解析的模塊,通過在程序中定義好我們需要的參數,需要的朋友可以參考下2024-01-01
Python使用multiprocessing模塊實現多進程并發(fā)處理大數據量的示例代碼
這篇文章主要介紹了Python使用multiprocessing模塊實現多進程并發(fā)處理大數據量的示例代碼,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
Python中的異常處理try/except/finally/raise用法分析
這篇文章主要介紹了Python中的異常處理try/except/finally/raise用法,結合實例形式分析了Python異常處理try/except/finally/raise相關功能與使用操作技巧,并附帶了Python常見異常的表格說明,需要的朋友可以參考下2019-02-02

