#nlp #数据分析 #polars #dataframe #rust

bin+lib polars-ai

一个用于使用自然语言查询和AI与Polars DataFrames交互的CLI和库

3个版本

0.0.2 2023年11月10日
0.0.1 2023年11月9日
0.0.0 2023年11月7日

#382机器学习

MIT 许可证

35KB
351

Polars AI 📊

Maintenance License made-with-rust Jupyter Notebook Share On Reddit Share On Ycombinator Share On Twitter Share On Facebook Share On Linkedin

Polars AI 是一款开创性的工具,具有命令行界面(CLI)和复杂的crate库。它使您能够通过AI进行数据分析,与Polars DataFrames进行对话式交互。Polars AI 无缝集成了 OpenAI 的 GPT-3.5 Turbo 的强大功能,从而增强并优化数据探索和操作任务。

Polars AI 允许您

  1. 使用纯文本查询与您的 Polars DataFrames 进行聊天。
  2. 执行数据分析任务,如过滤、通过AI生成的Rust代码进行聚合。
  3. 使用图表和图形可视化数据(即将推出)。

目录 📚

安装 🚀

从源安装

要使用 Polars AI,您需要遵循以下安装步骤

  1. 通过在 Rust 安装 上找到的说明安装 Rust(如果尚未安装)。

  2. 在 GitHub 上分叉仓库

    • 单击 GitHub 仓库页面右上角的“分叉”按钮。
  3. 将 Polars AI 仓库克隆到您的本地计算机

    $ git clone https://github.com/yourusername/polars-ai.git
    
  4. 使用 Rust 的包管理器 Cargo 构建项目

    $ cd polars-ai
    $ cargo build --release
    
  5. 设置 OpenAI API 密钥

    $ export OPENAI_API_KEY=sk-
    
  6. 运行 CLI

    $ ./target/release/polars-ai help
    

使用 Cargo 安装

您还可以使用 Cargo,Rust 包管理器安装 Polars AI

  1. 使用 Rust 的包管理器 Cargo 构建项目

    $ cargo install polars-ai
    
  2. 设置 OpenAI API 密钥

    $ export OPENAI_API_KEY=sk-
    
  3. 运行 CLI

    $ polars-ai help
    

入门 🏁

在开始之前,请确保您有一个想要分析和交互的 Polars DataFrame。Polars AI 与 Polars DataFrames 一起工作,因此请确保您已加载数据。

使用 🧑‍💻

与您的 DataFrame 聊天

使用 Polars AI,您可以使用纯文本查询与您的 DataFrame 进行聊天。只需在 CLI 提示时输入您的问题或查询即可。例如

$ export OPENAI_API_KEY=sk-

$ polars-ai input -f examples/datasets/flights.csv show
📊 DataFrame:
shape: (18, 7)
┌────────────┬───────────┬─────────┬─────────────────┬───────────────┬──────────┬──────────┐
 DayofMonth ┆ DayOfWeek ┆ Carrier ┆ OriginAirportID ┆ DestAirportID ┆ DepDelay ┆ ArrDelay │
 ---        ┆ ---       ┆ ---     ┆ ---             ┆ ---           ┆ ---      ┆ ---      │
 i64        ┆ i64       ┆ str     ┆ i64             ┆ i64           ┆ i64      ┆ i64      │
╞════════════╪═══════════╪═════════╪═════════════════╪═══════════════╪══════════╪══════════╡
 19         ┆ 5         ┆ DL      ┆ 11433           ┆ 13303         ┆ -3       ┆ 1        │
 19         ┆ 5         ┆ DL      ┆ 14869           ┆ 12478         ┆ 0        ┆ -8
 19         ┆ 5         ┆ DL      ┆ 14057           ┆ 14869         ┆ -4 -15
 19         ┆ 5         ┆ DL      ┆ 15016           ┆ 11433         ┆ 28       ┆ 24       │
 …          ┆ …         ┆ …       ┆ …               ┆ …             ┆ …        ┆ …        │
 19         ┆ 5         ┆ DL      ┆ 10397           ┆ 12451         ┆ 71       ┆ null     │
 19         ┆ 5         ┆ DL      ┆ 12451           ┆ 10397         ┆ 75       ┆ null     │
 19         ┆ 5         ┆ DL      ┆ 12953           ┆ 10397         ┆ -1       ┆ null     │
 19         ┆ 5         ┆ DL      ┆ 11433           ┆ 12953         ┆ -3       ┆ null     │
└────────────┴───────────┴─────────┴─────────────────┴───────────────┴──────────┴──────────┘

$ polars-ai input -f examples/datasets/flights.csv ask -q 'What is the average of the first column?'

🤖 AI Response:

use polars::prelude::*;

fn analyze_data(dfs: Vec<DataFrame>) -> Result<DataFrame> {
    let df = &dfs[0];

    let avg_first_column = df
        .select(&[col("DayofMonth")])
        .expect("Column 'DayofMonth' must exist")
        .mean()
        .unwrap()
        .select(&[col("mean")])
        .unwrap();

    let top_carriers = df
        .groupby(&[col("Carrier")])
        .expect("Column 'Carrier' must exist")
        .mean()
        .unwrap()
        .sort(&[col("mean")], false)
        .expect("Column 'mean' must exist")
        .head(Some(5))
        .select(&[col("Carrier")])
        .unwrap();

    let result_df = df
        .join(&top_carriers, &[col("Carrier")], &[col("Carrier")], JoinType::Inner)
        .expect("Column 'Carrier' must exist")
        .sort(&[col("DayofMonth")], false)
        .expect("Column 'DayofMonth' must exist")
        .head(Some(5));

    let final_result = result_df
        .select(&[col("Carrier"), col("DayofMonth")])
        .unwrap();

    Ok(final_result)
}

let result = analyze_data(dfs);
println!("{}", result);

现在,基于上述查询,您可以运行Rust代码。

数据分析工作流程

生成的Rust代码遵循结构化的数据分析工作流程

  1. 准备:如有必要,预处理和清理数据。
  2. 处理:对数据进行分析(例如,分组、过滤、聚合)。
  3. 分析:执行分析。
  4. 输出:以各种格式返回结果。

您可以根据需要修改生成的代码来自定义分析。

示例 💡

请参考示例文件夹,使用Polars AI分析您的数据。Polars AI将生成Rust代码以执行数据探索性分析。

贡献 🤝

我们欢迎为Polars AI做出贡献!如果您想为此项目做出贡献,请按照以下步骤操作

  1. 在 GitHub 上分叉仓库

    • 单击 GitHub 仓库页面右上角的“分叉”按钮。
  2. 为您的功能或错误修复创建一个新的分支

    • 使用以下Git命令创建一个新的分支

      $ git checkout -b feature-or-bugfix-branch
      
  3. 进行更改并提交

    • 编辑本地仓库中的文件,并使用以下Git命令提交您的更改

      $ git add .
      $ git commit -m "Your commit message here"
      
  4. 创建一个带有更改描述的pull request

    • 将您的分支推送到GitHub上的分叉仓库,然后从那里创建pull request。

      $ git push origin feature-or-bugfix-branch
      
    • 访问您的GitHub分叉仓库,您将看到一个创建刚刚推送到分支的pull request的选项。

许可 📜

本项目采用MIT许可证 - 请参阅LICENSE文件以获取详细信息。

依赖关系

~20–34MB
~570K SLoC