PyMongo 프로젝트

김현희·2026년 4월 24일



1) [필수] 고심박(high HR) 위험군 탐지

일정 기준(예: heart_rate > 150)을 넘는 순간을 찾아서
발생 시각
해당 활동
발생 빈도를 분석한다

a. $group : 그룹의 기준이 되는 필드명은 반드시 _id

‼️ 오류 이유

  • $group 스테이지의 문법 규칙 때문에 오류가 발생
  • 아주 엄격한 약속이 하나, 바로 그룹의 기준이 되는 필드명을 반드시 _id라고 적어야 한다는 점

[수정 후]


2) 활동(activity)별 평균 생체지표 분석

활동별로 heart_rate, step_count, resp_rate, body_temp의 평균을 계산하고 비교한다. 어떤 활동이 가장 높은 생체 지표를 보이는지 분석

b. "$group"을 이용해서 평균 값 출력하기


➡️ 평균 값들의 합을 구하고 그 값의 결과에 따라 분류하고 싶었다.

‼️ 오류 이유

  • add은: {'add': 1} → 개수 / {'add:add': '필드'} → 보통 개별 문서의 값을 더할 때 사용
  • ⭐️ 같은 $group 안에서 “별칭 필드” 재사용 불가
  • MongoDB는 단계별로 데이터를 처리하기 때문에 $group이 완전히 끝나야 '평균 맥박'이라는 필드가 메모리에 생성됨.
  • 따라서 이 값들을 더하는 작업은 반드시 다음 단계인 $addFields나 $project에서 진행해야 함.

[수정 후]

c. 💡 $addFields

  • 기존 데이터에 새로운 필드(열)를 추가하겠다는 명령어
  • MongoDB에서 데이터를 가져올 때, DB에 물리적으로 저장되어 있지 않은 값을 실시간으로 계산해서 결과에 포함시키고 싶을 때 사용
  • 예) 가격과 수량 필드만 있을 때, 이를 곱한 총액 필드를 추가하고 싶을

3) 체온 이상치(high fever) 탐지

body_temp ≥ 38.0°C인 구간을 찾아
어떤 활동에서 많이 나타나는지
위험 패턴이 존재하는지 분석한다

d. $sort 잘못 사용

‼️ 오류 이유

➡️ $count라는 필드는 없음 → 정렬 기준은 실제 필드명

[수정 후]

e. 💡$sum차이



4) 산소포화도(SpO₂) 저하 위험 탐지

  • blood_oxygen < 94% 데이터를 필터링하여
  • 발생 시각, activity를 분석한다.

5)활동별 활동량(step_count) 분석

활동별로 step_count 합계와 평균을 구하고 가장 활동량이 많은 활동을 찾는다.

f. 💡$sum과 $add의 개념 차이

문제를 풀면서 두 개념을 명확하게 구분해서 설명하기 어렵다는 생각을 해서 추가로 공부해봤다.
➡️ $sum : $group에서 사용, 여러 개의 문서(데이터)를 하나로 뭉칠 때, 그 문서들의 특정 필드 값을 모두 수직으로 합칠 때 사용
➡️ $add : $project나 $addFields 스테이지에서 사용, 한 문서(데이터 한 줄) 안에서 여러 필드 값을 서로 더해 새로운 결과값을 만들 때 씁니다.

구분$sum$add
주요 스테이지$group$addFileds, $project
데이터 방향세로(여러 문서를 -> 한 결과)가로(한 문서 내 필드+필드)
의미"다 모아서 합계 내기""이거랑 저거랑 더하기"

6) 센서 오류(is_tampered) 데이터 탐지

is_tampered = 1 이 발생한 횟수를 파악하고 오류가 어떤 활동에서 많이 발생하는지 분석한다.

‼️ 오류 이유

➡️ 필터링 부재: is_tampered = 1인 경우만 보고 싶다면 $match를 먼저 사용하는 것이 정확합니다.
➡️ $sort 문법: 딕셔너리 형태인 {'필드명': -1}로 작성해야 합니다.

[수정 후]

[출력할 값 순서대로 입력한다고 생각하면 조금은 쉬워짐]
1. is_tampered = 1 이 발생한 횟수를 파악
2. 오류가 어떤 활동에서 많이 발생하는지 분석


7) 시간대별 생체지표 분석

시간(HOUR) 기준으로 데이터를 그룹화하여 시간대별 평균 heart_rate 시간대별 평균 body_temp 패턴을 분석한다.

g.$dateFromString:

  • timestamp 형태 문자열를 MongoDB가 시간으로 인식할 수 있는 Date 객체로 바꿔줌
    ➡️ $hour: 날짜 객체에서 '시간(0~23)' 부분만 쏙 뽑아냅니다.
  1. timestamp → hour 추출
  2. → hour 기준으로 그룹
  3. → 평균 계산
  4. → 시간 순 정렬
profile
AI 헬스케어 공부하는 간호사

0개의 댓글