1週間ぶんのHRを取得する

計測したデータはすべてクラウド上に上がっているので、1週間ぶんのデータを取得することも可能です。おおまかな手順は下記の動画をご覧ください。

下記スクリプトは、指定した日付から遡って3日ぶんのHRを取得するスクリプトです。

#getWeekHR.py
import sys
import fitbit
import gather_keys_oauth2 as Oauth2
from datetime import datetime, date, timedelta
    
print('Hello FitbitAPP4') 
USER_ID     = ""; CLIENT_SECRET = ""
    
def requestFitbit(DATE):
    rval=""
    global auth2_client,USER_ID 
   
    fitbit_stats = auth2_client.intraday_time_series('activities/heart', DATE, detail_level='1min')
    HRstats = fitbit_stats['activities-heart-intraday']['dataset']
      
    OUTPUT_FILE = USER_ID+"_HR.csv"
    csv_file = open(OUTPUT_FILE, 'a')
     
    csv_file.write(DATE+",")
    for num1 in range(24):
        for num2 in range(60):
            key='{:02}'.format(num1)+':{:02}'.format(num2)+':00'
            hr=""
            for var in range(0, len(HRstats)):
                if str(HRstats[var]['time']) == key:
                    hr=str(HRstats[var]['value'])
                    break
            csv_file.write(hr)
            csv_file.write(",")              
               
    csv_file.write("\n")
    csv_file.close()
    return rval
##################################################
   
def writeindex():    
    global USER_ID 
    OUTPUT_FILE = USER_ID+"_HR.csv"
    csv_file = open(OUTPUT_FILE, 'a')
       
    csv_file.write(",")
    for num1 in range(24):
        for num2 in range(60):
            key='{:02}'.format(num1)+':{:02}'.format(num2)+':00'
            csv_file.write(key)
            csv_file.write(",")              
               
    csv_file.write("\n")
    csv_file.close()
##################################################
   
"""Get tokens"""
server = Oauth2.OAuth2Server(USER_ID, CLIENT_SECRET)
server.browser_authorize()
ACCESS_TOKEN = str(server.fitbit.client.session.token['access_token'])
REFRESH_TOKEN = str(server.fitbit.client.session.token['refresh_token'])
    
"""Authorization"""
auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2=True, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
    
"""request"""
   
writeindex()
today=date(2023, 6, 26)
for var in range(0, 3):
    stamp=datetime.strftime(today - timedelta(days=var), '%Y-%m-%d')
    print("target: " + stamp)
    requestFitbit(stamp)

無事に実行されると、「ID_HR.csv」のようなファイル名のデータが作成されます。エクセルで開くと、下記のような構造になっています。60(分)✕24(時間)=1440個のデータが3日ぶん格納されていることがわかります。

一週間ぶんのHRを取得して、平均HRのグラフをエクセルで書いてみましょう。

取得したFitbitデータをグラフ化する

出力されたHRに関するデータ「HR_2023-06-26.csv」をPythonでグラフ化してみましょう。大まかな手順は下記の動画をご覧ください。

ChatGPTに、データのグラフ化を行うPythonスクリプト作成を依頼します。

00:00:00,74
00:01:00,64
00:02:00,63
00:03:00,65
00:04:00,65
00:05:00,62
00:06:00,65
00:07:00,63
00:08:00,66
00:09:00,65
00:10:00,65
00:11:00,67
00:12:00,66
00:13:00,66
00:14:00,69
00:15:00,72
00:16:00,73
00:17:00,69
00:18:00,67

上記のデータはHH:MM:SS形式で指定された各時刻の心拍数です。このデータの名前は、「HR_2023-06-26.csv」です。このデータを読み込んで、グラフ化するPythonスクリプトを書いてください。

データを扱うスクリプトを作成するときは、上記のように、サンプルを与えてやるとそれに合わせたスクリプトを作成してくれます。上記プロンプトをお黒と、ChatGPTが下記のようなスクリプトを作成してくれます。

import pandas as pd
import matplotlib.pyplot as plt

# データを読み込む
data = pd.read_csv('HR_2023-06-26.csv', header=None, names=['Time', 'HeartRate'])

