タイトルのツールを製作中ですが、明細が溜まったので一度計算してみたいと思います。
今回はDB(sqlite3)に入れて集計してみます。
ツールはサブPCのUbuntu上で作ってるのでその環境で動かします。
スキーマ
前回作ったpythonコードをちょっと修正してそれ経由でCSV突っ込んでます。
なのでカラムは最低限のものしかありません。
レコードは250です。
sqlite> .schema CREATE TABLE payment_2023 ("利用日/キャンセル日" TEXT,"利用店名・商品名" TEXT, "支払総額" TEXT); sqlite> SELECT count("利用日/キャンセル日") FROM payment_2023 ; 250
シェルスクリプト
何回かに分けてデータを取り出します。
年次とか月ごととか。
DBは本職じゃないのでもっといい書き方があると思います。
改行無しの1行で書いてしまった。見にくくてすみません。
#!/bin/bash MIN_DATE=$(sqlite3 paypaydb.db "SELECT MIN(\"利用日/キャンセル日\") FROM payment_2023;") MAX_DATE=$(sqlite3 paypaydb.db "SELECT MAX(\"利用日/キャンセル日\") FROM payment_2023;") echo "期間: ${MIN_DATE} ~ ${MAX_DATE}" #年次 echo "===== 年次明細 =====" sqlite3 paypaydb.db "SELECT strftime('%Y', \"利用日/キャンセル日\"), sum(支払総額), count(利用店名・商品名) FROM payment_2023;" #年次 店ごと echo "===== 店ごとの年次明細 =====" sqlite3 paypaydb.db "SELECT 利用店名・商品名, sum(支払総額), count(利用店名・商品名) FROM payment_2023 GROUP BY 利用店名・商品名 ORDER BY count(利用店名・商品名) DESC" #月次 店ごと echo "===== 月ごとの明細 =====" sqlite3 paypaydb.db "SELECT strftime('%Y-%m', \"利用日/キャンセル日\"), 利用店名・商品名, sum(支払総額), count(利用店名・商品名) FROM payment_2023 GROUP BY 利用店名・商品名, strftime('%Y-%m', \"利用日/キャンセル日\") ORDER BY \"利用日/キャンセル日\";" #決済回数 echo "===== 一日あたりの最大決済回数 =====" sqlite3 paypaydb.db "SELECT \"利用日/キャンセル日\", 利用店名・商品名, max(count_stores), sum_pay FROM (select \"利用日/キャンセル日\", 利用店名・商品名, count(利用店名・商品名) as count_stores, sum(支払総額) as sum_pay FROM payment_2023 GROUP BY \"利用日/キャンセル日\", 利用店名・商品名 ORDER BY count_stores, sum_pay DESC) GROUP BY 利用店名・商品名 ORDER BY max(count_stores) DESC;"
出力
動かしてみます。
例によって通ってる店、地名入る店はマスクしてます。
全角なのを修正すればよかった、が、まあ一旦いいでしょう。
❯ bash summary.sh 期間: 2023-05-22 ~ 2023-10-29 ===== 年次明細 ===== 2023|174105|250 ===== 店ごとの年次明細 ===== PayPay 町かど酒場XXXX|119150|233 PayPay XXXX Dining|15800|7 ヤフージャパン|2540|5 PayPay km国際自動車T1 羽田|16050|1 PayPay KOREAN DINING|15090|1 PayPay XXXX眼科|1700|1 PayPay XXXX商店|755|1 PayPay ハリケーン|3020|1 ===== 月ごとの明細 ===== 2023-05|PayPay 町かど酒場XXXX|5700|11 2023-05|ヤフージャパン|508|1 2023-06|PayPay XXXX商店|755|1 2023-06|PayPay XXXX Dining|3900|2 2023-06|ヤフージャパン|508|1 2023-06|PayPay 町かど酒場XXXX|11600|22 2023-07|PayPay XXXX Dining|3800|1 2023-07|PayPay XXXX眼科|1700|1 2023-07|ヤフージャパン|508|1 2023-07|PayPay 町かど酒場XXXX|19150|38 2023-08|PayPay km国際自動車T1 羽田|16050|1 2023-08|PayPay 町かど酒場XXXX|21600|42 2023-08|ヤフージャパン|508|1 2023-09|PayPay 町かど酒場XXXX|19900|40 2023-09|PayPay KOREAN DINING|15090|1 2023-09|PayPay XXXX Dining|4200|2 2023-09|ヤフージャパン|508|1 2023-10|PayPay XXXX Dining|3900|2 2023-10|PayPay ハリケーン|3020|1 2023-10|PayPay 町かど酒場XXXX|41200|80 ===== 一日あたりの最大決済回数 ===== 2023-10-15|PayPay 町かど酒場XXXX|8|4000 2023-08-11|PayPay km国際自動車T1 羽田|1|16050 2023-09-24|PayPay KOREAN DINING|1|15090 2023-07-08|PayPay XXXX Dining|1|3800 2023-07-16|PayPay XXXX眼科|1|1700 2023-06-10|PayPay XXXX商店|1|755 2023-10-29|PayPay ハリケーン|1|3020 2023-05-31|ヤフージャパン|1|508
わりかし望み通りのいい感じの出力ができました。
本当はテーブルモードで出力したいのですが日本語が入るとレイアウトがずれるのでデフォルトのままです。
自作ツールなのでカラムの内容はわかりますが、ヘッダも出力させるほうががいいな。
振り返り
年次とは言ってますがPayPay使い始めたのは今年5月からなのと先月の明細までしかないのでこの時点では実質5ヶ月分の結果ですね。
それでも17万使ってます。うーむ。
PayPayはカード使えない飲み屋でしか使わないのでなかなか飲んでます。
10月は例の立ち飲み屋で計80品も頼んでますね。
週3で行っても平均一回6~7品。やはり飲み過ぎだね。
通う日にちか頼むペースをちょっと控えないとですね。
まとめ
というわけで行いを振り返りつつ今後の戒めができました。
集計ツール作ったのでこれでいいじゃんという気もしますがアプリで明細をダウンロードしてそのまま確認できるようにするのが目標なので、アプリ化は引き続きやっていきたいと思います。
本シリーズ
PayPayの支払いデータを自分で集計したい1 - paloma blog