学习内容:
👉课程主题:《项目实战:交互式BI报表》
《项目实战:交互式BI报表》
✅ ChatBI
- ChatBI的原理
- 数据采集
- 可视化组件
- 查询历史价格
- 对比分析
- 热点新闻
✅ 智能分析 - 趋势预测:ARIMA模型(未来N天价格预测)
- 异常检测:布林带分析(超买/超卖点识别)
- 周期性分析:Prophet模型(趋势分解)
- 知识库管理:撰写few shot示例
学习产出:
ChatBI项目技术分析
项目概述
该项目是一个基于自然语言处理和数据分析技术的交互式BI报表系统,专门针对股票数据分析设计。它允许用户通过自然语言查询股票历史数据,并自动生成相应的SQL查询、执行查询、以及可视化结果。
核心功能模块
1. 数据获取模块 (stock_data.py)
该模块负责从TuShare金融数据接口获取股票历史数据:
- 使用TuShare API获取指定股票的历史价格数据
- 支持多种股票代码(贵州茅台、五粮液、国泰君安、中芯国际)
- 数据字段包括:股票名称、股票代码、交易日期、开盘价、最高价、最低价、收盘价、成交量、成交额
- 将获取的数据保存为Excel文件(stock_history_data.xlsx)和SQL建表语句(stock_history_data.sql)
2. 核心助手模块
项目包含多个版本的股票查询助手,逐步增加功能:
基础版本 (stock_query_assistant.py)
- 实现基本的SQL查询功能
- 提供Web界面和命令行界面两种交互方式
- 支持数据可视化,自动生成图表
增强版本 (stock_query_assistant-2.py)
- 在基础版本上增加了可视化控制参数
- 改进了图表生成算法,支持智能选择图表类型
- 引入MCP服务器配置,支持外部工具集成
预测分析版本 (stock_query_assistant-3.py)
- 新增ARIMA时间序列预测功能
- 可以预测指定股票未来n天的收盘价
- 提供图表展示历史数据和预测结果
异常检测版本 (stock_query_assistant-4.py)
- 新增布林带异常点检测功能
- 可识别股票的超买和超卖情况
- 提供可视化图表展示布林带和异常点
周期分析版本 (stock_query_assistant-5.py)
- 新增Facebook Prophet周期性分析功能
- 可分析股票的趋势、周周期性和年周期性
- 提供完整的周期成分分解图表
3. 工具类实现
ExcSQLTool (exc_sql工具)
- 注册为
exc_sql工具,用于执行SQL查询 - 连接到MySQL数据库获取股票数据
- 自动生成数据摘要和可视化图表
- 支持控制是否需要可视化输出
ArimaStockTool (arima_stock工具)
- 注册为
arima_stock工具,用于时间序列预测 - 使用ARIMA(5,1,5)模型进行建模
- 预测未来指定天数的股票收盘价
- 提供预测结果表格和图表
BollDetectionTool (boll_detection工具)
- 注册为
boll_detection工具,用于布林带分析 - 计算20日移动平均线和标准差
- 识别超买(价格高于上轨)和超卖(价格低于下轨)情况
- 提供详细的异常点列表和可视化图表
ProphetAnalysisTool (prophet_analysis工具)
- 注册为
prophet_analysis工具,用于周期性分析 - 使用Facebook Prophet进行时间序列分解
- 分析趋势、周周期性和年周期性成分
- 提供成分分解图表
4. 可视化模块
项目实现了多种数据可视化功能:
- 智能图表选择:根据数据特点自动选择合适的图表类型
- 柱状图和折线图:适用于一般数据展示
- 时间序列图:适用于股价走势图展示
- 布林带图:用于异常点检测结果展示
- 成分分解图:用于周期性分析结果展示
5. 用户界面
项目提供两种用户交互方式:
Web界面
- 基于qwen_agent.gui.WebUI构建
- 提供友好的图形用户界面
- 包含示例查询引导用户使用
- 支持实时交互和结果展示
命令行界面
- 提供文本交互方式
- 适合开发者调试和自动化脚本使用
技术架构
主要依赖库
qwen-agent: 阿里通义千问智能体框架dashscope: 阿里云模型服务调用pandas: 数据处理和分析sqlalchemy: 数据库连接和操作matplotlib: 数据可视化tushare: 金融数据接口statsmodels: 统计模型(ARIMA)prophet: 时间序列分析(Facebook Prophet)
数据库设计
sql
CREATE TABLE stock_price (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
stock_name VARCHAR(20) NOT NULL COMMENT '股票名称',
ts_code VARCHAR(20) NOT NULL COMMENT '股票代码',
trade_date VARCHAR(10) NOT NULL COMMENT '交易日期',
open DECIMAL(15,2) COMMENT '开盘价',
high DECIMAL(15,2) COMMENT '最高价',
low DECIMAL(15,2) COMMENT '最低价',
close DECIMAL(15,2) COMMENT '收盘价',
vol DECIMAL(20,2) COMMENT '成交量',
amount DECIMAL(20,2) COMMENT '成交额',
UNIQUE KEY uniq_stock_date (ts_code, trade_date)
);
系统流程
- 用户通过自然语言提出查询请求
- 助手解析用户意图,生成相应的SQL语句或调用相应工具
- 执行SQL查询或调用分析工具进行数据处理
- 将结果以表格和图表形式展示给用户
特色功能
自然语言交互
- 用户可以使用自然语言查询复杂的股票数据
- 系统能够理解用户的查询意图并转化为具体操作
多维度分析
- 历史数据查询
- 时间序列预测
- 异常点检测
- 周期性分析
智能可视化
- 根据数据特征自动选择合适的图表类型
- 提供丰富的图表展示方式
- 支持多种分析结果的可视化呈现
可扩展架构
- 基于工具注册机制,易于添加新功能
- 支持MCP协议,可集成外部工具
- 模块化设计,便于维护和升级
应用价值
这个ChatBI项目展示了如何将大型语言模型与数据分析技术结合,构建一个智能化的商业智能系统。它可以帮助金融分析师、投资者和研究人员:
- 快速获取和分析股票数据
- 进行价格趋势预测
- 识别异常交易信号
- 发现数据中的周期性规律
- 通过自然语言交互降低数据分析门槛
整个系统体现了现代AI技术在金融数据分析领域的应用潜力,为构建更加智能和易用的BI系统提供了有价值的参考。