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



四、總結(jié)
到此這篇關(guān)于python使用Akshare與Streamlit實(shí)現(xiàn)股票估值分析教程(圖文代碼)的文章就介紹到這了,更多相關(guān)python用Akshare與Streamlit實(shí)現(xiàn)股票分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3如何實(shí)現(xiàn)Win10桌面自動(dòng)切換
這篇文章主要介紹了Python3如何實(shí)現(xiàn)Win10桌面自動(dòng)切換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
python 實(shí)現(xiàn)單通道轉(zhuǎn)3通道
今天小編就為大家分享一篇python 實(shí)現(xiàn)單通道轉(zhuǎn)3通道,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
opencv實(shí)踐項(xiàng)目之圖像拼接詳細(xì)步驟
OpenCV的應(yīng)用領(lǐng)域非常廣泛,包括圖像拼接、圖像降噪、產(chǎn)品質(zhì)檢、人機(jī)交互、人臉識(shí)別、動(dòng)作識(shí)別、動(dòng)作跟蹤、無(wú)人駕駛等,下面這篇文章主要給大家介紹了關(guān)于opencv實(shí)踐項(xiàng)目之圖像拼接的相關(guān)資料,需要的朋友可以參考下2023-05-05
tensorflow使用freeze_graph.py將ckpt轉(zhuǎn)為pb文件的方法
這篇文章主要介紹了tensorflow使用freeze_graph.py將ckpt轉(zhuǎn)為pb文件的方法,需要的朋友可以參考下2020-04-04
pandas數(shù)據(jù)拼接的實(shí)現(xiàn)示例
這篇文章主要介紹了pandas數(shù)據(jù)拼接的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
利用Python實(shí)現(xiàn)簡(jiǎn)易計(jì)算器的示例代碼
最近學(xué)習(xí)了字符串,運(yùn)算符,條件語(yǔ)句,循環(huán)語(yǔ)句,我在想可以用我最近學(xué)的東西做什么? 看到運(yùn)算我就想到了可以做一個(gè)簡(jiǎn)易的計(jì)算器,感興趣的可以了解一下2022-11-11
python3讀取autocad圖形文件.py實(shí)例
這篇文章主要介紹了python3讀取autocad圖形文件.py實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
python使用aiohttp通過(guò)設(shè)置代理爬取基金數(shù)據(jù)簡(jiǎn)單示例
這篇文章主要為大家介紹了python使用aiohttp通過(guò)設(shè)置代理爬取基金數(shù)據(jù)簡(jiǎn)單示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換小程序
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)圖片格式轉(zhuǎn)換小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08

