4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ollamaを使ったデータ分析の自動化: LangChainとPandasを用いた実装

Last updated at Posted at 2024-06-01

はじめに

今回は、OllamaのLLM(Large Language Model)を使用してPandasデータフレームに対する質問に自動的に答えるエージェントを構築する方法を紹介します。この実装により、データセットに対するインタラクティブなクエリが可能になります。

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

  • まず、必要なpythonライブラリをインストールします。
  • ollamaはインストールされていて、llama3のモデルをpullしていることを前提としています。
pip install pandas langchain langchain_community ollama

サンプルコードの紹介

次に、以下のPythonコードを使用して、Ollamaを用いたデータフレームエージェントを構築します。このコードは、タイタニックのデータセットを使用していますが、任意のCSVファイルに変更可能です。

import os
import pandas as pd
from langchain.agents.agent_types import AgentType
from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent

from langchain_community.llms import Ollama
llm = Ollama(model="llama3")

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

# エージェントを立ち上げる
agent = create_pandas_dataframe_agent(llm, df, verbose=True)

# 質問を投げ、回答を得る
rep = agent.invoke("how many rows are there in PassengerId?")
print(rep["output"])

コードの詳細説明

  1. ライブラリのインポート

    import os
    import pandas as pd
    from langchain.agents.agent_types import AgentType
    from langchain_experimental.agents.agent_toolkits import create_pandas_dataframe_agent
    from langchain_community.llms import Ollama
    
    • 必要なライブラリをインポートします。ここでは、pandaslangchain、およびollamaのコミュニティ版を使用しています。
  2. Ollamaのモデルを初期化

    llm = Ollama(model="llama3")
    
    • OllamaのLLMであるllama3モデルを初期化します。
  3. データセットの読み込み

    df = pd.read_csv("https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv")
    
    • サンプルデータとしてタイタニックのデータセットを読み込みます。この部分は任意のCSVファイルに変更可能です。
  4. エージェントの作成

    agent = create_pandas_dataframe_agent(llm, df, verbose=True)
    
    • 読み込んだデータフレームに対して質問を処理するエージェントを作成します。
  5. 質問の実行

    rep = agent.invoke("how many rows are there in PassengerId?")
    print(rep["output"])
    
    • データフレームに対して「PassengerIdには何行ありますか?」という質問を投げ、その結果を出力します。

注意点

このエージェントは非常に便利ですが、特定の質問に対しては正確な回答を返せない場合があります。たとえば、複雑なクエリや曖昧な質問の場合、エラーが発生することがあります。そのため、データ分析の信頼性を高めるために、OpenAIのモデルを試してみることも検討してください。OpenAIのモデルは、より高度な自然言語処理能力を持ち、多様な質問に対しても正確な回答を導きやすいです。

llama3の使い勝手

llama3モデルを使用する際の使い勝手について、いくつかの観点から評価してみました。より多くのパラメータを持つモデルで検証すると、結果が異なる可能性もあります。

  1. 回答の正確性

    • 基本的なクエリには迅速かつ正確に回答しますが、複雑なクエリやデータセット内の特定の条件に基づく質問に対しては、時折誤ったり不完全な回答を返すことがあります。
  2. エラーハンドリング

    • 一部の質問にはエラーが発生することがあります。例えば、存在しない列に対するクエリや曖昧な質問には適切に対応できない場合があります。このような場合、エラーメッセージを適切にキャッチし、ハンドリングすることが重要です。
  3. パフォーマンス

    • 小規模なデータセットに対しては高速に処理を行いますが、大規模なデータセットに対しては応答時間が長くなることがあります。そのため、適切なハードウェアリソースを確保することが望ましいです。

まとめ

この実装により、OllamaのLLMを活用してデータフレームに対するインタラクティブな質問応答システムを簡単に構築できます。これにより、データ分析の効率が大幅に向上し、迅速な意思決定が可能になります。ただし、使用するモデルや質問の内容、複雑さによっては、エラーが発生して動作しない場合があるため注意が必要です。

このアプローチは、様々なデータセットやクエリに適用可能であり、データサイエンティストやアナリストにとって強力なツールとなるでしょう。興味のある方はぜひ試してみてください。

参考

google colabでの実験結果

image.png
L4のGPUを設定してollamaをインストールて動作確認した。

Question : how many rows are there in PassengerId?
image.png

Question : how many rows are there?
image.png
上記のようにエラーになった。ときどき、うまくいくときがある。再現性がなかった。

Question : what is the average age?"
image.png

このサンプルコードの動きだと、UIなど用意してもユーザに公開は難しそうかな・・。もうちょっと、融通がきくように動いてほしいな・・。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?