数据分析Agent构建

数据分析agent构建

代码资料来源于 Streamline-Analyst,旨在通过该仓库上的代码了解如何使用大语言模型构建数据分析工具;

个人仓库:Data-Analysis-Agent-Tutorial

不同的在于 Data-Analysis-Agent-Tutorial 是在 Streamline-Analyst 基础上进行学习参考的,将其调用的api接口从GPT改成了国内常见的QWEN。
觉得有用的话欢迎各位点一个Star呀,后续还将继续更新其余类型的模型预测。

准备工作

大语言模型API,以QWEN为例,在阿里云百炼大模型平台注册API账号,新人注册免费用百万Token够用。获取之后将API Key添加到自己的环境变量中,保证下面的代码中能够正确获取自己的API。
(注:代码中没有通过这行代码获取API Key,函数中传入的变量暂时都是None,但不妨碍模型的正常调用,langchain中的ChatTongyi模型在传入的api参数不能用的时候会自动搜索环境变量)

import os
os.environ["DASHSCOPE_API_KEY"]

运行方式

streamlit run app.py

二分类预测模型

以肺癌调查数据为例,通过多种属性数据判断是否有肺癌。详细数据见 sample_data/1_survey_lung_cancer.csv

程序的主入口在 app.py 中

# 下面这部分是界面的初始设置,包括标题、界面介绍的,可以对应调试看看不同st.set_page_config(page_title="Data Analysis Agent", page_icon=":rocket:", layout="wide")# TITLE SECTION
with st.container():st.subheader("Hello there 👋")st.title("Welcome to Data-Analysis-Agent-Tutorial!")if 'initialized' not in st.session_state:st.session_state.initialized = Trueif st.session_state.initialized:st.session_state.welcome_message = welcome_message()st.write(stream_data(st.session_state.welcome_message))time.sleep(0.5)st.write("[Github > ](https://github.com/WuChaseSea/Data-Analysis-Agent-Tutorial)")st.session_state.initialized = Falseelse:st.write(st.session_state.welcome_message)st.write("[Github > ](https://github.com/WuChaseSea/Data-Analysis-Agent-Tutorial)")

在设置界面之后,构建相关按钮、交互界面的形式输入一些参数,包括api、文档、大语言模型、预测模型等

st.divider()
st.header("Let's Get Started")
left_column, right_column = st.columns([6, 4])
with left_column:API_KEY = st.text_input("Your API Key won't be stored or shared!",placeholder="Enter your API key here...",)st.write("👆Your OpenAI API key:")uploaded_file = st.file_uploader("Choose a data file. Your data won't be stored as well!", accept_multiple_files=False, type=['csv', 'json', 'xls', 'xlsx'])if uploaded_file:if uploaded_file.getvalue():uploaded_file.seek(0)st.session_state.DF_uploaded = read_file_from_streamlit(uploaded_file)st.session_state.is_file_empty = Falseelse:st.session_state.is_file_empty = True
with right_column:SELECTED_MODEL = st.selectbox('Which OpenAI model do you want to use?',('QWEN-2.5', 'QWEN-3'))MODE = st.selectbox('Select proper data analysis mode',('Predictive Classification', 'Clustering Model', 'Regression Model', 'Data Visualization'))st.write(f'Model selected: :green[{SELECTED_MODEL}]')st.write(f'Data analysis mode: :green[{MODE}]')# Proceed Button
is_proceed_enabled = uploaded_file is not None and API_KEY != "" or uploaded_file is not None and MODE == "Data Visualization"# Initialize the 'button_clicked' state
if 'button_clicked' not in st.session_state:st.session_state.button_clicked = False
if st.button('Start Analysis', disabled=(not is_proceed_enabled) or st.session_state.button_clicked, type="primary"):st.session_state.button_clicked = True
if "is_file_empty" in st.session_state and st.session_state.is_file_empty:st.caption('Your data file is empty!')

在所有参数输入之后,可以通过上一步选择的预测模型对文档进行分析预测等,比如对肺癌数据选择的是 Predictive Classification

GPT_MODEL = 3 if SELECTED_MODEL == 'QWEN-3' else 2
with st.container():if "DF_uploaded" not in st.session_state:st.error("File is empty!")else:if MODE == 'Predictive Classification':prediction_model_pipeline(st.session_state.DF_uploaded, API_KEY, GPT_MODEL)

因此预测分类模型的重点部分在models/prediction_model.py prediction_model_pipeline()函数里

包括以下步骤:

  1. 决定目标属性:让大语言模型根据表格的属性字段自行决定哪一个属性是需要预测的,比如这里的就是 LUNG_CANCER;
  2. 处理和计算缺失值:让大语言模型根据表格的属性字段决定对字段的缺失值应该怎么处理,比如用平均值、中值等;
  3. 数据编码:让大语言模型根据表格的属性字段决定对字段是否需要进行one-hot编码、文本类型丢弃等;
  4. 相关性计算:计算不同字段之间的相关性,这部分不用调用api;
  5. PCA:根据阈值决定是否需要使用PCA降维;
  6. 数据划分:让大语言模型根据数据量决定测试集的比例;
  7. 数据平衡:让大语言模型根据不同类型的数据量决定是否需要进行不平衡数据采样方法,包括RandomOverSampler、SMOTE、ADASYN等;
  8. 模型训练:让大语言模型根据表格内容决定前3种可能使用的分类模型,包括LogisticRegression、SVC、GaussianNB、RandomForestClassifier、AdaBoostClassifier、XGBClassifier、GradientBoostingClassifier等;
  9. 结果展示:对选择的3种分类模型结果进行展示;

