기말프로젝트

<화재 발생 수와 지역별 119구조대,구급대 비율>

지역마다 화재 발생 수와 구조대 인력 수를 비교하여 어떤 지역이 화재 대비 구조대 인력이 많은지 또는 적은지와 구조대 인력 수 대비 구조건수를 계산하여 어떤 지역의 구조대가 효율적으로 활용되고 있는지 파악해보기 위한 분석

(데이터 출처 : KOSIS 국가통계포털)

지역별 화재 발생 데이터 준비

read_excel("all.xlsx") -> raw_total
raw_total -> total # 복사본 생성

total <- subset(total, select = c("행정구역별", "2021...2","2021...3","2021...4")) # 필요없는 칼럼 제거
total <- total %>% rename(count = "2021...2", death = "2021...3", injury = "2021...4", district = "행정구역별") # 칼럼 이름 변경
total <- total[-c(1,2), ] # 필요없는 행 삭제
total$count <- as.numeric(total$count)
total$total <- 36267 #전체 화재발생 수
total <- total %>% mutate(code = c("11", "21", "22", "23", "24", "25", "26", "29", "31", "32", "33", "34", "35", "36", "37", "38", "39")) # 지도시각화를 위한 지역 코드
지역별 화재발생 수 백분율
total$percentage <- total$count/total$total*100
total # 화재 발생 지역별 
## # A tibble: 17 × 7
##    district       count death injury total code  percentage
##    <chr>          <dbl> <chr> <chr>  <dbl> <chr>      <dbl>
##  1 서울특별시      4951 37    280    36267 11        13.7  
##  2 부산광역시      2271 16    138    36267 21         6.26 
##  3 대구광역시      1189 5     61     36267 22         3.28 
##  4 인천광역시      1270 10    65     36267 23         3.50 
##  5 광주광역시       743 8     19     36267 24         2.05 
##  6 대전광역시       796 6     40     36267 25         2.19 
##  7 울산광역시       802 5     63     36267 26         2.21 
##  8 세종특별자치시   185 -     15     36267 29         0.510
##  9 경기도          8169 66    425    36267 31        22.5  
## 10 강원도          1780 19    141    36267 32         4.91 
## 11 충청북도        1382 11    94     36267 33         3.81 
## 12 충청남도        2015 17    55     36267 34         5.56 
## 13 전라북도        1984 10    80     36267 35         5.47 
## 14 전라남도        2473 21    65     36267 36         6.82 
## 15 경상북도        2849 21    188    36267 37         7.86 
## 16 경상남도        2864 21    106    36267 38         7.90 
## 17 제주특별자치도   544 3     19     36267 39         1.50

전국 화재발생 수 지도시각화

ggChoropleth(data = total, aes(fill = count, map_id = code , tooltip = district), map = kormap1, interactive = T )

119구조대 및 구급대 데이터

read_excel("119fire.xlsx") -> raw_rescue
raw_rescue -> rescue
rescue <- subset(rescue, select = c("본부별","2021...2","2021...3")) # 칼럼 제거
rescue <- rescue %>% rename(head = "본부별", group = "2021...2", personnel = "2021...3") # 칼럼 이름 변경
rescue <- rescue[-c(1,2), ] # 행 제거
rescue # 본부별 구조대
## # A tibble: 21 × 3
##    head           group personnel
##    <chr>          <chr> <chr>    
##  1 중앙           4.0   381.0    
##  2 시·도          275.0 5282.0   
##  3 서울특별시     33.0  679.0    
##  4 부산광역시     14.0  312.0    
##  5 대구광역시     12.0  243.0    
##  6 인천광역시     14.0  318.0    
##  7 광주광역시     7.0   123.0    
##  8 대전광역시     6.0   150.0    
##  9 울산광역시     7.0   121.0    
## 10 세종특별자치시 2.0   31.0     
## # ℹ 11 more rows
read_excel("119em.xlsx") -> raw_firstaid
raw_firstaid -> firstaid
firstaid <- firstaid %>% select("본부별(1)", "2021...3", "2021...4") # 칼럼 제거
firstaid <- firstaid[-c(1,2,3), ] # 행 제거
firstaid <- firstaid %>% rename(head = "본부별(1)", ambulance = "2021...3", medic= "2021...4") # 칼럼 이름 변경
firstaid # 지역별 구급대
## # A tibble: 19 × 3
##    head           ambulance medic  
##    <chr>          <chr>     <chr>  
##  1 전국           1579.0    13133.0
##  2 서울특별시     177.0     1473.0 
##  3 부산광역시     70.0      633.0  
##  4 대구광역시     55.0      495.0  
##  5 인천광역시     72.0      592.0  
##  6 광주광역시     30.0      270.0  
##  7 대전광역시     34.0      286.0  
##  8 울산광역시     31.0      261.0  
##  9 세종특별자치시 11.0      99.0   
## 10 경기도         261.0     1896.0 
## 11 강원도         128.0     1014.0 
## 12 충청북도       68.0      612.0  
## 13 충청남도       116.0     990.0  
## 14 전라북도       99.0      891.0  
## 15 전라남도       110.0     870.0  
## 16 경상북도       146.0     1279.0 
## 17 경상남도       110.0     954.0  
## 18 제주도         32.0      278.0  
## 19 창원           29.0      240.0

