本当に『良かった』のだろうか
2021-06-25
azblob://2022/11/11/eyecatch/2020-06-25-fitbit_get_heart_rate-000.jpg

目次

こんにちは、山本です。

皆さんは音楽ライブに参加されたことはありますでしょうか?
私は先日幕張イベントホールで行われた『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 URLhttp://localhost/
OrganizationPersonal
Organization Website URLhttp://localhost/
Terms of Service URLhttp://localhost/
Private Policy URLhttp://localhost/
OAYTH 2.0 Application TypePersonal
Redirect URLhttp://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:00~)があり、確かにその付近の時間帯で心拍数がほかの日より明らかに高いことがわかります。

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

まとめ

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

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

 

 

 

私は本当によかったと思っていたのでしょうか。