5
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?

More than 1 year has passed since last update.

LangChainのcreate_pandas_dataframe_agentを使ってみた。

Last updated at Posted at 2023-04-10

1. はじめに

2. 試してみたもの

  • データは10000件くらいの特許データ(csv)。出願日、出願人、発明者などがデータで入っているもの。⇓
    image.png

インストールなどはお決まりで。

!pip install langchain
!pip install openai

import os
os.environ["OPENAI_API_KEY"] = "********"

from langchain.agents import create_pandas_dataframe_agent
import pandas as pd
df = pd.read_csv(~~~)

  • create_pandas_dataframe_agentでllmとdfを指定。
from langchain.llms import OpenAI
agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True)

行数を聞いてみるとあってる!

agent.run("how many rows are there?")
"人手で集計:{}".format(df.shape[0])

image.png

出願人や発明者の数を聞いてもあってる!

  • 特にセル内に複数人いた場合(|区切りで入ってる)でも、文章で説明すれば理解してくれた。
  • 良く見ると機械がやった集計方法も乗ってて勉強になった。
agent.run("出願人は何人いますか?セル内の区切りの「|」で分割して集計してください。")
df["出願人(最新)"].str.split("|",expand=True).stack().value_counts()

image.png

agent.run("発明者は何人いますか?セル内の区切りの「|」で分割して集計してください。")
df["発明者(最新)"].str.split("|",expand=True).stack().value_counts()

image.png

出願年で集計してもあってる。ちゃんとソートもお願いすれば聞いてくれる。

agent.run("出願日から出願年を抽出して、出願年毎に出願件数を集計してください。出願年で昇順にソートしてください。")
df["出願日(現)"].str[0:4].value_counts().sort_index()

image.png

⇓人手集計結果。
image.png

テキスト処理

  • エラーが出て最終的に実行できず。これは他のライブラリ(Python Agent)の助けを借りればできるかも。
agent.run("要約から名詞を抽出して集計してください")

image.png

agent.run("要約から名詞を抽出して集計してください")
agent.run("発明の名称を使ってワードクラウドを作ってください")
  • 実際出力されなかったけれど指示が出ているので順に実行してみる。
  • おお。日本語対応してないので豆腐化。
from wordcloud import WordCloud
names = df['発明の名称'].str.cat(sep=' ')
wordcloud = WordCloud().generate(names)
wordcloud.to_image()

image.png

  • 日本語フォントで何とかしようとしている。そのうち日本語対応させたい。
agent.run("発明の名称を使ってワードクラウドを作ってください。日本語で表示する必要があります。")

image.png

内容要約

  • 1行分で切って要約してくれた模様。これはGPTSimpleVectorIndexなどで処理してあげた方がよさそう。
agent.run("出願の内容を要約から抽出してまとめてください。")

image.png

クロス集計

  • 一生懸命集計スクリプトを出力しようとしてるけど失敗。
  • なんとかうまく指示して作成する方法を見つけたい。
agent.run("Fタームを横軸、出願人を縦軸にしてそれぞれセル内の区切りの「|」で分割した上で、クロス集計をしてください。")

#人手でやるとこんな感じ?
#df[['Fターム(最新)', '出願人(最新)']].apply(lambda x: x.str.split('|')).explode('Fターム(最新)').explode('出願人(最新)').reset_index().pivot_table(index='Fターム(最新)', columns='出願人(最新)', aggfunc='size', fill_value=0)

image.png

定義抽出

agent.run("筆頭FIの分類定義を検索して、新たな列「定義」に追加してください。")
  • なんかやってくれている。かなり荒っぽく削っているけど抽出してくれた。
    image.png

image.png

5
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
5
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?