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



ChatGPT4を使う(7)

 先日、会社主催の定年後の生活に関するセミナーがありました。その中で今後の必要なお金を考える上で、直近の支出を把握する所がありました。前日に奥さんに確認しつつ、大雑把に数字を把握していたのですが、支出額を低く見積もり過ぎた感があり、改めて正確に出す必要があるなと思いました。

 支出の基本は、①クレジットカードで自動決済した場合、②金融機関から自動で引き落とされる場合、③金融機関から手動で引き出して現金化する場合の3つです。②③は通帳を見れば把握できますので、取り急ぎ、①を集計しようと思いました。

集計までの手順は以下の通りです。
 1.データセットの作成
 2.データの可視化
 3.データの分析(集計含む)

面倒なデータの前処理や可視化は極力、楽をしたいので、Pythonでコーディングしましたが、さらに楽をしたいので、生成AI(GPT4)を使ってコーディングまでやってもらいました。

1.データセットの作成
 クレジットカードは主に楽天カードを使っているので、その利用ログファイルをダウンロードする所からスタートです。当月分の請求(先月分の利用)を含め、過去15か月分のデータがダウンロードできました。これだけあれば、毎月の平均的な支出が把握できそうです。

例えば、2023年2月請求のログファイルは「enavi202302(6388).csv」というファイル名で、中身はこんな感じです。
"利用日","利用店名・商品名","利用者","支払方法","利用金額","支払手数料","支払総額","2月支払金額","3月繰越残高","新規サイン"
"2023/01/31","*********","本人","1回払い","3700","0","3700","3700","0","*"
"2023/01/25","*********","本人","1回払い","13025","0","13025","13025","0","*"
・・・
"2023/01/15","*********","家族","1回払い","1400","0","1400","1400","0","*"
・・・
"2023/01/07","ETCカード売上","ETC","1回払い","850","0","850","850","0","*"
・・・
"2023/01/01","*********","本人","1回払い","4277","0","4277","4277","0","*"
データから、本人や家族が利用した案件に加え、ETC利用も含まれていることが分かりました。
 分析を行う上で面倒なのは、①月毎にファイルが作成される点、②最新のデータが一番上で過去データが下にあり、時系列が逆になっている点です。前処理でその部分を一括で変換して、1つのファイルにしようと思います。

 ChatGPT4に添付ファイルを付けて、以下のプロンプトを「Data Analysis」で実行させました。添付ファイルは10個までの制限がありましたので、最終プログラムでは手作業で15ファイル対応にしました。dataset1_231126.pngGPT4からの回答は以下の通りです。「結合されたカード利用明細のダウンロード」をクリックすると、指示通り10ファイルの結合と時系列の並べ替えが完了していました。便利ですね!dataset2_231126.pngPythonプログラムを出力してもらいましょう。dataset3_231126.pngdataset4_231126.pngこの原型プログラムを修正して、15ファイルに対応したプログラムに修正しました。修正箇所は、ファイルパスのリストの数を10から15に拡張した程度です。完成したプログラムは以下の通りです。
import pandas as pd
import os

def combine_csv_files(file_paths, output_path):
all_data = pd.DataFrame()

for file_path in file_paths:
try:
# CSVファイルを読み込む
data = pd.read_csv(file_path, encoding='utf-8')

# 結合したDataFrameに追加
all_data = pd.concat([all_data, data])
except Exception as e:
print(f"Error reading {os.path.basename(file_path)}: {e}")

# 日付によってデータを並べ替える(最初のカラムが日付であると仮定)
all_data.sort_values(by=all_data.columns[0], inplace=True)

# インデックスをリセット
all_data.reset_index(drop=True, inplace=True)

# 結合されたデータをCSVファイルとして保存
all_data.to_csv(output_path, index=False)

return output_path

# ファイルパスのリスト
file_paths = [
'./enavi202209(6388).csv',
'./enavi202210(6388).csv',
'./enavi202211(6388).csv',
'./enavi202212(6388).csv',
'./enavi202301(6388).csv',
'./enavi202302(6388).csv',
'./enavi202303(6388).csv',
'./enavi202304(6388).csv',
'./enavi202305(6388).csv',
'./enavi202306(6388).csv',
'./enavi202307(6388).csv',
'./enavi202308(6388).csv',
'./enavi202309(6388).csv',
'./enavi202310(6388).csv',
'./enavi202311(6388).csv',
]

# 出力ファイルのパス
output_path = './Card_statement.csv'

# 関数を呼び出してCSVファイルを結合
combine_csv_files(file_paths, output_path)
最終的には必要なデータ項目のみを抽出して以下のデータセットに仕上げました。
利用日,利用店名・商品名,利用者,利用金額
2022/07/27,*******,家族,5160
2022/07/28,*******,本人,8534
・・・
2023/01/07,ETCカード売上,ETC,1060
・・・
ここまでのデータセットの作成について、生成AIを利用してあっという間に、サクサクと進めることができました。生成AIを用いない場合はPythonでコーディング・デバッグをしながらなので、感覚的に10倍ぐらいの労力がかかったかもしれません。
 2.データの可視化と3.データの分析については次回にお話しします。

