fc2ブログ

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.データの分析については次回にお話しします。
スポンサーサイト



コメント

非公開コメント

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

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

月別アーカイブ

メールフォーム

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