与PandasAI交流您的数据集

介绍

想象一下,你正在处理一个数据集来构建一个机器学习模型,不想在探索性数据分析代码上花费太多精力。你可能会发现对数据进行排序、过滤或分组以获取所需信息有些困惑。是否有一种快速轻松的方法提取信息?如果你可以与你的数据集交谈,那不是更容易吗?你问它一个问题,它会为你分析数据。这就是 PandasAI 与 Python 有益的地方。

PandasAI 是一个 Python 库,它通过整合生成 AI 能力,扩展了 Pandas 的功能。它的目的是补充而不是取代广泛使用的数据分析和操作工具。使用 PandasAI,用户可以更加人性化地与 Pandas 数据框进行交互,使他们能够有效地总结数据。

要开始使用 PandasAI,我们需要一个 OpenAI API 密钥,你可以通过以下链接生成。这将使我们可以访问 OpenAI LLM。

学习目标

在本文中,我们将学习如何:

  1. 从 OpenAI 网站获取 OpenAI API 密钥。
  2. 使用 PandasAI 库连接到 OpenAI LLM 模型。
  3. 编写提示以便 AI 生成探索性数据分析结果。

本文是数据科学博客马拉松的一部分。

LLM 是什么意思?

LLM 代表大型语言模型,它是一种人工智能 (AI) 模型,旨在理解和生成类似于人类的文本。

想象一下,语言模型是一个已经在各种来源的文本(如书籍、文章、网站等)上接受了大量训练的计算机程序。这种训练使模型能够学习人类语言的模式、语法和上下文。

当你与语言模型互动时,例如最近流行的 ChatGPT,你可以用自然语言提供提示或问题。模型然后使用其对语言的理解来生成相关和连贯的响应。像 LLM 这样的语言模型的主要目的是帮助用户以更人性化的方式理解和生成文本。它可以用于广泛的应用,包括回答问题、提供信息、写作故事、总结文本、翻译语言等等。

简而言之,LLM 的目标是模仿人类语言的理解和表达,使用户可以以更直观、自然的方式与 AI 系统交互。

在 Python 中使用 PandasAI

现在让我们看看 PandasAI 的实际用途。首先,我们将使用以下命令下载 PandasAI 库。

注意:如果这段代码在你本地机器上运行时出现错误(例如在 Jupyter Notebook 上),你可以尝试更新本地 Python 环境或切换到基于云的笔记本,如 Google Colab。

!pip install pandasai

接下来,我们将生成我们的 OpenAI API 密钥并保存它以备后用。

导入库

import pandas as pd
from pandasai import PandasAI
from pandasai.llm.openai import OpenAI

在此演示中,我们将使用奥林匹克数据集,其中包含有关国际赛事的 120 年运动员信息。如果你想跟随一起学习,可以在这里下载数据集。

奥林匹克数据集

下载奥林匹克数据集后,让我们现在读取它。

df = pd.read_csv("athlete_events.csv")
df.head()

我们的数据集包含有关运动员、国籍、性别、参加比赛时的年龄、他们参加的运动项目、是否获得奖牌以及他们参加的奥林匹克运动会的信息。

为了开始探索我们的数据集,我们将首先通过使用之前生成的 OpenAI API 密钥来初始化 OpenAI LLM 对象,从而调用 PandasAI 对象。

# 将 API 令牌加载到 OpenAI 环境中
llm = OpenAI(api_token='你的 API 密钥')
# 使用 OpenAI 环境初始化 PandasAI 的实例
pandas_ai = PandasAI(llm)

我们终于可以和我们的数据集“对话”,并从奥运数据中获取洞察力了。

让我们找出参加奥运会比赛最多的运动员是谁。为此,我们运行我们创建的pandas_ai变量,并输入我们的数据集名称和提示。

prompt = "哪位运动员参加了最多的奥运会,参加了多少次"
pandas_ai.run(df, prompt=prompt)

输出

“参加最多奥运会的运动员是Ian Millar,共参加了10次。”

注意:输出结果可能因数据集的定期更新而有所不同。

最好验证我们得到的答案是否正确。通常我们通过按运动员姓名分组并计算每个运动员的参赛年份的唯一值总数来进行验证。我们看到AI确实给了我们正确的答案。

