IT 資産運用

【Money Forward】Python と Looker Studio を使って抽出・可視化してみた

こんにちわ、あひるです。
今回は「Money Forward って見やすいけど、この辺が分かりにくいなぁ」「このデータだけ抽出したいなぁ」こういった疑問に答えます。

私はMoney Forwardを3年以上使っており、普段の生活ではアプリに表示されるグラフに満足していますが、「こういう軸で比較したいのに」と思ったことが度々あります。

ならば自分で作ってしまおう!と言うことで、本記事では、「Money Forward」のWebサイトの情報をPythonとLooker Studioを使って抽出し、可視化する方法について紹介します。

全体の流れは以下のようになります。

簡単な流れ

  1. [Python] Money Forward に自動ログイン
  2. [Python] 目的のデータをスクレイピング(抽出)
  3. [Python] データを加工
  4. [Python] スプレッドシートに書き込み
  5. [Bi] Looker Studioで可視化

それでわ、Let's go!!

準備

私は以下の環境で実行しています。
Chrome は事前にインストールしておきましょう。

実行環境

  • Python 3.8.2
  • Webdriver-manager 3.8.3
  • gspread 5.7.2
  • gspread-dataframe 3.30
  • Selenium 4.7.2

Python からGoogleスプレッドシートを操作するには、Google Drive APIとGoogle Sheets APIの準備が必要ですが、今回の記事では主目的ではないので省略します。

外部リンクとなりますが、以下が参考になるかと思います。

 

Money Forward からのデータ抽出

ログイン後、資産のページに移動して

 

このテーブル情報を抽出します

 

コードは以下となります。
User_name, password にユーザーのサインイン情報を記入してください。

 Python
user_name = "ログインID"
password="ログインパスワード"
#####
from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
import pandas as pd
import time
option = Options()
option.add_argument('--incognito')
option.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(ChromeDriverManager().install(),options=option)
#####
driver.get(r"https://moneyforward.com/users/sign_in")
#driver.maximize_window()
time.sleep(5)
driver.implicitly_wait(10)
e = driver.find_element(By.XPATH,r"/html/body/main/div/div/div/div/div[1]/section/div/div/div[2]/div/a[1]")
e.click()
driver.implicitly_wait(10)
e = driver.find_element(By.XPATH,r"/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/input")
e.send_keys(user_name)
driver.implicitly_wait(10)
e = driver.find_element(By.XPATH,r"/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[3]")
e.click()
driver.implicitly_wait(10)
e = driver.find_element(By.XPATH,r"/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/input[2]")
e.send_keys(password)
driver.implicitly_wait(10)
e = driver.find_element(By.XPATH,r"/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[3]/input")
e.click()
driver.implicitly_wait(10)
e = driver.find_element(By.XPATH,r"/html/body/div/div/div/header/div[2]/ul/li[4]/a")
e.click()
url = driver.current_url
fi_table = driver.find_element(By.CSS_SELECTOR, "table.table-mf")
html = fi_table.get_attribute("outerHTML")
dfs = pd.read_html(html)
driver.close()
df = dfs[0]
df

 

Googleスプレッドシートへの書き込み

コードは以下となります。
key_name, spread_key にGoogle Drive APIとGoogle Sheets APIを記入してください。

 Python
import gspread
from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
key_name = 'ご自身のGoogle Drive API'
spread_key = "ご自身のGoogle Sheets API"
credentials = service_account.Credentials.from_service_account_file(key_name)
scoped_credentials = credentials.with_scopes(
['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
)
gc = gspread.Client(auth=scoped_credentials)
gc.session = AuthorizedSession(scoped_credentials)
sheet = gc.open_by_key(spread_key)
print(sheet.title)
workbook = gc.open_by_key(spread_key)
worksheet = workbook.worksheet("加工するページ")
 
#以下、加工処理のため参考程度
s_df = pd.DataFrame(worksheet.get_all_values())
s_df.columns = s_df.iloc[0]
s_df = s_df.drop(s_df.index[[0]])
s_df = s_df.iloc[:,1:]
 
#スプレッドシートへ書き込み
from gspread_dataframe import set_with_dataframe
set_with_dataframe(workbook.worksheet("書き込み先のページ"), s_df, include_index=True)

加工処理は他にも行っているのですが、人によって異なると思いますので、大部分は割愛しています。

 

Looker Studio によるデータ可視化

Google Drive 上のスプレッドシートをデータソースとして選択して、お好みでグラフ化してみてください。
Looker Studio の使い方は機会があれば記事にしてみたいと思います。

 

まとめ

今回はMoney ForwardのWeb情報をスクレイピングし、Looker Studioで可視化する方法を紹介しました。

最も時間がかかったのはLooker Studioでした。

MicrosoftのPower BIは使い慣れているのですが、Looker Studioはそれよりも使い方にクセがあり、リレーションの組み方やグラフの細かな設定ができないなど、使いにくい印象がありました。

しかし、無料であり、Googleのプラットフォームということで、他のソリューションと親和性が高いというメリットがあるため、慣れるしかないと思っています。

それでわ

-IT, 資産運用