Fitbit 데이터로 HRV 분석과 시각화
최근 몇 년간 우리는 기술의 발전과 함께 자신의 건강을 보다 세심하게 관리할 수 있는 다양한 도구를 손에 넣게 되었습니다.
목차
Toggle그 중에서도 웨어러블 기기들은 이제 단순한 피트니스 트래커를 넘어서, 우리의 일상 생활 속에서 중요한 건강 정보를 제공하는 필수품으로 자리잡았습니다.
Fitbit과 같은 기기들은 심박수, 걸음 수, 수면 패턴 등 다양한 데이터를 수집하여, 우리 몸이 보내는 신호를 해석할 수 있도록 도와줍니다. 이러한 데이터는 개인의 건강 상태를 모니터링하고 개선하는 데 중요한 역할을 합니다.
이 기기들이 제공하는 다양한 데이터 중에서도 특히 주목할 만한 것이 바로 심박변이도(HRV, Heart Rate Variability)입니다. HRV는 심박수의 미세한 변화, 즉 심장 박동 간의 간격이 얼마나 다양하게 변동하는지를 측정하는 지표로, 우리의 자율신경계 상태를 반영하는 중요한 건강 지표입니다.
웨어러블(Fibit) 데이터
Fitbit 데이터를 활용하여 HRV를 분석하고 시각화하는 과정은 우리의 심장 건강을 더 잘 이해하고, 나아가 전반적인 웰빙을 증진하는 데 기여할 수 있습니다.
- 웨어러블 기기의 보편화
- 전 세계적으로 웨어러블 기기의 보급이 급속도로 확산되면서, 개인이 자신의 건강 데이터를 손쉽게 추적할 수 있는 환경이 조성되었습니다. Fitbit과 같은 기기들은 사용자가 자신의 건강 상태를 실시간으로 모니터링할 수 있게 해주며, 이를 통해 더 나은 생활 습관을 형성할 수 있도록 도와줍니다.
- 이 기기들은 심박수, 걸음 수, 칼로리 소모량, 수면 패턴 등 다양한 데이터를 제공하여 일상적인 건강 관리를 돕습니다.
- 개인화된 건강 관리의 발전
- 현대 사회에서 사람들은 자신의 건강을 보다 세밀하게 관리하고자 하는 욕구가 커지고 있습니다. 웨어러블 기기는 이러한 욕구를 충족시키는 데 중요한 역할을 합니다. 이 기기들은 사용자의 일상 생활에서 수집된 데이터를 기반으로 개인화된 건강 관리 조언을 제공합니다. 예를 들어, 특정 시간대의 활동량 감소나 수면 패턴의 변화를 감지하고, 이를 바탕으로 맞춤형 피드백을 제시할 수 있습니다.
- 심장 건강에 대한 관심 증가
-
- 심장 건강은 현대인에게 특히 중요한 문제로 부각되고 있습니다. 스트레스, 불규칙한 생활 습관, 운동 부족 등이 심장 건강에 부정적인 영향을 미칠 수 있기 때문에, 많은 사람들이 심박수와 같은 기초적인 데이터를 넘어서 보다 심층적인 건강 지표를 필요로 하고 있습니다. 이 지점에서 심박수의 변동성, 즉 HRV가 중요한 역할을 하게 됩니다.
-
심박변이도(HRV)의 등장
이제 웨어러블 기기가 제공하는 방대한 데이터 중에서도 특별히 주목해야 할 것이 바로 심박변이도(HRV)입니다. HRV는 심박수의 미세한 변화, 즉 심장 박동 간의 간격이 얼마나 다양하게 변동하는지를 측정하는 지표입니다. 이는 단순히 심장 박동의 속도만을 측정하는 것이 아니라, 자율신경계의 균형과 스트레스 상태를 평가하는 데 중요한 역할을 합니다.
높은 HRV는 자율신경계가 균형을 잘 유지하고 있으며, 신체가 스트레스에 효과적으로 대처하고 있음을 나타냅니다. 반대로 낮은 HRV는 스트레스가 과도하거나 자율신경계가 적절히 조절되지 못하고 있음을 의미할 수 있습니다. 이처럼 HRV는 우리의 신체 상태를 보다 정확하게 이해하고, 이를 바탕으로 건강을 관리할 수 있는 중요한 지표로 활용될 수 있습니다.
- 데이터 기반 건강 관리의 발전
- 웨어러블 기기에서 수집된 데이터를 활용하여 개인화된 건강 관리 전략을 개발하는 것이 새로운 트렌드로 자리잡고 있습니다. HRV 데이터는 이러한 전략을 개발하는 데 중요한 역할을 할 수 있으며, 이는 심장 건강을 관리하고, 스트레스 수준을 조절하며, 전반적인 웰빙을 증진하는 데 기여할 수 있습니다.
- HRV와 원격 의료의 결합
- 코로나19 팬데믹 이후, 원격 의료가 급속히 확산되면서 HRV 데이터는 원격으로 환자의 상태를 모니터링하는 데 중요한 역할을 하게 되었습니다. 의료진은 HRV 데이터를 활용하여 환자의 자율신경계 상태를 평가하고, 이를 바탕으로 맞춤형 치료 계획을 제안할 수 있습니다.
- AI와 머신러닝을 통한 HRV 분석
- 인공지능(AI)과 머신러닝 기술이 HRV 데이터 분석에 도입되면서, 보다 정교한 건강 예측이 가능해지고 있습니다. 이러한 기술들은 웨어러블 기기에서 수집된 데이터를 실시간으로 분석하여, 사용자의 건강 상태를 지속적으로 모니터링하고, 필요한 조치를 미리 취할 수 있도록 돕습니다.
python fitbit 데이터 분석 및 시각화
python을 통하여 fitbit 데이터를 분석하고 시각화 하는 간단한 과정을 정리 하려 한다.
위 데이터는 248만건의 fitbit 심박 데이터로 14명의 5초 간격의 심박 데이터를 한달동안의 데이터 이다.
이 데이터를 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명의 한달동안 일별 스트레스와 우울도 상관 그래프를 그릴 수 있다.
그래프 분석
특정인 (20222484408)의 그래프의 의미는 분석해보려 한다.
위 그래프는 해석은 다음과 같다.
- 스트레스와 우울도의 전반적인 패턴:
- 그래프에서 스트레스와 우울도가 동시에 변동하는 경향이 보입니다. 이는 스트레스와 우울도가 서로 영향을 미치고 있음을 시사합니다.
- 특정 시점(예: 4월 20일, 4월 22일, 4월 26일)에서 스트레스와 우울도 모두 급격히 증가하고 있습니다. 이 시점들은 이 개인이 특히 힘든 시기를 겪었을 가능성을 나타냅니다.
- 상관관계:
- 일반적으로 스트레스와 우울도는 비슷한 패턴을 따르고 있습니다. 예를 들어, 4월 중순 이후 스트레스가 증가할 때 우울도도 함께 증가하는 경향이 나타납니다. 이는 두 변수 간의 높은 상관관계를 시사합니다.
- 그러나 4월 21일에서 22일 사이에는 스트레스가 급격히 증가하는 반면, 우울도는 스트레스가 최고치에 도달할 때 약간 뒤따라 오르는 패턴이 보입니다. 이 차이는 스트레스가 즉각적으로 반응하는 반면, 우울도는 시간이 지나면서 더 서서히 반응할 수 있음을 나타냅니다.
- 정신 건강 상태 분석:
- 이 특정인은 특정 기간 동안 높은 스트레스와 우울도를 경험했으며, 이는 일상 생활에서 중요한 도전이나 변화가 있었을 수 있음을 시사합니다.
- 전체적으로, 스트레스와 우울도 모두 상당한 변동을 보이고 있으며, 이는 이 개인이 안정적인 정신적 상태에 있지 않을 가능성이 있음을 나타냅니다. 스트레스와 우울도가 모두 높거나 불안정한 패턴을 보인다면, 정신 건강 전문가의 도움이 필요할 수 있습니다.
정신건강 분석
이 그래프는 특정인의 한 달간의 정신 건강 상태가 변동이 심하며, 특히 특정 시기에 스트레스와 우울도가 동시에 증가하는 시점들이 있음을 보여줍니다. 이는 이 개인이 일상에서 스트레스와 우울감에 취약할 수 있음을 시사하며, 지속적인 관리나 상담이 필요할 가능성이 있습니다.
스트레스와 우울도가 변동하는 패턴을 관찰함으로써, 이 개인이 어떤 시점에서 더 많은 지원이 필요한지를 판단할 수 있습니다. 스트레스가 급격히 상승하거나 우울도가 지속적으로 높다면, 이에 대한 조기 개입이 중요한 역할을 할 수 있습니다.
오늘은 fitbit 데이터를 python 코드로 분석하여 그래프를 도출하고 분석하는 개괄적인 흐름을 보았다.
다음 시간에는 상세하게 분석하는 방법을 자세하게 살펴 보려 한다.