Fitbit 데이터로 HRV 분석과 시각화

Fitbit 데이터로 HRV 분석과 시각화

최근 몇 년간 우리는 기술의 발전과 함께 자신의 건강을 보다 세심하게 관리할 수 있는 다양한 도구를 손에 넣게 되었습니다.

그 중에서도 웨어러블 기기들은 이제 단순한 피트니스 트래커를 넘어서, 우리의 일상 생활 속에서 중요한 건강 정보를 제공하는 필수품으로 자리잡았습니다.

Fitbit과 같은 기기들은 심박수, 걸음 수, 수면 패턴 등 다양한 데이터를 수집하여, 우리 몸이 보내는 신호를 해석할 수 있도록 도와줍니다. 이러한 데이터는 개인의 건강 상태를 모니터링하고 개선하는 데 중요한 역할을 합니다.

이 기기들이 제공하는 다양한 데이터 중에서도 특히 주목할 만한 것이 바로 심박변이도(HRV, Heart Rate Variability)입니다. HRV는 심박수의 미세한 변화, 즉 심장 박동 간의 간격이 얼마나 다양하게 변동하는지를 측정하는 지표로, 우리의 자율신경계 상태를 반영하는 중요한 건강 지표입니다.



웨어러블(Fibit) 데이터

Fitbit 데이터를 활용하여 HRV를 분석하고 시각화하는 과정은 우리의 심장 건강을 더 잘 이해하고, 나아가 전반적인 웰빙을 증진하는 데 기여할 수 있습니다.

  1. 웨어러블 기기의 보편화
    • 전 세계적으로 웨어러블 기기의 보급이 급속도로 확산되면서, 개인이 자신의 건강 데이터를 손쉽게 추적할 수 있는 환경이 조성되었습니다. Fitbit과 같은 기기들은 사용자가 자신의 건강 상태를 실시간으로 모니터링할 수 있게 해주며, 이를 통해 더 나은 생활 습관을 형성할 수 있도록 도와줍니다.
    • 이 기기들은 심박수, 걸음 수, 칼로리 소모량, 수면 패턴 등 다양한 데이터를 제공하여 일상적인 건강 관리를 돕습니다.
  1. 개인화된 건강 관리의 발전
    • 현대 사회에서 사람들은 자신의 건강을 보다 세밀하게 관리하고자 하는 욕구가 커지고 있습니다. 웨어러블 기기는 이러한 욕구를 충족시키는 데 중요한 역할을 합니다. 이 기기들은 사용자의 일상 생활에서 수집된 데이터를 기반으로 개인화된 건강 관리 조언을 제공합니다. 예를 들어, 특정 시간대의 활동량 감소나 수면 패턴의 변화를 감지하고, 이를 바탕으로 맞춤형 피드백을 제시할 수 있습니다.
  2. 심장 건강에 대한 관심 증가
      • 심장 건강은 현대인에게 특히 중요한 문제로 부각되고 있습니다. 스트레스, 불규칙한 생활 습관, 운동 부족 등이 심장 건강에 부정적인 영향을 미칠 수 있기 때문에, 많은 사람들이 심박수와 같은 기초적인 데이터를 넘어서 보다 심층적인 건강 지표를 필요로 하고 있습니다. 이 지점에서 심박수의 변동성, 즉 HRV가 중요한 역할을 하게 됩니다.


심박변이도(HRV)의 등장

이제 웨어러블 기기가 제공하는 방대한 데이터 중에서도 특별히 주목해야 할 것이 바로 심박변이도(HRV)입니다. HRV는 심박수의 미세한 변화, 즉 심장 박동 간의 간격이 얼마나 다양하게 변동하는지를 측정하는 지표입니다. 이는 단순히 심장 박동의 속도만을 측정하는 것이 아니라, 자율신경계의 균형과 스트레스 상태를 평가하는 데 중요한 역할을 합니다.

