金融数据挖掘及其应用综合实训系统报告
一、设计背景
在金融市场快速发展且数据量呈指数级增长的当下,传统的金融分析方式已难以满足投资者、研究者对市场洞察的精准化、高效化需求。一方面,普通投资者往往缺乏专业的数据分析能力,难以从海量的股票交易数据、财务数据中挖掘有效信息以支撑投资决策;另一方面,金融机构的专业分析工作也需要高效的工具来整合多维度数据,实现市场趋势研判、行业对比分析及量化策略构建。
基于上述行业痛点,本金融数据挖掘及其应用综合实训系统应运而生。系统以Python为核心开发语言,依托Streamlit框架构建交互式Web界面,整合股票交易数据、行业分类数据、财务数据等多源信息,实现市场总览、行业深度分析、技术指标计算、机器学习预测及AI智能分析等核心功能。其设计目标在于为用户提供一站式的金融数据挖掘工具,降低数据分析门槛,助力用户快速把握市场动态、识别行业机会,同时为金融数据挖掘相关的实训教学提供直观的实践平台(后附视频演示)。
二、代码实现
2.1 技术栈选型
本系统采用Python作为核心开发语言,结合多个成熟的第三方库实现数据处理、可视化、机器学习及Web交互功能,具体技术栈如下:
-
Web框架:Streamlit,用于快速构建交互式Web界面,实现数据可视化展示与用户交互逻辑;
-
数据处理:Pandas,负责数据的读取、清洗、转换及多维度统计分析;
-
数值计算:NumPy,支撑数据的高效数值运算,为技术指标计算和模型训练提供基础;
-
可视化工具:Plotly、Matplotlib,实现折线图、柱状图、热力图、树形图等多种图表的绘制,直观呈现市场趋势与分析结果;
-
机器学习:Scikit-learn,提供逻辑回归、随机森林、梯度提升树等多种分类模型,用于股票涨跌趋势预测;
-
AI交互:OpenAI API(支持DeepSeek等服务商),实现基于自然语言的智能金融分析报告生成。
2.2 核心模块实现
系统代码采用模块化设计思路,按功能划分为数据加载模块、数据处理模块、界面展示模块、模型训练模块及AI分析模块,各模块职责清晰、协同工作。核心模块实现逻辑如下:
2.2.1 数据加载模块(load_data函数)
该模块为系统的数据入口,负责读取多源金融数据文件(如行业信息、交易数据、财务数据、指数数据等),并将其转换为Pandas DataFrame格式供后续模块调用。通过try-except异常处理机制,确保数据加载失败时能给出明确提示,提升系统稳定性。数据加载完成后,以字典形式整合所有数据,便于后续模块按需提取。
import pandas as pd
import streamlit as st
def load_data():
"""加载多源金融数据,返回整合后的字典"""
data_dict = {}
# 定义数据文件路径(实际应用中可通过配置文件设置)
file_paths = {
"industry_info": "data/industry_info.csv",
"stock_trade": "data/stock_trade_data.csv",
"financial_data": "data/financial_data.csv",
"index_data": "data/index_data.csv"
}
for data_name, path in file_paths.items():
try:
# 读取CSV文件,处理中文编码问题
df = pd.read_csv(path, encoding="utf-8-sig")
# 转换日期字段为datetime格式
if "date" in df.columns:
df["date"] = pd.to_datetime(df["date"])
data_dict[data_name] = df
st.success(f"{data_name} 数据加载成功,数据量:{len(df)} 条")
except FileNotFoundError:
st.error(f"未找到 {data_name} 数据文件,路径:{path}")
data_dict[data_name] = pd.DataFrame() # 返回空DataFrame避免后续报错
except Exception as e:
st.error(f"{data_name} 数据加载失败:{str(e)}")
data_dict[data_name] = pd.DataFrame()
return data_dict
2.2.2 数据处理模块
该模块是系统的核心支撑,包含技术指标计算、累计收益率计算、数据筛选与合并等关键功能:
-
技术指标计算(calculate_technical_indicators函数):基于股票交易数据,计算移动平均线(MA5、MA10、MA20等)、MACD、RSI、KDJ、OBV等常用金融技术指标,为趋势分析和模型训练提供特征数据;
-
def calculate_technical_indicators(df): """ 计算常用金融技术指标 参数:df - 包含股票交易数据的DataFrame,需包含close, open, high, low, volume列 返回:添加指标后的DataFrame """ # 1. 移动平均线(MA5, MA10, MA20) df["MA5"] = df["close"].rolling(window=5).mean() df["MA10"] = df["close"].rolling(window=10).mean() df["MA20"] = df["close"].rolling(window=20).mean() # 2. MACD(指数平滑异同平均线) df["EMA12"] = df["close"].ewm(span=12, adjust=False).mean() df["EMA26"] = df["close"].ewm(span=26, adjust=False).mean() df["MACD"] = df["EMA12"] - df["EMA26"] df["MACD_Signal"] = df["MACD"].ewm(span=9, adjust=False).mean() df["MACD_Hist"] = df["MACD"] - df["MACD_Signal"] # 3. RSI(相对强弱指数) delta = df["close"].diff(1) gain = delta.where(delta > 0, 0) loss = -delta.where(delta< 0, 0) avg_gain = gain.rolling(window=14).mean() avg_loss = loss.rolling(window=14).mean() rs = avg_gain / avg_loss df["RSI"] = 100 - (100 / (1 + rs)) # 4. KDJ(随机指标) df["Lowest_Low"] = df["low"].rolling(window=9).min() df["Highest_High"] = df["high"].rolling(window=9).max() df["K"] = (df["close"] - df["Lowest_Low"]) / (df["Highest_High"] - df["Lowest_Low"]) * 100 df["D"] = df["K"].rolling(window=3).mean() df["J"] = 3 * df["K"] - 2 * df["D"] # 5. OBV(能量潮指标) df["OBV"] = df["volume"].where(df["close"] > df["close"].shift(1), -df["volume"]).cumsum() # 填充缺失值(滚动计算产生的NaN) df = df.fillna(method="bfill").fillna(method="ffill") return df -
累计收益率计算(calculate_cumulative_returns函数):根据指定的时间范围,计算个股或指数的累计涨跌幅,为投资组合收益分析提供数据支持;
-
数据预处理(prepare_model_data函数):整合技术指标作为特征变量,构建未来N天涨跌的目标变量,完成数据清洗、缺失值处理、特征标准化及训练集/验证集/测试集的划分,为机器学习模型提供标准化数据。
2.2.3 界面展示模块
基于Streamlit框架实现交互式界面,按功能划分为市场总览页面和行业分析页面,核心函数包括display_market_overview和display_industry_analysis:
-
市场总览页面:通过标签页区分“主要市场指数行情”和“行业统计分析”,整合日期选择器、数据卡片、趋势图表、龙虎榜统计表格等组件,直观呈现市场整体交易情况、指数走势及行业分布特征;
-
行业分析页面:针对选定行业,展示行业概览指标、行业指数走势、个股价格对比、上市公司信息、财务数据等内容,同时通过子标签页实现综合评价分析和涨跌趋势分析的切换。
2.2.4 模型训练与量化策略模块
该模块实现机器学习模型的训练、评估及量化交易策略构建:
-
模型训练(train_model函数):支持逻辑回归、支持向量机、随机森林等多种模型,根据用户选择的模型类型进行训练,并通过验证集计算准确率,评估模型性能;
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
def train_model(X, y, model_type="random_forest", test_size=0.2, random_state=42):
"""
训练股票涨跌预测模型
参数:
X - 特征矩阵(技术指标等)
y - 目标变量(未来N天涨跌标签:1涨,0跌)
model_type - 模型类型:logistic_regression/random_forest/svm
test_size - 测试集比例
random_state - 随机种子
返回:训练好的模型、标准化器、测试集准确率
"""
# 数据划分(训练集+验证集 与 测试集)
X_train_val, X_test, y_train_val, y_test = train_test_split(
X, y, test_size=test_size, random_state=random_state, stratify=y
)
# 数据标准化
scaler = StandardScaler()
X_train_val_scaled = scaler.fit_transform(X_train_val)
X_test_scaled = scaler.transform(X_test)
# 选择模型并训练
if model_type == "logistic_regression":
model = LogisticRegression(max_iter=1000, random_state=random_state)
elif model_type == "svm":
model = SVC(kernel="rbf", random_state=random_state)
elif model_type == "random_forest":
model = RandomForestClassifier(n_estimators=100, random_state=random_state)
else:
raise ValueError("不支持的模型类型,可选:logistic_regression/random_forest/svm")
model.fit(X_train_val_scaled, y_train_val)
# 评估测试集准确率
y_pred = model.predict(X_test_scaled)
test_accuracy = accuracy_score(y_test, y_pred)
return model, scaler, test_accuracy
-
量化策略构建(build_trading_strategy函数):基于模型预测的涨跌信号(买入1、卖出-1、震荡0),模拟资金管理与交易操作,计算投资组合的累计收益、最终资产价值等指标,对比买入持有策略,验证策略有效性;
-
趋势分析(display_trend_analysis函数):整合技术指标可视化、模型参数调节、预测结果展示、混淆矩阵分析及策略收益对比等功能,形成完整的趋势研判与量化分析流程。
2.2.5 AI智能分析模块(generate_ai_analysis函数)
该模块通过调用DeepSeek等AI服务提供商的API,实现智能金融分析报告生成。核心逻辑为:提取个股的价格数据、技术指标等关键信息,构建标准化的分析提示词,发送至AI模型并接收返回结果,最终将分析报告按技术分析、市场环境分析、投资建议、风险提示等维度整理展示,为用户提供专业的决策参考。
2.3 核心流程串联(main函数)
main函数作为系统的入口,负责整合所有模块的工作流程:首先加载金融数据,然后构建侧边栏(包含API密钥设置、行业选择、系统信息等组件),根据用户选择的分析模块(市场总览或特定行业)调用对应的界面展示函数,最后加载页脚信息并提示AI功能状态。通过Streamlit的会话状态(session_state)管理API密钥等用户配置信息,确保交互过程中的数据持久化。
def main():
# 初始化Streamlit页面配置
st.set_page_config(page_title="金融数据挖掘综合实训系统", layout="wide")
# 加载数据
with st.spinner("正在加载金融数据..."):
data_dict = load_data()
if all(df.empty for df in data_dict.values()):
st.error("所有数据加载失败,系统无法正常运行,请检查数据文件!")
return
# 初始化会话状态(存储API密钥等配置)
if "api_key" not in st.session_state:
st.session_state["api_key"] = ""
if "ai_provider" not in st.session_state:
st.session_state["ai_provider"] = "DeepSeek"
# 构建侧边栏
st.sidebar.header("系统配置与导航")
# 1. AI配置
st.sidebar.subheader("AI服务配置")
api_key = st.sidebar.text_input("输入AI服务API密钥", value=st.session_state["api_key"], type="password")
if st.sidebar.button("保存API密钥"):
st.session_state["api_key"] = api_key
st.sidebar.success("API密钥保存成功!")
ai_provider = st.sidebar.selectbox("选择AI服务提供商", ["DeepSeek", "OpenAI"], index=0)
st.session_state["ai_provider"] = ai_provider
# 2. 分析模块选择
st.sidebar.subheader("分析模块")
analysis_module = st.sidebar.radio(
"选择要查看的模块",
["市场总览", "银行业", "证券业", "保险业", "房地产行业"]
)
# 3. 系统信息
st.sidebar.subheader("系统信息")
st.sidebar.info("""
金融数据挖掘综合实训系统
开发语言:Python
核心框架:Streamlit
功能:市场分析、行业洞察、模型预测、AI智能分析
""")
# 主内容区标题
st.title("金融数据挖掘及其应用综合实训系统")
st.divider()
# 根据选择的模块展示对应内容
if analysis_module == "市场总览":
display_market_overview(data_dict)
elif analysis_module in ["银行业", "证券业", "保险业", "房地产行业"]:
display_industry_analysis(data_dict, industry=analysis_module)
# 页脚信息
st.divider()
st.caption("© 2025 金融数据挖掘实训项目组 - 仅供教学使用")
# 提示AI功能状态
if not st.session_state["api_key"]:
st.warning("未配置AI服务API密钥,AI智能分析功能暂不可用!")
if __name__ == "__main__":
main()
三、界面展示
本系统界面采用简洁直观的设计风格,以蓝色、灰色为主色调,契合金融行业的专业属性。界面布局分为侧边栏和主内容区,侧边栏负责功能导航与参数设置,主内容区展示核心分析结果,各组件布局合理、交互流畅。以下为主要界面的详细展示。
3.1 系统整体布局与侧边栏
系统启动后,侧边栏为固定导航区域,主内容区展示对应功能页面。侧边栏包含API密钥设置、AI服务提供商选择、分析模块(市场总览/各行业)选择、系统信息及使用帮助等功能模块;主内容区顶部展示系统标题,中部为核心分析内容,底部为系统版权信息。
3.2 市场总览页面
市场总览页面分为“主要市场指数行情”和“行业统计分析”两个标签页:
-
主要市场指数行情标签页:左侧为日期选择器和市场概览指标卡片(交易股票数、平均涨跌幅、总成交量),右侧为主要指数(沪深300、上证指数)趋势对比图;下方为龙虎榜统计区域,展示累计涨幅/跌幅大于20%的个股列表及Top10柱状图;
-
行业统计分析标签页:展示行业统计概览指标(统计行业数、平均营收增长率、平均利润增长率),行业详细数据表格,以及营收/利润增长最快行业的柱状图和行业公司数量分布树形图。
主要市场指数行情标签页:

行业统计分析标签页:

3.3 行业分析页面
行业分析页面顶部为行业概览指标卡片(股票数量、近期平均涨跌、代表性公司数、近期成交量),中部为左右分栏的图表区域(左侧行业指数走势及20日均线,右侧前6只个股归一化价格对比),下方为四个数据标签页(行业指数交易数据、上市公司信息、行业股票交易数据、财务数据),底部为综合评价分析和涨跌趋势分析子标签页。


3.4 模型训练与AI分析页面
该页面为行业分析页面的“股票价格涨跌趋势分析”子标签页,包含:
-
参数设置区域:分析年度、股票数量、预测未来天数、测试集比例等参数调节组件;
-
技术指标展示区域:技术指标数据表格、价格与均线走势图、MACD指标图、RSI与KDJ指标图;
-
模型训练与结果区域:模型类型选择、训练按钮,训练完成后展示数据集划分、验证集/测试集准确率、混淆矩阵、策略收益对比图表及交易信号记录;
-
AI分析区域:AI分析报告生成按钮,生成后按技术分析、市场环境分析、投资建议、风险提示等维度展示智能报告。
模型训练与策略收益区域:


AI智能分析报告页面:


视频演示
实训5-考核实训视频-1
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)