Ollama 経由で pandasai を活用したデータ分析してみる

# はじめに
今回は、Ollama 経由で pandasai を活用したデータ分析してみる方法を紹介します。この記事では、タイタニックのデータセットを使って具体的な実装例を示します。

前回以下の記事を投稿したのですが、その時よりは良い結果を得られました。

https://qiita.com/Tadataka_Takahashi/items/cb6be826e2e9ae95afad

# pandasaiとは？
pandasaiは、Pandasデータフレームを操作するためのインテリジェントなライブラリです。自然言語でのデータ操作を可能にし、データの可視化、データクレンジング、特徴量生成など、幅広い機能を提供します。これにより、データサイエンティストやアナリストがデータ操作をより直感的に行えるようになります。

## 主な機能
- **自然言語でのクエリ:** データに対して自然言語で質問を行い、その結果を得ることができます。
- **データ可視化:** グラフやチャートを生成してデータを視覚的に表示します。
- **データクレンジング:** 欠損値の処理やデータセットのクレンジングを行います。
- **特徴量生成:** データの品質を向上させるための特徴量を生成します。

https://docs.pandas-ai.com/intro

# Ollamaとは？

Ollamaは、LLama3やLLava、vicunaやPhiなどのオープンに公開されているモデルを手元のPCやサーバーで動かすことの出来るツールです。Ollamaをインストールしていて、モデルはllama3をダウンロードしている、前提で、以下の説明を進めます。

# 必要なライブラリのインストール

まず、以下のコマンドを実行して必要なライブラリをインストールします。

```bash
!pip install pandas langchain_community pandasai ollama
```

# pandasaiの基本的な使い方

## APIキーを使用する場合

pandasaiは、クラウドベースのLLMを利用するためにAPIキーを使用します。以下は、その設定方法と使用例です。

```python
import os
import pandas as pd
from pandasai import Agent

# サンプルデータフレーム
sales_by_country = pd.DataFrame({
    "country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],
    "sales": [5000, 3200, 2900, 4100, 2300, 2100, 2500, 2600, 4500, 7000]
})

# APIキーを環境変数として設定
os.environ["PANDASAI_API_KEY"] = "YOUR_API_KEY"

# エージェントの初期化
agent = Agent(sales_by_country)
response = agent.chat('Which are the top 5 countries by sales?')
print(response)
```

## Ollama経由での使用

Ollamaを使用する場合は、APIキーが不要です。以下は、その設定方法と使用例です。

```python
import pandas as pd
from langchain_community.llms import Ollama
from pandasai import SmartDataframe

# Ollamaモデルの初期化
llm = Ollama(model="llama3")

# サンプルデータとしてタイタニックのデータセットを読み込む
data = pd.read_csv(
    "https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv"
)

# SmartDataframeの作成
df = SmartDataframe(data, config={"llm": llm})

# プロンプトを入力
prompt = input("プロンプトを入力してください: ")

if prompt:
    # 応答の生成
    response = df.chat(prompt)
    print("プロンプト:" + prompt)
    print("生成された応答:")
    print(response)
else:
    print("プロンプトを入力してください！")
```

# 実行例と出力

上記のコードを実行すると、プロンプトとして任意の質問を入力することで、データに基づいた応答を生成することができます。例えば、「how many rows are there in PassengerId?」と入力すると、その結果が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/2fdc6753-d992-c7fa-ff45-1c80e0e37505.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/5a64ae1e-5410-5dd8-22d2-3cf6f4846aa5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/7005db5e-a052-b656-7f41-8403942dbeb1.png)

# まとめと結論

pandasaiは、APIキーを使用してクラウドベースのLLMを利用する方法と、Ollama経由でローカルのLLMを利用する方法の両方に対応しています。用途や環境に応じて使い分けることで、柔軟にデータ分析を行うことができます。Ollama経由でも、このタイタニックデータセットの内容であれば、上記のように自然言語でデータ分析できました。

詳しい情報や使用例については、[公式ドキュメント](https://docs.pandas-ai.com)を参照してください。

# 参考情報

<iframe width="560" height="315" src="https://www.youtube.com/embed/-bt9grGmNvs?si=9UuX6pvmJ3S_Y3Pb" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

Tirendaz AIチャンネルさん
この動画では、Streamlit、Ollama、PandasAIを使用してローカル環境で無料でデータ分析アプリを構築する方法を紹介します。セットアップからアプリの初期化、Ollamaの起動、モデルの初期化、推論の実行までの手順を解説します。

# 環境情報
google colab proで確認した

<details>
  <summary>バージョン情報</summary>
Python 3.10.12
geopandas==0.13.2
ollama==0.2.1
pandas==1.5.3
pandas-datareader==0.10.0
pandas-gbq==0.19.2
pandas-stubs==2.0.3.230814
pandasai==2.2.1
sklearn-pandas==2.2.0
</details>