높은 HRV는 자율신경계가 균형을 잘 유지하고 있으며, 신체가 스트레스에 효과적으로 대처하고 있음을 나타냅니다. 반대로 낮은 HRV는 스트레스가 과도하거나 자율신경계가 적절히 조절되지 못하고 있음을 의미할 수 있습니다. 이처럼 HRV는 우리의 신체 상태를 보다 정확하게 이해하고, 이를 바탕으로 건강을 관리할 수 있는 중요한 지표로 활용될 수 있습니다.

  1. 데이터 기반 건강 관리의 발전
    • 웨어러블 기기에서 수집된 데이터를 활용하여 개인화된 건강 관리 전략을 개발하는 것이 새로운 트렌드로 자리잡고 있습니다. HRV 데이터는 이러한 전략을 개발하는 데 중요한 역할을 할 수 있으며, 이는 심장 건강을 관리하고, 스트레스 수준을 조절하며, 전반적인 웰빙을 증진하는 데 기여할 수 있습니다.
  2. HRV와 원격 의료의 결합
    • 코로나19 팬데믹 이후, 원격 의료가 급속히 확산되면서 HRV 데이터는 원격으로 환자의 상태를 모니터링하는 데 중요한 역할을 하게 되었습니다. 의료진은 HRV 데이터를 활용하여 환자의 자율신경계 상태를 평가하고, 이를 바탕으로 맞춤형 치료 계획을 제안할 수 있습니다.
  3. AI와 머신러닝을 통한 HRV 분석
    • 인공지능(AI)과 머신러닝 기술이 HRV 데이터 분석에 도입되면서, 보다 정교한 건강 예측이 가능해지고 있습니다. 이러한 기술들은 웨어러블 기기에서 수집된 데이터를 실시간으로 분석하여, 사용자의 건강 상태를 지속적으로 모니터링하고, 필요한 조치를 미리 취할 수 있도록 돕습니다.

python fitbit 데이터 분석 및 시각화

python을 통하여 fitbit 데이터를 분석하고 시각화 하는 간단한 과정을 정리 하려 한다.

heartrate_seconds_merged

위 데이터는 248만건의 fitbit 심박 데이터로  14명의 5초 간격의 심박 데이터를 한달동안의 데이터 이다.

fitbit 샘플 심박 데이터 구성

 

이 데이터를 HRV 분석을 위하여 먼저 도메인의 특성을 분석하는 간단한 소스는 아래와 같다.

def get_time_domain_features(nn_intervals) -> dict:

    diff_nni = np.diff(nn_intervals)
    length_int = len(nn_intervals)

    # Basic statistics
    mean_nni = np.mean(nn_intervals)
    median_nni = np.median(nn_intervals)
    range_nni = max(nn_intervals) - min(nn_intervals)

    sdsd = np.std(diff_nni)
    rmssd = np.sqrt(np.mean(diff_nni ** 2))

    nni_50 = sum(np.abs(diff_nni) > 50)
    pnni_50 = 100 * nni_50 / length_int
    nni_20 = sum(np.abs(diff_nni) > 20)
    pnni_20 = 100 * nni_20 / length_int
    rmssd = np.sqrt(np.mean(np.square(np.diff(nn_intervals))))

    # Feature found on github and not in documentation
    cvsd = rmssd / mean_nni

    # Features only for long term recordings
    sdnn = np.std(nn_intervals, ddof=1)  # ddof = 1 : unbiased estimator => divide std by n-1
    cvnni = sdnn / mean_nni

    # Heart Rate equivalent features
    heart_rate_list = np.divide(60000, nn_intervals)
    mean_hr = np.mean(heart_rate_list)
    min_hr = min(heart_rate_list)
    max_hr = max(heart_rate_list)
    std_hr = np.std(heart_rate_list)

    time_domain_features = {
        'mean_nni': mean_nni,
        'rmssd': rmssd,
        'sdnn': sdnn,
        'sdsd': sdsd,
        'nni_50': nni_50,
        'pnni_50': pnni_50,
        'nni_20': nni_20,
        'pnni_20': pnni_20,
        'rmssd': rmssd,
        'median_nni': median_nni,
        'range_nni': range_nni,
        'cvsd': cvsd,
        'cvnni': cvnni,
        'mean_hr': mean_hr,
        "max_hr": max_hr,
        "min_hr": min_hr,
        "std_hr": std_hr,
    }

    return time_domain_features

위 소스와 같이 분석을 통한 도메인 지표들은 아래와 같은 의미를 갖을 수 있다.

Fitbit 심박 데이터를 사용하여 언급하신 지표들을 분석함으로써 다양한 심혈관 및 자율신경계의 상태를 평가할 수 있습니다. 각 지표가 제공하는 정보를 아래와 같이 설명할 수 있습니다:

1. mean_nni (Mean of NN intervals)

  • 의미: 심박수 간격(NN 간격)의 평균값으로, 전체적인 심박수의 속도와 안정성을 나타냅니다.
  • 활용: 이 값이 높으면 평균 심박수가 낮음을 의미하며, 이는 신체가 안정된 상태에 있음을 시사할 수 있습니다. 낮은 값은 평균 심박수가 높아 스트레스가 있거나 신체가 활발한 상태임을 나타낼 수 있습니다.

