返回市场
口袋数据科学家

口袋数据科学家

作者:Real4LA3 星标更新:2025-11-09

项目介绍

🧪 Pocket Data Scientist

一个强大的AI驱动的数据分析工具,结合了Streamlit、Ollama(Llama3)和模型上下文协议(MCP),提供了一个交互式的对话界面来探索和分析CSV数据集。

🎥 演示

观看YouTube上的演示视频,了解Pocket Data Scientist的实际操作:YouTube演示

✨ 特性

🤖 AI驱动的分析

  • 对话界面:用自然语言询问关于你的数据集的问题
  • 智能工具选择:AI根据你的问题自动选择合适的分析工具
  • 少量样本学习:通过示例优化提示以更好地利用工具
  • 精确值报告:确保精确的数据报告,不进行四舍五入或估算

📊 数据分析能力

  • 数据集概览:获取有关数据集结构的全面信息
  • 汇总统计:所有数值列的详细统计数据
  • 列分析:探索单个列的顶级值和分布
  • 分组统计:按类别分析数据
  • 相关性分析:发现数值变量之间的关系
  • 数据质量报告:识别缺失值、重复项和数据质量问题

📈 可视化

  • 散点图:可视化两个变量之间的关系
  • 条形图:显示类别分布
  • 直方图:展示值分布
  • 相关性热图:交互式相关矩阵可视化
  • CSV数据查看器:在交互式表格中浏览整个数据集

🎨 用户界面

  • 现代Streamlit UI:干净直观的界面,带有侧边栏控件
  • 标签界面:聊天和数据查看器的独立标签页
  • 实时更新:看到生成的结果
  • 工具使用跟踪:可展开的部分显示所有工具调用和结果

🚀 快速开始

先决条件

  • Python 3.8 或更高版本
  • 在本地安装并运行 Ollama
  • 下载Llama3模型(默认:llama3:8b

安装

  1. 克隆仓库

    git clone https://github.com/Real4LA/pocket-data-scientist
    
  2. 安装依赖

    pip install -r requirements.txt
    
  3. 安装并启动Ollama

    • ollama.ai 下载
    • 拉取Llama3模型:
      ollama pull llama3:8b
      
  4. 启动应用程序

    streamlit run app/chat_app.py
    
  5. 打开浏览器

    • 应用程序将在 http://localhost:8501 自动打开

📖 使用指南

开始使用

  1. 上传CSV文件

    • 点击侧边栏中的“上传CSV文件”
    • 选择你的数据集文件
    • 等待“已加载”的确认
  2. 探索你的数据

    • 使用“数据查看器”标签页浏览数据集
    • 切换到“聊天”标签页提问
  3. 提问

    • 在底部的输入字段中键入你的问题
    • 示例:
      • “这个数据集是关于什么的?”
      • “显示汇总统计”
      • “最高薪的工作是什么?”
      • “可视化年龄与薪水的关系”
      • “绘制相关性矩阵”

示例查询

基本信息

这个数据集是关于什么的?
显示所有列
汇总统计是什么?

分析问题

最高薪的工作是什么?
按职位名称计算平均工资是多少?
最常见的城市有哪些?
年龄与薪水之间有什么关系?

可视化

绘制相关性矩阵
可视化年龄与薪水的关系
创建薪水分布的直方图
显示职位计数的条形图

高级分析

最相关的两个特征是什么?
影响薪水提升的最大因素是什么?
检测薪水中的异常值

🛠️ 可用工具

系统提供了以下分析工具:

数据探索

  • list_columns():获取列名、类型和数据集结构
  • get_data_overview():全面的数据集概述(形状、内存、列类型)
  • summary_stats():所有数值列的统计数据(均值、标准差、最小值、最大值等)
  • get_data_sample():从数据集中获取样本行

列分析

  • get_column_summary(column):特定列的详细分析
    • 顶级值和计数
    • 数值统计(如果适用)
    • 缺失值百分比
    • 唯一值百分比

统计分析

  • group_by_stats(group_by, column):按类别列分组的统计数据
    • 每组的均值、标准差、最小值、最大值
    • 每组的数量
  • correlation_matrix():数值列之间的相关系数
  • compare_columns(column1, column2):两列之间的详细比较

可视化

  • plot_column(column, kind, y):创建各种类型的图表
    • kind='scatter'y:散点图(X vs Y)
    • kind='bar':类别计数的条形图
    • kind='hist':分布的直方图
    • kind='auto':自动选择图表类型
  • plot_correlation_matrix():相关矩阵的热图可视化

数据质量

  • detect_outliers(column, method):使用IQR或Z分数识别异常值
  • data_quality_report():全面的数据质量评估

🏗️ 架构

组件

dataset-inspector-mcp/
├── app/
│   └── chat_app.py          # Streamlit UI应用
├── agents/
│   └── agent.py             # 带有工具选择逻辑的AI代理
├── core/
│   ├── dataset_inspector.py # 核心数据分析引擎
│   ├── server_mcp.py        # 通过MCP暴露工具的服务器
│   └── tool_client.py       # 用于工具通信的MCP客户端
├── data/
│   └── data.csv             # 示例数据集
├── plots/                   # 生成的可视化
└── uploads/                 # 用户上传的数据集

工作原理

  1. 用户输入:用户在Streamlit界面中键入一个问题

  2. 代理处理ToolAwareAgent 分析问题并决定调用哪些工具

  3. 工具执行:通过MCP(模型上下文协议)通过 ToolClient 执行工具

  4. 数据分析DatasetInspector 使用pandas执行实际的数据分析

  5. 响应生成:代理将工具结果格式化为自然语言响应

  6. 显示:结果在UI中显示,包括图表、表格和文本响应

MCP集成

项目使用FastMCP通过模型上下文协议暴露数据分析工具:

  • 工具定义在 core/server_mcp.py
  • ToolClient 通过stdio与MCP服务器通信
  • 这允许AI代理根据用户问题动态调用工具

⚙️ 配置

模型配置

编辑 app/chat_app.py 更改默认模型:

DEFAULT_MODEL = "llama3:8b"  # 更改为你喜欢的模型
OLLAMA_ENDPOINT = "http://localhost:11434/api/chat"

支持的模型

任何支持聊天完成的Ollama模型。推荐:

  • llama3:8b(默认)
  • llama3.2:3b(更快,但准确性较低)
  • llama3:70b(更慢,但准确性更高)

📝 项目结构

├── agents/
│   ├── __init__.py
│   └── agent.py              # 带有提示工程的AI代理
├── app/
│   ├── __init__.py
│   └── chat_app.py           # Streamlit网络应用
├── core/
│   ├── __init__.py
│   ├── dataset_inspector.py  # 数据分析引擎
│   ├── server_m