# 時刻データを正しいフォーマットに変換
data['Time'] = pd.to_datetime(data['Time'], format='%H:%M:%S')

# グラフを描画
plt.plot(data['Time'], data['HeartRate'])
plt.xlabel('Time')
plt.ylabel('Heart Rate')
plt.title('Heart Rate Variation')
plt.xticks(rotation=45)
plt.show()


このスクリプトは、pandasとmatplotlibというライブラリを使っているようなので、ライブラリのインストール方法も聞きましょう。

上記のスクリプト実行に必要なライブラリのインストール方法を教えてください.

返答は下記のとおりです。

pip install pandas matplotlib

では、上記で作成されたPythonスクリプトを、plotHR.pyという名前で保存し、実行してみましょう。すると、下記のようなグラフが作成されるはずです。

このようにして、日本語で指示(プロンプト)を与えることで、各種の目的に応じたPythonスクリプトを作成可能です。ChatGPTが記述したスクリプトの意味がわからない場合は、それを「ここの処理どういう意味?」と質問することで、より深く学習可能です。

計測したデータをPythonで取得する

ここでは、Fitbitで計測されたデータをPythonで取得する方法を解説します。作業のおおまかな手順は下記の動画をご覧ください。

Anacondaのインストール
Python実行環境であるAnacondaのインストールを行う。とりあえずAnaconda3をダウンロードして道なりにインストール。Environmentから仮想環境「Fitbit」を作成し、「OpenTerminal」でターミナルを表示する。Pythonコマンドで動作を確認する。Ctrl+Zで対話モードを終了できる。インストールは、こちらのサイトが参考になる。

Fitbitの開発者向けサイトでアプリケーションを登録する
PythonからFitbitAPIを使うにはアプリの登録が必要となる。FitbitDevelopperサイトにログインして、Manage>RegisterAppの順で進み、アプリケーションを登録する。設定は以下の画像の通りにする。URL関係は全て「http://kodamalab.sakura.ne.jp/wordpress/?p=46853」、RedirectURLは、「http://127.0.0.1:8080/」とする。ページ内で作成された「OAuth 2.0 Client ID」と「Client Secret」をPythonスクリプト中で使用することになる。
Devサイトでのアプリ作成方法

Fitbit API Python Clientのインストール
GitHub – orcasgit/python-fitbit: Fitbit API Python Client Implementationからcodeボタンを押し、Zipファイルをダウンロードし、中身をCドライブ直下に配置する(こちらのサイトが参考になる)。さらに、下記コマンドで追加パッケージをインストールする。

pip install -r requirements/base.txt
pip install cherrypy 

Pythonスクリプトでクラウド上のファイルを取得
c:\python-fitbitフォルダに下記スクリプトをfitbit01.pyという名前で保存し、実行する。Anaconda Promptから下記コマンドを打ち込む

python fitbit01.py

#fitbit01.py
import sys
import fitbit
import gather_keys_oauth2 as Oauth2
  
print('Hello FitbitAPP3') 
  
USER_ID     = "ほげ"
CLIENT_SECRET = "ほげ"
  
DATE = "2021-06-03" # 取得したい日付
  
  
server = Oauth2.OAuth2Server(USER_ID, CLIENT_SECRET)
server.browser_authorize()
ACCESS_TOKEN = str(server.fitbit.client.session.token['access_token'])
REFRESH_TOKEN = str(server.fitbit.client.session.token['refresh_token'])
  
#print(ACCESS_TOKEN) print('\n') 
#print(REFRESH_TOKEN)print('\n') 
  