2. rmssd (Root Mean Square of Successive Differences)

  • 의미: 연속적인 심박수 간격의 차이를 제곱한 값의 평균을 구하고, 이를 다시 제곱근한 값입니다.
  • 활용: 자율신경계의 부교감신경 활성도를 반영합니다. 높은 RMSSD는 심박수 변동성이 커서 신체가 잘 조절되고 있음을 의미하며, 낮은 값은 스트레스나 피로가 누적되어 있을 가능성이 있습니다.

3. sdnn (Standard Deviation of NN intervals)

  • 의미: 전체 심박수 간격의 표준편차로, 심박수 변동성을 나타냅니다.
  • 활용: SDNN은 전반적인 HRV를 반영하며, 높을수록 심장 건강이 양호하고 스트레스가 낮다는 것을 의미할 수 있습니다. 반대로 낮은 SDNN은 스트레스, 피로 또는 질병 상태를 나타낼 수 있습니다.

4. sdsd (Standard Deviation of Successive Differences)

  • 의미: 연속적인 심박수 간격 차이의 표준편차로, 심박수 간격 변동성의 세부적인 변화를 나타냅니다.
  • 활용: SDSD는 자율신경계, 특히 부교감신경 활동과 밀접하게 연관되어 있습니다. 이는 RMSSD와 유사한 정보를 제공하지만, 데이터의 변동성에 더 민감할 수 있습니다.

5. nni_50 / pnni_50 (Number / Percentage of NN intervals greater than 50 ms)

  • 의미: 심박수 간격 중에서 연속된 두 간격의 차이가 50ms 이상인 간격의 개수(nni_50)와 그 비율(pnni_50)을 나타냅니다.
  • 활용: 이 지표는 HRV의 또 다른 측정값으로, 높은 값은 자율신경계가 잘 조절되고 있음을 시사합니다. 낮은 값은 스트레스 증가 또는 부교감신경 활동의 감소를 나타낼 수 있습니다.

6. nni_20 / pnni_20 (Number / Percentage of NN intervals greater than 20 ms)

  • 의미: 연속된 심박수 간격 차이가 20ms 이상인 간격의 개수(nni_20)와 그 비율(pnni_20)을 나타냅니다.
  • 활용: nni_50/pnni_50와 유사한 역할을 하지만 더 민감한 지표로, 보다 세밀한 변화를 감지할 수 있습니다.

7. median_nni (Median of NN intervals)

  • 의미: 심박수 간격의 중앙값입니다.
  • 활용: 이는 심박수 간격의 분포를 파악하는 데 도움이 되며, outlier에 영향을 덜 받는 평균적인 심박수 간격을 나타냅니다.

8. range_nni (Range of NN intervals)

  • 의미: 심박수 간격의 최대값과 최소값의 차이입니다.
  • 활용: 심박수 간격의 변동 폭을 측정하며, 변동 폭이 크다면 스트레스가 낮고 부교감신경계 활동이 활발하다는 것을 의미할 수 있습니다.

9. cvsd (Coefficient of Variation of Successive Differences)

  • 의미: 연속된 심박수 간격의 차이의 변동계수로, 표준편차를 평균으로 나눈 값입니다.
  • 활용: 변동성이 큰 데이터를 비교할 때 유용하며, 자율신경계의 활동을 평가하는 데 도움을 줍니다.

10. cvnni (Coefficient of Variation of NN intervals)

  • 의미: NN 간격의 변동계수입니다.
  • 활용: 심박수의 일관성을 평가하며, 변동성이 클수록 심장이 다양한 자극에 더 잘 반응할 수 있음을 의미할 수 있습니다.

11. mean_hr (Mean Heart Rate)

  • 의미: 측정 기간 동안의 평균 심박수입니다.
  • 활용: 전반적인 심박 상태를 평가하는 기본적인 지표로, 운동 강도나 스트레스 수준에 따라 다르게 나타날 수 있습니다.

12. max_hr (Maximum Heart Rate)

  • 의미: 측정 기간 동안 기록된 최고 심박수입니다.
  • 활용: 운동이나 특정 활동 중 심박수의 최고치로, 심장의 최대 반응 능력을 평가할 수 있습니다.

