用LlamaIndex构建自己的PandasAI
LlamaIndex构建PandasAI
介绍
Pandas AI是一个利用生成式人工智能增强流行数据分析库Pandas的Python库。只需简单的提示,Pandas AI就可以执行复杂的数据清洗、分析和可视化,而以前需要很多行代码。
除了处理数字,Pandas AI还能理解自然语言。您可以用普通英语提问有关数据的问题,它会用日常语言提供摘要和见解,省去了解密复杂图表和表格的麻烦。
在下面的示例中,我们提供了一个Pandas数据帧,并要求生成式AI创建一个柱状图。结果令人印象深刻。
pandas_ai.run(df, prompt='绘制每年发布的媒体类型的柱状图,使用不同的颜色。')
注意:代码示例来自Pandas AI:您的生成式AI驱动数据分析教程。
在本文中,我们将使用LlamaIndex创建类似的工具,该工具能够理解Pandas数据帧并生成上述复杂结果。
LlamaIndex通过聊天和代理实现对数据的自然语言查询。它允许大型语言模型在不重新训练新数据的情况下解释大规模私有数据。LlamaIndex将大型语言模型与各种数据源和工具集成。LlamaIndex是一个数据框架,只需几行代码即可轻松创建带有PDF应用程序的聊天。
设置
您可以使用pip
命令安装Python库。
pip install llama-index
默认情况下,LlamaIndex使用OpenAI的gpt-3.5-turbo
模型进行文本生成,使用text-embedding-ada-002
进行检索和嵌入。为了顺利运行代码,我们必须设置OPENAI_API_KEY
。我们可以在新的API令牌页面上免费注册并获取API密钥。
import os
os.environ["OPENAI_API_KEY"] = "sk-xxxxxx"
他们还支持Anthropic、Hugging Face、PaLM等模型的集成。您可以通过阅读模块文档了解所有相关信息。
Pandas查询引擎
让我们来讨论创建自己的Pandas AI的主题。在安装库和设置API密钥之后,我们将创建一个简单的城市数据帧,其中城市名称和人口作为列。
import pandas as pd
from llama_index.query_engine.pandas_query_engine import PandasQueryEngine
df = pd.DataFrame(
{"city": ["纽约", "伊斯兰堡", "孟买"], "population": [8804190, 1009832, 12478447]}
)
使用PandasQueryEngine
,我们将创建一个查询引擎来加载数据帧并索引。
然后,我们将编写一个查询并显示响应。
query_engine = PandasQueryEngine(df=df)
response = query_engine.query(
"哪个城市的人口最少?",
)
如我们所见,它已经生成了用于显示数据帧中人口最少城市的Python代码。
> Pandas指令:
```
eval("df.loc[df['population'].idxmin()]['city']")
```
eval("df.loc[df['population'].idxmin()]['city']")
> Pandas输出: 伊斯兰堡
如果打印响应,您将得到”伊斯兰堡”。这很简单但令人印象深刻。您不需要自己构思逻辑或在代码中进行实验。只需输入问题,您将得到答案。
print(response)
伊斯兰堡
您还可以使用响应元数据打印结果后面的代码。
print(response.metadata["pandas_instruction_str"])
eval("df.loc[df['population'].idxmin()]['city']")
全球YouTube统计分析
在第二个示例中,我们将从Kaggle加载全球YouTube统计数据集,并进行一些基本分析。这是一个进阶的例子。
我们将使用read_csv
将数据集加载到查询引擎中。然后,我们将编写提示,仅显示具有缺失值的列以及缺失值的数量。
df_yt = pd.read_csv("Global YouTube Statistics.csv")
query_engine = PandasQueryEngine(df=df_yt, verbose=True)
response = query_engine.query(
"列出具有缺失值和缺失值数量的列。仅显示具有缺失值的列。",
)
> Pandas指令:
```
df.isnull().sum()[df.isnull().sum() > 0]
```
df.isnull().sum()[df.isnull().sum() > 0]
> Pandas输出:category 46
Country 122
Abbreviation 122
channel_type 30
video_views_rank 1
country_rank 116
channel_type_rank 33
video_views_for_the_last_30_days 56
subscribers_for_last_30_days 337
created_year 5
created_month 5
created_date 5
Gross tertiary education enrollment (%) 123
Population 123
Unemployment rate 123
Urban_population 123
Latitude 123
Longitude 123
dtype: int64
现在,我们将直接提问关于流行的频道类型。在我看来,LlamdaIndex查询引擎非常准确,还没有产生任何幻觉。
response = query_engine.query(
"哪种频道类型的观看次数最多。",
)
> Pandas指令:
```
eval("df.groupby('channel_type')['video views'].sum().idxmax()")
```
eval("df.groupby('channel_type')['video views'].sum().idxmax()")
> Pandas输出:Entertainment
Entertainment
最后,我们将要求它可视化条形图,结果令人惊叹。
response = query_engine.query(
"根据订阅者数量可视化前十个YouTube频道的条形图,并添加标题。",
)
> Pandas指令:
```
eval("df.nlargest(10, 'subscribers')[['Youtuber', 'subscribers']].plot(kind='bar', x='Youtuber', y='subscribers', title='Top Ten YouTube Channels Based on Subscribers')")
```
eval("df.nlargest(10, 'subscribers')[['Youtuber', 'subscribers']].plot(kind='bar', x='Youtuber', y='subscribers', title='Top Ten YouTube Channels Based on Subscribers')")
> Pandas输出:AxesSubplot(0.125,0.11;0.775x0.77)
通过简单的提示和查询引擎,我们可以自动化数据分析并执行复杂的任务。LamaIndex还有很多更多的功能。我强烈推荐您阅读官方文档并尝试构建一些令人惊奇的东西。
结论
总之,LlamaIndex是一个令人兴奋的新工具,允许开发人员创建自己的PandasAI-利用大型语言模型的强大功能进行直观的数据分析和对话。通过使用LlamaIndex对数据集进行索引和嵌入,您可以在私有数据上启用高级自然语言功能,而无需损害安全性或重新训练模型。
这只是一个开始,借助LlamaIndex,您可以构建基于文档的问答系统、聊天机器人、自动化人工智能、知识图谱、AI SQL查询引擎、全栈Web应用程序,并构建私有生成式AI应用程序。Abid Ali Awan (@1abidaliawan)是一位认证的数据科学家专业人员,热衷于构建机器学习模型。目前,他专注于内容创作,并在机器学习和数据科学技术方面撰写技术博客。Abid拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络为患有心理疾病的学生构建一个AI产品。