2023/11/26
ChatGPT4を使う(7)
先日、会社主催の定年後の生活に関するセミナーがありました。その中で今後の必要なお金を考える上で、直近の支出を把握する所がありました。前日に奥さんに確認しつつ、大雑把に数字を把握していたのですが、支出額を低く見積もり過ぎた感があり、改めて正確に出す必要があるなと思いました。支出の基本は、①クレジットカードで自動決済した場合、②金融機関から自動で引き落とされる場合、③金融機関から手動で引き出して現金化する場合の3つです。②③は通帳を見れば把握できますので、取り急ぎ、①を集計しようと思いました。
集計までの手順は以下の通りです。
1.データセットの作成
2.データの可視化
3.データの分析(集計含む)
面倒なデータの前処理や可視化は極力、楽をしたいので、Pythonでコーディングしましたが、さらに楽をしたいので、生成AI(GPT4)を使ってコーディングまでやってもらいました。
1.データセットの作成
クレジットカードは主に楽天カードを使っているので、その利用ログファイルをダウンロードする所からスタートです。当月分の請求(先月分の利用)を含め、過去15か月分のデータがダウンロードできました。これだけあれば、毎月の平均的な支出が把握できそうです。
例えば、2023年2月請求のログファイルは「enavi202302(6388).csv」というファイル名で、中身はこんな感じです。
"利用日","利用店名・商品名","利用者","支払方法","利用金額","支払手数料","支払総額","2月支払金額","3月繰越残高","新規サイン"データから、本人や家族が利用した案件に加え、ETC利用も含まれていることが分かりました。
"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","*"
分析を行う上で面倒なのは、①月毎にファイルが作成される点、②最新のデータが一番上で過去データが下にあり、時系列が逆になっている点です。前処理でその部分を一括で変換して、1つのファイルにしようと思います。
ChatGPT4に添付ファイルを付けて、以下のプロンプトを「Data Analysis」で実行させました。添付ファイルは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)
利用日,利用店名・商品名,利用者,利用金額ここまでのデータセットの作成について、生成AIを利用してあっという間に、サクサクと進めることができました。生成AIを用いない場合はPythonでコーディング・デバッグをしながらなので、感覚的に10倍ぐらいの労力がかかったかもしれません。
2022/07/27,*******,家族,5160
2022/07/28,*******,本人,8534
・・・
2023/01/07,ETCカード売上,ETC,1060
・・・
2.データの可視化と3.データの分析については次回にお話しします。