話題のOura Ringで睡眠時間を分析してみた

こんにちは。2022年1月入社の阿部です。

リモートワークに慣れてきたからか、つい油断して夜ふかしをしてしまうことが増えました。
そんな中で、自分にとって最低限必要な睡眠時間を知っておけば、そのラインを超えないように意識できると思います。
今回はOura Ringという睡眠時間を計測できるスマートデバイスを使って、睡眠時間を分析していきます。

そもそもOura Ringとは

特徴

「Oura Ring(オウラリング)」は、ユーザーの日々の健康をモニタリングできる指輪型のウェアラブルバイスです。心拍数の常時トラッキング機能や歩数の計測、睡眠計測といった機能が搭載されています。
他の会社が出しているものよりデザインが良いと勝手に思っています。
円安過ぎて現在は4万円以上するみたいです。。

また、スマホアプリと連携することで、その日の活動量や睡眠の質、コンディションを点数で表示してくれます。
朝起きた時、以下のようにコンディションスコア、睡眠スコア、睡眠の質が表示されます。
ちなみにコンディションスコアは前日の活動量や睡眠時間で決まるらしいですが、どのように計算しているかはわかりません。

Apple Watchではダメなのか?

Apple WatchでもOura Ring同様に睡眠時間を計測したり、専用のアプリをインストールすれば睡眠の質まで見ることができます。
ただ、Oura Ringは人差し指で計測しているためApple Watchと比較して精度が高く、より正確な値を計測したい方にはOura Ringがおすすめです。
また、Oura Ringはバッテリーも長持ちで4, 5日に一回の充電で済むのもおすすめポイントです。

なぜ分析するのか

Oura Ringのアプリは大変便利で、それだけで睡眠時間の管理ができるため、自分で分析する必要は無いように思えます。
しかし、アプリだけでは毎日のデータは見れる一方、長期的な傾向は分からないため、分析する必要があると考えました。

本題

Oura Ringの紹介みたいになってしまいましたが、本題はここからです。

方法

Oura Ringで計測したデータは全てクラウドからAPIで取ってくることができます。

Oura API

今回はPythonを使ってAPIを叩き、CSV形式で出力、それをBIツールで分析していきます。

APIキーの準備

https://cloud.ouraring.com/personal-access-tokens

まず、APIを利用するための下準備として上記URLからPersonal Access Tokenを発行します。 Tokenはコピーしておきましょう。

Pythonでデータ取得

データを取得するに当たり、Oura Ring用のPythonライブラリがあるのでまずはそれをインストールします。

oura · PyPI

pip install oura

以下のコードで睡眠、アクティビティ、コンディションデータをそれぞれCSV形式で出力していきます。

import oura
import pandas as pd

#APIキーの入力(先程コピーしたものを以下に貼り付けます)
MY_TOKEN="" 
client = oura.client_pandas.OuraClientDataFrame(personal_access_token=MY_TOKEN)

#期間を指定
start_text="2022-03-01"
end_text="2022-09-30"

#Sleepデータ、Activityデータ、Readinessデータをdataframeに格納。
data_sleep_df=client.sleep_df(start=start_text, end=end_text)
data_activity_df=client.activity_df(start=start_text, end=end_text)
data_readiness_df=client.readiness_df(start=start_text, end=end_text)

#各csvファイルを出力
folder_name="~/Documents/oura_data/"
data_sleep_df.to_csv(folder_name + "sleep.csv")
data_activity_df.to_csv(folder_name + "activity.csv")
data_readiness_df.to_csv(folder_name + "readiness.csv")

ファイルが3つ作られます。左から睡眠、アクティビティ、コンディションのデータです。

睡眠データの中身を見ていくと43カラムありました。詳細なデータの内容に関してはAPIドキュメントに記載されています。レム睡眠が何時間とかの睡眠時間の内訳のようなデータもあり、かなり細かく分析できそうな感じでした。
今回は睡眠データの合計睡眠時間(total_in_hrs)、コンディションデータのコンディションスコア(score)だけを使っていきます。

sleep.csv

可視化の準備

今回データを可視化するに当たり使用するBIツールはPower BIを選びました。理由としては直近で業務で利用していたからです。
Power BIでレポートを作成する際にはPower BI Desktopのインストールが必要になります。

ダウンロード | Microsoft Power BI

今回はCSV形式のファイルを取得したいので、「データを取得」から「テキスト/CSV」を選択して、sleep.csvとreadiness.csvをインポートします。

これで可視化する準備が整いました。

Power BI Desktop画面

分析してみる

睡眠時間とコンディションスコアの関係を散布図にしてみました。
赤線は傾向線で睡眠時間とコンディションは当然比例しています。
また、黄色の線は平均睡眠時間を表したもので5.65時間、緑色の線は平均コンディションスコアを表したもので67点となっていました。

Power BI Desktop画面

ここからはこれらのデータを使って自分にとって最適な睡眠時間が何時間なのか調べていきます。

Oura Ringを半年以上使ってみて、自分の感覚ではコンディションスコアが70点以上のときはその日の体調が整っていると感じています。
なのでコンディションスコアが70点以上のときの平均睡眠時間を調べてみます。

以下のようにPower BIのDAX関数を使って求めました。
自分の場合約6時間半寝れば、その日のコンディションが整うことがわかりました。
これからは2時までには寝て、8時半に起きる生活を送ろうと思います。

Power BI Desktop画面

まとめ

Oura Ringを使って睡眠時間を分析してきました。
今回は簡単な分析しかできませんでしたが、提供されているデータは沢山あるので、もっと深い分析ができそうです。
睡眠で悩んでいる方がいたら是非Oura Ringを使って、自分に合った睡眠時間を見つけてみてください。