left_join으로 구조대,구급대 합치기

df_119 <- left_join(firstaid, rescue, by = "head")
df_119 <- df_119[-c(1,19), ]
df_119 # 지역별 구급차,구급대원,구조대,구조대원
## # A tibble: 17 × 5
##    head           ambulance medic  group personnel
##    <chr>          <chr>     <chr>  <chr> <chr>    
##  1 서울특별시     177.0     1473.0 33.0  679.0    
##  2 부산광역시     70.0      633.0  14.0  312.0    
##  3 대구광역시     55.0      495.0  12.0  243.0    
##  4 인천광역시     72.0      592.0  14.0  318.0    
##  5 광주광역시     30.0      270.0  7.0   123.0    
##  6 대전광역시     34.0      286.0  6.0   150.0    
##  7 울산광역시     31.0      261.0  7.0   121.0    
##  8 세종특별자치시 11.0      99.0   2.0   31.0     
##  9 경기도         261.0     1896.0 27.0  606.0    
## 10 강원도         128.0     1014.0 22.0  447.0    
## 11 충청북도       68.0      612.0  14.0  295.0    
## 12 충청남도       116.0     990.0  17.0  304.0    
## 13 전라북도       99.0      891.0  13.0  216.0    
## 14 전라남도       110.0     870.0  23.0  339.0    
## 15 경상북도       146.0     1279.0 22.0  401.0    
## 16 경상남도       110.0     954.0  21.0  331.0    
## 17 제주도         32.0      278.0  4.0   75.0

구조대와 구급대 인원수의 합 생성 및 화재 발생 수당 구급구조대 인원 비율 생성

df_119$sum <- df_119$medic+df_119$personnel
df_119 <- df_119 %>% rename(district = head)
df_119 <- df_119 %>% mutate(district = ifelse(district == "제주도", "제주특별자치도", district))
df_head119 <- left_join(total,df_119, by = "district")
df_head119$percentage <- df_head119$sum/df_head119$count*100 ## 화재 발생 횟수 1건 당 구조,구급대 인원의 비율(클수록 많은 인원)
df_head119
## # A tibble: 17 × 12
##    district      count death injury total code  percentage ambulance medic group
##    <chr>         <dbl> <chr> <chr>  <dbl> <chr>      <dbl>     <dbl> <dbl> <dbl>
##  1 서울특별시     4951 37    280    36267 11          43.5       177  1473    33
##  2 부산광역시     2271 16    138    36267 21          41.6        70   633    14
##  3 대구광역시     1189 5     61     36267 22          62.1        55   495    12
##  4 인천광역시     1270 10    65     36267 23          71.7        72   592    14
##  5 광주광역시      743 8     19     36267 24          52.9        30   270     7
##  6 대전광역시      796 6     40     36267 25          54.8        34   286     6
##  7 울산광역시      802 5     63     36267 26          47.6        31   261     7
##  8 세종특별자치…   185 -     15     36267 29          70.3        11    99     2
##  9 경기도         8169 66    425    36267 31          30.6       261  1896    27
## 10 강원도         1780 19    141    36267 32          82.1       128  1014    22
## 11 충청북도       1382 11    94     36267 33          65.6        68   612    14
## 12 충청남도       2015 17    55     36267 34          64.2       116   990    17
## 13 전라북도       1984 10    80     36267 35          55.8        99   891    13
## 14 전라남도       2473 21    65     36267 36          48.9       110   870    23
## 15 경상북도       2849 21    188    36267 37          59.0       146  1279    22
## 16 경상남도       2864 21    106    36267 38          44.9       110   954    21
## 17 제주특별자치…   544 3     19     36267 39          64.9        32   278     4
## # ℹ 2 more variables: personnel <dbl>, sum <dbl>

