このページの本文へ

プリティーシリーズ10周年ライブが本当に『良かった』のか、Fitbit APIで検証してみる

2021年07月09日 11時00分更新

文● 山本 和貴/FIXER

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「本当に『良かった』のだろうか」を再編集したものです。

 こんにちは、山本です。

 皆さんは音楽ライブに参加されたことはありますでしょうか?

 私は先日幕張イベントホールで行われた『Pretty series 10th Anniversary Pretty Festival』に参加してきました。 このライブはアニメ『プリティーリズム』『プリパラ』『キラッとプリ☆チャン』のキャスト30名以上が参加し、プリティーシリーズ10周年をお祝いするという、なんかすごいライブです。

 なんかもう書ききれないほどよかったポイントがあるのですが、輝イブ役、指出毬亜さんの『プラネタリウムの殻』、ほんとによかったねぇ…… アイドルを応援するオタクになっちゃいました。

アイドルを応援するオタクの例

 本当によかったんですが、本当によかったんでしょうか? 私は本当によかったと思っていたのでしょうか。

 検証してみましょう。

 私が本当にライブがよかったと思っているなら、ライブをやってるときはドキドキして心拍数が多くなっているはずです。 幸い、fitbitというウェアラブル端末を会社から頂き、肌身離さず付けておりますので、こいつが測っていた心拍数を平常時とライブ時で比較してみましょう。

 と、いうことで、まずはfitbitから心拍数を取得します。

 fitbitはAPIで心拍数を取得できるので、まずはアクセストークンなどを入手します。

 まずは下記URLにアクセスして[Log In]クリックして、ログインをします。

https://dev.fitbit.com/login

 次にアプリケーション登録します。[REGISTER AN APP]をクリックして、作成するアプリケーションの情報を入力していきます。今回は簡単に心拍数を取得するだけなので、簡単に埋めていきます。

項目名 入力内容
Application Name (任意の名前)
Description (任意の説明)
Application Website URL http://localhost/
Organization Personal
Organization Website URL http://localhost/
Terms of Service URL http://localhost/
Private Policy URL http://localhost/
OAYTH 2.0 Application Type Personal
Redirect URL http://127.0.0.1:8080/
Default Access Type Read Only

 アプリケーション登録が完了するとClient IDやClient Secretが発行されます。これらは後ほど利用するのでメモしておきましょう。

 そしたら次にアクセストークンを取得するために[OAuth 2.0 tutorial page]をクリックします。

 ページが遷移します。[Flow type]を[Authorization Code Flow]に変更し、下部のリンクをクリックします。

 各種データに対するアクセス権限をアプリケーションに与えるかを確認されるので[許可]をクリックします。

 ページ遷移し、URLに[Code]が表示されるので、[code=]の後ろから[#_=_]の前までをコピーします。

 OAuth 2.0 tutorial pageに戻り、先ほどクリックしたリンクの下の[Code]にURLから取得したコードを入力します。すると、下にcurlコマンドが表示されるので、自身のコマンドプロンプトなどでこれを実行します。

 curlコマンドを実行すると、json形式でアクセストークンとリフレッシュトークンが返ってきます。


{
    "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "expires_in": 28800,
    "refresh_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "scope": "location heartrate weight nutrition profile sleep settings social activity",
    "token_type": "Bearer",
    "user_id": "99Y3X7"
}

 ここまでで必要な情報は揃ったので、あとはAPIから心拍数を取得して平常時と比較しましょう。

 ここからは簡単にデータを扱いたいので都合のいいJpyter Notebookを使っていきます。

 まずは、必要なモジュールをインプット。


import fitbit
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np
import pandas as pd

 今まで取得してきたIDなどを格納し、その情報を元にクライアントを宣言


CLIENT_ID =  "xxxxxx"
CLIENT_SECRET  = "xxxxxxxxxx"
ACCESS_TOKEN =  "xxxxxxxxxx"
REFRESH_TOKEN =  "xxxxxxxxxx"

authd_client = fitbit.Fitbit(client_id=CLIENT_ID, client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)

 クライアントからAPIコールし、必要なデータを取得、あとはheart_rate_1minの中には心拍数の情報が入っているのでこれを好きに加工すればOKです。


heart_rate_1min = authd_client.intraday_time_series("activities/heart", date, detail_level="1min")["activities-heart-intraday"]["dataset"]

 今回は下記コードで加工などをしてグラフにしました。


import fitbit
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np
import pandas as pd

CLIENT_ID =  "xxxxxx"
CLIENT_SECRET  = "xxxxxxxxxx"
ACCESS_TOKEN =  "xxxxxxxxxx"
REFRESH_TOKEN =  "xxxxxxxxxx"

authd_client = fitbit.Fitbit(client_id=CLIENT_ID, client_secret=CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)

date_list = ["2021-05-30", "2021-05-23", "2021-05-16", "2021-05-09"]
new_x_tick = range(0, 1440, 180)
x_ticklabels = ["00:00", "03:00", "06:00", "09:00", "12:00", "15:00", "18:00", "21:00"] 
heart_rate_1sec = {}
heart_rate_1sec_df = {}
new_index = {}

fig = plt.figure(0, figsize=(20, 5))
axes = fig.add_subplot(1, 1, 1)
axes.set_xlabel("Time")
axes.set_ylabel("Heart Rate")
axes.xaxis.set_ticklabels(x_ticklabels)
axes.xaxis.set_major_locator(ticker.FixedLocator(new_x_tick))
for date in date_list:
    heart_rate_1sec[date] = authd_client.intraday_time_series("activities/heart", date, detail_level="1min")["activities-heart-intraday"]["dataset"]
    heart_rate_1sec_df[date] = pd.DataFrame.from_dict(heart_rate_1sec[date])

    new_index[date] = pd.date_range(heart_rate_1sec_df[date].index[0], heart_rate_1sec_df[date].index[-1], freq='1min')
    heart_rate_1sec_df[date].reindex(new_index[date], fill_value=np.nan)

    axes.plot(heart_rate_1sec_df[date]["value"], label = date)

axes.legend(loc='upper right')
fig.savefig("img.png")

 オレンジ色の線がライブのあった日になってます。ライブは昼の部(13時30分~)と夜の部(18時~)があり、確かにその付近の時間帯で心拍数がほかの日より明らかに高いことがわかります。

 つまり、ライブは本当によかったのです。

まとめ

 ライブが良かったと思っていることが分かってよかったです。

 そういえば、よかったこと言えば、プリティーシリーズ最新作『ワッチャプリマジ!』が発表されましたね。 総監督は僕の大好きな作品『カレイドスター』の原案・監督もされていた『佐藤順一』さん。嬉しいですね。 いやぁ、本当によかった。

 山本 和貴/FIXER

 MLの本とか書いてます。

[転載元]
 本当に『良かった』のだろうか

カテゴリートップへ