pandasにAIのチカラが宿る?PandasAIを試してみた

PandasAIを試してみた

はじめに

こんにちは。データアナリティクス事業本部のおざわです。 今回は、PandasAIというおもしろそうなライブラリを見つけたので共有したいと思います。

pandasはデータ分析などにも使われる定番のライブラリですが、今回ご紹介するPandasAIはOpenAIやStarCoderなどのLLMを利用して、pandasのデータフレームに関する質問に答えてくれたり、データ加工やグラフ作成を手伝ってくれたりします。

準備

さっそく準備していきます。Google Colabを使って試してみました。

!pip install --upgrade pandas pandasai

以下のようなエラーが出ましたが、一度ランタイムを再起動して再度実行するとインストールできました。

WARNING: Upgrading ipython, ipykernel, tornado, prompt-toolkit or pyzmq can
cause your runtime to repeatedly crash or behave in unexpected ways and is not
recommended. If your runtime won't connect or execute code, you can reset it
with "Disconnect and delete runtime" from the "Runtime" menu.
WARNING: The following packages were previously imported in this runtime:
  [IPython]
You must restart the runtime in order to use newly installed versions.

今回はOpenAIを使うのでAPI Keyを指定します。APIキーの取得は以下のブログをご参照ください

やってみた

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

OPENAI_API_KEY = "sk-1234567890XXXXXXXXXX"
llm = OpenAI(api_token=OPENAI_API_KEY)

データはChatGPTに作成してもらった架空の自動車販売店の売上データを使います。

日付,お客様名,営業担当,車,売上
2023-05-01,山田太郎,鈴木次郎,アコード,2500000
2023-05-02,佐藤花子,田中一郎,CR-V,3500000
2023-05-03,高橋健太,山田花子,フィット,1800000
2023-05-04,中村美穂,鈴木次郎,オデッセイ,2800000
2023-05-05,伊藤直也,佐々木直樹,アコード,2200000
2023-05-06,小林恵子,山田花子,CR-V,3900000
2023-05-07,鈴木次郎,田中一郎,フィット,2000000
2023-05-08,山口隆之,山田花子,オデッセイ,3200000
2023-05-09,西田佳奈,佐々木直樹,アコード,2400000
2023-05-10,松田剛,鈴木次郎,CR-V,3700000

売上に関して質問したいので、売上を確認します。

df = pd.read_csv('./data.csv')
df.groupby('営業担当')['売上'].sum().sort_values(ascending=False)
---------
営業担当
鈴木次郎	9000000
山田花子	8900000
田中一郎	5500000
佐々木直樹	4600000

売上トップの営業担当者を聞いてみます。だいぶ待たされましたが回答がきました。 ちゃんとあってますね。

pandas_ai = PandasAI(llm, conversational=False)
pandas_ai.run(df, prompt='売上トップの営業担当者を教えてください')
---
鈴木次郎

conversationalにTrue指定すると文章で回答してくれます。

pandas_ai = PandasAI(llm, conversational=True)
pandas_ai.run(df, prompt='売上トップの営業担当者を教えてください')
---
Sure, the top sales representative is named Jiro Suzuki.

日本語で回答するようにお願いしたところ、こんな回答が返ってきました。

pandas_ai.run(df, prompt='日本語で回答してください。売上トップの営業担当者を教えてください')
---
「売上トップの営業担当者は誰ですか?」という質問に対して、回答は「鈴木次郎さんですよ」となります。

試しにプロンプトに複数依頼を含めたところエラーになりました。

NoCodeFoundError                          Traceback (most recent call last)
Cell In[8], line 1
----> 1 pandas_ai.run(df, prompt='日本語で回答してください。売上トップの営業担当者の名前と売上を教えてください')

英語だと回答がもらえましたので、エラーになったら英語で試すのがよさそうです。

pandas_ai.run(df, prompt='Could you please tell me which rep sold the most and how much the total sales was?')
---
The top rep is 鈴木次郎 with total sales of 9000000.

以降はconversationalはFalseにして質問してみます。これもあってますね。

pandas_ai.run(df, prompt='売上トップ3の営業担当の名前を教えてください')
---
['山田花子' '鈴木次郎' '田中一郎']

次は売上がよかった車の名前も聞いてみます。これもあってました。

pandas_ai.run(df, prompt='一番売上がよかった車の名前を教えてください')
---
CR-V

最後にグラフも生成してみたところ、一発で出力してくれました。

# 文字化け対策
!pip install japanize-matplotlib
import japanize_matplotlib

pandas_ai.run(df, prompt='営業担当別の売上グラフを作成してください。')

おわりに

PandasAIを使ってダミーの売上データに関して日本語で質問してみました。まだ出てきたばかりのライブラリですので、アクティブに開発されているようです。最新版では欠損値を埋めるimpute_missing_valuesや特徴量を自動で作ってくれるgenerate_featuresといったメソッドも追加されているようです。

最後にPandasAIの開発者の方がライブラリについて説明している動画とColabのリンクを載せておきます。