df.groupby(by='Name')['Year'].nunique().sort_values(ascending=False)

那么,如果Ian Millar参加了10次奥运会比赛,是否有一位运动员在他的任期内参加了最多的运动项目? 让我们找出来。

pandas_ai.run(df, prompt="哪位运动员参加了最多的比赛,参加了多少次")

“哦,你知道Ioannis Theofilakis创下了参加最多比赛的记录吗?他参加了惊人的33个比赛!”

Ioannis Theofilakis是一个了不起的人物!

接下来,让我们看看哪个国家在奥运会历史上获得了最多的奖牌。

pandas_ai.run(df, 
prompt="哪个国家赢得的奖牌数量最多,有多少枚奖牌")

“赢得最多奖牌的国家是美国,共获得了惊人的5219枚奖牌!”

虽然AI找到了正确的国家,但似乎它没有找到奖牌数量。所以,正如我们之前提到的那样,最好验证答案。

df.groupby(by='NOC')['Medal'].count().sort_values(ascending=False).reset_index().head(5)

美国总共赢得了5637枚奖牌,而不是AI提到的5219枚。

如果我们想看看AI生成的代码以产生预期结果,我们可以将“verbose”作为输入添加到PandasAI对象中。

pandas_ai = PandasAI(llm,verbose=True

这将给我们一个输出结果,其中包含AI获取我们提示答案所需的所有步骤。

让我们找出每次奥运会中运动员的性别差异。我们将使用上面的变量来输入我们的提示。

pandas_ai.run(df, 
prompt="生成一个数据集,其中列出每年男女参与者的总数")

这是AI自己编写的代码,它给了我们以下表格和输出。

它还提供了一种对话式答案。

“数据集显示了奥运会每年男女参与者的总数。它揭示了女性参与者的数量随着时间的推移而增加,在1980年代和1990年代有显著增长。在最近的2016年奥运会中,男性参与者超过了5,000人,女性参与者超过了5,000人。”

这还不是全部!我们还可以使用PandasAI来绘制数据的可视化图表。让我们找出印度在奥运会上获得的奖牌总数的趋势,并将其可视化为条形图。

pandas_ai.run(df, 
prompt="使用来自IND参赛者获得的奖牌总数绘制条形图")

我们看到印度在20世纪50年代表现最好。

最后,让我们绘制一个直方图,展示不同年龄组的运动员人数分布。

pandas_ai.run(df, 
prompt="基于年龄组创建一个直方图,每个区间长度为10")

我们观察到年龄在20-30岁之间的运动员占最多的参赛者。

未来展望

PandasAI有潜力革新不断发展的数据分析领域。如果你是一个数据分析师,主要关注从数据中提取见解并根据用户要求生成图表,那么这个库可以帮助您以高效的方式自动化这个过程。但是,在使用PandasAI时,您需要注意以下几个挑战:

  1. AI如何解释您的提示在很大程度上决定了所得结果,有时可能无法提供预期答案。例如,在奥林匹克数据集中,AI偶尔会在“奥林匹克运动会”和“奥林匹克赛事”之间感到困惑,导致可能产生不同的响应。
  2. PandasAI不能用作数据处理应用程序的工具,例如数据收集和翻译成可用信息。
  3. 它也不适用于大数据分析。

目前,PandasAI与Python的应用有限,不能替代Pandas库。

结论

人工智能和对话式界面的进步正在革新我们与数据交互的方式,简化任务,显著增强数据分析的可访问性。

以下是本文中的摘要:

  • 我们看到了PandasAI从数据框直接检索信息作为对话回答甚至可视化的惊人能力。这肯定通过自动化数据探索过程等方式增加了生产力。
  • 然而,我们不能忽视Pandas库在数据框上执行复杂操作、数据插值等方面的能力。
  • 需要注意的是,尽管PandasAI是一个强大的工具,但它仍然不能取代Pandas库的广泛功能范围。

总之,PandasAI作为Pandas库的有价值扩展,增强了其功能,并增加了更多的处理具有挑战性的数据操纵和分析任务的能力。通过增强Pandas已经广泛的生态系统,PandasAI进一步提高了在Python中处理数据的便利性和有效性。

本文中显示的媒体不归Analytics Vidhya所有,由作者自行决定。