[Python] [데이터가 보이지 않는 손] OuraRing에서 mets를 얻고 U 분포를 따르는지 조사해 보았습니다.

10728 단어 파이썬통계학

개요



데이터가 보이지 않는 손에 따르면 인간의 신체 활동은 특정 규칙에 따라 분배됩니다.


출처 데이터가 보이지 않는 손

이 그래프는
  • 손목에 손목 밴드 가속도 센서를 부착하여 신체 운동 횟수 (N 회/분)를 측정합니다
  • 일정 기간 동안 신체 운동 횟수의 출현 빈도 누적 확률을 세로 축으로 취합니다 (대수 눈금)

  • 그래서 그릴 수 있습니다.
    여기에서 알 수있는 것은
  • 60회/분의 활동은 하루의 절반을 차지한다(차지하게 된다)
  • 60~120회/분의 활동은 하루의 1/4을 차지한다(차지하게 된다)

  • 예를 들어, 어느 일이 60~120회/분의 운동량이라고 하면,
    그 일은 하루 동안 1/4 분의 시간 만 소비 할 수 있습니다 (더 많은 시간, 그 일은 열심히 할 수 없습니다)
    라는 것

    글쎄, 재미 있다고 생각하고 OuraRing 이것과 비슷한 것을 시도했습니다.

    OuraRing에서 Mets 얻기



    데이터가 보이지 않는 손에서는 가속도 센서로 움직임을 사용했습니다.
    자신이 소유하고 있는 OuraRing에서는 Mets라는 값을 취할 수 있으므로, 이것으로 대용한다
    OuraRing API를 사용하여 Mets 가져 오기

    OuraAPI를 사용하는 방법은 이 기사입니다.

    sample.py
    import requests
    import json
    import os
    import datetime
    import collections
    import pprint
    
    BASE_URL = "https://api.ouraring.com/v1/"
    TOKEN    = "access_token=" + str(os.environ.get("OURA_TOKEN"))
    
    def create_date_str(weeks_offset=0):
        today = datetime.datetime.today()
        target_date = today - datetime.timedelta(days=1,
                                                 weeks=weeks_offset)
        return target_date.strftime("%Y-%m-%d")
    
    def create_url(weeks_offset=0):
        end_date = create_date_str(weeks_offset)
        start_date = create_date_str(weeks_offset+1)
        url = f"{BASE_URL}activity?start={start_date}&end={end_date}&{TOKEN}"
        return url
    
    if __name__ == "__main__":
        headers = {"content-type": "application/json"}
        mets_counter = collections.Counter()
    
        for week_offset in range(5):
            responce = requests.get(create_url(week_offset), headers=headers)
            data = responce.json()
            for activity in data["activity"]:
                mets_counter.update(activity["met_1min"])
    
        total_num = sum(mets_counter.values())
        for mets,count in mets_counter.items():
            mets_counter[mets] = count/total_num
    
        with open("mets.txt","w") as f:
            for mets,probability in mets_counter.items():
                f.write(f"{mets}\t{probability}\n")
    

    htps : // 기주 b. 코 m/보 x16/오우라_아피

    mets를 얻는 url은https://api.ouraring.com/v1/activity?start=YYYY-MM-DD&end=YYYY-MM-DD&access_token=TOKENcreate_date_str, create_url에서 일주일마다 활동 데이터를 검색하는 URL 생성
    매주 분마다 {mets : 출현 횟수} 업데이트
    (상당히 데이터량이 커서 메모리 절약을 위해 필요한 만큼 세세하게 취득하고 있을 생각)

    이것을 뭔가 출력합니다.

    데이터 시각화



    먼저 단순히 mets - 出現確率 시각화



    2mets 이하의 출현 빈도가 높은 것을 알 수 있다

    그런 다음 mets - 累積確率 시각화
    (누적 확률은 어느 mets와 그 이전에 모든 mets의 출현 확률의 합→총합이 1)


    2mets 이하로 하루의 80%를 차지함
    2mets 이상은 20%

    이 시점에서 mets도 U 분포를 따르는 것으로 나타났습니다.

    이것을


    출처 데이터가 보이지 않는 손

    이 이미지처럼 보입니다.mets - (1-累積確率)의 세로축을 로그 스케일로 만들면


    Mets와 실제 운동의 끈



    예를 들어,
  • 서있는 독서 : 1.8mets
  • 리클라이닝 독서 : 1mets
  • 좌위 작업 (독서 포함) : 1.5mets

  • 어떤
    데이터가 보이지 않는 손을 참고로 독서의 카르노 효율을 측정하면
    1 - 1/1.8 = 0.44
    최대 1일의 44%(활동 시간 16시간으로 7시간 정도)까지만 읽을 수 있다
    (mets로 말하면 이야기이기 때문에, 독서에 한하지 않고 1~1.8mets 정도의 활동은 하루 7시간밖에 할 수 없다)
    그렇게 말할 것 같습니다.

    근육 트레이닝은
  • 웨이트 리프팅 : 6mets
  • 일반적인 건강 교실에서의 운동 : 5.5mets

  • 에서

    1 - 5.5/6 = 0.083
    하루의 8% 정도(1시간 정도)가 한계

    요약



  • 데이터가 보이지 않는 손 진짜 장난 꾸러기
  • Mets도 U 분포를 따랐다
  • Mets 테이블과 OuraRing 추적이 있으면 효과적으로 하루의 스케줄링을 할 수있다
  • 좋은 웹페이지 즐겨찾기