見出し画像

自分はローソンへ行きすぎている

家から徒歩一分の場所にローソンがあって、ほぼ毎朝コーヒーを買っているのですが、一体全体どれくらいの頻度で行っているのか気になったので可視化してみました。

必ずクレカ払いにしているので、MoneyForward の家計簿データに支払いが残っています。そこからローソンの項目を抽出してカウントしました。


分析手順

同じような分析をする人がいるかわかりませんが、Google Colab を使ったので一応コードも残しておきます。

家計簿データのCSVをダウンロード

MoneyForward の家計簿のページからダウンロードできます。長期間一気にダウンロードできると嬉しいのですが、わからなかったので一ヶ月ごとのCSVを12個ダウンロードして、Google Drive に保存しました。

Google Colab で全部まとめた Pandas DataFrame を作る

http://colab.new/ で Google Colab を開いてから、以下のコードでディレクトリにある全部の CSV を読み結合させます。

from google.colab import drive
import pandas as pd
import os
import altair as alt

drive.mount('/content/drive')

dir = '/content/drive/MyDrive/{あなたのディレクトリ}'
dfs = []

for file in os.listdir(dir):
  filepath = os.path.join(dir, file)
  dfs.append(pd.read_csv(filepath, encoding="shift-jis", parse_dates=['日付']))

df = pd.concat(dfs)

その後、ローソンの支出エントリを抜き取ります。

lawson_df = df.query(
    '内容 == "ロ-ソン"'
)[["日付", "金額(円)"]].groupby('日付').sum().reset_index()

週に何回行っているか

まずは、週ごとに支出の回数をカウントしてまとめました。

結果はこんなかんじです。

2024年2月くらいから有給消化を始め、3月に FIRE したので、その近辺からローソンの使用頻度が増えています。週 5~7 回行っていますね。

ちなみに集計コードはこんなかんじ。自分は Altair を使った描画が好きでよく使っています。

weekly_spend_df = lawson_df.groupby(pd.Grouper(key="日付", freq="W")).count().reset_index()
weekly_spend_df = weekly_spend_df.rename(columns={"金額(円)": "使用回数"})

alt.Chart(weekly_spend_df.query("日付 <= '2024-06-16'")).mark_bar().encode(
    x=alt.X('yearmonthdate(日付):O', title='週',
            axis=alt.Axis(format='%Y/%m/%d', labelAngle=-90)),
    y=alt.Y('使用回数:Q', title='週に何回使っているか'),
).properties(
    width=400,
    title='ローソンを週に何日使っているか'
)

月にいくらローソンに払っているか

次に、月ごとに支出額を合計してまとめました。結果はこんなかんじです。

支出も2月からとっても増えていることが丸わかりですね。ローソンへの支出だけで2万円と出ました。単純に日割りすると600円以上なので結構払っていますね。

コードはこんなかんじ。

monthly_spend_df = lawson_df.groupby(pd.Grouper(key="日付", freq="MS")).sum().reset_index()
monthly_spend_df = monthly_spend_df.rename(columns={"金額(円)": "支出"})

alt.Chart(monthly_spend_df.query("日付 <= '2024-05-31'")).mark_bar(
).transform_calculate(
    y='-datum.支出'  # 正負反転
).encode(
    x=alt.X('yearmonthdate(日付):O', title='月',
            axis=alt.Axis(format="%Y/%m", labelAngle=-90)),
    y=alt.Y('y:Q', title='支出(円)'),
).properties(
    width=400,
    title='ローソンへの月ごとの支出'
)

まとめてみて

今回は単なるお遊びでしたが、一度 CSV を Google Drive においてしまえば似たような処理は簡単にできそうです。

ローソンのコーヒーはなんであんなにおいしんでしょう☕

この記事が気に入ったらサポートをしてみませんか?