基于Streamlit的金融数据分析与可视化平台
本项目是一个基于Streamlit框架开发的金融数据分析与可视化平台,旨在实现对A股市场数据的多维度分析。系统整合了行业分类、个股行情、财务数据、指数走势等多源数据,为投资者提供全面的市场洞察和投资决策支持。
一、 核心价值
-
数据集成:整合8个关键金融数据源,实现一站式数据分析
-
智能分析:内置多因子评估模型和增长分析算法
-
可视化交互:提供丰富的交互式图表和实时数据展示
-
用户友好:采用现代化UI设计,操作简便直观
二、流程分析
三、数据准备
数据来源:Tushare数据
fin_data.csv文件字段:

index_trdata.csv文件字段:

stk_trdata.csv文件字段:

复权交易数据2023.csv、复权交易数据2024.csv、复权交易数据2025.csv文件字段:



股票基本信息表.xlsx文件字段:

国防军工复权交易数据.xlsx文件字段:

沪深300指数交易数据.xlsx文件字段:

交易数据2024.csv、交易数据2025.csv文件字段:


上市公司基本信息.xlsx文件字段:

最新个股申万行业分类(完整版-截至7月末).xlsx文件字段:

四、技术栈
-
前端框架: Streamlit 1.28+
-
数据处理: Pandas, NumPy
-
可视化: Plotly, Plotly Express
-
部署: 本地/云端Streamlit部署
from datetime import datetime, date, timedelta
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.graph_objects as go
import plotly.express as px
from plotly.subplots import make_subplots
import streamlit as st
import warnings
warnings.filterwarnings('ignore')
五、核心功能实现
1.页面配置与样式设计
系统首先进行页面配置和样式设计,确保界面美观且具有良好的用户体验:
# 设置页面的标题、图标和布局
st.set_page_config(
page_title="金融数据挖掘及其应用综合实训_xxx",
layout='wide',
initial_sidebar_state='expanded'
)
# 自定义CSS样式
st.markdown("""
<style>
/* 主背景 - 紫白渐变色 */
.stApp {
background: linear-gradient(135deg, #f9f0ff 0%, #f5f0ff 25%, #f0f0ff 50%, #ebf0ff 75%, #e6f0ff 100%);
}
/* 侧边栏样式 */
section[data-testid="stSidebar"] {
background: linear-gradient(180deg, #8a2be2 0%, #9370db 50%, #ba55d3 100%);
}
/* 更多样式定义... */
</style>
""", unsafe_allow_html=True)
2.数据加载模块
系统设计了load_all_data()函数,负责加载和预处理各类金融数据,包括指数数据、个股行情数据、财务数据等:
@st.cache_data(ttl=3600, show_spinner="正在加载数据,请稍候...")
def load_all_data():
"""加载所有数据文件"""
data_dict = {}
# 1. 读取行业指数数据
try:
index_data = pd.read_csv('index_trdata.csv')
# 数据处理与转换...
data_dict['index_data'] = index_data
except Exception as e:
data_dict['index_data'] = pd.DataFrame()
# 2. 读取个股行情数据
try:
stk_data = pd.read_csv('stk_trdata.csv')
# 数据处理与转换...
data_dict['stk_data'] = stk_data
except Exception as e:
data_dict['stk_data'] = pd.DataFrame()
# 更多数据加载...
return data_dict
使用@st.cache_data装饰器可以缓存数据,提高应用性能,避免重复加载。
3.财务增长率计算功能
实现了calculate_growth_rates()函数,用于计算指定股票的营业收入增长率和净利润增长率:
def calculate_growth_rates(fin_data, stock_code, year):
"""计算指定股票的财务增长率"""
if fin_data.empty or '股票代码' not in fin_data.columns:
return None, None
# 获取指定股票的财务数据
stock_fin_data = fin_data[fin_data['股票代码'] == stock_code].copy()
if stock_fin_data.empty:
return None, None
# 按年度排序
stock_fin_data = stock_fin_data.sort_values('年度')
# 获取当前年度和前一年的数据并计算增长率...
return revenue_growth, profit_growth
4.市场总览功能
市场总览页面提供主要市场指数行情展示和行业统计分析功能,通过标签页组织不同内容:
# 市场总览页面
if nm == '市场总览':
# 使用渐变标题
st.markdown("""
<div style="background: linear-gradient(90deg, #9370db, #8a2be2);
padding: 20px;
border-radius: 15px;
margin-bottom: 30px;
text-align: center;
box-shadow: 0 4px 12px rgba(138, 43, 226, 0.3);">
<h1 style="color: white; margin: 0; font-size: 2.5em;">📈 市场总览</h1>
</div>
""", unsafe_allow_html=True)
t1, t2 = st.tabs(["📊 主要市场指数行情", "📈 行业统计分析"])
with t1:
# 主要市场指数行情内容...
with t2:
# 行业统计分析内容...
5.数据可视化实现
使用 Plotly 创建多种金融图表,如指数走势图、涨跌幅对比图等:
# 创建子图
n_indices = min(3, len(indices_data))
fig = make_subplots(
rows=1, cols=n_indices,
subplot_titles=list(indices_data.keys())[:n_indices],
shared_xaxes=False
)
# 使用紫色系颜色
colors = ['#9370db', '#8a2be2', '#ba55d3']
for i, (idx_name, idx_data) in enumerate(list(indices_data.items())[:n_indices]):
if not idx_data.empty and '收盘价' in idx_data.columns:
fig.add_trace(
go.Scatter(x=idx_data['日期'], y=idx_data['收盘价'],
mode='lines', name=idx_name,
line=dict(color=colors[i], width=3),
fill='tozeroy',
fillcolor=f'rgba({int(colors[i][1:3], 16)}, {int(colors[i][3:5], 16)}, {int(colors[i][5:], 16)}, 0.1)'),
row=1, col=i+1
)
# 更新图表布局
fig.update_layout(
height=400,
showlegend=False,
title_text="主要市场指数走势对比",
title_x=0.5,
template='plotly_white',
plot_bgcolor='rgba(240, 230, 255, 0.1)'
)
st.plotly_chart(fig, use_container_width=True)
六、系统功能与使用说明
1.行业选择功能
系统左侧侧边栏提供行业选择功能,用户可以选择 "市场总览" 查看整体市场情况,或选择特定行业查看该行业的详细分析:
# 准备行业列表
nm_L = ['市场总览']
if '新版一级行业' in info.columns:
nm_L1 = list(info['新版一级行业'].unique())
nm_L.extend(sorted(nm_L1))
else:
nm_L.extend(['国防军工', '电子', '医药生物', '计算机', '食品饮料', '石油石化'])
st.subheader('🏢 行业选择')
nm = st.selectbox("请选择要分析的行业", nm_L, key='industry_select')
2.主要市场指数行情
在市场总览页面的 "主要市场指数行情" 标签中,用户可以:
(1)通过日期选择器设置数据时间范围
(2) 查看主要股票价格指数走势图(上证指数、深证指数、沪深 300 等)
(3) 对比上证 A 股、深证 A 股与沪深 300 指数走势
(4) 查看龙虎榜统计,了解涨幅较大的股票
3. 数据缓存与性能优化
系统使用 Streamlit 的缓存功能,将数据加载结果缓存,避免重复加载,提高应用响应速度:
@st.cache_data(ttl=3600, show_spinner="正在加载数据,请稍候...")
def load_all_data():
# 数据加载代码...
ttl=3600参数表示缓存有效期为 3600 秒(1 小时),超过此时长后会重新加载数据。
七、项目启动与执行流程
# 运行应用
if __name__ == "__main__":
main()
八、Streamlit简单页面展示