"""Authorization"""
auth2_client = fitbit.Fitbit(USER_ID, CLIENT_SECRET, oauth2=True, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
  
"""Getting data"""
#print('Getting data\n') 
#fitbit_stats = auth2_client.intraday_time_series('activities/heart', DATE, detail_level='1min')
   
##################################################
fitbit_stats = auth2_client.intraday_time_series('activities/heart', DATE, detail_level='1min')
stats = fitbit_stats['activities-heart-intraday']['dataset']
  
OUTPUT_FILE = "HR_%s.csv" % DATE
csv_file = open(OUTPUT_FILE, 'w')
for var in range(0, len(stats)):
    csv_file.write(stats[var]['time'])
    csv_file.write(",")
    csv_file.write(str(stats[var]['value']))
    csv_file.write("\n")
csv_file.close()
  
##################################################
fitbit_stats = auth2_client.intraday_time_series('activities/steps', DATE, detail_level='1min')
stats = fitbit_stats['activities-steps-intraday']['dataset']
  
OUTPUT_FILE = "STEP%s.csv" % DATE
csv_file = open(OUTPUT_FILE, 'w')
for var in range(0, len(stats)):
    csv_file.write(stats[var]['time'])
    csv_file.write(",")
    csv_file.write(str(stats[var]['value']))
    csv_file.write("\n")
csv_file.close()
  
##################################################
fitbit_stats = auth2_client.intraday_time_series('activities/calories', DATE, detail_level='1min')
stats = fitbit_stats['activities-calories-intraday']['dataset']
  
OUTPUT_FILE = "CALO%s.csv" % DATE
csv_file = open(OUTPUT_FILE, 'w')
for var in range(0, len(stats)):
    csv_file.write(stats[var]['time'])
    csv_file.write(",")
    csv_file.write(str(stats[var]['value']))
    csv_file.write("\n")
csv_file.close()

トラブルシューティング

・RedirectURLが、http://127.0.0.1:8080/で正しく動作しない場合
ポート8080をなにかのプログラムが使っている可能性がある。その場合は、RedirectURLを、「http://127.0.0.1:8088/」とし、python-fitbitフォルダ中のgather_keys_oauth2.pyの該当部分を「8088」に変更してスクリプトを実施する。

・Pythonのスクリプトは何で作ればいいの?
プログラミング用のテキストエディタ、Notepad++がおすすめです。

リアクション
下記のページから,感想,苦労した点などをお知らせください.
心理サイエンス応用演習1リアクション

キャラクタの配置 2023

前回授業へのコメント
 前回は光源の使い方を応用して,ホラーゲームのような環境を作成してみました。無料のアセットでも、質感が高いものがあることに驚かれた方も多いと思います。PCを買うのであればどのようなものが良いのか?との質問も複数いただきました。下記の動画で簡単に解説をしていますので、参考にしてください。

キャラクタを読み込んで見る
 ホラーっぽい背景に「お化けを配置したらもっと怖いだろう」という意見もあろうと思います。そこで、今回はキャラクタの読み込み、表示方法を紹介します。ここでは,Mixamoからモーション付きのキャラクを読み込み,シーン上に配置する方法を学びます。キャラクタの取り扱いができるようになると,様々な心理学的な実験に利用できるようになるので,利用法の幅が広がると思います。

リアクションの記入
 課題が終わった方は、下記リンクより、授業配信日を含め3日以内にリアクションを登録してください。ファイル等を送っていただく必要はありません。リアクションは出欠記録を兼ねており、その内容は成績評価の対象となることに留意してください。
心理サイエンス基礎演習1リアクション

TPSを作ってみる(1)2023

TPSゲームを作ってみる
 キャラクタを扱えるようになると、やっぱり自由に動かしてみたくなりますよね。キャラクタの表現方法は、基本的に1人称視点(FPS)と3人称視点(TPS)しかないと思いますが、体を動かしている感があるのはTPSかなと思います。今回と次回では、TPSゲームの作成を通して、キャラクタの使い方を学びましょう。完成すると、こんな感じのものができる予定です。今日の解説動画では、下記のアセットを使用しています。予めダウンロードしておくとスムーズに進められると思います。
・Standard Asset
・AllskyFree
・PBR Materials – Wood & Metal
・Industrial Models
Low Poly Props Pack 2023年現在利用不可のようです
Road Props PackおよびSimple Street Propsで置き換えてください

リアクションの記入
 課題が終わった方は、下記リンクより、授業配信日を含め3日以内にリアクションを登録してください。ファイル等を送っていただく必要はありません。
心理サイエンス基礎演習2リアクション

2要因参加者内計画の分散分析

ここでは2要因参加者内計画の分散分析の方法を解説します。データは、動画を見る際に、事前にネタバレを行った場合と行わなかった場合を比較したものです。分析には、JSSTARを用いています。