202209 2022 연구데이터 활용분석 경진대회 3

목록으로 돌아가기

Summary

Description

2022년 7월부터 9월까지 진행한 연구 데이터 활용분석 경진대회 관련 세번째 포스팅 글입니다.

제가 맡은 세번째 과제는 만성질환 환자와 비환자를 구분하여 데이터를 추출하는 것입니다.

2019-2020년도 국민건강영양조사 데이터에서 만성질환 환자와 비환자를 구분하여 데이터를 추출하였으며, 이를 위해 2019-2020년도 메타 데이터가 사용되었습니다.

본 포스팅은 만성질환 환자와 비환자를 구분하여 데이터를 추출하기 위해 작성한 코드입니다.

Contents

필요 모듈 임포트

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

만성폐쇄성폐질환

  • 만성 기준
    • 1) 만성폐쇄성폐질환 유병률 : 폐기능검사 결과 기류제한이 있는 분율 (기류제한 : FEV1/FVC의 실제수치가 0.7미만)
    • 2) 만 40세 이상 폐기능검사 분석대상자 수

메타데이터에서 “FEV1, FVC, 폐기능” 변수설명 확인

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 : 판정... []

데이터 추출 코드 1차 작성

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

다른 년도 데이터의 컬럼 중 FEV 존재 확인

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')
  • 관련 변수 없음
  • 2020년도 데이터는 만성폐쇄성질환 환자를 구별할 수 없다.

영구치우식

만성 기준 - 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   엽산
  • 관련 변수 없음
  • 2020년도 데이터는 영구치우식 환자를 구별할 수 없다.
author-profile
Written by Jins

댓글