13. min_hr (Minimum Heart Rate)

  • 의미: 측정 기간 동안 기록된 최저 심박수입니다.
  • 활용: 휴식 상태에서의 심박수를 평가할 때 유용하며, 이 값이 낮을수록 일반적으로 심장이 더 건강하다고 볼 수 있습니다.

14. std_hr (Standard Deviation of Heart Rate)

  • 의미: 심박수의 표준편차로, 심박수의 변동성을 나타냅니다.
  • 활용: 심박수가 얼마나 일정한지 또는 얼마나 자주 변동하는지를 평가하는 데 사용됩니다. 표준편차가 크면 심박수가 다양한 상황에 크게 변동함을 의미할 수 있습니다.

이들 지표를 통해 스트레스 수준, 자율신경계의 상태, 심장 건강을 종합적으로 평가할 수 있습니다. 예를 들어, RMSSD와 SDNN 값이 낮다면 스트레스가 높거나 자율신경계의 균형이 깨져 있음을 시사할 수 있습니다. 반대로, mean_nni와 median_nni가 높고, max_hr가 낮다면, 안정된 심박 상태를 유지하고 있음을 나타낼 수 있습니다.



스트레스와 우울도

이런 지표를 활용하여 스트레스와 우울도 상관 그래프를 그려볼 수 있다.
아래 그래프는 14명 중 1명의 한달동안 일별 스트레스와 우울도 상관 그래프를 그릴 수 있다.

fitbit 데이터 분석을 통한 1개월의 스트레스와 우울도

 

그래프 분석

특정인 (20222484408)의 그래프의 의미는 분석해보려 한다.
위 그래프는 해석은 다음과 같다. 

  1. 스트레스와 우울도의 전반적인 패턴:
    • 그래프에서 스트레스와 우울도가 동시에 변동하는 경향이 보입니다. 이는 스트레스와 우울도가 서로 영향을 미치고 있음을 시사합니다.
    • 특정 시점(예: 4월 20일, 4월 22일, 4월 26일)에서 스트레스와 우울도 모두 급격히 증가하고 있습니다. 이 시점들은 이 개인이 특히 힘든 시기를 겪었을 가능성을 나타냅니다.
  2. 상관관계:
    • 일반적으로 스트레스와 우울도는 비슷한 패턴을 따르고 있습니다. 예를 들어, 4월 중순 이후 스트레스가 증가할 때 우울도도 함께 증가하는 경향이 나타납니다. 이는 두 변수 간의 높은 상관관계를 시사합니다.
    • 그러나 4월 21일에서 22일 사이에는 스트레스가 급격히 증가하는 반면, 우울도는 스트레스가 최고치에 도달할 때 약간 뒤따라 오르는 패턴이 보입니다. 이 차이는 스트레스가 즉각적으로 반응하는 반면, 우울도는 시간이 지나면서 더 서서히 반응할 수 있음을 나타냅니다.
  3. 정신 건강 상태 분석:
    • 이 특정인은 특정 기간 동안 높은 스트레스와 우울도를 경험했으며, 이는 일상 생활에서 중요한 도전이나 변화가 있었을 수 있음을 시사합니다.
    • 전체적으로, 스트레스와 우울도 모두 상당한 변동을 보이고 있으며, 이는 이 개인이 안정적인 정신적 상태에 있지 않을 가능성이 있음을 나타냅니다. 스트레스와 우울도가 모두 높거나 불안정한 패턴을 보인다면, 정신 건강 전문가의 도움이 필요할 수 있습니다.
정신건강  분석

이 그래프는 특정인의 한 달간의 정신 건강 상태가 변동이 심하며, 특히 특정 시기에 스트레스와 우울도가 동시에 증가하는 시점들이 있음을 보여줍니다. 이는 이 개인이 일상에서 스트레스와 우울감에 취약할 수 있음을 시사하며, 지속적인 관리나 상담이 필요할 가능성이 있습니다.

스트레스와 우울도가 변동하는 패턴을 관찰함으로써, 이 개인이 어떤 시점에서 더 많은 지원이 필요한지를 판단할 수 있습니다. 스트레스가 급격히 상승하거나 우울도가 지속적으로 높다면, 이에 대한 조기 개입이 중요한 역할을 할 수 있습니다.

오늘은 fitbit 데이터를 python 코드로 분석하여 그래프를 도출하고 분석하는 개괄적인 흐름을 보았다.
다음 시간에는 상세하게 분석하는 방법을 자세하게 살펴 보려 한다.