setwd("C:/Users/Administrator/Desktop/R Analysis")
## 데이터 불러오기
data_2019 = read.csv('Data/SEOUL_PEOPLE_GU_2019.csv', fileEncoding='UTF-8',
colClasses=c(`시간대`='character'))
data_2020 = read.csv('Data/SEOUL_PEOPLE_GU_2020.csv', fileEncoding='UTF-8',
colClasses=c(`시간대`='character'))
data_2019 %>% head()## 기준일 자치구 시간대 연령대 생활인구수
## 1 2019-12-01 종로구 00 1_20세미만 27059
## 2 2019-12-01 종로구 01 1_20세미만 26949
## 3 2019-12-01 종로구 02 1_20세미만 26971
## 4 2019-12-01 종로구 03 1_20세미만 27000
## 5 2019-12-01 종로구 04 1_20세미만 26814
## 6 2019-12-01 종로구 05 1_20세미만 26781
## 기준일 자치구 시간대 연령대 생활인구수
## 1 2020-12-01 종로구 00 1_20세미만 25589
## 2 2020-12-01 종로구 01 1_20세미만 25818
## 3 2020-12-01 종로구 02 1_20세미만 25796
## 4 2020-12-01 종로구 03 1_20세미만 25883
## 5 2020-12-01 종로구 04 1_20세미만 25778
## 6 2020-12-01 종로구 05 1_20세미만 25898
## 기준일 자치구 시간대 연령대 생활인구수
## 1 2019-12-01 종로구 00 1_20세미만 27059
## 2 2019-12-01 종로구 01 1_20세미만 26949
## 3 2019-12-01 종로구 02 1_20세미만 26971
## 4 2019-12-01 종로구 03 1_20세미만 27000
## 5 2019-12-01 종로구 04 1_20세미만 26814
## 6 2019-12-01 종로구 05 1_20세미만 26781
## 기준일 자치구 시간대 연령대 생활인구수
## 260395 2020-12-31 강동구 18 7_70세이상 55495
## 260396 2020-12-31 강동구 19 7_70세이상 55949
## 260397 2020-12-31 강동구 20 7_70세이상 55940
## 260398 2020-12-31 강동구 21 7_70세이상 56022
## 260399 2020-12-31 강동구 22 7_70세이상 56155
## 260400 2020-12-31 강동구 23 7_70세이상 56002
# 1.2 Data Format
SP_GU %>%
mutate(기준일 = as.Date(기준일)) -> SP_GU
#1.3 Year 변수 생성 (format)
SP_GU %>%
mutate(연도= format(기준일, '%Y')) -> SP_GU
#1.4 weekdays #format(요일, '%u_%a')
SP_GU %>%
mutate(요일 = weekdays(기준일)) -> SP_GU ##! '2019-12-24', '2020-12-24' 만 선택 후 생활인구수 합계 비교
### 조건 : 기준일 %in% c(as.Date('2019-12-24'), as.Date('2020-12-24'))
SP_GU %>%
filter(기준일 %in% c(as.Date('2019-12-24'), as.Date('2020-12-24'))) %>%
group_by(기준일) %>%
summarise(ToTal= sum(생활인구수))## # A tibble: 2 x 2
## 기준일 ToTal
## * <date> <dbl>
## 1 2019-12-24 264682447
## 2 2020-12-24 249209916
크리스마스 이브에
##! '2019-12-24', '2020-12-24'만 선택 후 18시~ 21시 생활인구수 합계 비교
### 조건 : 시간대 %in% c('18','19','20','21')
SP_GU %>%
filter(기준일 %in% c(as.Date('2019-12-24'), as.Date('2020-12-24'))) %>%
filter(시간대 %in% c('18','19','20','21')) %>%
group_by(기준일) %>%
summarise(ToTal= sum(생활인구수))## # A tibble: 2 x 2
## 기준일 ToTal
## * <date> <dbl>
## 1 2019-12-24 44317675
## 2 2020-12-24 41193805
##! 자치구별 생활인구수 합계 계산 / 막대그래프 시각화 (전체 생활인구수)
SP_GU %>%
group_by(자치구) %>%
summarise(전체 = sum(생활인구수)) %>%
ggplot(aes(reorder(자치구, 전체),전체)) +
geom_col()+
coord_flip() ##! 연도/자치구별 생활인구수 합계 계산 / 나란히 그린 막대그래프 시각화
#SP_GU%>%
# group_by(연도, 자치구)%>%
# summarise(Total = sum(생활인구수)) %>%
# ggplot(aes(자치구, Total, fill=연도)+
# geom_col()##! 2020년의 각 자치구별 생활인구의 연령대 비중 계산 / 비중을 쌓아올린 막대그래프로 시각화
### 각 구별 막대그래프의 높이는 비중의 합계인 1로 동일
SP_GU %>%
filter(연도 == '2020') %>%
group_by(자치구, 연령대) %>%
summarise(Total = sum(생활인구수)) %>%
mutate(Prop = Total/sum(Total)) -> agg3
agg3 ## # A tibble: 175 x 4
## # Groups: 자치구 [25]
## 자치구 연령대 Total Prop
## <chr> <chr> <dbl> <dbl>
## 1 강남구 1_20세미만 88143027 0.155
## 2 강남구 2_20대 85378196 0.150
## 3 강남구 3_30대 110141368 0.194
## 4 강남구 4_40대 110642953 0.195
## 5 강남구 5_50대 75881224 0.134
## 6 강남구 6_60대 52000850 0.0915
## 7 강남구 7_70세이상 45863188 0.0807
## 8 강동구 1_20세미만 66452254 0.177
## 9 강동구 2_20대 43587164 0.116
## 10 강동구 3_30대 58350894 0.156
## # ... with 165 more rows
## 그룹의 level 이 많기 때문에 열지도
agg3 %>%
ggplot(aes(연령대, 자치구, fill=Prop)) +
geom_tile()+
scale_fill_distiller(palette = "Blues", direction = 1)2020년도 중구에 30대들의 이동이 가장 눈에 띄며, 양천구, 관악구는 20대
##! 연도/자치구/요일별 일평균 생활인구수 계산
### 주의 : 하루에 24개 시간대와 7개 연령대의 관측치가 있음
### 다음 예제 실행을 위해 요약 결과는 agg5로, 일평균 생활인구수는 MEAN으로 저장
# 전체를 뽑아준다음 평균을 내주어야한다.
SP_GU %>%
group_by(연도, 자치구, 요일, 기준일) %>%
summarise(Total = sum(생활인구수)) -> agg4
agg4 %>%
summarise(mean=mean(Total)) -> agg5
agg5 ## # A tibble: 350 x 4
## # Groups: 연도, 자치구 [50]
## 연도 자치구 요일 mean
## <chr> <chr> <chr> <dbl>
## 1 2019 강남구 금요일 21551059.
## 2 2019 강남구 목요일 21489499.
## 3 2019 강남구 수요일 20334587.
## 4 2019 강남구 월요일 20991218
## 5 2019 강남구 일요일 17136665.
## 6 2019 강남구 토요일 18692290.
## 7 2019 강남구 화요일 21005131.
## 8 2019 강동구 금요일 11734274.
## 9 2019 강동구 목요일 11685354
## 10 2019 강동구 수요일 11811632
## # ... with 340 more rows
##! 연도/자치구/요일별 일평균 생활인구수의 열지도 시각화
### 요일(x)/자치구(y)별 일평균 생활인구수 열지도를
### facet_wrap( )을 활용하여 연도별로 분할 작성
agg5 %>%
ggplot(aes(요일, 자치구, fill=mean))+
geom_tile()+
facet_wrap(vars(연도))+
scale_fill_distiller(palette = 'YlGnBu', direction = 1)## # A tibble: 350 x 4
## # Groups: 연도, 자치구 [50]
## 연도 자치구 요일 mean
## <chr> <chr> <chr> <dbl>
## 1 2019 강남구 금요일 21551059.
## 2 2019 강남구 목요일 21489499.
## 3 2019 강남구 수요일 20334587.
## 4 2019 강남구 월요일 20991218
## 5 2019 강남구 일요일 17136665.
## 6 2019 강남구 토요일 18692290.
## 7 2019 강남구 화요일 21005131.
## 8 2019 강동구 금요일 11734274.
## 9 2019 강동구 목요일 11685354
## 10 2019 강동구 수요일 11811632
## # ... with 340 more rows
## # A tibble: 175 x 4
## # Groups: 자치구 [25]
## 자치구 요일 `2019` `2020`
## <chr> <chr> <dbl> <dbl>
## 1 강남구 금요일 21551059. 18436234.
## 2 강남구 목요일 21489499. 19047745.
## 3 강남구 수요일 20334587. 19364095.
## 4 강남구 월요일 20991218 19149632.
## 5 강남구 일요일 17136665. 15669364.
## 6 강남구 토요일 18692290. 16484808
## 7 강남구 화요일 21005131. 19406291.
## 8 강동구 금요일 11734274. 12055204.
## 9 강동구 목요일 11685354 12014669.
## 10 강동구 수요일 11811632 12017286
## # ... with 165 more rows
agg5 %>%
mutate(자치구 = as.factor(자치구)) %>%
mutate(요일 = as.factor(요일)) %>%
spread(연도, mean) %>%
mutate(RATIO= round(`2020`/`2019`,2)) -> Ratio_19_20
Ratio_19_20 %>% head()## # A tibble: 6 x 5
## # Groups: 자치구 [1]
## 자치구 요일 `2019` `2020` RATIO
## <fct> <fct> <dbl> <dbl> <dbl>
## 1 강남구 금요일 21551059. 18436234. 0.86
## 2 강남구 목요일 21489499. 19047745. 0.89
## 3 강남구 수요일 20334587. 19364095. 0.95
## 4 강남구 월요일 20991218 19149632. 0.91
## 5 강남구 일요일 17136665. 15669364. 0.91
## 6 강남구 토요일 18692290. 16484808 0.88
Ratio_19_20 %>%
ggplot(aes(요일, 자치구, fill=RATIO)) +
geom_tile() +
scale_fill_distiller(palette = 'Reds') ##! 연도/연령대/요일별 일평균 생활인구수를 계산하고
##! 2019년 대비 2020년의 변화율을 열지도로 시각화
#SP_GU %>%
# group_by(연도,연령대,요일,기준일)%>%
# summarise(Total = sum(생활인구수))-> agg7
#head(agg7)
#agg7 %>%
# summarise(mean= mean(생활인구수)) ##! 위의 분석을 18시 ~ 22시 4시간만 선택해서 반복
### 조건 : 시간대 %in% c('18','19','20','21')
SP_GU %>%
filter(시간대 %in% c('18','19','20','21')) %>%
group_by(연도, 연령대, 요일, 기준일) %>%
summarise(Total = sum(생활인구수)) %>%
summarise(Mean = mean(Total)) %>%
spread(연도, Mean) %>%
mutate(Ratio = `2020`/`2019`) -> agg10
agg10 %>%
ggplot(aes(요일, 연령대, fill=Ratio)) +
geom_tile()+
scale_fill_distiller(palette = "Blues")## 가입자번호 성별코드 연령대코드 진료과목코드 주상병코드 요양급여비용총액
## 1 4 1 8 12 B308 32340
## 2 5 2 7 1 J209 15690
## 3 5 2 7 1 K219 15690
## 4 5 2 7 1 K641 19810
## 5 5 2 7 1 K641 17350
## 6 5 2 7 1 J209 17650
## 본인부담금
## 1 9700
## 2 4700
## 3 4700
## 4 5900
## 5 5200
## 6 5200
# 1. 전처리 ------------------------------------------------------------------
## `연령대` 변수 생성
#-------------------------------------------------
# Case_when 사용
#--------------------------------------------------
T20 = T20 %>%
mutate(연령대 = case_when(
연령대코드==18 ~ '85UP',
연령대코드==1 ~ '0004',
연령대코드==2 ~ '0509',
연령대코드 %in% 3:17 ~ paste0((연령대코드-1)*5, 연령대코드*5 -1)
))
T20 %>% as_tibble()## # A tibble: 2,320,380 x 8
## 가입자번호 성별코드 연령대코드 진료과목코드 주상병코드 요양급여비용총액
## <int> <int> <int> <int> <chr> <int>
## 1 4 1 8 12 B308 32340
## 2 5 2 7 1 J209 15690
## 3 5 2 7 1 K219 15690
## 4 5 2 7 1 K641 19810
## 5 5 2 7 1 K641 17350
## 6 5 2 7 1 J209 17650
## 7 5 2 7 10 N_ 11930
## 8 5 2 7 13 H905 74140
## 9 5 2 7 10 N_ 11930
## 10 5 2 7 1 K641 19810
## # ... with 2,320,370 more rows, and 2 more variables: 본인부담금 <int>,
## # 연령대 <chr>
##! `성별` 변수 생성
##@ `성별코드`==1 -> '남', `성별코드`==2 -> '여'
T20 %>%
mutate(성별 = case_when(
성별코드 == 1 ~'남',
성별코드 == 2 ~'여',
)) -> T20
##! `공단부담금` 변수 생성
##@ `요양급여비용총액` - `본인부담금`
T20 %>%
mutate(공단부담금 = 요양급여비용총액 - 본인부담금 ) -> T20# 2. 데이터 요약과 시각화 ----------------------------------------------------------
## 기본 요약 지표의 계산
### 전체 진료 건수
### 진료이력이 있는 가입자수
### 가입자 1인당 진료건수
### 진료 당 요양급여비용총액의 평균
### 가입자 1인당 비용총액
T20 %>%
summarise(진료건수 = n(),
진료가입자수 = n_distinct(가입자번호),
평균진료건수 = 진료건수/진료가입자수,
진료비용총액_진료평균 = mean(요양급여비용총액),
진료비용총액_가입자평균 = sum(요양급여비용총액)/진료가입자수)## 진료건수 진료가입자수 평균진료건수 진료비용총액_진료평균
## 1 2320380 189789 12.2261 40566.57
## 진료비용총액_가입자평균
## 1 495971.1
##! 연령대별 요약지표의 계산
T20 %>%
group_by(연령대) %>%
summarise(진료건수 = n(),
진료가입자수 = n_distinct(가입자번호),
평균진료건수 = 진료건수/진료가입자수,
진료비용총액_진료평균 = mean(요양급여비용총액),
진료비용총액_가입자평균 = sum(요양급여비용총액)/진료가입자수)## # A tibble: 18 x 6
## 연령대 진료건수 진료가입자수 평균진료건수 진료비용총액_진료평균~ 진료비용총액_가입자평균~
## * <chr> <int> <int> <dbl> <dbl> <dbl>
## 1 0004 149792 6489 23.1 17896. 413118.
## 2 0509 107654 7553 14.3 21382. 304763.
## 3 1014 60601 7208 8.41 26484. 222664.
## 4 1519 61431 8367 7.34 29375. 215675.
## 5 2024 76211 11638 6.55 37658. 246602.
## 6 2529 109223 15839 6.90 41730. 287766.
## 7 3034 112444 14542 7.73 43322. 334978.
## 8 3539 129297 15293 8.45 43682. 369319.
## 9 4044 120738 13607 8.87 43894. 389481.
## 10 4549 147576 15376 9.60 45245. 434251.
## 11 5054 168986 14770 11.4 45186. 516985.
## 12 5559 192898 15103 12.8 46193. 589983.
## 13 6064 220493 14400 15.3 45095. 690494.
## 14 6569 191349 10033 19.1 44229. 843528.
## 15 7074 179986 7804 23.1 46108. 1063413.
## 16 7579 153129 5927 25.8 43854. 1133000.
## 17 8084 89107 3510 25.4 43386. 1101433.
## 18 85UP 49465 2330 21.2 40051. 850262.
##! 진료과목코드별 요약지표의 계산 후 적당한 이름(agg1)으로 저장
T20 %>%
group_by(진료과목코드) %>%
summarise(진료건수 = n(),
진료가입자수 = n_distinct(가입자번호),
평균진료건수 = 진료건수/진료가입자수,
진료비용총액_진료평균 = mean(요양급여비용총액),
진료비용총액_가입자평균 = sum(요양급여비용총액)/진료가입자수) -> agg1
head(agg1)## # A tibble: 6 x 6
## 진료과목코드 진료건수 진료가입자수 평균진료건수 진료비용총액_진료평균
## <int> <int> <int> <dbl> <dbl>
## 1 1 785985 135111 5.82 42573.
## 2 2 37079 11240 3.30 62057.
## 3 3 60385 8333 7.25 58782.
## 4 4 55194 18796 2.94 72152.
## 5 5 368387 68014 5.42 32948.
## 6 6 33619 9991 3.36 52561.
## # ... with 1 more variable: 진료비용총액_가입자평균 <dbl>
# 진료과목 데이터 병합
## merge()를 활용한 데이터 결합
DSBJT_CD = read.csv('DSBJT_CD.csv', fileEncoding='UTF-8')
DSBJT_CD## 진료과목코드 진료과목
## 1 0 일반의
## 2 1 내과
## 3 2 신경과
## 4 3 정신과
## 5 4 외과
## 6 5 정형외과
## 7 6 신경외과
## 8 7 흉부외과
## 9 8 성형외과
## 10 9 마취통증의학과
## 11 10 산부인과
## 12 11 소아청소년과
## 13 12 안과
## 14 13 이비인후과
## 15 14 피부과
## 16 15 비뇨기과
## 17 16 영상의학과
## 18 17 방사선 종양학과
## 19 18 병리과
## 20 19 진단검사의학과
## 21 20 결핵과
## 22 21 재활의학과
## 23 22 핵의학과
## 24 23 가정의학과
## 25 24 응급의학과
## 26 25 산업의학과
## 27 26 예방의학과
## 28 50 구강악안면외과
## 29 51 치과보철과
## 30 52 치과교정과
## 31 53 소아치과
## 32 54 치주과
## 33 55 치과보존과
## 34 56 구강내과
## 35 57 구강악안면방사선과
## 36 58 구강병리과
## 37 59 예방치과
## 38 80 한방내과
## 39 81 한방부인과
## 40 82 한방소아과
## 41 83 한방안과이비인후과
## 42 84 한방신경정신과
## 43 85 침구과
## 44 86 한방재활의학과
## 45 87 사상체질과
## 46 88 한방응급
## 진료과목코드 진료과목 진료건수 진료가입자수 평균진료건수
## 1 1 내과 785985 135111 5.817328
## 2 2 신경과 37079 11240 3.298843
## 3 3 정신과 60385 8333 7.246490
## 4 4 외과 55194 18796 2.936476
## 5 5 정형외과 368387 68014 5.416341
## 6 6 신경외과 33619 9991 3.364928
## 7 7 흉부외과 3447 1232 2.797890
## 8 8 성형외과 3224 1102 2.925590
## 9 9 마취통증의학과 39194 8625 4.544232
## 10 10 산부인과 82733 23634 3.500592
## 11 11 소아청소년과 92871 15005 6.189337
## 12 12 안과 167906 62248 2.697372
## 13 13 이비인후과 300280 77139 3.892713
## 14 14 피부과 121573 42987 2.828134
## 15 15 비뇨기과 55881 17234 3.242486
## 16 16 영상의학과 1561 1089 1.433425
## 17 17 방사선 종양학과 1732 229 7.563319
## 18 21 재활의학과 33567 4836 6.941067
## 19 23 가정의학과 61282 17236 3.555465
## 20 24 응급의학과 14480 10895 1.329050
## 진료비용총액_진료평균 진료비용총액_가입자평균
## 1 42573.09 247661.64
## 2 62057.01 204716.35
## 3 58781.98 425963.05
## 4 72152.42 211873.83
## 5 32947.95 178457.34
## 6 52561.13 176864.43
## 7 53698.25 150241.78
## 8 56494.71 165280.35
## 9 51310.19 233165.40
## 10 59793.76 209313.58
## 11 24336.89 150629.20
## 12 45476.61 122667.34
## 13 22503.84 87600.99
## 14 25449.72 71975.22
## 15 67539.50 218995.88
## 16 117441.82 168344.06
## 17 401851.77 3039333.01
## 18 49419.34 343022.97
## 19 24686.18 87770.85
## 20 140374.14 186564.26
## 진료과목코드 진료과목 진료건수 진료가입자수 평균진료건수
## 1 1 내과 785985 135111 5.817328
## 2 5 정형외과 368387 68014 5.416341
## 3 13 이비인후과 300280 77139 3.892713
## 4 12 안과 167906 62248 2.697372
## 5 14 피부과 121573 42987 2.828134
## 6 11 소아청소년과 92871 15005 6.189337
## 7 10 산부인과 82733 23634 3.500592
## 8 23 가정의학과 61282 17236 3.555465
## 9 3 정신과 60385 8333 7.246490
## 10 15 비뇨기과 55881 17234 3.242486
## 11 4 외과 55194 18796 2.936476
## 12 9 마취통증의학과 39194 8625 4.544232
## 13 2 신경과 37079 11240 3.298843
## 14 6 신경외과 33619 9991 3.364928
## 15 21 재활의학과 33567 4836 6.941067
## 16 24 응급의학과 14480 10895 1.329050
## 17 7 흉부외과 3447 1232 2.797890
## 18 8 성형외과 3224 1102 2.925590
## 19 17 방사선 종양학과 1732 229 7.563319
## 20 16 영상의학과 1561 1089 1.433425
## 진료비용총액_진료평균 진료비용총액_가입자평균
## 1 42573.09 247661.64
## 2 32947.95 178457.34
## 3 22503.84 87600.99
## 4 45476.61 122667.34
## 5 25449.72 71975.22
## 6 24336.89 150629.20
## 7 59793.76 209313.58
## 8 24686.18 87770.85
## 9 58781.98 425963.05
## 10 67539.50 218995.88
## 11 72152.42 211873.83
## 12 51310.19 233165.40
## 13 62057.01 204716.35
## 14 52561.13 176864.43
## 15 49419.34 343022.97
## 16 140374.14 186564.26
## 17 53698.25 150241.78
## 18 56494.71 165280.35
## 19 401851.77 3039333.01
## 20 117441.82 168344.06
## 진료과목코드 진료과목 진료건수 진료가입자수 평균진료건수
## 1 17 방사선 종양학과 1732 229 7.563319
## 2 24 응급의학과 14480 10895 1.329050
## 3 16 영상의학과 1561 1089 1.433425
## 4 4 외과 55194 18796 2.936476
## 5 15 비뇨기과 55881 17234 3.242486
## 6 2 신경과 37079 11240 3.298843
## 7 10 산부인과 82733 23634 3.500592
## 8 3 정신과 60385 8333 7.246490
## 9 8 성형외과 3224 1102 2.925590
## 10 7 흉부외과 3447 1232 2.797890
## 11 6 신경외과 33619 9991 3.364928
## 12 9 마취통증의학과 39194 8625 4.544232
## 13 21 재활의학과 33567 4836 6.941067
## 14 12 안과 167906 62248 2.697372
## 15 1 내과 785985 135111 5.817328
## 16 5 정형외과 368387 68014 5.416341
## 17 14 피부과 121573 42987 2.828134
## 18 23 가정의학과 61282 17236 3.555465
## 19 11 소아청소년과 92871 15005 6.189337
## 20 13 이비인후과 300280 77139 3.892713
## 진료비용총액_진료평균 진료비용총액_가입자평균
## 1 401851.77 3039333.01
## 2 140374.14 186564.26
## 3 117441.82 168344.06
## 4 72152.42 211873.83
## 5 67539.50 218995.88
## 6 62057.01 204716.35
## 7 59793.76 209313.58
## 8 58781.98 425963.05
## 9 56494.71 165280.35
## 10 53698.25 150241.78
## 11 52561.13 176864.43
## 12 51310.19 233165.40
## 13 49419.34 343022.97
## 14 45476.61 122667.34
## 15 42573.09 247661.64
## 16 32947.95 178457.34
## 17 25449.72 71975.22
## 18 24686.18 87770.85
## 19 24336.89 150629.20
## 20 22503.84 87600.99
### "결합 후 요약" vs "요약 후 결합"
##! 연령대/진료과목코드별 진료건수와 요양급여비용총액의 합계를 계산
##! DSJBT_CD 데이터와 결합
##! 연령대, 진료과목별 진료건수와 요양급여비용총액 각각의 열지도 그리기
T20 %>%
group_by(연령대, 진료과목코드) %>%
summarise(진료건수 = n(),
비용총액합계 = sum(요양급여비용총액)) -> agg2
agg2## # A tibble: 358 x 4
## # Groups: 연령대 [18]
## 연령대 진료과목코드 진료건수 비용총액합계
## <chr> <int> <int> <dbl>
## 1 0004 1 44323 657882450
## 2 0004 2 16 205430
## 3 0004 3 73 5961040
## 4 0004 4 1713 32959140
## 5 0004 5 595 24838330
## 6 0004 6 50 2435450
## 7 0004 7 17 413180
## 8 0004 8 84 4839020
## 9 0004 9 18 1300710
## 10 0004 10 779 15625940
## # ... with 348 more rows
merge(DSBJT_CD, agg2, by= '진료과목코드') -> agg2_merged
agg2_merged %>%
ggplot(aes(연령대, 진료과목, fill= 진료건수))+
geom_tile()+
scale_fill_distiller(palette = 'YlGnBu', direction = T) # 각 연령대의 인구수를 생각해봐야한다. 실제 인구 대비 얼마나 많은가에 대해서 비율을 생각해봐야함
# 소아과는 어린 친구들이 많을 수 밖에 없기 때문에, 정형외과는 나이가 많아서 생기는 방문하는데
# 절대적인 인구수가 적어지기 때문에 줄어들 수 있기 때문에
agg2_merged %>%
ggplot(aes(연령대, 진료과목, fill= 비용총액합계))+
geom_tile()+
scale_fill_distiller(palette = 'YlGnBu', direction = T) agg2_merged %>%
mutate(진료건수_천건 = round(진료건수/1000)) %>%
ggplot(aes(연령대, 진료과목, fill= 비용총액합계, label=진료건수_천건))+
geom_tile()+
scale_fill_distiller(palette = 'YlGnBu', direction = T)+
geom_text()# 3. 데이터 집계를 활용한 부분 관측치 선택 ------------------------------------------------
## "내과" 진료만 선택
T20 %>%
filter(진료과목코드 == 1) %>%
summarise(진료건수 = n(),
가입자수 = n_distinct(가입자번호),
평균진료건수 = 진료건수/가입자수,
진료비용총액_진료평균 = mean(요양급여비용총액),
진료비용총액_가입자평균 = sum(요양급여비용총액)/가입자수)## 진료건수 가입자수 평균진료건수 진료비용총액_진료평균 진료비용총액_가입자평균
## 1 785985 135111 5.817328 42573.09 247661.6
## 진료 건수가 100건 이상인 가입자 확인
T20 %>%
group_by(가입자번호) %>%
summarise(N=n()) %>%
filter(N > 100) -> agg3
## 진료 건수가 100건 이상인 가입자의 진료내역 확인
# 1) 100건의 가입자 번호만 추출
agg3$가입자번호## [1] 1532 2040 2323 4545 9574 14713 15006 15329 19832 20338
## [11] 20481 22307 22696 27619 29229 31086 31325 31394 32369 34976
## [21] 38225 39947 39984 40318 47318 47457 49275 49719 52304 52621
## [31] 53034 53557 55065 55840 55991 56371 60395 61382 63266 63343
## [41] 64791 65058 65727 68264 68280 69498 70388 75034 76336 76395
## [51] 77672 80973 84064 90074 90847 91271 93695 97203 97300 98138
## [61] 98680 100715 101025 102962 105022 105750 107303 111204 112443 113217
## [71] 114342 115635 117468 118295 119262 119560 120923 121344 122042 123284
## [81] 124495 126933 129823 130038 130255 130833 132284 136238 138157 138662
## [91] 142747 143296 144625 144645 145680 147307 148381 149250 149584 151315
## [101] 152857 154871 156737 161452 162850 163315 164242 164338 164533 165178
## [111] 165596 166195 166220 166270 168326 168982 168997 170702 171852 172097
## [121] 172162 172447 176944 178324 178419 179196 180328 183039 187186 188483
## [131] 189644 194252 194363 194586 196074 199602 200527 208176 208353 209325
## [141] 209668 211732 215720 220831 222546 223713 228445 230539 235002 236732
## [151] 236750 240489 241716 242123 244108 244145 245242 246088 246935 247030
## [161] 248804 248876 249051 250280 254055 254715 254810 255081 256210 256931
## [171] 257451 264566 266924 269818 271085 272493 272920 274379 274575 275724
## [181] 276272 279439 279733 279774 281215 283141 283254 285262 286224 293178
## [191] 294065 295015 295020 296479 296954 297088 300021 301256 302778 303732
## [201] 304252 305253 305760 306760 306942 307691 307696 308030 311532 311727
## [211] 313441 314589 314658 316043 318595 318868 319444 319736 320033 321632
## [221] 323781 328169 328218 330615 331198 331890 332240 332815 332924 333323
## [231] 334931 335434 336907 337681 337881 338095 338435 338867 340178 341202
## [241] 345723 346711 347154 348672 349255 351552 352531 355949 356815 358591
## [251] 359499 360217 362277 368223 368289 372672 373207 374092 376444 376519
## [261] 378837 378895 381709 381785 385910 386457 387015 387910 388845 389374
## [271] 391383 391566 392618 392637 392778 393070 394550 396211 396660 397730
## [281] 398001 399464 399868 400304 403096 403424 407499 408191 409444 412002
## [291] 413836 414768 417883 419925 422381 423255 425492 425974 426894 427375
## [301] 428183 430376 431008 432253 433648 433972 434951 434989 437864 437962
## [311] 438339 439703 442190 444975 446572 447143 447715 455150 456771 457531
## [321] 457991 458682 460149 461028 461918 462235 462541 462953 464044 467335
## [331] 468098 468211 468588 470673 470864 471853 474541 475907 479942 481299
## [341] 483888 484564 484901 485545 486054 487755 490146 493305 494098 496255
## [351] 500790 504950 507849 514735 518554 519345 520433 522477 526429 526618
## [361] 529844 530329 532935 533801 534201 537035 537153 539056 539256 539330
## [371] 539775 541014 541535 541839 542555 542946 543503 544741 545994 546619
## [381] 546751 547711 551150 552187 552224 553700 555552 555930 560438 563109
## [391] 563842 564311 564864 570898 571159 572652 573041 580612 581598 583741
## [401] 589557 591065 592342 595471 601557 601930 602161 602741 603641 604584
## [411] 605785 609165 609180 610140 613189 614634 614985 618241 619883 621458
## [421] 624880 629320 630922 632152 638110 640226 641044 646617 646872 646957
## [431] 648838 652745 653415 656500 657384 661848 663374 665184 667330 668206
## [441] 668724 668926 669048 670672 672402 675852 676597 679428 680456 680704
## [451] 681949 684257 684461 686792 690674 691191 692312 693292 695310 696751
## [461] 696854 697989 701213 702774 706013 707134 708766 710459 716826 719145
## [471] 722343 723654 725458 725723 727775 730216 730554 731194 731611 732563
## [481] 733322 733423 733818 735264 735417 735756 736180 738059 741579 743940
## [491] 744435 744526 744547 745397 747038 747885 750826 756351 758802 759279
## [501] 760754 761739 763526 763558 763626 767809 768097 769039 769516 769735
## [511] 770234 771028 771317 774480 774649 775722 776684 777057 778670 782481
## [521] 782685 783131 786839 788355 789293 790003 790074 790693 793450 794763
## [531] 795232 795324 796513 799042 799731 801576 804547 806201 806768 807149
## [541] 808527 810575 817657 817767 818551 827328 828524 830483 831390 831615
## [551] 832424 832546 832974 836451 838784 839153 840557 843257 845669 846691
## [561] 846738 847340 847925 850493 851693 853600 853889 856583 856957 858245
## [571] 858984 865954 866344 870491 873385 880075 880083 881338 881423 881525
## [581] 881666 882347 882964 884459 884786 888492 888888 889228 889251 889901
## [591] 889949 891386 892468 893789 894244 894548 894624 894841 894969 895318
## [601] 898193 900622 904084 905545 905946 912684 915794 916031 917727 918538
## [611] 919117 922201 923260 925431 925738 928336 930551 930563 931189 931322
## [621] 932388 932850 933981 934462 935212 936076 937320 940279 940622 942918
## [631] 946738 947886 952638 956197 957057 958053 960627 961567 964814 968585
## [641] 969025 972114 974380 975076 976353 976376 976942 977717 978100 979128
## [651] 979133 981138 981652 984735 990396 991175 993617 994800
## 가입자번호 성별코드 연령대코드 진료과목코드 주상병코드 요양급여비용총액
## 1 1532 2 15 1 T824 182330
## 2 1532 2 15 1 T824 177320
## 3 1532 2 15 1 T824 187060
## 4 1532 2 15 1 N189 201320
## 5 1532 2 15 5 M2000 26410
## 6 1532 2 15 1 T824 177320
## 본인부담금 연령대 성별 공단부담금
## 1 18200 7074 여 164130
## 2 17700 7074 여 159620
## 3 18700 7074 여 168360
## 4 20100 7074 여 181220
## 5 10500 7074 여 15910
## 6 17700 7074 여 159620
## 진료 건수가 100건 이상인 가입자와 나머지 가입자의 비교
T20 %>%
mutate(GRP = ifelse(가입자번호 %in% agg3$가입자번호, 'Heavy', 'Normal')) %>%
group_by(GRP) %>%
summarise(가입자수 = n(),
진료비용총액_가입자평균 = sum(요양급여비용총액)/가입자수)## # A tibble: 2 x 3
## GRP 가입자수 진료비용총액_가입자평균
## * <chr> <int> <dbl>
## 1 Heavy 96119 72070.
## 2 Normal 2224261 39205.
T20 %>%
mutate(GRP = ifelse(가입자번호 %in% agg3$가입자번호, 'Heavy', 'Normal')) %>%
group_by(GRP, 연령대) %>%
summarise(N=n()) %>%
ggplot(aes(GRP, N, fill=연령대))+
geom_col(position = 'fill') ##! 주상병코드별 진료건수, 진료가입자수, 공단부담금합계 계산 후 agg4으로 저장
T20 %>%
group_by(주상병코드) %>%
summarise(진료건수= n(),
진료가입자수 = n_distinct(가입자번호),
공단부담급합계 = sum(공단부담금)) -> agg4
head(agg4, 10) %>%
arrange(진료건수)## # A tibble: 10 x 4
## 주상병코드 진료건수 진료가입자수 공단부담급합계
## <chr> <int> <int> <dbl>
## 1 A029 1 1 45740
## 2 A058 1 1 8110
## 3 A069 2 2 17620
## 4 A062 23 18 280940
## 5 A047 28 12 644860
## 6 A044 100 57 1083820
## 7 A048 102 77 2005410
## 8 A059 106 87 1433570
## 9 A049 3389 2514 49905830
## 10 A_ 6640 2999 281866500
## # A tibble: 6,508 x 1
## 주상병코드
## <chr>
## 1 A_
## 2 A029
## 3 A044
## 4 A047
## 5 A048
## 6 A049
## 7 A058
## 8 A059
## 9 A062
## 10 A069
## # ... with 6,498 more rows
## # A tibble: 6,262 x 1
## 주상병코드
## <chr>
## 1 A029
## 2 A044
## 3 A047
## 4 A048
## 5 A049
## 6 A058
## 7 A059
## 8 A062
## 9 A069
## 10 A0838
## # ... with 6,252 more rows
## 특정 변수 기준 상위 n개 관측치 선택
### slice_max(order_by=기준변수이름, n=상위관측치수) 활용
T20 %>%
slice_max(order_by = 본인부담금, n=3)## 가입자번호 성별코드 연령대코드 진료과목코드 주상병코드 요양급여비용총액
## 1 245194 1 4 13 H913 10138690
## 2 179694 1 10 21 D67 27545170
## 3 179694 1 10 21 D67 27541850
## 본인부담금 연령대 성별 공단부담금
## 1 6089100 1519 남 4049590
## 2 2754500 4549 남 24790670
## 3 2754100 4549 남 24787750
##! 공단부담금합계 기준 상위 10개 주상병코드 확인
### 단, 세 글자 이상인 주상병코드만 활용
agg4 %>%
filter(nchar(주상병코드) > 3) %>%
slice_max(order_by = 공단부담급합계, n=10) -> agg5
##! 공단부담금합계 기준 상위 10개 주상병코드별 환자(가입자)연령대 구성비의 열지도 시각화
T20 %>%
filter(주상병코드 %in% agg5$주상병코드) %>%
group_by(주상병코드, 연령대) %>%
summarise(N =n_distinct(가입자번호)) %>%
mutate(P = N/sum(N)) %>%
mutate(P2= round(N/sum(N),3)) %>%
ggplot(aes(주상병코드, 연령대, fill=P, label= P2))+
geom_tile()+
scale_fill_distiller(palette = 'YlGnBu', direction = 1)+
geom_text() ##! 진료건당 공단부담금 평균 기준 상위 10개 주상병코드 확인
### 단, 세 글자 이상인 주상병코드만 활용
agg5 %>%
group_by(진료건수) %>%
mutate(평균부담금 = 공단부담급합계/진료건수) %>%
slice_max(평균부담금,n=10)## # A tibble: 10 x 5
## # Groups: 진료건수 [10]
## 주상병코드 진료건수 진료가입자수 공단부담급합계 평균부담금
## <chr> <int> <int> <dbl> <dbl>
## 1 N189 4478 408 609913440 136202.
## 2 M511 18990 4085 523968050 27592.
## 3 M5456 20164 5508 541831340 26871.
## 4 K210 20750 10657 443506250 21374.
## 5 M4806 21198 3934 571955920 26982.
## 6 N185 24531 287 4417815190 180091.
## 7 M170 26898 5513 743648360 27647.
## 8 E119 34145 6098 671682160 19671.
## 9 I109 118694 20058 1908093030 16076.
## 10 J209 195727 60616 2356124980 12038.