ChatGPT4を使う(6)

 前回の続きです。今回はChatGPT4のプラグイン機能のお話をしようと思いましたが、先に「Advanced Data Analysis」を味見したので、そのお話をします。

 Advanced Data Analysisは以前、Code Interpreterと呼ばれていたものですね。Code Interpreter自身は使ったことがなかったので、何とも言えませんが、データ(数値、画像)をChatGPTに食わせて、データ分析をするためのプログラムを書いてくれるもののようです。

 今回味見をしたのは2023/08/12のブログで画像を読み込ませて、BingとBardに画像処理をさせようとしてうまく行かなかった案件です。
 早速、Advanced Data Analysisを使う準備ですが、GPT-4から「Advanced Data ... Beta」を選択しました。AdvancedDataAnalysis_231105.png 画像をGPT-4に読み込ませて、カラー画像をモノクロ画像にするようにプロンプトを書きました。Prompt1_231105.png結果、手順を示した後に、結果のグレー(モノクロ)画像が出力されました。Answer1-1_231105.png「コードの詳細を表示」をクリックするとPythonのコードが表示されました。Answer1-2_231105.pngこのプログラムを別環境(VS code)から動作させても正常に動きました。Python_gray_run_231105.png 念のため、今現在のBingが賢くなっているかもしれませんので確認してみましたが、回答は以前と同様に希望したものではありませんでした。bing_231105.png
 画像をGPT-4に食わせて、画像処理ができることが分かったので、追加の確認(色抽出)を行いました。まずは、白いチューリップです。プロンプトは以下の通りで、Prompt2_231105.png結果は以下の通りです。やや黄色っぽいものやピンク色っぽいものもありますが、賢く選別できているようです。Answer2_231105.png別環境(VS Code)でもGPT-4で生成されたプログラムは、ほぼ修正なしで動作しました。Python_white_run_231105.png 次は、黄色のチューリップで、Prompt3_231105.pngその次は、赤色のチューリップです。Prompt4_231105.pngこの白色、黄色、赤色の識別についてですが、プログラム上で画像をHSV変換して、各色の範囲の画像領域を抽出していました。Hueの値はネット情報を参考に以下の関係があります。Hue_231105.png実際のプログラムで書かれていた色の定義は以下の通りです。自動で判断してパラメータも設定してくれたようですね。素晴らしい!!
# 白色の範囲を定義するための閾値
# HSVでの白色は、高い明度(Value)と低い彩度(Saturation)を持つ
lower_white = np.array([0, 0, 200])
upper_white = np.array([180, 55, 255])

# 黄色の範囲を定義するためのHSV閾値
# HSVでの黄色は、色相が約30から60度
lower_yellow = np.array([20, 100, 100])
upper_yellow = np.array([30, 255, 255])

# 赤色の範囲を定義するためのHSV閾値
# HSVでの赤色は色相が0付近または180付近
lower_red1 = np.array([0, 120, 70])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 120, 70])
upper_red2 = np.array([180, 255, 255])
 GPT-4では簡単な画像処理ならば、自然言語の指令だけで目的のプログラムを作成して、その場で確認してくれることが分かりました。今後、有効に活用していこうと思います。

