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 코드로 분석하여 그래프를 도출하고 분석하는 개괄적인 흐름을 보았다.
다음 시간에는 상세하게 분석하는 방법을 자세하게 살펴 보려 한다.