프로젝트 이름: 부산시 고령자를 위한 치매 조기 검진 및 예방 시스템 구축
분석 목적: 부산시는 전국 7개 특광역시 중에서 60세 이상 노인 비율이 32.13으로 1위이며, 치매 환자는 60세 이상 유병률 7.31, 65세 이상 유병률 9.84로 10명 중 1명이 치매인 상황에 따라, 부산시 고령자를 위해 치매 환자들의 주요 특징을 파악하여 치매 조기 검진 및 예방 시스템 구축을 위함
데이터 출처: AIhub, Kaggle, 부산시 2024 지역사회건강조사서
분석 대상 및 범위: 일반인/ 치매 고위험군 + 2024 부산시 고령자
예상 결과물:
데이터 수집 방법: 지자체 신청 → 승인 → 다운로드
데이터셋의 크기: 7.6MB
주요 변수 및 설명:
| 변수명 | 설명 | 데이터 타입 |
|---|---|---|
| 만나이 | 응답자의 실제 나이 (만 나이 기준) | object |
| 성별 | 남성 / 여성 | object |
| 건강수준 | 본인이 인식하는 현재 건강 상태 | object |
| 일반담배 현재 흡연 여부 | 현재 일반담배를 흡연하는지 여부 | object |
| 음주 경험 | 일생 동안 한 잔 이상의 음주 경험 여부 | object |
| 주중 평균 수면시간 | 평일 기준 하루 평균 수면 시간 | object |
| 스트레스 수준 | 스트레스를 느끼는 정도 (주관적 인식) | object |
| 치매 환자 가족 여부 | 가구원 내 치매 환자 가족 여부 | object |
| 고혈압 진단 | 고혈압 진단을 받은 적이 있는지 여부 | object |
| 당뇨병 진단 | 당뇨병 진단을 받은 적이 있는지 여부 | object |
| 인지장애 경험 여부 | 일생 동안 인지장애 경험 여부 | object |
| 치매선별검사 여부 | 일생 동안 치매선별검사 여부 | object |
| … | … | … |
데이터 변환(필요 시):
209개의 컬럼을 단순화하기 위해, 지역사회건강조사서 지침서에 따라 프로젝트의 주제에 맞는 컬럼(128개)을 선별하고, 해당 컬럼의 의미에 맞게 재해석하여 컬럼명 변경하며 데이터 복잡성 해결
<전>
<후>
데이터 수집 방법: 다운로드
데이터셋의 크기: 89.414MB
주요 변수 및 설명:
| 변수명 | 설명 | 데이터 타입 |
|---|---|---|
| 사용자 식별용 이메일 | VARCHAR(200) | |
| activity_steps | 하루 동안 사용자가 걸은 총 걸음 수 | VARCHAR(10) |
| activity_score | 일일 활동 수준 종합 점수 | VARCHAR(10) |
| activity_cal_total | 활동, 휴식 등을 포함한 총 칼로리 소비량 | VARCHAR(10) |
| activity_high | 하루 중 고강도로 활동한 시간(분) | VARCHAR(10) |
| activity_non_wear | 기기 미착용 시간 | VARCHAR(10) |
| sleep_duration | 총 수면 지속 시간 | VARCHAR(10) |
| sleep_efficiency | 수면 시간 대비 실제 수면 비율 | VARCHAR(10) |
| sleep_score | 다양한 수면 요인 종합 점수 | VARCHAR(10) |
| SAMPLE_EMAIL | 인지기능 검사의 대상자 이메일 | VARCHAR(200) |
| MMSE_NUM | 해당 대상자가 검사한 누적 횟수 | INT |
| Q12_TOTAL | 반복 감산 문제 총점 | INT |
| Q13_1 ~ Q13_3 | 앞에서 제시한 단어 3개를 회상 | VARCHAR(1) |
| TOTAL | 인지기능 평가 총점 | INT |
| … | … | … |
CONVERT 열에 담긴 값을 배열화 하여 비어있는 다른 컬럼에 넣어준 뒤 CONVERT행 삭제
라벨링 데이터와 라이프로그 데이터가 분리 되어 있었음으로, 라벨링 데이터와 라이프로그 데이터를 EMAIL기준으로 조인하여 “진단” 컬럼 생성하여 일반인/ 치매환자 구분
컬럼 이해 및 직관성을 위해 모두 한국어로 변경
파생변수 생성 1 : 휴식 시간을 활용하여 “휴식 시간대” 파생 변수 생성
<전> - act
<후>- act
<전> - sleep
<후> - sleep
mmse(인지기능) → 진행중
데이터 수집 방법: 다운로드
데이터셋의 크기: 10.7MB
주요 변수 및 설명:
| 변수명 | 설명 | 데이터 타입 |
|---|---|---|
| 환자번호 | 고유한 환자 식별 번호 | int64 |
| 예약번호 | 진료 예약 건의 고유 식별 번호 | int64 |
| 성별 | 환자의 성별 (남성 / 여성) | object |
| 진료예약일 | 진료를 예약한 날짜 및 시간 | datetime64[ns, UTC] |
| 진료일 | 실제 진료가 예정된 날짜 | datetime64[ns, UTC] |
| 나이 | 환자의 나이 | int64 |
| 진료위치 | 환자가 진료를 받을 지역 또는 병원 위치 | object |
| 고혈압 | 고혈압 진단 여부 (0: 없음, 1: 있음) | int64 |
| 당뇨병 | 당뇨병 진단 여부 (0: 없음, 1: 있음) | int64 |
| 노쇼 | 예약한 진료에 나타나지 않았는지 여부 (0: 내원함, 1: 노쇼) | int64 |
| … | … | … |
노쇼컬럼 (0,1) 불리언으로 바꾸기
진료예약일, 진료일, 환자번호 데이터 타입 변경
컬럼 이해 및 직관성을 위해 모두 한국어로 변경
파생변수 생성 1 : (진료일 - 진료예약일)로 “기다림“ 생성
파생 변수 생성2 : 나이를 이용하여 “연령대” 생성
<전>
<후>
데이터 수집 방법: 날씨마루 기상청 - 열수요, 기상 데이터
데이터셋의 크기: 26.5 MB
주요 변수 및 설명:
| 변수명 | 설명 | 데이터타입 |
|---|---|---|
| tm | 시간 | int64 |
| branch_ID | 지사명 | int64 |
| ta | 기온 | object |
| wd | 풍향 | float64 |
| ws | 풍속 | float64 |
| rn_day | 일 강수량 | float64 |
| rn_hr1 | 시간 강수량 | float64 |
| hm | 상대 습도 | float64 |
| si | 일사량 | float64 |
| ta_chi | 체감온도 | float64 |
| heat_demand | 열수요 | int64 |
기상 관측 장비의 오류나 고장 등의 이유로 관측이 진행 되지 않았을 때 -99.0, -9.9 로 표시 → -99.0, -9.9 값 결측치(nan)로 변환
1차 결측치 처리 (파생변수로, “계절”생성)
겨울철 체감온도 식을 이용해 기온, 풍속, 체감온도 결측치 대체
체감온도 = 13.12 + 0.6215⋅Ta −11.37⋅V^0.16 +0.3965⋅V^0.16⋅Ta
Ta: 기온 (°C)
V: 풍속 (km/h) -> 제공된 데이터와 단위가 달라서 변환 필요 1 m/s=3.6 km/h
체감온도 : 체감온도
기온과 풍속 → 체감온도로 계산
겨울철 체감 온도 결측 값 처리
체감온도와 풍속 → 기온 계산
풍속 > 1.3이면 체감온도가 기온으로 대체되기 때문에 반대로, 체감온도를 기온에 넣으면 됨
기온 결측치 5438 → 5403 으로 축소 35개 결측치 대체
기온과 체감온도가 다를 때, 체감온도와 기온으로 풍속 계산
-> 풍속 결측치 9298에서 5545으로 결측값 3753개 대체
2차 결측치 처리 (파생변수로, “계절”생성)
여름철 체감온도 구하는 식을 이용 해 기온, 습도, 체감온도 결측치 대체
체감온도 = −0.2442 + 0.55399 * Tw + 0.45535 * Ta − 0.0022 * Tw^2 + 0.00278 * Tw * Ta + 3.0
Ta: 기온 (°C)
RH : 상대습도(%)
Tw : 습구온도(Stull의 추정식** 이용)
Tw = Ta * ATAN[0.151977(RH+8.313659)^(1/2)] + ATAN(Ta+RH) - ATAN(RH - 1.67633) +0.00391838RH^(3/2)* ATAN(0.023101*RH) - 4.686035
기온과 상대습도로 체감온도 계산해 결측값 대체
-> 체감온도 결측값 12에서 2로 10개 결측값 대체
무작위 대입법을 활용해 기온과 체감온도로 상대습도 계산
→ 정규분포 이용해 샘플링 상대습도 결측값 15260에서 7552로 7708개 결측값 대체
3차 결측치 처리 (파생변수로, “일강수량 기준일”생성)
일강수량 측정 기준 (x일): x일 01시부터 x+1일 00시까지의 시간 강수량 누적합 -> 최종 해당날 토탈 강수량 = x+1일 00시 일 강수량
이 측정 기준을 역으로 이용하여, x+1일의 00시 일 강수량이 0이면 x일의 01시~x+1일의 00시까지 일 강수량 및 시간 강수량 결측치 0으로 대체 가능
데이터 내 같은 시간이 존재함으로, 혹시 몰라서 지사별로 (지사, 시간)을 pk처럼 보고 지사별로 나눠서 진행
-> 일강수량 18626에서 17621으로 1005개 결측값 대체
시간 강수량 19154에서 17904으로 1250개 결측값 대체
4차 결측치 처리
일강수량 측정 기준 (x일): x일 01시부터 x+1일 00시까지의 시간 강수량 누적합
이 측정 기준을 역으로 이용하여, 위아래 행 비교 후, 일 강수량 및 시간 강수량 채워넣을 수 있는건 채워넣기
데이터 내 같은 시간이 존재함으로, 혹시 몰라서 지사별로 (지사, 시간)을 pk처럼 보고 지사별로 나눠서 진행
→ 일 강수량 결측값 2개 대체
5차 결측치 처리
→ 앞뒤 행의 기온 컬럼이 결측치가 아니면, 지사 별로 앞뒤 행의 평균 기온치로 결측치 대체
6차 결측치 처리
해가 안뜨는 오후 9시 ~ 오전 5까지의 일사량 결측치를 0으로 대체
해뜨는 시간에는 위아래 컬럼의 평균값으로 대체
→ 일사량 결측치 232906에서 48590으로 결측값 184316개 대체
7차 결측치 처리
예측 불가능한 풍향 결측치 제거, 해결하지 못한 일사량, 시간 강수량, 기온, 상대습도, 체감온도 결측치 제거
종속변수(열수요)의 결측값 행 제거
결측치 처리 완료
이상치 탐지 및 조치:
Type 1. 이상치 대체
체감온도 이상치 체크
→ IQR 기법을 활용 체감온도는 예상 체감온도로 덮어쓰기, 체감온도 차이는 0으로 설정해서 이상치 대체
Type 2. 이상치 제거
체감온도 이상치 체크
→ 이상치 제거
💡부산시 65세 이상 고령자 중 치매 검사를 받지 않은 7780명 중 1918명 정도가 인지 장애 경험 존재 -> 약 25%이고, 인지장애 경험을 겪은 사람들 중 인지장애 상담을 받은 사람과 안 받은 사람은 약 17배 정도 차이를 보임
→ 치매 검사 및 인지장애 상담에 대한 인식 개선 및 홍보가 필요함
💡 부산시 65세 이상 고령자 기준
- 인지장애 경험자 중 일반 담배 흡연 경험자: 518명
- 인지장애 경험자 중 일반 담배 비흡연자: 970명
- 인지장애 경험자 전체 : 1488명 518/1488 = 0.348 = 34.8%
- 인지장애 미경험자 중 일반 담배 흡연 미경험자: 1248명
- 인지장애 미경험자 전체: 1915명 667/1915 = 0.348 = 34.8→ 두 그룹 모두 흡연 경험자의 비율이 비슷함 흡연 여부로 인지장애 경험 여부와 유의미한 차이가 보이지 않음
- 인지장애 경험자 중 전자담배 2016-04-29 00:00:00+00:00흡연 경험자 : 506명
- 인지장애 경험자 중 전자담배 흡연 미경험자 : 970명
- 인지장애 경험자 전체 : 1476명 = 506/1476 = 34.3%
- 인지장애 미경험자 중 전자담배 흡연 경험자 : 697명
- 인지장애 미경험자 중 전자담배 흡연 미경험자 : 1219명
- 인지장애 미경험자 전체 : 1916명 697/1916 = 36.4%
→ 여기도 일반 담배와 마찬가지로 흡연 경험과 인지장애 경험의 유의미한 차이는 보이지 않음
💡비활동 알람 6회를 받은 사람들이 고강도 활동 시간, 고강도 운동 강도, 운동 빈도 점수의 평균 값이 높게 나오고 있음.
또한, 최대값 분포 그래프에서는 알람 6회를 받은 사람들이 비활동 시간의 최대값이 가장 낮은 것으로 보이며, 알람을 많이 받을수록 비활동 시간을 조금 줄어나가는 방향성이 보임 (4→5→6 순으로 비활동 시간 최대값 줄어듬)
최소값 그래프에서는 알람 6회를 받은 사람의 하루 평균 운동 강도, 활동 칼로리, 사용 칼로리,움직인 거리, 고-중-저 운동 강도 및 운동 시간, 운동 빈도 점수, 운동량, 활동 유지 점수, 매일 걸음 수, 활동 총 시간 등 활동량 관련된 지표의 최소값들이 모두 매우 높음을 확인할 수 있음
💡평일에 비해 주말에 운동량이 감소하는 추세를 보이고 있으며, 전반적으로 일반인 보다는 치매환자들의 운동량이 많았음. 예상했던 것과 같이, 겨울철에 운동량이 적어지는 것을 확인할 수 있었음
💡치매 환자들은 정상 대상자들 비에 수면 중 뒤척임이 많았으며, 이로 인해 램 수면 시간 평균이 정상 대상자에 비해 비교적 낮았다. 다만, 램 수면 시간 평균이 낮음에도 불구하고, 치매 대상자들의 수면 효율은 정상 대상자와 큰 차이가 없었다.
💡 박스 플롯으로 이상치들을 확인 했으나, 차이가 크긴 하지만 이상치로 분류할 정도의 값은 아님 정상 범주에서 높거나 낮게 나옴결론: 치매 환자는 평균 수면 시간이 길지만, 얕은 수면 비율이 더 높았고, 깊은 수면 과 램 수면의 비율은 낮았음 → 수면효율과 수면 종합 점수 값은 미미하지만 치매 환자가 더 낮게 나옴 하지만 가벼운 수면시간은 치매 환자 더 높게 나옴, 얕은 수면시간이 치매와 관련 있어 보임.평균, 최저 심박수가 치매환자 정상에 살짝 낮게 나옴→ 심박 수로 봤을 때 정상과 큰 차이가 없다.
기술 통계 분석
데이터 시각화
패턴 및 트렌드
주요 인사이트 도출
💡- 65세 데이터
1. 당뇨병 환자면서 노쇼를 하는 사람의 수는 당뇨병 환자가 아닌 사람에 비해 낮지만 비율로 따졌을 때, 더 높게 나타난다.
2. 고혈압 환자면서 노쇼하는 사람의 비율과 실제 인원이 더 높게 나타나고 있음
3. 문자 수신별 노쇼 비율이 인원수에 비해 높게 나옴
4. 성별 노쇼 비율 여성이 높게 나옴
→ 장애, 알코올 여부는 크게 상관 없어보임
→ 질병에 따른 노쇼 여부로 보면 좋을 듯, 문자 수신 여부로 치매 위험과 엮어보고 싶음
- 65세 노쇼 데이터
1. 노쇼를 보이는 고령자의 경우, 고혈압의 인원수가 862 대비 1370으로 많이 차이남
2. 노쇼를 보이는 고령자의 경우, 문자 수신여부 인원수가 1364 대비 868으로 많이 차이남→ 나머지는 사용하기 조금 애매하지만, 고혈압, 문자 수신에 관련해서 인사이트 도출 가능
평균, 중앙값, 표준편차 등 기초 통계량
| 변수명 | count | mean | min | 25% | 50% | 75% | max | std |
|---|---|---|---|---|---|---|---|---|
| 시간 | 499,301 | 2022-07-02 12:00:00 | 2021-01-01 01:00 | 2021-10-01 18:00 | 2022-07-02 12:00 | 2023-04-02 06:00 | 2023-12-31 23:00 | — |
| 기온 | 486,304 | 13.55 | -19.7 | 5.2 | 14.7 | 22.7 | 37.8 | 10.86 |
| 풍향 | 480,486 | 205.81 | -9.9 | 118.5 | 220.8 | 297.1 | 360.0 | 105.14 |
| 풍속 | 480,486 | 1.44 | 0.0 | 0.5 | 1.2 | 2.1 | 11.9 | 1.19 |
| 일강수량 | 480,675 | 1.92 | 0.0 | 0.0 | 0.0 | 0.0 | 326.5 | 9.65 |
| 시간 강수량 | 480,147 | 0.15 | 0.0 | 0.0 | 0.0 | 0.0 | 92.5 | 1.24 |
| 상대 습도 | 459,584 | 66.16 | 2.5 | 50.3 | 67.6 | 84.0 | 100.0 | 21.15 |
| 일사량 | 450,710 | 0.65 | 0.0 | 0.0 | 0.06 | 1.12 | 3.92 | 0.92 |
| 체감온도 | 499,281 | 13.87 | -24.7 | 4.4 | 15.0 | 24.3 | 37.1 | 11.87 |
| 열수요 | 499,278 | 95.87 | 0.0 | 25.0 | 55.0 | 116.0 | 966.0 | 115.26 |
| 연도 | 499,301 | 2022.0 | 2021.0 | 2021.0 | 2022.0 | 2023.0 | 2023.0 | 0.82 |
| 월 | 499,301 | 6.53 | 1.0 | 4.0 | 7.0 | 10.0 | 12.0 | 3.45 |
| 일 | 499,301 | 15.72 | 1.0 | 8.0 | 16.0 | 23.0 | 31.0 | 8.80 |
| 시각 | 499,301 | 11.50 | 0.0 | 6.0 | 12.0 | 18.0 | 23.0 | 6.92 |
💡- 체감온도는 기온과 상대습도를 공식에 대입하여 구하기 때문에 피어슨 상관계수가 0.99가 나올 수 밖에 없음 > 따라서 기온을 제거
📌 데이터 출처
[헬스케어]
[열수요 예측]
📌 참고자료
https://data.busan.go.kr/bdip/_부산시 빅데이터웨이브
노인복지정책의 관점에서 본 치매대응체계 진단과 과제.pdf