文章目录
- 用于从新浪财经接口获取上市公司财务报表(资产负债表、利润表、现金流量表)。 关键函数:ak.stock_financial_report_sina(),需指定股票代码和报表类型。
- 数据清洗:解析日期、设置索引、排序。 计算衍生指标:净利润、同比增长率。 单位转换:将数值单位从“元”转换为“亿元”。
- 绘制双轴趋势图(营业收入与净利润)。 同比增长率折线图,标注数据标签。 图表格式优化:日期格式化、网格线、中文字体支持。
- 快速构建交互式仪表盘,支持多标签页布局。 数据动态展示:表格、图表、指标卡片的实时渲染。
- 净利润 = 营业总收入 – 营业总成本。 同比增长率 =(当期值 – 去年同期值)/ 去年同期值 × 100%。
- 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:生成可视化图表。
- # 获取贵州茅台近十年财务报表 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个季度)。 注意事项: 文件路径需根据本地环境修改(如C:/Users/Hp/Desktop/Test1/)。
- # 读取数据并设置日期索引 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[‘营业总收入’] – is_data[‘营业总成本’] # 计算同比增长率 is_data[‘营收同比增长’] = (is_data[‘营业收入’] – is_data[‘营业收入’].shift(4)) / is_data[‘营业收入’].shift(4) * 100 is_data[‘总净利润同比增长’] = (is_data[‘总净利润’] – is_data[‘总净利润’].shift(4)) / is_data[‘总净利润’].shift(4) * 100 # 单位转换为亿元 is_data[‘营业收入_亿元’] = is_data[‘营业收入’] / 1e8 is_data[‘总净利润_亿元’] = is_data[‘总净利润’] / 1e8 关键操作: parse_dates=['报告日']:将日期列解析为时间戳。 .shift(4):取4期前的数据(季度数据,4期即去年同期)。 单位转换:将原始数据除以1e8(即10^8),转换为“亿元”。
- # 创建Web界面 st.title(‘贵州茅台(600519)财务分析仪表板’) # 设置中文字体 plt.rcParams[‘font.sans-serif’] = [‘SimHei’] plt.rcParams[‘axes.unicode_minus’] = False # 分标签页展示 tab1, tab2 = st.tabs([“财务指标趋势”, “同比增长分析”]) with tab1: # 营业收入与净利润趋势图 fig1, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10)) ax1.plot(is_data.index, is_data[‘营业收入_亿元’], label=’营业收入’, 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[[‘营业收入_亿元’, ‘总净利润_亿元’]].tail(1).style.format(“{:.2f}”)) with col2: st.dataframe(growth_data[[‘营收同比增长’, ‘总净利润同比增长’]].tail(1).style.format(“{:.1f}%”)) 功能亮点: 双标签页设计,分别展示趋势与增长率。 数据表格动态更新,始终显示最新季度结果。
目录
- 一、前言
- 二、核心知识点梳理
- 1、Akshare数据获取
- 2、Pandas数据处理
- 3、Matplotlib可视化
- 4、Streamlit Web应用
- 5、财务分析基础
- 二、代码逐段解析
- 1、导入依赖库
- 2、数据获取与保存
- 3、数据处理与指标计算
- 4、Streamlit可视化展示
- 三、运行与效果
- 1、安装依赖:
- 2、启动应用:
- 3、效果展示:
- 四、总结
入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存到本地Csv文件,对该公司进行财务分析,如提取近五年,营业收入,净利润数据,并且算出同比增长,以上的分析以图表显示,用户可以很方便的看出发展趋势,通过streamlit 以web形式展示。
-
用于从新浪财经接口获取上市公司财务报表(资产负债表、利润表、现金流量表)。
-
关键函数:ak.stock_financial_report_sina(),需指定股票代码和报表类型。
用于从新浪财经接口获取上市公司财务报表(资产负债表、利润表、现金流量表)。
关键函数:ak.stock_financial_report_sina(),需指定股票代码和报表类型。
-
数据清洗:解析日期、设置索引、排序。
-
计算衍生指标:净利润、同比增长率。
-
单位转换:将数值单位从“元”转换为“亿元”。
数据清洗:解析日期、设置索引、排序。
计算衍生指标:净利润、同比增长率。
单位转换:将数值单位从“元”转换为“亿元”。
-
绘制双轴趋势图(营业收入与净利润)。
-
同比增长率折线图,标注数据标签。
-
图表格式优化:日期格式化、网格线、中文字体支持。
绘制双轴趋势图(营业收入与净利润)。
同比增长率折线图,标注数据标签。
图表格式优化:日期格式化、网格线、中文字体支持。
-
快速构建交互式仪表盘,支持多标签页布局。
-
数据动态展示:表格、图表、指标卡片的实时渲染。
快速构建交互式仪表盘,支持多标签页布局。
数据动态展示:表格、图表、指标卡片的实时渲染。
-
净利润 = 营业总收入 – 营业总成本。
-
同比增长率 =(当期值 – 去年同期值)/ 去年同期值 × 100%。
净利润 = 营业总收入 – 营业总成本。
同比增长率 =(当期值 – 去年同期值)/ 去年同期值 × 100%。
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:生成可视化图表。
# 获取贵州茅台近十年财务报表
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个季度)。
注意事项:
-
文件路径需根据本地环境修改(如
C:/Users/Hp/Desktop/Test1/)。
# 读取数据并设置日期索引
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['营业总收入'] - is_data['营业总成本']
# 计算同比增长率
is_data['营收同比增长'] = (is_data['营业收入'] - is_data['营业收入'].shift(4)) / is_data['营业收入'].shift(4) * 100
is_data['总净利润同比增长'] = (is_data['总净利润'] - is_data['总净利润'].shift(4)) / is_data['总净利润'].shift(4) * 100
# 单位转换为亿元
is_data['营业收入_亿元'] = is_data['营业收入'] / 1e8
is_data['总净利润_亿元'] = is_data['总净利润'] / 1e8
关键操作:
-
parse_dates=['报告日']:将日期列解析为时间戳。 -
.shift(4):取4期前的数据(季度数据,4期即去年同期)。 -
单位转换:将原始数据除以1e8(即10^8),转换为“亿元”。
# 创建Web界面
st.title('贵州茅台(600519)财务分析仪表板')
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 分标签页展示
tab1, tab2 = st.tabs(["财务指标趋势", "同比增长分析"])
with tab1:
# 营业收入与净利润趋势图
fig1, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))
ax1.plot(is_data.index, is_data['营业收入_亿元'], label='营业收入', 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[['营业收入_亿元', '总净利润_亿元']].tail(1).style.format("{:.2f}"))
with col2:
st.dataframe(growth_data[['营收同比增长', '总净利润同比增长']].tail(1).style.format("{:.1f}%"))
功能亮点:
-
双标签页设计,分别展示趋势与增长率。
-
数据表格动态更新,始终显示最新季度结果。
pip install akshare pandas streamlit matplotlib
streamlit run C:UsersHpDesktoppyTest1.py



到此这篇关于python使用Akshare与Streamlit实现股票估值分析教程(图文代码)的文章就介绍到这了,更多相关python用Akshare与Streamlit实现股票分析内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python股票开源库akshare的具体使用
- python使用Streamlit库制作Web可视化页面
- 构建可视化 web的 Python 神器streamlit
- Python streamlit构建令人惊叹的可视化Web高级主题界面
- Python使用Streamlit快速创建仪表盘
- Python Streamlit制作交互式可视化网页应用实例
- Python Streamlit实现文件的上传和下载功能