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



ブログアクセスログをスクレイピングする(3)

 久々にブログのアクセスログを集計してみようと思い立ち(いつもの思いつき・・)、2年ほど前のブログを参考にプログラムを動かしてみました。結論から言うと、以前Pythonプログラムから操作できていたWebページがセキュリティ強化のためか?動かず・・。万事休すの備忘録です。

 このブログ記事はブラウザにFirefoxを使いましたが、今回はChromeを使いました。ChromeDriverはブラウザバージョンに対応したものをネットから取得し、以下のプログラムと同じフォルダ内に保存しました。
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time
import csv

driver = webdriver.Chrome('./chromedriver')

username = "xxxxx@outlook.com"
password = "my password"

# Login Page
driver.get('https://fc2.com/ja/login.php?ref=blog')

login_username = driver.find_element(By.ID,"id")
login_username.clear()
login_username.send_keys(username)

login_password = driver.find_element(By.ID,"pass")
login_password.clear()
login_password.send_keys(password)

driver.find_element(By.CLASS_NAME, 'sh_login_ja').click() # Login button click
time.sleep(2)

login_password.submit()
time.sleep(3)
13行目を実行すると、Chromeがテストモードで立ち上がります。Chrome_auto_231126.pngその後、21行目まで実行すると、「メールアドレス/ブログID」と「パスワード」に必要事項が入力されました。Login_231126.png23行目の「ログイン」の画像ボタンを押すと、問題なければ管理画面にページが飛ぶのですが、「メールアドレス/ブログID」と「パスワード」のテキストボックスの入力内容がクリアされ、ログインできない結果でした。
 何度やっても結果は同じでした。また、ログインボタンを押す操作だけ、手動でやっても、管理画面にログインできませんでした。セキュリティが変わったのか、自動でログインできなくなったのかなと思いながらも、念のため、ブラウザをEdgeに変更して再トライしました。

 Edgeのdriver(Mac用のmsedgedriver)もネットから取得し、以下のプログラムと同じフォルダ内に保存しました。Edge_driver_231126.png
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time
import csv

driver = webdriver.Edge('./msedgedriver')

username = "xxxxx@outlook.com"
password = "my password"

# Login Page
driver.get('https://fc2.com/ja/login.php?ref=blog')

login_username = driver.find_element(By.ID,"id")
login_username.clear()
login_username.send_keys(username)

login_password = driver.find_element(By.ID,"pass")
login_password.clear()
login_password.send_keys(password)

driver.find_element(By.CLASS_NAME, 'sh_login_ja').click() # Login button click
time.sleep(2)

login_password.submit()
time.sleep(3)
13行目を実行すると、Edgeがテストモードで立ち上がりました。Edge_auto_231126.png Chromeの場合と同様に、「メールアドレス/ブログID」と「パスワード」に必要事項が入力されましたが、結果は同じで、管理画面へログインできませんでした。手動でボタンを押しても同様でした。

 ブラウザを変えても同じ結果なので、ブラウザの問題ではなさそうです。手動でログインボタンを押してもNGなので、そもそもテストモードで管理画面にログインできないような仕様に変更になったのでしょう・・。以前は問題なく動いていたので・・。
 セキュリティ強化のために、自動でWebサイトを操作することが難しくなっていますね。個人的に利用するだけなのですが・・。頭を冷やして別の方法を検討しようと思います。

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では簡単な画像処理ならば、自然言語の指令だけで目的のプログラムを作成して、その場で確認してくれることが分かりました。今後、有効に活用していこうと思います。

爪水虫、治る

 今回も技術ネタではありません・・。(最近、技術ネタの投稿が少ない、考えていないエンジニア!)
【ご注意】衛生上よろしくないお話なので、それをご理解の上、先にお進みください。

 この直近の1年間、自律神経のバランスが良くないのか、体の到る所にダメージがあります。日々の忙しさで、体を日頃から労っていないからかもしれません。

 その中の放置していた案件として、左足の親指の爪が変色していた問題がありました。痛くも痒くもないので、半年以上そのまま放置していました。爪が伸びて切ると元通りになるのではないかと、非科学的なことを思っていたのですが、ますます酷くなってきたので、ネットで調べると「爪水虫」の症状に似ていたので、皮膚科に行きました。
 結果、予測通り「爪水虫」でした。初めてかかる症状でした。いつも靴を履いていて、足の指あたりに汗をかいていたせいなのか、あるいは実家の父親が水虫なのでそれが移ったのでしょうか??(後者が有力??)

 治療なのですが、テルビナフィンという抗真菌薬を数ヶ月飲むと治るとのこと。へぇ〜!。効能として、白癬(水虫ですね)、爪白癬、手・足白癬、生毛部白癬、頭部白癬、ケルスス禿瘡、白癬性毛瘡、生毛部急性深在性白癬、硬毛部急性深在性白癬に効くようです。

 6月中旬から薬を飲み続けて、3か月経つ頃に急激に変化が現れてきました。爪水虫9月末にはほぼ爪水虫の面影はなく、その1か月を過ぎた今でも再発していません。

 歳をとるにつれて、悪くなる所が増えていきますが、今回のように悪い所が治るということはあまりないので、些細なことながら嬉しい出来事でした。

金木犀を剪定する

 自宅の庭の金木犀の発育が旺盛で年々巨大化しています。昨年、剪定をしていなかったせいか、形もいびつになりました。金木犀を自宅に植えたのは、今の家を建てた時(2003年)なので、20年の歴史があります。植えた時は私の身長よりも低い、70cmぐらいでしたが、年々大きくなりました。8年前に大胆な剪定をして骨組みだけになった時期もありましたが、その後すくすくと成長しました。その生命力はあやかりたいですね。

 枝葉が半端ない程広がっていたので、高枝切り鋏で剪定するのも日が暮れるので、枝をのこぎりでバッサリ切断し、残りを仕上げました。枝を大胆に切ってしまったのもあり、またもや「いびつな形」になりました(さらにひどくなっている?)。ただ、春になるとまた成長が始まりますので、形の修正は可能でしょう。

 写真の左はBefore、右はAfterです。かなりスッキリしたと思います。kinmokusei_sentei1_231103.pngkinmokusei_sentei2_231103.png 重労働だったので、すでに筋肉痛が始まっています。今日は早く休もうと思います。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

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

月別アーカイブ

メールフォーム

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