기초 통계 분석: 인허가 데이터

이 노트북은 인허가_hyungrok_20251007122016.xlsx 파일에 포함된 데이터의 기초 통계 분석을 수행합니다.

0.1 1. 라이브러리 로드

분석에 필요한 라이브러리를 로드합니다. readxl 패키지는 Excel 파일을 R로 불러오는 데 사용됩니다.

library(readxl)
library(tidyverse)
library(dplyr)

0.2 2. 데이터 불러오기

지정된 경로에서 Excel 파일을 읽어와 data라는 이름의 데이터 프레임으로 저장합니다.

file_path <- "C:/Users/hyung/OneDrive - 에이치알케이/1 Note/2hyungrok/251007 인허가/인허가_hyungrok_20251007122016.xlsx"
data <- read_excel(file_path, sheet = 1)

# 데이터의 첫 6줄을 출력하여 구조 확인
head(data)
Warning message:
Expecting logical in BV5972 / R5972C74: got '1' 
# A tibble: 6 × 74
  PK    업무구분 시도  시군구 법정동 번    지    대지구분 건축구분 허가구분 허가번호 허가일 관리시군구 지목 
  <chr> <chr>    <chr> <chr>  <chr>  <chr> <chr> <chr>    <chr>    <chr>    <chr>    <chr>  <chr>      <chr>
1 1000… 건축     서울특별… 관악구 신림동 0095  0007  대지     증축     증축신고 2024-건축… 20241… 서울시관악구…… 대   
2 1000… 건축     서울특별… 영등포구…… 여의도동…… 0028  0001  대지     대수선   대수선신고…… 2024-건축… 20241… 서울시영등포구…… 대   
3 1000… 건축     서울특별… 서초구 서초동 1309  0006  대지     용도변경 용도변경허가…… 2024-건축… 20241… 서울시서초구…… 대   
4 1000… 건축     서울특별… 종로구 연건동 0037  0000  대지     신축     신축허가 2024-건축… 20241… 서울시종로구…… 대   
5 1000… 건축     서울특별… 강남구 율현동 0196  0071  대지     대수선   대수선허가…… 2024-건축… 20241… 서울시강남구…… 대   
6 1000… 건축     서울특별… 서초구 방배동 0905  0012  대지     대수선   대수선허가…… 2024-건축… 20241… 서울시서초구…… 대   
# ℹ 60 more variables: 건물명 <chr>, 동명 <chr>, `대지면적(㎡)` <chr>, `건축면적(㎡)` <chr>,
#   `연면적(㎡)` <chr>, `건폐율(%)` <chr>, `용적률(%)` <chr>, `용적률산정연면적(㎡)` <chr>,
#   주건축물수 <chr>, 부속건축물수 <chr>, 주용도 <chr>, 기타용도 <chr>, 착공구분 <chr>, 착공예정일자 <chr>,
#   실제착공일자 <chr>, 사용승인구분 <chr>, 사용승인일자 <chr>, 임시사용승인시작일 <lgl>,
#   임시사용승인종료일 <chr>, 건축주구분 <chr>, 건축주상호명 <chr>, 건축주사업자번호 <chr>,
#   설계자상호명 <chr>, 설계자사업자번호 <chr>, 감리자상호명 <chr>, 감리자사업자번호 <chr>,
#   시공자상호명 <chr>, 시공자사업자번호 <chr>, 옥내자주식대수 <chr>, 옥외자주식대수 <chr>, …

0.3 3. 기초 통계 분석

summary() 함수를 사용하여 데이터의 각 열에 대한 요약 통계를 확인합니다. 이 함수는 숫자 데이터의 경우 최소값, 1사분위수, 중앙값, 평균, 3사분위수, 최대값을 제공하고, 문자 데이터의 경우 길이와 클래스 정보를 제공합니다.

summary(data)
      PK              업무구분             시도              시군구             법정동         
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
      번                 지              대지구분           건축구분           허가구분        
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
   허가번호            허가일           관리시군구            지목              건물명         
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
     동명           대지면적(㎡)       건축면적(㎡)        연면적(㎡)         건폐율(%)        
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
  용적률(%)         용적률산정연면적(㎡)  주건축물수        부속건축물수          주용도         
 Length:7256        Length:7256          Length:7256        Length:7256        Length:7256       
 Class :character   Class :character     Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character     Mode  :character   Mode  :character   Mode  :character  
   기타용도           착공구분         착공예정일자       실제착공일자       사용승인구분      
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 사용승인일자       임시사용승인시작일 임시사용승인종료일  건축주구분        건축주상호명      
 Length:7256        Mode:logical       Length:7256        Length:7256        Length:7256       
 Class :character   NA's:7256          Class :character   Class :character   Class :character  
 Mode  :character                      Mode  :character   Mode  :character   Mode  :character  
 건축주사업자번호   설계자상호명       설계자사업자번호   감리자상호명       감리자사업자번호  
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 시공자상호명       시공자사업자번호   옥내자주식대수     옥외자주식대수     인근자주식대수    
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 옥내기계식대수     옥외기계식대수     인근기계식대수     옥내전기차대수     옥외전기차대수    
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 인근전기차대수       면제대수         지붕마감재료       건축면적(동)(㎡)   연면적(동)(㎡)    
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 용적률산정연면적(동)(㎡)  주용도(동)        기타용도(동)         구조(동)         기타구조(동)      
 Length:7256              Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character         Class :character   Class :character   Class :character   Class :character  
 Mode  :character         Mode  :character   Mode  :character   Mode  :character   Mode  :character  
   지붕(동)         기타지붕(동)        세대수(동)         가구수(동)          호수(동)        
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 지하층수(동)       지상층수(동)         높이(동)         승용승강기수(동)   비상용승강기수(동)
 Length:7256        Length:7256        Length:7256        Length:7256        Length:7256       
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
   용도지역           용도지구           용도구역         BIM제출여부   
 Length:7256        Length:7256        Length:7256        Mode:logical  
 Class :character   Class :character   Class :character   NA's:7256     
 Mode  :character   Mode  :character   Mode  :character                 
#허가일 데이터 기초통계 보기
summary(data$허가일)
   Length     Class      Mode 
     7256 character character 
data |> group_by(허가일) |> summarise(n = n()) |> arrange(desc(n))
# A tibble: 257 × 2
   허가일       n
   <chr>    <int>
 1 20241230   204
 2 20250407   188
 3 20241231   185
 4 20250313   124
 5 20250516    74
 6 20241024    71
 7 20241227    70
 8 20250709    67
 9 20250217    66
10 20250501    65
# ℹ 247 more rows
# ℹ Use `print(n = ...)` to see more rows
## 허가일 문자열에서 1~4 번째 문자만 분리해서 year 변수 생성
data <- data |> mutate(year = substr(허가일, 1, 4))
## 허가일 문자열에서 5~6 번째 문자만 분리해서 month 변수 생성
data <- data |> mutate(month = substr(허가일, 5, 6))
## 허가열 문자열에서 4~6 번째 문자만 분리해서 yymm 변수 생성
data <- data |> mutate(yymm = substr(허가일, 3, 6))
## year 변수 빈도 통계
table(data$year)

2024 2025 
2232 5024 
#허가일 데이터 character 값들 보기
unique(data$허가일)
  [1] "20241002" "20241004" "20241007" "20241008" "20241010" "20241011" "20241014" "20241015" "20241016"
 [10] "20241017" "20241018" "20241020" "20241021" "20241022" "20241023" "20241024" "20241025" "20241026"
 [19] "20241028" "20241029" "20241030" "20241031" "20241101" "20241103" "20241104" "20241105" "20241106"
 [28] "20241107" "20241108" "20241111" "20241112" "20241113" "20241114" "20241115" "20241116" "20241118"
 [37] "20241119" "20241120" "20241121" "20241122" "20241123" "20241124" "20241125" "20241126" "20241127"
 [46] "20241128" "20241129" "20241130" "20241202" "20241203" "20241204" "20241205" "20241206" "20241207"
 [55] "20241209" "20241210" "20241211" "20241212" "20241213" "20241215" "20241216" "20241217" "20241218"
 [64] "20241219" "20241220" "20241223" "20241224" "20241226" "20241227" "20241230" "20241231" "20250101"
 [73] "20250102" "20250103" "20250106" "20250107" "20250108" "20250109" "20250110" "20250113" "20250114"
 [82] "20250115" "20250116" "20250117" "20250118" "20250120" "20250121" "20250122" "20250123" "20250124"
 [91] "20250131" "20250203" "20250204" "20250205" "20250206" "20250207" "20250208" "20250210" "20250211"
[100] "20250212" "20250213" "20250214" "20250215" "20250217" "20250218" "20250219" "20250220" "20250221"
[109] "20250222" "20250224" "20250225" "20250226" "20250227" "20250228" "20250302" "20250304" "20250305"
[118] "20250306" "20250307" "20250308" "20250310" "20250311" "20250312" "20250313" "20250314" "20250317"
[127] "20250318" "20250319" "20250320" "20250321" "20250323" "20250324" "20250325" "20250326" "20250327"
[136] "20250328" "20250331" "20250401" "20250402" "20250403" "20250404" "20250406" "20250407" "20250408"
[145] "20250409" "20250410" "20250411" "20250412" "20250413" "20250414" "20250415" "20250416" "20250417"
[154] "20250418" "20250421" "20250422" "20250423" "20250424" "20250425" "20250428" "20250429" "20250430"
[163] "20250501" "20250502" "20250507" "20250508" "20250509" "20250510" "20250511" "20250512" "20250513"
[172] "20250514" "20250515" "20250516" "20250518" "20250519" "20250520" "20250521" "20250522" "20250523"
[181] "20250526" "20250527" "20250528" "20250529" "20250530" "20250531" "20250602" "20250604" "20250605"
[190] "20250609" "20250610" "20250611" "20250612" "20250613" "20250616" "20250617" "20250618" "20250619"
[199] "20250620" "20250623" "20250624" "20250625" "20250626" "20250627" "20250628" "20250630" "20250701"
[208] "20250702" "20250703" "20250704" "20250705" "20250707" "20250708" "20250709" "20250710" "20250711"
[217] "20250713" "20250714" "20250715" "20250716" "20250717" "20250718" "20250719" "20250721" "20250722"
[226] "20250723" "20250724" "20250725" "20250728" "20250729" "20250730" "20250731" "20250801" "20250802"
[235] "20250803" "20250804" "20250805" "20250806" "20250807" "20250808" "20250811" "20250812" "20250813"
[244] "20250814" "20250816" "20250818" "20250819" "20250820" "20250821" "20250822" "20250824" "20250825"
[253] "20250826" "20250827" "20250828" "20250829" "20250831"
#허가일 옆에 허가date 열 추가
data$허가date <- as.Date(data$허가일, format="%Y%m%d")
#허가data 데이터 기초통계 보기
summary(data$허가date)
        Min.      1st Qu.       Median         Mean      3rd Qu.         Max. 
"2024-10-02" "2024-12-27" "2025-03-13" "2025-03-15" "2025-06-10" "2025-08-31" 
## 대지면적 str 에서 숫자로 변환해서 site_area 변수 생성
data <- data |> mutate(site_area = as.numeric(gsub(",", "", `대지면적(㎡)`)))
## 건축면적(m2) str 에서 숫자로 변환해서 bldg_area 변수 생성
data <- data |> mutate(bldg_area = as.numeric(gsub(",", "", `건축면적(㎡)`)))
## 연면적(m2) str 에서 숫자로 변환해서 total_area 변수 생성
data <- data |> mutate(total_area = as.numeric(gsub(",", "", `연면적(㎡)`)))
## 건폐율(%) str 에서 숫자로 변환해서 bldg_rate 변수 생성
data <- data |> mutate(bldg_rate = as.numeric(gsub(",", "", `건폐율(%)`)))
## 용적률(%) str 에서 숫자로 변환해서 floor_rate 변수 생성
data <- data |> mutate(floor_rate = as.numeric(gsub(",", "", `용적률(%)`)))
## 용적률산정연면적(m2) str 에서 숫자로 변환해서 floor_area 변수 생성
data <- data |> mutate(floor_area = as.numeric(gsub(",", "", `용적률산정연면적(㎡)`)))
## 주건축물수 str 에서 숫자로 변환해서 main_bldg_cnt 변수 생성
data <- data |> mutate(main_bldg_cnt = as.numeric(gsub(",", "", `주건축물수`)))
## 부속건축물수 str 에서 숫자로 변환해서 sub_bldg_cnt 변수 생성
data <- data |> mutate(sub_bldg_cnt = as.numeric(gsub(",", "", `부속건축물수`)))
## 착공예정일자 str 에서 날짜로 변환해서 start_estimate_date 변수 생성
data <- data |> mutate(start_estimate_date = as.Date(`착공예정일자`, format="%Y%m%d"))
## 실제착공일자 str 에서 날짜로 변환해서 start_actual_date 변수 생성
data <- data |> mutate(start_actual_date = as.Date(`실제착공일자`, format="%Y%m%d")) 
## 사용승인일자 str 에서 날짜로 변환해서 end_approve_date 변수 생성
data <- data |> mutate(end_approve_date = as.Date(`사용승인일자`, format="%Y%m%d"))
## 임시사용승인시작일 str 에서 날짜로 변환해서 temp_approve_start_date 변수 생성
data <- data |> mutate(temp_approve_start_date = as.Date(`임시사용승인시작일`, format="%Y%m%d"))
## 임시사용승인종료일 str 에서 날짜로 변환해서 temp_approve_end_date 변수 생성
data <- data |> mutate(temp_approve_end_date = as.Date(`임시사용승인종료일`, format="%Y%m%d"))
## 옥내자주식대수 str 에서 숫자로 변환해서 indoor_parking_cnt 변수 생성
data <- data |> mutate(indoor_parking_cnt = as.numeric(gsub(",", "", `옥내자주식대수`)))
## 옥외자주식대수 str 에서 숫자로 변환해서 outdoor_parking_cnt 변수 생성
data <- data |> mutate(outdoor_parking_cnt = as.numeric(gsub(",", "", `옥외자주식대수`)))
## 인근자주식대수 str 에서 숫자로 변환해서 nearby_parking_cnt 변수 생성
data <- data |> mutate(nearby_parking_cnt = as.numeric(gsub(",", "", `인근자주식대수`)))
## 옥내기계식대수, 옥외기계식대수, 인근기계식대수 str 에서 숫자로 변환해서 각각 indoor_mech_parking_cnt, outdoor_mech_parking_cnt, nearby_mech_parking_cnt 변수 생성
data <- data |> mutate(indoor_mech_parking_cnt = as.numeric(gsub(",", "", `옥내기계식대수`)))
data <- data |> mutate(outdoor_mech_parking_cnt = as.numeric(gsub(",", "", `옥외기계식대수`)))
data <- data |> mutate(nearby_mech_parking_cnt = as.numeric(gsub(",", "", `인근기계식대수`)))
## 옥내전기차대수, 옥외전기차대수, 인근전기차대수 str 에서 숫자로 변환해서 각각 indoor_ev_parking_cnt, outdoor_ev_parking_cnt, nearby_ev_parking_cnt 변수 생성
data <- data |> mutate(indoor_ev_parking_cnt = as.numeric(gsub(",", "", `옥내전기차대수`)))
data <- data |> mutate(outdoor_ev_parking_cnt = as.numeric(gsub(",", "", `옥외전기차대수`)))
data <- data |> mutate(nearby_ev_parking_cnt = as.numeric(gsub(",", "", `인근전기차대수`)))
## 면제대수 str 에서 숫자로 변환해서 exempted_parking_cnt 변수 생성
data <- data |> mutate(exempted_parking_cnt = as.numeric(gsub(",", "", `면제대수`)))
## 건축면적(동)(m2), 연면적(동)(m2), 용적률산정연면적(동)(m2) str 에서 숫자로 변환해서 각각 bldg_area_dong, total_area_dong, floor_area_dong 변수 생성
data <- data |> mutate(bldg_area_dong = as.numeric(gsub(",", "", `건축면적(동)(㎡)`)))
data <- data |> mutate(total_area_dong = as.numeric(gsub(",", "", `연면적(동)(㎡)`)))
data <- data |> mutate(floor_area_dong = as.numeric(gsub(",", "", `용적률산정연면적(동)(㎡)`)))
## 세대수(동), 가구수(동), 호수(동) str 에서 숫자로 변환해서 각각 household_cnt_dong, family_cnt_dong, lot_cnt_dong 변수 생성
data <- data |> mutate(household_cnt_dong = as.numeric(gsub(",", "", `세대수(동)`)))
data <- data |> mutate(family_cnt_dong = as.numeric(gsub(",", "", `가구수(동)`)))
data <- data |> mutate(lot_cnt_dong = as.numeric(gsub(",", "", `호수(동)`)))
## 지하층수(동), 지상층수(동), 높이(동) str 에서 숫자로 변환해서 각각 basement_floor_cnt_dong, ground_floor_cnt_dong, height_dong 변수 생성
data <- data |> mutate(basement_floor_cnt_dong = as.numeric(gsub(",", "", `지하층수(동)`)))
data <- data |> mutate(ground_floor_cnt_dong = as.numeric(gsub(",", "", `지상층수(동)`)))
data <- data |> mutate(height_dong = as.numeric(gsub(",", "", `높이(동)`)))
## 승용승강기수(동), 비상용승강기수(동) str 에서 숫자로 변환해서 각각 passenger_elevator_cnt_dong, emergency_elevator_cnt_dong 변수 생성
data <- data |> mutate(passenger_elevator_cnt_dong = as.numeric(gsub(",", "", `승용승강기수(동)`)))
data <- data |> mutate(emergency_elevator_cnt_dong = as.numeric(gsub(",", "", `비상용승강기수(동)`)))
## 주용도 별 total_area 집계표
data |> group_by(`주용도`) |> summarise(total_area_sum = sum(total_area, na.rm = TRUE)) |> arrange(desc(total_area_sum))
# A tibble: 28 × 2
   주용도            total_area_sum
   <chr>                      <dbl>
 1 업무시설              462903204.
 2 공동주택              246737061.
 3 교육연구시설           71887148.
 4 판매시설               13086958.
 5 공장                    5973251.
 6 운수시설                5463185.
 7 제1종근린생활시설       3267518.
 8 종교시설                2802441.
 9 숙박시설                2703275.
10 제2종근린생활시설       2329602.
# ℹ 18 more rows
# ℹ Use `print(n = ...)` to see more rows
## 주용도 별 total_area 면적 합계 그래프 생성. 그래프에 한글 폰트 깨짐 현상이 있을 경우, Windows 환경에서는 'Malgun Gothic'폰트 사용
library(ggplot2)
library(extrafont)
# font_import() # 처음 한 번만 실행
# loadfonts(device = "win") # Windows 환경에서만 실행
# 면적합계 상위5개만 보이도록하고 하고, Y축은 100만 단위로 축소, 범례표시
data_summary <- data |> group_by(`주용도`) |> summarise(total_area_sum = sum(total_area, na.rm = TRUE)) |> arrange(desc(total_area_sum)) |> slice_head(n = 5)
ggplot(data_summary, aes(x = reorder(`주용도`, -total_area_sum), y = total_area_sum/1e6, fill = `주용도`)) +
  geom_bar(stat = "identity") +
  labs(title = "주용도 별 연면적 합계 (상위 5개)", x = "주용도", y = "연면적 합계 (백만 m²)") +
  theme_minimal() +
  theme(text = element_text(family = "Malgun Gothic"), legend.position = "none")
# ggsave("주용도_별_연면적_합계.png")

## 업무시설, 공동주택, 교육연구시설, 판매시설, 공장 주용도 별 갯수 그래프
data_filtered <- data |> filter(`주용도` %in% c("업무시설", "공동주택", "교육연구시설", "판매시설", "공장"))
ggplot(data_filtered, aes(x = `주용도`, fill = `주용도`)) +
  geom_bar() +
  labs(title = "주용도 별 건축허가 건수", x = "주용도", y = "건수") +
  theme_minimal() +
  theme(text = element_text(family = "Malgun Gothic"), legend.position = "none")
# ggsave("주용도_별_건축허가_건수.png")

## 업무시설, 공동주택, 교육연구시설, 판매시설, 공장 주용도 착공일이 없는 건수 표
data_filtered |> filter(is.na(start_actual_date)) |> group_by(`주용도`) |> summarise(n = n()) |> arrange(desc(n))
# A tibble: 5 × 2
  주용도           n
  <chr>        <int>
1 공동주택      1866
2 업무시설       797
3 교육연구시설   198
4 공장           110
5 판매시설        97
## 주용도 업무시설, 공동주택, 교육연구시설, 판매시설, 공장 중에서 total_area 30000 이상이며, 착공일이 없는 데이터 df2 로 저장
df2 <- data |> filter(`주용도` %in% c("업무시설", "교육연구시설", "판매시설", "공장") & total_area >= 30000 & is.na(start_actual_date))
summary(df2)
      PK              업무구분             시도              시군구             법정동         
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
      번                 지              대지구분           건축구분           허가구분        
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
   허가번호            허가일           관리시군구            지목              건물명         
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
     동명           대지면적(㎡)       건축면적(㎡)        연면적(㎡)         건폐율(%)        
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
  용적률(%)         용적률산정연면적(㎡)  주건축물수        부속건축물수          주용도         
 Length:408         Length:408           Length:408         Length:408         Length:408        
 Class :character   Class :character     Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character     Mode  :character   Mode  :character   Mode  :character  
                                                                                                 
                                                                                                 
                                                                                                 
                                                                                                 
   기타용도           착공구분         착공예정일자       실제착공일자       사용승인구분      
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
 사용승인일자       임시사용승인시작일 임시사용승인종료일  건축주구분        건축주상호명      
 Length:408         Mode:logical       Length:408         Length:408         Length:408        
 Class :character   NA's:408           Class :character   Class :character   Class :character  
 Mode  :character                      Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
 건축주사업자번호   설계자상호명       설계자사업자번호   감리자상호명       감리자사업자번호  
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
 시공자상호명       시공자사업자번호   옥내자주식대수     옥외자주식대수     인근자주식대수    
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
 옥내기계식대수     옥외기계식대수     인근기계식대수     옥내전기차대수     옥외전기차대수    
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
 인근전기차대수       면제대수         지붕마감재료       건축면적(동)(㎡)   연면적(동)(㎡)    
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
 용적률산정연면적(동)(㎡)  주용도(동)        기타용도(동)         구조(동)         기타구조(동)      
 Length:408               Length:408         Length:408         Length:408         Length:408        
 Class :character         Class :character   Class :character   Class :character   Class :character  
 Mode  :character         Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                                     
                                                                                                     
                                                                                                     
                                                                                                     
   지붕(동)         기타지붕(동)        세대수(동)         가구수(동)          호수(동)        
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
 지하층수(동)       지상층수(동)         높이(동)         승용승강기수(동)   비상용승강기수(동)
 Length:408         Length:408         Length:408         Length:408         Length:408        
 Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                               
                                                                                               
                                                                                               
                                                                                               
   용도지역           용도지구           용도구역         BIM제출여부        year          
 Length:408         Length:408         Length:408         Mode:logical   Length:408        
 Class :character   Class :character   Class :character   NA's:408       Class :character  
 Mode  :character   Mode  :character   Mode  :character                  Mode  :character  
                                                                                           
                                                                                           
                                                                                           
                                                                                           
    month               yymm              허가date            site_area         bldg_area     
 Length:408         Length:408         Min.   :2024-10-02   Min.   :   1967   Min.   :   959  
 Class :character   Class :character   1st Qu.:2024-11-25   1st Qu.:   5569   1st Qu.:  2854  
 Mode  :character   Mode  :character   Median :2025-02-27   Median :  12146   Median :  5992  
                                       Mean   :2025-03-05   Mean   : 142365   Mean   : 21679  
                                       3rd Qu.:2025-06-17   3rd Qu.:  39053   3rd Qu.: 13049  
                                       Max.   :2025-08-29   Max.   :3895659   Max.   :733920  
                                                                                              
   total_area          bldg_rate          floor_rate          floor_area      main_bldg_cnt   
 Min.   :    30145   Min.   :   0.149   Min.   :   0.6068   Min.   :    647   Min.   : 0.000  
 1st Qu.:    53362   1st Qu.:  38.688   1st Qu.: 348.4061   1st Qu.:  30786   1st Qu.: 1.000  
 Median :    99338   Median :  52.930   Median : 511.9649   Median :  54758   Median : 1.000  
 Mean   :  1278976   Mean   :  59.192   Mean   : 521.8368   Mean   : 145046   Mean   : 7.654  
 3rd Qu.:   234272   3rd Qu.:  58.914   3rd Qu.: 672.2960   3rd Qu.: 153006   3rd Qu.: 5.000  
 Max.   :365520224   Max.   :5450.685   Max.   :1199.7500   Max.   :6585853   Max.   :86.000  
                                                                                              
  sub_bldg_cnt     start_estimate_date  start_actual_date end_approve_date     temp_approve_start_date
 Min.   : 0.0000   Min.   :2024-11-15   Min.   :NA        Min.   :2024-10-15   Min.   :NA             
 1st Qu.: 0.0000   1st Qu.:2025-04-07   1st Qu.:NA        1st Qu.:2024-12-26   1st Qu.:NA             
 Median : 0.0000   Median :2025-04-07   Median :NA        Median :2025-04-03   Median :NA             
 Mean   : 0.5441   Mean   :2025-06-12   Mean   :NaN       Mean   :2025-03-28   Mean   :NaN            
 3rd Qu.: 0.0000   3rd Qu.:2025-07-31   3rd Qu.:NA        3rd Qu.:2025-07-09   3rd Qu.:NA             
 Max.   :10.0000   Max.   :2026-01-23   Max.   :NA        Max.   :2025-09-02   Max.   :NA             
                   NA's   :316          NA's   :408       NA's   :340          NA's   :408            
 temp_approve_end_date indoor_parking_cnt outdoor_parking_cnt nearby_parking_cnt indoor_mech_parking_cnt
 Min.   :2026-05-30    Min.   :   0.0     Min.   :   0.0      Min.   :0          Min.   :  0.00         
 1st Qu.:2026-08-06    1st Qu.: 215.0     1st Qu.:   0.0      1st Qu.:0          1st Qu.:  0.00         
 Median :2026-10-13    Median : 396.0     Median :   0.0      Median :0          Median :  0.00         
 Mean   :2026-10-13    Mean   : 788.7     Mean   : 162.4      Mean   :0          Mean   : 11.19         
 3rd Qu.:2026-12-20    3rd Qu.: 760.0     3rd Qu.:  17.0      3rd Qu.:0          3rd Qu.:  0.00         
 Max.   :2027-02-26    Max.   :6588.0     Max.   :1683.0      Max.   :0          Max.   :478.00         
 NA's   :406                                                                                            
 outdoor_mech_parking_cnt nearby_mech_parking_cnt indoor_ev_parking_cnt outdoor_ev_parking_cnt
 Min.   :   0             Min.   :0               Min.   :  0.00        Min.   :0.00000       
 1st Qu.:   0             1st Qu.:0               1st Qu.:  0.00        1st Qu.:0.00000       
 Median :   0             Median :0               Median :  0.00        Median :0.00000       
 Mean   :  26             Mean   :0               Mean   : 11.25        Mean   :0.05392       
 3rd Qu.:   0             3rd Qu.:0               3rd Qu.:  0.00        3rd Qu.:0.00000       
 Max.   :8492             Max.   :0               Max.   :350.00        Max.   :9.00000       
                                                                                              
 nearby_ev_parking_cnt exempted_parking_cnt bldg_area_dong     total_area_dong    floor_area_dong   
 Min.   :0.00000       Min.   : 0.0000      Min.   :  -47.59   Min.   :   -47.6   Min.   :     -48  
 1st Qu.:0.00000       1st Qu.: 0.0000      1st Qu.:   21.66   1st Qu.:  1929.6   1st Qu.:       7  
 Median :0.00000       Median : 0.0000      Median : 2016.01   Median : 36804.2   Median :   22158  
 Mean   :0.01961       Mean   : 0.4657      Mean   : 3016.10   Mean   : 57101.2   Mean   :  144656  
 3rd Qu.:0.00000       3rd Qu.: 0.0000      3rd Qu.: 3766.93   3rd Qu.: 75990.1   3rd Qu.:   46259  
 Max.   :8.00000       Max.   :22.0000      Max.   :56887.06   Max.   :463204.1   Max.   :34879035  
                                                                                                    
 household_cnt_dong family_cnt_dong  lot_cnt_dong    basement_floor_cnt_dong ground_floor_cnt_dong
 Min.   :  0.00     Min.   :0       Min.   :   0.0   Min.   : 0.000          Min.   :  0.00       
 1st Qu.:  0.00     1st Qu.:0       1st Qu.:   0.0   1st Qu.: 2.000          1st Qu.: 10.00       
 Median :  0.00     Median :0       Median :   1.0   Median : 4.000          Median : 15.00       
 Mean   : 13.41     Mean   :0       Mean   : 134.2   Mean   : 4.221          Mean   : 16.06       
 3rd Qu.:  0.00     3rd Qu.:0       3rd Qu.:  47.0   3rd Qu.: 6.000          3rd Qu.: 20.00       
 Max.   :947.00     Max.   :0       Max.   :1629.0   Max.   :10.000          Max.   :123.00       
                                                                                                  
  height_dong     passenger_elevator_cnt_dong emergency_elevator_cnt_dong
 Min.   :  0.00   Min.   : 0.000              Min.   : 0.00              
 1st Qu.: 38.48   1st Qu.: 3.000              1st Qu.: 0.00              
 Median : 62.05   Median : 6.000              Median : 2.00              
 Mean   : 65.89   Mean   : 9.363              Mean   : 2.02              
 3rd Qu.: 84.65   3rd Qu.:11.000              3rd Qu.: 2.00              
 Max.   :555.00   Max.   :86.000              Max.   :16.00              
                                                                         
vworld_api <- "1040E4A8-8131-34EC-A144-A95AAF987A21"
## remotes::install_github("derickspark/vworldgeocodeR")
library(vworldgeocodeR)
## df2$번 문자열에서 앞에서 0으로 시작하는 문자열은 제거하여 bun으로 저장
df2 <- df2 |> mutate(bun = sub("^0+", "", ``))
df2 <- df2 |> mutate(ji = sub("^0+", "", ``))
df2$bunji <- paste(df2$bun, df2$ji, sep="-")
 df2$adress <- paste(df2$시도, df2$시군구, df2$법정동, df2$bunji) 
 geo <- df2$adress |> batch_geocode(api_key = vworld_api)
## bunji 문자열이 "-"로 끝나는 경우, "-" 제거
df2 <- df2 |> mutate(bunji = ifelse(grepl("-$", bunji), sub("-$", "", bunji), bunji))
df2 <- bind_cols(df2, geo)
df2 |> group_by(status) |> summarise(n = n())
# A tibble: 2 × 2
  status                n
  <chr>             <int>
1 failed: NOT_FOUND   309
2 success              99
## geo를 sf 객체로 변환
library(sf)
geo |> filter(status == "success") -> geo_ok
geo_sf <- st_as_sf(geo_ok, coords = c("lon", "lat"), crs = 4326)
geo_sf |> ggplot()+geom_sf()

## devtools::install_github("bit2r/bitSpatial")
library(bitSpatial)
Error in `library()`:

! there is no package called ‘bitSpatial’

     1. └─base::library(bitSpatial)
## cty.rda 객체 불러오기 
load("C:/Users/hyung/OneDrive - 에이치알케이/1 Note/2hyungrok/251007 인허가/cty.rda")
cty |> filter(mega_nm == "서울특별시") -> seoul
df2 |> filter(status == "success") -> df2_ok
df2_sf <- st_as_sf(df2_ok, coords = c("lon", "lat"), crs = 4326)
seoul |> ggplot()+geom_sf()+
  geom_sf(data=df2_sf, color="red", aes(size=total_area))+
  theme_void()+
  theme(text = element_text(family = "Malgun Gothic"))

df2 |> filter(status != "success") |> 
  group_by(address) |> summarise(n=n()) |> arrange(desc(n)) |> write.csv("geocode_fail_address.csv", row.names = FALSE, fileEncoding = "UTF-8")