目前跑通的效果图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …

Python爬虫(三):BeautifulSoup库

1. BeautifulSoup是什么&#xff1f; BeautifulSoup 是一个 Python 库&#xff0c;专门用来解析 HTML 或 XML 文件&#xff0c;方便我们提取数据。它能把网页源代码转换成树形结构&#xff0c;让我们可以轻松查找、修改内容&#xff0c;并自动处理编码问题&#xff08;如 Unic…

AI电销机器人智能的发展趋势是什么?

AI电销机器人智能的发展趋势是什么&#xff1f;电销机器人智能的发展前景怎么样&#xff1f;随着互联网技术的不断发展&#xff0c;AI电销机器人智能已经成为了许多企业实现销售数字化转型的重要工具&#xff0c;我们一起来看看。 AI电销机器人正突破传统语音机械应答的边界&a…

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…

Mac M芯片 RAG 极简流程 安装 ragflow + LM studio

本文基于 【【知识科普】【纯本地化搭建】【不本地也行】DeepSeek RAGFlow 构建个人知识库】 https://www.bilibili.com/video/BV1WiP2ezE5a/?share_sourcecopy_web&vd_source9a55f12dd64d8e30ab6c0efc62844343 1 .docker-compose yml文件修改,指定平台 platform: linux/…

Rsync+inotify+nfs实现数据实时备份方案

技术栈 NFS是 Network File System的简写&#xff0c;即网络文件系统。NFS的优点是内核直接支持&#xff0c;部署简单、运行稳定&#xff0c;协议简单、传输效率高。缺点是仅依靠IP地址或主机名来决定用户能否挂载共享目录&#xff0c;容易出现单点故障。 rsync是linux系统下的…

Vue ⑥-路由

单页应用程序 单页应用程序&#xff0c;即 Single-Page Application&#xff0c;简称 SPA&#xff0c;是一种使用 JavaScript、HTML 和 CSS 构建的 Web 应用程序。SPA 的核心是前端路由&#xff0c;它使得用户在访问网站时&#xff0c;只需加载一次页面&#xff0c;然后通过前…

Hadoop复习(九)

Azkaban工作流管理器 选择 问题 1 判断题 2 / 2 分 工作流是指具有依赖的一组job任务&#xff0c;被依赖的job任务最后执行 正确 错误 问题 2 判断题 2 / 2 分 Azkaban兼容任何版本的Hadoop 正确 错误 问题 3 判断题 2 / 2 分 独立服务器模式下&#xff0c;Azkab…

SpringMVC相关知识(二)

一.重定向和转发 1.ModelandView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 页面 : {视图解析器前缀} viewName {视图解析器后缀} 相关代码&#xff1a; <!-- 视图解析器 --> <bean class"org.springframework.web.servlet.vi…

std::ratio 简单使用举例

author: hjjdebug date: 2025年 06月 09日 星期一 14:28:40 CST descrip: std::ratio 简单使用举例 文章目录 1. 先看一个简单的例子 1/2/1/35/62 std::ratio 的手册页3. std::ratio_add 到底是什么呢&#xff1f;4. 代码注释5. 加深理解.6. 自定义的std::ratio 与 std::ratio_…

Docker 优势与缺点全面解析:容器技术的利与弊

在当今云计算、微服务、DevOps盛行的时代&#xff0c;Docker 几乎成了开发者、运维工程师的标配工具之一。自2013年诞生以来&#xff0c;Docker 以其轻量、快速、易移植的特点&#xff0c;彻底改变了应用的构建、交付与部署方式。 但任何技术都有两面性&#xff0c;Docker 也不…

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…

使用Redis作为缓存优化ElasticSearch读写性能

在现代数据密集型应用中,ElasticSearch凭借其强大的全文搜索能力成为许多系统的首选搜索引擎。然而,随着数据量和查询量的增长,ElasticSearch的读写性能可能会成为瓶颈。本文将详细介绍如何使用Redis作为缓存层来显著提升ElasticSearch的读写性能,包括完整的架构设计、详细…

获取wordpress某个栏目的内容数量

获取wordpress某个栏目的内容数量 <?php // 将以下 8 改成你的分类 ID 即可echo get_category(8)->count;?> 在制作wordpress模板时&#xff0c;有时会需要调用某个分类目录下的所有内容数量&#xff0c;通过这段简洁的代码就可以实现。 给WordPress自定义字段加…

uniapp 安卓 APP 后台持续运行(保活)的尝试办法

在移动应用开发领域&#xff0c;安卓系统的后台管理机制较为复杂&#xff0c;应用在后台容易被系统回收&#xff0c;导致无法持续运行。对于使用 Uniapp 开发的安卓 APP 来说&#xff0c;实现后台持续运行&#xff08;保活&#xff09;是很多开发者面临的重要需求&#xff0c;比…

深度学习——知识提炼

第一部分&#xff1a;引言与背景——为什么需要知识提炼&#xff1f; 一、模型压缩的背景 随着深度学习的发展&#xff0c;模型变得越来越大&#xff08;如 ResNet152、BERT、ViT、GPT 等&#xff09;&#xff0c;其参数量动辄数亿甚至上百亿。这些大模型虽然性能强大&#x…