python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

本文主要是介绍python使用Akshare与Streamlit实现股票估值分析教程(图文代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存...

一、前言

入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存到本地Csv文件,对该公司进行财务分析,如提取近五年,营业收入,净利润数据,并且算出同比增长,以上的分析以图表显示,用户可以很方便的看出发展趋势,通过streamlit 以web形式展示。

二、核心知识点梳理

1、Akshare数据获取

  • 用于从新浪财经接口获取上市公司财务报表(资产负债表、利润表、现金流量表)。

  • 关键函数:ak.stock_financial_report_sina(),需指定股票代码和报表类型。

2、Pandas数据处理

  • 数据清洗:解析日期、设置索引、排序。

  • 计算衍生指标:净利润、同比增长率。

  • 单位转换:将数值单位从“元”转换为“亿元”。

3、Matplotlib可视化

  • 绘制双轴趋势图(营业收入与净利润)。

  • 同比增长率折线图,标注数据标签。

  • 图表格式优化:日期格式化、网格线、中文字体支持。

4、Streamlit Web应用

  • 快速构建交互式仪表盘,支持多标签页布局。

  • 数据动态展示:表格、图表、指标卡片的实时渲染。

5、财务分析基础

  • 净利润 = 营业总收入 - 营业总成本。

  • 同比增长率 =(当期值 - 去年同期值)/ 去年同期值 × 100%。

二、代码逐段解析

1、导入依赖库

import akshare as ak
import pandas as pd
import streamlit CYphBzXas 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个季度)。

注意事项

  • 文件路径需根据本地环境修改(如C:/Users/Hp/Desktop/Test1/)。

3、数据处理与指标计算

# 读取数据并设置日期索引
bs_data = pd.read_csv('C:/Users/Hp/Desktop/Test1/balance_sheet.csv', parse_dates=['报告日'], index_col=CYphBzX'报告日').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=['报告日']:将日期列解析China编程为时间戳。

  • .shift(4):取4期前的数据(季度数据,4期即去年同期)。

  • 单位转换:将原始数据除以1e8(即10^8),转换为“亿元”。

4、Streamlit可视化展示

# 创建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='#ff7f0ejavascript', 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、安装依赖:

pip install akshare pandas streamlit matplotlib

2、启动应用:

streamlit run C:\Users\Hp\Desktop\py\Test1.py

3、效果展示:

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)python使用Akshare与Streamlit实现股票估值分析教程(图文代码)python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

四、总结

到此这篇关于python使用Akshare与Streamlit实现股票估值分析教程(图文代码)的文章就介绍到这了,更多相关python用Akshare与Streamlit实现股票分析内容China编程请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于python使用Akshare与Streamlit实现股票估值分析教程(图文代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155569

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx