Jupyter Notebook x Pandas x MoneyForward

Page content

Jupyter Notebook x Pandas で MoneyForward のデータを分析する。

線形回帰分析

https://www.randpy.tokyo/entry/2017/06/16/153435 がとても勉強になる。

  • 回帰分析とは、[x0, x1, x2, x3], [y0, y1, y2, y3] のデータセットがあるときに, x4 に対する y4 を予測すること
  • 線形回帰分析では、予測線が線形 (=直線) であり、最小二乗法 (OLS: Ordinary Least Squares) で求める

線形回帰分析を Jupyter Notebook x Pandas で行う

題材として、 MoneyForward の資産推移で自分の資産増減傾向を分析しよう。

元データの取得

これ、フリー利用でも全期間表示されるので、グラフのもとになる json か javascript を読めば分かっちゃうわけですね。

**イメージ: ** mf

all.js って名前でしたわ。

これをちょちょいと加工して、 csv にデータを吐く node.js のスクリプトに仕立て上げて実行してあげれば、分析の元ネタのCSVが出来上がり。

Pandas で加工

Jupyter-notebook 上でやるといちいち画面に結果が出てくれるのでやりやすいですね。

ポイントは 最小二乗法 (OLS) による近似直線の導出のパートだと思うので、そこだけ抜粋する:

# 近似直線の傾き a, 切片 b を求める. numpy の polyfit でできる
a, b = np.polyfit(list(df.index), list(df['total']), 1)
df['ols'] = a * df.index + b

polyfit というメソッドで実現できる。

これで、以下のようなグラフを作ることが出来ます。

# 資産推移を area chart, その近似直線を line chart で描き、重ねる
fig = plt.figure(figsize=(16, 9))
ax = fig.add_subplot(1, 1, 1)

df.plot.area(x='date', y=['total'], alpha=0.5, ax=ax)
df.plot(x='date', y='ols', ax=ax)

出来上がりイメージ (流石にお金の話なので雰囲気だけ): graph

期間を変えれば任意の N ヶ月間の資産推移の傾き、なんてものも描くことができるね。