본문 바로가기

R programming

2016년도 진료내역을 통한 상위 질병 확인해보기

반응형
공공데이터포털에서 2016년도 진료내역 데이터를 가져왔다. 자료는 국민건강보험이 개방한 데이터다.

https://www.data.go.kr/dataset/15007115/fileData.do

데이터에 대한 설명은 아래와 같다.

2016년 국민건강보험 가입자 중 요양기관(병/의원 등)으로부터의 진료이력이 있는 각 연도별 수진자 100만 명에 대한 기본정보(성, 연령대, 시도코드 등)와 진료내역(진료과목코드, 주상병코드, 요양일수, 총처방일수 등)으로 구성된 개방데이터


진료내역 중에서는 주상병코드와 부상병코드가 구분되어있다.

주상병은 환자가 가장 우선적으로 치료를 요구를 병을 나타낸다. 부상병은 주상병 다음으로 호소하는 병을 의미한다.

데이터는 약 1200만개의 행으로 구성되어있다. 

한 환자가 여러번 방문했기 때문에 이러한 데이터가 늘어났다. 이러한 점은 가입자일련번호가 중복되어 존재하는 것을 통해 알 수 있다.


사람이 특정 질병에 얼마나 많이 걸리는지 알기 위해서는 한 환자가 같은 질병으로 여러번 병/의원에 방문하여 진료받았다는 것을

감안하고 확인해야할 것이다.


1
2
3
4
5
nhis<-read.csv("nhis.csv")
 
head(nhis)
 
summary(nhis)
cs


중복된 데이터를 제거하기 위해 base라는 라이브러리 안에 있는 unique 라는 함수를 사용한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
library(ggplot2)
library(dplyr)
total <- nhis %>%
  select(가입자일련번호,주상병코드,부상병코드) 
 
 
 
#데이터전처리과정
install.packages("base")
library(base)
 
total_new<-unique(total[, c("가입자일련번호","주상병코드","부상병코드")])
 
cs


이 과정에서 사실 문제가 생겼는데,,,12번 째 코드를 작동시키니 메모리가 부족하다고 작동을 멈춘 것이다...


중복된 값을 제거하지 않고 진행했던 코드가 있는데 그 코드를 살짝 변형시켜서 나머지를 완성해보고자 한다.


그렇기 때문에 앞 선 코드가 진행되어 완성된 시각화 부분이 존재하지않는다. 사실상 입코딩




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#주상병 상위빈도
 
highest20_주상병<- total_new %>%
                  group_by(주상병코드) %>% 
                  summarise(total=n()) %>%
                  arrange(desc(total)) %>%
                  head(20)
#부상병 상위빈도
 
highest20_부상병<- total_new %>% 
                    group_by(부상병코드) %>%
                    summarise(total=n()) %>%
                    arrange(desc(total)) %>%
                    head(20)
 
cs


다음과 같이 코드를 쓰면, 주상병코드와 부상병코드의 빈도가 많은 상위 20개를 추출할 수 있다.


1
2
3
4
5
6
 
#막대그래프 시각화
ggplot(data=highest20_주상병, aes(x=주상병코드,y=total))+geom_bar(stat="identity")
 
ggplot(data=highest20_부상병, aes(x=부상병코드,y=total))+geom_bar(stat="identity")
 
cs


이후 각각의 변수로 저장해둔 데이터를 바탕으로 다음과 같이 막대그래프를 그릴 수 있고, 빈도를 시각화하여 구현할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#상위 주상병코드를 지닌 환자들의 상위부상병 코드 순위
j209_highrank<-total_new %>%
  filter(주상병코드=="J209") %>%
  group_by(부상병코드) %>% 
  summarise(total=n()) %>%
  arrange(desc(total)) %>% 
  head(20)
 
i109_highrank<-total_new %>%
  filter(주상병코드=="I109") %>%
  group_by(부상병코드) %>% 
  summarise(total=n()) %>%
  arrange(desc(total)) %>% 
  head(20)
cs



이후로 진행해봤던 것은 상위를 차지했던 주상병들은 또 어떤 부상병을 주로 가지고 있는지 확인하는 것이였다.


질병코드를 확인하는 방법은  http://www.koicd.kr/

질병분류센터에 접속하여 확인했다.

J209는 상세불명의 기관지염이다.  기관지염과 관련한 이비인후과적인 진료를 필요로 해보이는 부상병코드가 다수를 이루었고

9번째 줄에 존재하는 I109는 기타 및 상세불명의 원발성 고혈압이다.

위의 코드를 입력하면 각각의 주상병코드가 주로 어떤 부상병코드를 가지고 있는지 확인할 수 있다.


위와 같은 진행을 통해 국민들이 어떤 질병을 많이 겪고 있는지 확인할 수 있고,

특정질병과 연관된 다른 부차적인 질병을 확인할 수 있을 것으로 기대된다.


반응형