ChatGPT4を使う(5)

 前回の続きです。前回お話しした通り、$20の有償のChatGPT4が開通しました。ChatGPT4_initial_231029.png
 まず、設定を確認しておきます。
 ロケール(アルファ)を「ja-JP」に変更すると、デフォルトの英語表記から日本語表記に変わりました。ChatGPT4_setting1_231029.png ベータ機能を確認すると、「プラグイン」と「高度なデータ分析」ができるようですね。どんなことができるかは、次回以降、味見をしようと思います。ChatGPT4_setting2_231029.png データ制御を確認すると、チャット履歴の保存と、入力の文言がモデルの学習に使われる旨が書かれてあります。個人が自宅で使う分は、学習されても問題ない内容しか話さないので、ONにしておきました。ChatGPT4_setting3_231029.png
 さて、今回は流行に乗るわけではありませんが、DALL-E 3を使ってみました。DALL-E 3は2023年9月21日にOpenAI社が公開したばかりの最新の画像生成AIで、テキストプロンプトからその内容を反映した画像を生成するDALL-Eシリーズの最新版です。

 ChatGPTのWebページの「GPT-4」をクリックして、「DALL・E 3」を選択しました。DALL-E3_setting_231029.png まず初めに「居眠りをしている豆柴犬」です。以前のブログで「豆柴」をAI側が理解できていなかったので「豆柴犬」としました。今回はバッチリですね。Qualityも高い。DALL-E 3の実力なのでしょうか??mame_shiba_231029.png
 次に「自律神経が落ち着く景色」を出してもらいました。今年は今もそうですが、公私共にいろんなことがあり、自律神経のバランスが非常に良くないです。ゆっくり休めていない感じでしょうか・・?。ChatGPTに労わってもらいましょう。landscape_231029.pngこれは「なかなかいい感じ」ですね。絵心のない私が言うのも変ですが、AIが書いた感じは避けられませんが、どこに出しても問題ないようなQualityです。

 この風景画を用いて、遊んでみようと思います。まずは、ルノアール風にアレンジしてもらいました。少しぼやけた感じ(語彙力がなくうまく表現できません・・)が出たように思いました。Renoir_231029.png次はゴッホ風です。これはタッチが素人にも分かりやすいですね。Gogh_231029.png最後に個人的に興味がある、東山魁夷風にしてもらいました。すごくいい感じですね。HigashiyamaKaii_1_231029.pngGPT4がどのタッチが好きかを聞いてきたので「東山魁夷だ」と答えると、サービスの画像を出力してくれました。これも味わいがあって良いです。HigashiyamaKaii_2_231029.png
 今回はDALL-E 3で楽しませてもらいました。次回は、ChatGPT4のプラグイン機能を使ってみようと思います。

ChatGPT4を使う(4)

 今年の4月のブログでChatGPT4を有償で利用した内容のお話をしました。当時、画像とテキストの両方の入力を受け入れる「マルチモーダルモデル」が利用できるという触れ込みがあったので・・。ただし、機能実装がまだだったので、1か月で有償サービスを止めました。その後、BingやGoogle Bardに画像入力が導入されたのでそちらを利用していました。

 4月に初めてChatGPT4を試して半年が経ち、もう一度使ってみたいなと思い立ち、まず、①OpenAIのAPIか、②先日開通させたAzure OpenAIのAPIを利用しようと考えました。毎月$20払い続けるよりも、利用した分だけ請求される方が納得できますので。平日の日中は仕事で利用できず、土日が利用のメインなので、月3,000円(150円/ドル:直近円安進む・・)は正直な所、割高に感じます。

 まず、①のOpenAIのAPIについてですが、情報によると、GPT-4のAPIアクセスについて、以下の2点が記載されていました。ともに当てはまらずで断念しました。
 1. 2023年7月6日、1ドル以上の支払いを成功させたすべてのAPI ユーザーにGPT-4 API (8k) へのアクセスを許可しました。間もなくすべての開発者にアクセスを開放し、その後はコンピューティングの可用性に応じてレート制限の引き上げを開始する予定です。現在 GPT-4-32K API へのアクセスは許可されていませんが、後日利用可能になる予定です。
 2. 2023年8月18日以降に作成された API アカウントの場合、0.50 ドル相当以上のプリペイドクレジットを購入すると、すぐに GPT-4 にアクセスできるようになります。

 1.において、月1ドル以上利用すれば開放されるのかもしれませんが、試していないのでよく分かりません。また、「間もなくすべての開発者にアクセスを開放」と書かれていますが、一向に気配なしですね・・。2.については、8/18以前にAPIアカウントを作成していたので「NG」でした。中途半端な立場でがっかり。

 ②のAzure OpenAIのAPIですが、これもスムーズに行きませんでした。利用希望者が多く制限されている感ありです。そもそもGPT4を利用する際にはWait Listに申請が必要でしたが、直近は不要になっているはずで、GPT4_1_231029.pngJapan East(日本東部)にもモデルがあるとのことで、確認してみたのですが、GPT4_2_231029.pnggpt-4、gpt-4-32kはありませんでした。注意事項に書かれていた「入手可能性は限られています」に引っかかっているのでしょうね・・。Azure_East_Japan231029.png
 ネットを彷徨っていると、「GPT-4モデルの作成に利用できるカナダ東部、スウェーデン中部、スイス北部などの別の地域を使用することをお勧めします。」との情報を得ましたので、カナダ東部とスイス北部の2拠点で確認しました。結果は「GPT-4の環境をデプロイできましたが、実際動いているのはGPT4ではない。」でした。原因はよく分かりません。GPT_chat_231029.pngまだ、GPT4のAPI登録関係が流動的なのでしょうね。

 結局、最終的にはあきらめて、$20を出費することにしました。半年ぶりの課金です・・。楽に、Free Planから切り替え完了。ChatGPTPlusに変身!です。GPT4_Web_1_231029.pngエンジンも確かにGPT4ですね。これは本物ですね(ハルシネーション(嘘)がなければ・・)。GPT4_Web_2_231029.png有償利用期間中、じっくり使い込んで行こうと思います。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

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

月別アーカイブ

メールフォーム

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