2022년 7월부터 9월까지 진행한 연구 데이터 활용분석 경진대회 관련 세번째 포스팅 글입니다.
제가 맡은 세번째 과제는 만성질환 환자와 비환자를 구분하여 데이터를 추출하는 것입니다.
2019-2020년도 국민건강영양조사 데이터에서 만성질환 환자와 비환자를 구분하여 데이터를 추출하였으며, 이를 위해 2019-2020년도 메타 데이터가 사용되었습니다.
본 포스팅은 만성질환 환자와 비환자를 구분하여 데이터를 추출하기 위해 작성한 코드입니다.
import pandas as pd
import numpy as np
df1=pd.read_csv('/Users/i/Desktop/공모전/jinah/hn_20_variable.csv')
data=pd.read_sas('/Users/i/Desktop/공모전/hn20_all.sas7bdat')
for i in data.columns:
for j in df1['변수명']:
if i==j:
data.rename(columns={i:df1.loc[df1['변수명']==j]['변수설명'].values[0]},inplace=True)
data.head()
| 최종 DB 수정일 | 개인 아이디 | 가구 아이디 | 조사연도 | 17개 시도 | 동/읍면 구분 | 아파트 구분 | 조사구번호 | 성별 | 만나이 | ... | 식비가 부족하여 가구 내 아동에게 값싼 한두 가지 음식만 준 경험 | 식비가 부족하여 가구 내 아동에게 균형 잡힌 식사를 주지 못한 경험 | 식비가 부족하여 가구 내 아동에게 필요한 만큼 주지 못한 경험 | 식비가 부족하여 가구 내 아동의 식사량을 줄인 경험 | 식비가 부족하여 가구 내 아동이 식사를 거른 경험 | 식비가 부족하여 가구 내 아동이 식사를 거른 빈도 | 식비가 부족하여 가구 내 아동이 배가 고픈데도 먹지 못한 경험 | 식비가 부족하여 가구 내 아동이 하루 종일 굶은 경험 | 식품안정성 점수 | 수준별 식품안정성 정도 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | b'2022.02.28.' | b'A801169401' | b'A8011694' | 2020.0 | 1.0 | 1.0 | 2.0 | b'A801' | 1.0 | 39.0 | ... | 3.0 | 3.0 | 3.0 | 8.0 | 8.0 | 8.0 | 8.0 | 8.0 | 0.0 | 1.0 |
| 1 | b'2022.02.28.' | b'A801169402' | b'A8011694' | 2020.0 | 1.0 | 1.0 | 2.0 | b'A801' | 2.0 | 39.0 | ... | 3.0 | 3.0 | 3.0 | 8.0 | 8.0 | 8.0 | 8.0 | 8.0 | 0.0 | 1.0 |
| 2 | b'2022.02.28.' | b'A801169403' | b'A8011694' | 2020.0 | 1.0 | 1.0 | 2.0 | b'A801' | 1.0 | 10.0 | ... | 3.0 | 3.0 | 3.0 | 8.0 | 8.0 | 8.0 | 8.0 | 8.0 | 0.0 | 1.0 |
| 3 | b'2022.02.28.' | b'A801169404' | b'A8011694' | 2020.0 | 1.0 | 1.0 | 2.0 | b'A801' | 1.0 | 7.0 | ... | 3.0 | 3.0 | 3.0 | 8.0 | 8.0 | 8.0 | 8.0 | 8.0 | 0.0 | 1.0 |
| 4 | b'2022.02.28.' | b'A801169405' | b'A8011694' | 2020.0 | 1.0 | 1.0 | 2.0 | b'A801' | 1.0 | 4.0 | ... | 3.0 | 3.0 | 3.0 | 8.0 | 8.0 | 8.0 | 8.0 | 8.0 | 0.0 | 1.0 |
5 rows × 752 columns
df1[df1['변수명'].str.contains('fvc')]
| 변수명 | 변수설명 | 선택지_설명 | etc | |
|---|---|---|---|---|
| 579 | HE_fvc | 노력성 폐활량 | NaN | ['□.□□□ L'] |
| 580 | HE_fvcp | 노력성 폐활량 | NaN | ['□□□.□□□ %'] |
| 583 | HE_fev1fvc | 1초간 노력성 호기량 / 노력성 폐활량 | NaN | ['□.□□□ '] |
df1[df1['변수명'].str.contains('fev')]
| 변수명 | 변수설명 | 선택지_설명 | etc | |
|---|---|---|---|---|
| 581 | HE_fev1 | 1초간 노력성 호기량 | NaN | ['□.□□□ L'] |
| 582 | HE_fev1p | 1초간 노력성 호기량 | NaN | ['□□□.□□□ %'] |
| 583 | HE_fev1fvc | 1초간 노력성 호기량 / 노력성 폐활량 | NaN | ['□.□□□ '] |
| 584 | HE_fev6 | 6초간 노력성 호기량 | NaN | ['□.□□□ L'] |
df1[df1['변수명'].str.contains('fev1fvc')]
| 변수명 | 변수설명 | 선택지_설명 | etc | |
|---|---|---|---|---|
| 583 | HE_fev1fvc | 1초간 노력성 호기량 / 노력성 폐활량 | NaN | ['□.□□□ '] |
df1[df1['변수설명'].str.contains('폐기능')]
| 변수명 | 변수설명 | 선택지_설명 | etc | |
|---|---|---|---|---|
| 20 | wt_pft | 폐기능검사 가중치(만40세이상) | NaN | [] |
| 26 | wt_pfnt | 폐기능검사 & 영양조사 가중치(만40세이상) | NaN | [] |
| 587 | HE_COPD | 폐기능 판정결과 | 1 : 폐기능정상 | 2 : 제한성환기장애 | 3 : 폐쇄성환기장애 | 9 : 판정... | [] |
yes=pd.DataFrame(data[data['HE_fev2fvc']<=0.7])
index1=yes[yes['age']>=40].index
no=data.drop(index1)
yes=data.drop(no.index)
data.loc[yes.index,'만성폐쇄성폐질환']=1
data['만성폐쇄성폐질환']=data['만성폐쇄성폐질환'].fillna(0)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
File ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexes/base.py:3621, in Index.get_loc(self, key, method, tolerance)
3620 try:
-> 3621 return self._engine.get_loc(casted_key)
3622 except KeyError as err:
File ~/opt/anaconda3/lib/python3.9/site-packages/pandas/_libs/index.pyx:136, in pandas._libs.index.IndexEngine.get_loc()
File ~/opt/anaconda3/lib/python3.9/site-packages/pandas/_libs/index.pyx:160, in pandas._libs.index.IndexEngine.get_loc()
File ~/opt/anaconda3/lib/python3.9/site-packages/pandas/_libs/index.pyx:201, in pandas._libs.index.IndexEngine._get_loc_duplicates()
File ~/opt/anaconda3/lib/python3.9/site-packages/pandas/_libs/index.pyx:209, in pandas._libs.index.IndexEngine._maybe_get_bool_indexer()
File ~/opt/anaconda3/lib/python3.9/site-packages/pandas/_libs/index.pyx:107, in pandas._libs.index._unpack_bool_indexer()
KeyError: 'HE_fev2fvc'
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
Input In [51], in <cell line: 1>()
----> 1 yes=pd.DataFrame(data[data['HE_fev2fvc']<=0.7])
2 index1=yes[yes['age']>=40].index
3 no=data.drop(index1)
File ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/frame.py:3505, in DataFrame.__getitem__(self, key)
3503 if self.columns.nlevels > 1:
3504 return self._getitem_multilevel(key)
-> 3505 indexer = self.columns.get_loc(key)
3506 if is_integer(indexer):
3507 indexer = [indexer]
File ~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/indexes/base.py:3623, in Index.get_loc(self, key, method, tolerance)
3621 return self._engine.get_loc(casted_key)
3622 except KeyError as err:
-> 3623 raise KeyError(key) from err
3624 except TypeError:
3625 # If we have a listlike key, _check_indexing_error will raise
3626 # InvalidIndexError. Otherwise we fall through and re-raise
3627 # the TypeError.
3628 self._check_indexing_error(key)
KeyError: 'HE_fev2fvc'
data.columns[data.columns.str.contains('폐')]
Index(['폐결핵 의사진단 여부', '폐결핵 진단시기', '폐결핵 현재 유병 여부', '폐결핵 치료', '폐암 의사진단 여부',
'폐암 진단시기', '폐암 현재 유병 여부', '폐암 치료 여부', '(만40세이상) 폐쇄성수면무호흡증 의사진단 여부',
'(소아, 청소년) 폐렴 의사진단 여부', '(소아, 청소년) 폐렴 진단연령', '활동제한 사유: 호흡문제, 폐질환, 천식',
'(만40세이상) 폐쇄성수면무호흡증 위험요인: 코골이', '(만40세이상) 폐쇄성수면무호흡증 위험요인: 피곤함',
'(만40세이상) 폐쇄성수면무호흡증 위험요인: 목격자', '폐경연령 ※자연폐경연령, 인공폐경연령 통합'],
dtype='object')
len(data.columns[data.columns.str.contains('노력성 폐활량')])
0
datat=pd.read_sas('/Users/i/Desktop/공모전/hn14_all.sas7bdat')
datat.columns[datat.columns.str.contains('HE_fev')]
Index(['HE_fev1', 'HE_fev1p', 'HE_fev1fvc', 'HE_fev6'], dtype='object')
만성 기준
- 1) 영구치우식 유병률 : 치료를 완료하지 않거나 발거하지 않은 영구치 치아우식증(충치)을 현재 1개 이상 보유하고 있는 분율
- 2) 만19세이상 분석대상자 수
data.columns[data.columns.str.contains('충치')]
Index(['진료항목: 단순 충치치료 (치아충전)', '진료항목: 충치예방치료 (치아홈메우기, 불소도포 등)'], dtype='object')
df1[df1['변수설명'].str.contains('영구치')]
| 변수명 | 변수설명 | 선택지_설명 | etc | |
|---|---|---|---|---|
| 921 | O_DTP | 우식영구치 수 (우식영구치 수의 총 합) | NaN | ['□□ 개'] |
| 923 | O_DIP | 영구치우식유병자 여부 | 0 : 우식영구치 수 = 0 | 1 : 우식영구치 수 ≥ 1 | | ['영구치 우식증(충치)을 현재 1개 이상 보유하고 있는 사람 수', '만1세이상 ... |
| 925 | O_DMFTP | 우식경험영구치 수 (우식영구치+상실영구치+충전영구치) | NaN | ['□□ 개'] |
| 927 | O_DMFIP | 영구치우식경험 여부 | 0 : 우식경험 영구치 수 = 0 | 1 : 우식경험 영구치 수 ≥ 1 | | ['우식증(충치)이 있거나, 충치치료를 받았거나, 충치로 인해 치아를 상실한 경험이... |
data.columns[data.columns.str.contains('O_DIP')]
Index([], dtype='object')
for i in data.columns[data.columns.str.contains('O')]:
print(df1[df1['변수명']==i][['변수명','변수설명']])
print()
변수명 변수설명
290 MO1_wk 2주간 외래이용 여부
변수명 변수설명
291 MO1_1 외래이용 횟수
변수명 변수설명
309 BO1 (만6세이상) 주관적 체형인식
변수명 변수설명
310 BO1_1 (성인) 1년간 체중 변화 여부
변수명 변수설명
311 BO1_2 (성인) 1년간 체중 감소량
변수명 변수설명
312 BO1_3 (성인) 1년간 체중 증가량
변수명 변수설명
313 BO2_1 (만6세이상) 1년간 체중 조절 여부
변수명 변수설명
536 HE_HCHOL 고콜레스테롤혈증 유병여부(19세이상)
변수명 변수설명
596 OR1 본인인지 구강건강상태
변수명 변수설명
597 O_pain 최근 1년간 치통 경험유무
변수명 변수설명
598 O_ortho 교정치료 경험 유무
변수명 변수설명
621 O_chew_d 저작불편 호소 여부
변수명 변수설명
623 OR1_2 최근 1년간 구강검진 여부
변수명 변수설명
624 MO4_00 치과병의원 이용 여부
변수명 변수설명
625 MO4_4 진료항목: 구강검사 (시진, X-ray 촬영 등)
변수명 변수설명
626 MO4_9 진료항목: 잇몸병 치료 (잇몸수술 포함)
변수명 변수설명
627 MO4_7 진료항목: 단순 충치치료 (치아충전)
변수명 변수설명
628 MO4_8 진료항목: 치아신경치료
변수명 변수설명
630 MO4_17_1 진료항목: 충치예방치료 (치아홈메우기, 불소도포 등)
변수명 변수설명
631 MO4_17_2 진료항목: 스케일링 (전악 치석제거)
변수명 변수설명
632 MO4_11 진료항목: 발치 또는 구강내수술 (유치가 흔들려서 빼는 것은 제외)
변수명 변수설명
633 MO4_12 진료항목: 다쳐서 빠지거나 부러진 치아 치료
변수명 변수설명
634 MO4_18 진료항목: 보철물 제작,수리 (브릿지, 임플란트, 틀니 등의 보철물)
변수명 변수설명
635 MO4_15 진료항목: 기타 (교정치료, 심미치료 등)
변수명 변수설명
650 T_NQ_OCP 직업적 소음노출
변수명 변수설명
718 L_BR_TO 최근 1년 동안 아침식사 시 가족 및 가족 외 사람과의 동반 여부
변수명 변수설명
719 L_BR_WHO 최근 1년 동안 아침식사 시 동반대상
변수명 변수설명
720 L_LN_TO 최근 1년 동안 점심식사 시 가족 및 가족 외 사람과의 동반 여부
변수명 변수설명
721 L_LN_WHO 최근 1년 동안 점심식사 시 동반 대상
변수명 변수설명
722 L_DN_TO 최근 1년 동안 저녁식사 시 가족 및 가족 외 사람과의 동반 여부
변수명 변수설명
723 L_DN_WHO 최근 1년 동안 저녁식사 시 동반 대상
변수명 변수설명
724 L_OUT_FQ 외식 횟수
변수명 변수설명
727 LK_LB_CO 영양표시 인지여부
변수명 변수설명
733 DQ_SODA [탄산음료]의 최근 1년간 평균섭취빈도
변수명 변수설명
734 DA_SODA [탄산음료]의 1회 평균섭취량
변수명 변수설명
735 DQ_SPORTS [스포츠음료]의 최근 1년간 평균섭취빈도
변수명 변수설명
736 DA_SPORTS [스포츠음료]의 1회 평균섭취량
변수명 변수설명
743 DQ_COFFEE [당이 첨가되지 않은 커피]의 최근 1년간 평균섭취빈도
변수명 변수설명
744 DA_COFFEE [당이 첨가되지 않은 커피]의 1회 평균섭취량
변수명 변수설명
745 DQ_SCOFFEE [당이 첨가된 커피, 커피음료]의 최근 1년간 평균섭취빈도
변수명 변수설명
746 DA_SCOFFEE [당이 첨가된 커피, 커피음료]의 1회 평균섭취량
변수명 변수설명
755 DQ_YOGURT [요구르트]의 최근 1년간 평균섭취빈도
변수명 변수설명
756 DA_YOGURT [요구르트]의 1회 평균섭취량
변수명 변수설명
871 N_PROT 단백질
변수명 변수설명
878 N_CHOL 콜레스테롤
변수명 변수설명
879 N_CHO 탄수화물
변수명 변수설명
883 N_PHOS 인
변수명 변수설명
888 N_CAROT 베타카로틴
변수명 변수설명
893 N_FOLATE 엽산
댓글