화재 대비 구조,구급대 인력 (색이 진할수록 화재 수 대비 많은 인원이 투입)

ggChoropleth(data = df_head119, aes(fill = percentage, map_id = code , tooltip = district), map = kormap1, interactive = T )

구조대 전체 구조건수 데이터

read_excel("number_rescue.xlsx") -> number_rescue

number_rescue <- number_rescue %>% rename("x2021" = `2021`)
number_rescue <- subset(number_rescue, select = c("본부별", "사고종별", "x2021"))
number_rescue_fire <- number_rescue %>% filter(사고종별 %in% c("계", "화재"))
number_rescue_fire <- number_rescue_fire %>% fill(본부별)
number_rescue_fire <- number_rescue_fire %>% filter(사고종별 == "화재")
number_rescue_fire <- number_rescue_fire %>% filter(본부별 != "계", 본부별 != "창원", 본부별 !="중앙")

number_rescue_fire <- number_rescue_fire %>% rename("district" = "본부별") # 
number_rescue_fire$district[number_rescue_fire$district == "제주도"] <- "제주특별자치도"
# 119구조대 인력과 구조건수비교
rescue17 <- rescue %>% filter(head != "중앙", head != "시·도", head != "창원") 
rescue17 <- rescue17 %>% rename("district" = "head")
rescue17$district[rescue17$district == "제주도"] <- "제주특별자치도"

df_nrfr <- left_join(number_rescue_fire, rescue17, by = "district") # 두 데이터 합치기

df_nrfr$"x2021" <- as.numeric(df_nrfr$"x2021")
df_nrfr$personnel <- as.numeric(df_nrfr$personnel)

df_nrfr$"x2021"/df_nrfr$personnel -> df_nrfr$number_rescue_personnel
df_nrfr
## # A tibble: 17 × 6
##    district       사고종별 x2021 group personnel number_rescue_personnel
##    <chr>          <chr>    <dbl> <chr>     <dbl>                   <dbl>
##  1 서울특별시     화재     40799 33.0        679                   60.1 
##  2 부산광역시     화재      2641 14.0        312                    8.46
##  3 대구광역시     화재      2714 12.0        243                   11.2 
##  4 인천광역시     화재      3766 14.0        318                   11.8 
##  5 광주광역시     화재      1828 7.0         123                   14.9 
##  6 대전광역시     화재      1613 6.0         150                   10.8 
##  7 울산광역시     화재      3008 7.0         121                   24.9 
##  8 세종특별자치시 화재       786 2.0          31                   25.4 
##  9 경기도         화재     14421 27.0        606                   23.8 
## 10 강원도         화재      2223 22.0        447                    4.97
## 11 충청북도       화재      3783 14.0        295                   12.8 
## 12 충청남도       화재      3998 17.0        304                   13.2 
## 13 전라북도       화재      2788 13.0        216                   12.9 
## 14 전라남도       화재      4167 23.0        339                   12.3 
## 15 경상북도       화재      3517 22.0        401                    8.77
## 16 경상남도       화재      5100 21.0        331                   15.4 
## 17 제주특별자치도 화재      1175 4.0          75                   15.7

지역별 구조대 인원대비 구조건수

df_nrfr <- df_nrfr %>% mutate(code = c("11", "21", "22", "23", "24", "25", "26", "29", "31", "32", "33", "34", "35", "36", "37", "38", "39")) # 지도 코드 

ggChoropleth(data = df_nrfr, aes(fill = number_rescue_personnel, map_id = code , tooltip = district), map = kormap1, interactive = T )