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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置