九、演示视频
考核实训视频
十、总结与体会
1. 主要收获
(1)数据处理能力:掌握了使用 Pandas 处理金融时间序列数据的方法,包括数据读取、清洗、9转换和分析。
(2)可视化技能:学会了使用 Plotly 创建交互式金融图表,能够直观展示股票价格走势、涨跌幅等关键指标。
(3) Web 应用开发:熟悉了 Streamlit 框架的使用,能够快速将数据分析代码转换为交互式 Web 应用。
(4) 金融知识应用:将金融理论知识与实践结合,理解了行业分类、指数计算、财务比率等概念在实际分析中的应用。
2.遇到的问题与解决方案
(1)数据格式不一致:不同来源的金融数据格式存在差异,通过统一列名和数据转换解决了这一问题。
(2)数据加载缓慢:使用 Streamlit 的缓存功能,显著提高了数据加载速度。
(3)图表展示效果:通过自定义颜色方案和布局,使金融图表更加专业和易读。
(4)异常值处理:对数据中的缺失值和异常值进行了处理,确保分析结果的准确性。
3.未来改进方向
(1)增加更多的技术指标分析,如移动平均线、相对强弱指数 (RSI) 等
(2)实现股票组合回测功能,允许用户测试不同的投资策略
(3)添加数据预测模块,使用机器学习算法预测股票价格走势
(4)优化大数据量下的性能,提高系统响应速度
更多推荐


所有评论(0)