fc2ブログ

ChatGPT4を使う(8)

 前回の続きです。クレジットカードで決済をした場合の月毎の支出を集計する話です。前回、集計に用いるデータセットの作成まで終わりましたので、今回はデータの可視化と分析です。今回もChatGPT4にプログラムを書いてもらい、マイナー修正して使える形にしました。

2.データの可視化
 前回作成したデータセットを添付して、以下のプロンプトを投げました。ChatGPT4のData Analysisを用いました。dataVisualization1_231203.png結果は以下の通りで、グラフは表示してくれましたが、日本語フォントが文字化けしました。dataVisualization2_231203.png再度、トライをしてくれたみたいですが、結局文字化けは解消されませんでした。「グラフの内容自体は正しく表現されています。」と開き直られていますが・・。dataVisualization3_231203.png 以前も日本語の情報の入ったデータをData Analysisで処理した際に、エラーを吐いたことがあります。現時点(23/12/03)でGPT4のData Analysisでは日本語を使わない方が良いかもしれませんね。
 日本語表記に対応するため、結局、自身のローカルPC(Mac Mini)のPython環境で、今回GPT4が作成してくれたコードを動かしました。コードは19行目の日本語フォントの設定を20行目に修正するだけで他に修正する箇所はありませんでした。すごいですね。
import pandas as pd
import matplotlib.pyplot as plt

# Load the data from the uploaded CSV file
file_path = 'Card_statement.csv' # CSVファイルのパスを適宜変更してください
card_data = pd.read_csv(file_path)

# Convert the '利用日' column to datetime
card_data['利用日'] = pd.to_datetime(card_data['利用日'])

# Extract year and month for grouping
card_data['年月'] = card_data['利用日'].dt.to_period('M')

# Group by year-month and user, and sum the amounts
monthly_usage = card_data.groupby(['年月', '利用者'])['利用金額'].sum().unstack(fill_value=0)

# Set the font to support Japanese characters
# Note: The font setting may need to be adjusted based on your environment
#plt.rcParams['font.family'] = 'IPAexGothic'
plt.rcParams['font.family'] = 'Hiragino Sans'

# Create a stacked bar plot
plt.figure(figsize=(12, 6))
monthly_usage.plot(kind='bar', stacked=True, ax=plt.gca())
plt.title('月別利用金額(利用者別積み上げ)')
plt.xlabel('月')
plt.ylabel('利用金額')
plt.xticks(rotation=45)
plt.legend(title='利用者')
plt.tight_layout()

# Show the plot
plt.show()
描画結果は以下の通りで、楽にグラフを作成することができました。dataVisualization4_231203.png
3.データの分析
 次に同じデータセットについて、以下の質問を投げかけました。一つ目のプロンプトは「本人」の利用額ベスト10の質問です。dataAnalysis1-1_231203.png回答は以下の通りです。モザイクで数字を隠していますが、問題なく、利用額の多い順番に表示されました。dataAnalysis1-2_231203.png二つ目のプロンプトは利用者毎の月別の集計の質問です。dataAnalysis2-1_231203.png結果、これもモザイクで数字を隠していますが、正しく出力されました。dataAnalysis2-2_231203.png三つ目のプロンプトは同じ「利用店名・商品名」毎の集計の質問です。dataAnalysis3_231203.pngこれも正しい結果でした。生成AIは勝手に数字を当てはめているイメージがありましたが、Data AnalysisでバックグラウンドのPythonが正しく計算した上で、正確な回答を出してくれていることが分かりました。これは使えそうですね。

 ちなみに、同じ内容をPandasAIで行わせても結果は同じでした。OpenAIのGPT4用APIのアカウントを私自身、所持していないので、おそらくGPT3.5でもPandasAIで正しい回答が導き出せているのでしょうね。PandasAIのプログラムは以下の通りです。
import pandas as pd
from pandasai import PandasAI
from pandasai.llm.openai import OpenAI

# Instantiate a LLM
OPENAI_API_KEY = "my openai key"
llm = OpenAI(api_token=OPENAI_API_KEY)
pandas_ai = PandasAI(llm)

df = pd.read_csv('Card_statement.csv') # dataset read
column_names = df.columns.tolist()
print(column_names)

# 利用者が「本人」のデータについて、利用額が多い順に10件出力してください。
pandas_ai(df, prompt='利用者が「本人」のデータについて、利用額が多い順に10件出力してください。')

# 利用金額を本人、家族、ETCに分けて月単位で集計し出力してください。
pandas_ai(df, prompt='利用金額を本人、家族、ETCに分けて月単位で集計し出力してください。')

# 利用金額を「利用店名・商品名」毎に集計して、利用金額が多い順に10件出力してください。
pandas_ai(df, prompt='利用金額を「利用店名・商品名」毎に集計して、利用金額が多い順に10件出力してください。')
15行目の回答はこんな感じです。GPT4のData Analysisのものと同じ回答でした。PandasAI_Result1_231203.png
 最後に、Bing ChatとGoogle Bardも試しましたが、双方NGでした。
Bing Chat: 文字数4000文字制限で、添付データすべてを読み込めずにNG。土俵に上がれず・・。
Google Bard: プロンプトは受け付けたので、文字数制限はパスしたが、得られた回答がデタラメで使えない。

 今回、ChatGPT4のData Analysisでデータセットを食わせて、可視化や分析ができることがよく分かりました。どれだけ、高度のことができるのか、今後さらに触って確認してみようと思いました。
スポンサーサイト



コメント

非公開コメント

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: