library(readxl)
library(tidyverse)
library(dplyr)기초 통계 분석: 인허가 데이터
이 노트북은 인허가_hyungrok_20251007122016.xlsx 파일에 포함된 데이터의 기초 통계 분석을 수행합니다.
0.1 1. 라이브러리 로드
분석에 필요한 라이브러리를 로드합니다. readxl 패키지는 Excel 파일을 R로 불러오는 데 사용됩니다.
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 == "서울특별시") -> seouldf2 |> 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")