“부울경 메가시티란 부산, 울산, 경남 3개 시도가 광역연합을 통해 수도권 1극 체제의 다양한 문제점을 해결하는 동시에 메가시티 차원의 수도권-비수도권 상생 국가균형발전 모델로서, 전국 최초로 추진되고 있다. 현재 대한민국의 인구, 경제, 문화의 50% 이상이 수도권에 집중되고 있다. 세계의 여러나라들은 1극체계에서 다극체계로의 전환을 진행중이다. 역사적으로 동일한 행정구역에 포함되었던 역사문화적 동질성을 바탕으로 부산, 울산, 경남의 공동 발전이 필요로 하는 시점이다. 따러서 이러한 부울경 메가시티를 구상 및 추진할때, 기준이 되는 거점도시의 타당성에 대해 검토해보고자 한다.”
본 연구에서는 다음의 질문에 대하여 분석을 진행하고자 한다.
위의 분석 질문들에 답하기 위하여 다음의 데이터를 사용하였다.
부울경 지역의 순 이동량을 분석해 보았을 때, 성장 가능성이 있는 도시로는 ‘부산 기장군’, ‘부산 수영구’, ‘울산 중구’, ‘울산 동구’, ‘경남 양산시’ 등으로 파악할 수 있다. 유입인구량이 유출인구량 보다 많은 지역이기에 인구 관점에서 보았을 때, 부울경 메가시티의 거점지역으로 선정할 가능성이 있다.
“부산의 순이동 인구량을 분석하였을 때, 순이동 인구 변동량이 가장 컸던 행정구역은 강서구로 15,265명이였고, 변동이 가장 적은 행정구역은 중구로, 1,398명이였다. 다만, 순이동량을 0을 기준으로 보았을때, 증가추세 자체는 감소하고 있지만, 기장군, 수영구 등은 전체적으로 순이동량이 양수였고, 사상구, 중구, 해운대구의 경우 지속적으로 음수의 값을 보인다. 따라서 기장군, 수영구는 부산 내에서 순이동량만 보았을 때, 성장가능성이 있는 도시로 분류할 수 있고, 사상구, 중구, 해운대구의 경우 쇠퇴하는 도시로 분류할 수 있다.”
“울산의 순이동 인구량을 분석하였을 때, 순이동 인구 변동량이 가장 컸던 행정구역은 중구로 13,032명이였고, 변동이 가장 적은 행정구역은 남구로, 4,617명이였다. 순이동량을 0을 기준으로 보았을때, 북구의 경우 2019년까지 지속적인 증가추세를 보이다가 2020년부터 유출인구량이 많아졌고, 그에 반해 중구와 동구는 유출인구량이 많았지만, 시간이 지나면서 점점 유입인구량이 증가하여 순이동량이 양수로 바뀌었다. 따라서 울산 내에서 인구 순이동량으로 보았을 때, 울주군과 북구는 쇠퇴하는 지역, 중구와 동구는 성장 잠재력이 있는 지역으로 분류할 수 있다.”
Ulsan.Area.code <- read_excel("C:/공간빅데이터분석/최종 레포트/울산법정동코드.xls")
Ulsan.Area.code <- Ulsan.Area.code %>%
filter(grepl("군$|구$", Ulsan.Area.code$법정동명))
Ulsan.Area.code$법정동명 <- gsub("울산광역시 ", "", Ulsan.Area.code$법정동명)
colnames(Ulsan.Area.code)[colnames(Ulsan.Area.code) == "법정동명"] <- "행정구역"
Ulsan.Move <- read_excel("C:/공간빅데이터분석/최종 레포트/울산이동.xlsx")
## New names:
## • `2015` -> `2015...2`
## • `2015` -> `2015...3`
## • `2015` -> `2015...4`
## • `2016` -> `2016...5`
## • `2016` -> `2016...6`
## • `2016` -> `2016...7`
## • `2017` -> `2017...8`
## • `2017` -> `2017...9`
## • `2017` -> `2017...10`
## • `2018` -> `2018...11`
## • `2018` -> `2018...12`
## • `2018` -> `2018...13`
## • `2019` -> `2019...14`
## • `2019` -> `2019...15`
## • `2019` -> `2019...16`
## • `2020` -> `2020...17`
## • `2020` -> `2020...18`
## • `2020` -> `2020...19`
## • `2021` -> `2021...20`
## • `2021` -> `2021...21`
## • `2021` -> `2021...22`
## • `2022` -> `2022...23`
## • `2022` -> `2022...24`
## • `2022` -> `2022...25`
## • `2023` -> `2023...26`
## • `2023` -> `2023...27`
## • `2023` -> `2023...28`
selected_columns <- c(1,4, 7, 10, 13, 16, 19, 22, 25, 28)
Ulsan.Move1 <- Ulsan.Move[, selected_columns]
Ulsan.Move1 <- Ulsan.Move1[-1,-1]
row_names <- Ulsan.Area.code[[2]]
rownames(Ulsan.Move1) <- row_names
colnames(Ulsan.Move1) <- c("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023")
Ulsan.Area.code <- Ulsan.Area.code %>%
select(법정동코드 = `법정동코드`, 행정구역)
Ulsan.Move1_named <- Ulsan.Move1 %>%
as.data.frame() %>%
rownames_to_column(var = "법정동코드") %>%
left_join(Busan.Area.code, by = "법정동코드") %>%
select(-법정동코드) %>%
relocate(행정구역, .before = 1)
Ulsan.Move1_long <- Ulsan.Move1_named %>%
pivot_longer(cols = -행정구역, names_to = "연도", values_to = "이동수") %>%
mutate(이동수 = as.numeric(이동수))
area_names <- c(
"중구", "남구", "동구", "북구", "울주군"
)
Ulsan.Move1_named <- Ulsan.Move1 %>%
as.data.frame() %>%
rownames_to_column(var = "법정동코드") %>%
mutate(행정구역 = area_names) %>%
select(-법정동코드) %>%
relocate(행정구역, .before = 1)
Ulsan.Move1_long <- Ulsan.Move1_named %>%
pivot_longer(cols = -행정구역, names_to = "연도", values_to = "이동수") %>%
mutate(이동수 = as.numeric(이동수))
ggplot(Ulsan.Move1_long, aes(x = 연도, y = 이동수, color = 행정구역, group = 행정구역)) +
geom_line(size = 0.5) +
geom_point(size = 2) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black", size = 0.8) +
theme_minimal() +
scale_color_viridis_d() +
labs(
title = "울산 순이동 선 그래프 (0 기준 표시)",
x = "연도",
y = "순이동",
color = "행정구역"
)
“경남의 순이동 인구량을 분석하였을 때, 순이동 인구 변동량이 가장 컸던 행정구역은 양산시로 20,549명이였고, 변동이 가장 적은 행정구역은 남해군으로, 459명이였다. 순이동량을 0을 기준으로 보았을때, 양산시의 경우 유입인구 증가 폭이 줄긴 하였지만, 꾸준히 유입인구가 유출인구보다 많고, 통영시의 경우 인구 유출이 지속되고 있다. 따라서 경남 지역의 경우 양산시는 성장 잠재력이 있는 지역, 통영시의 경우 쇠퇴하는 지역으로 구분할 수 있다.”
Kyungnam.Area.code <- read_excel("C:/공간빅데이터분석/최종 레포트/경남법정동코드.xls")
Kyungnam.Area.code <- Kyungnam.Area.code %>%
filter(grepl("군$|시$", Kyungnam.Area.code$법정동명))
Kyungnam.Area.code$법정동명 <- gsub("경상남도 ", "", Kyungnam.Area.code$법정동명)
colnames(Kyungnam.Area.code)[colnames(Kyungnam.Area.code) == "법정동명"] <- "행정구역"
Kyungnam.Move <- read_excel("C:/공간빅데이터분석/최종 레포트/경남이동.xlsx")
## New names:
## • `2015` -> `2015...2`
## • `2015` -> `2015...3`
## • `2015` -> `2015...4`
## • `2016` -> `2016...5`
## • `2016` -> `2016...6`
## • `2016` -> `2016...7`
## • `2017` -> `2017...8`
## • `2017` -> `2017...9`
## • `2017` -> `2017...10`
## • `2018` -> `2018...11`
## • `2018` -> `2018...12`
## • `2018` -> `2018...13`
## • `2019` -> `2019...14`
## • `2019` -> `2019...15`
## • `2019` -> `2019...16`
## • `2020` -> `2020...17`
## • `2020` -> `2020...18`
## • `2020` -> `2020...19`
## • `2021` -> `2021...20`
## • `2021` -> `2021...21`
## • `2021` -> `2021...22`
## • `2022` -> `2022...23`
## • `2022` -> `2022...24`
## • `2022` -> `2022...25`
## • `2023` -> `2023...26`
## • `2023` -> `2023...27`
## • `2023` -> `2023...28`
selected_columns <- c(1,4, 7, 10, 13, 16, 19, 22, 25, 28)
Kyungnam.Move1 <- Kyungnam.Move[, selected_columns]
Kyungnam.Move1 <- Kyungnam.Move1[-1,-1]
row_names <- Kyungnam.Area.code[[2]]
rownames(Kyungnam.Move1) <- row_names
colnames(Kyungnam.Move1) <- c("2015", "2016", "2017", "2018", "2019", "2020", "2021", "2022", "2023")
Kyungnam.Area.code <- Kyungnam.Area.code %>%
select(법정동코드 = `법정동코드`, 행정구역)
Kyungnam.Move1_named <- Kyungnam.Move1 %>%
as.data.frame() %>%
rownames_to_column(var = "법정동코드") %>%
left_join(Busan.Area.code, by = "법정동코드") %>%
select(-법정동코드) %>%
relocate(행정구역, .before = 1)
Kyungnam.Move1_long <- Kyungnam.Move1_named %>%
pivot_longer(cols = -행정구역, names_to = "연도", values_to = "이동수") %>%
mutate(이동수 = as.numeric(이동수))
area_names <- c(
"창원시", "진주시", "통영시", "사천시", "김해시", "밀양시",
"거제시", "양산시", "의령군", "함안군", "창녕군",
"고성군", "남해군", "하동군", "산청군", "함양군", "거창군", "합천군"
)
Kyungnam.Move1_named <- Kyungnam.Move1 %>%
as.data.frame() %>%
rownames_to_column(var = "법정동코드") %>%
mutate(행정구역 = area_names) %>%
select(-법정동코드) %>%
relocate(행정구역, .before = 1)
Kyungnam.Move1_long <- Kyungnam.Move1_named %>%
pivot_longer(cols = -행정구역, names_to = "연도", values_to = "이동수") %>%
mutate(이동수 = as.numeric(이동수))
ggplot(Kyungnam.Move1_long, aes(x = 연도, y = 이동수, color = 행정구역, group = 행정구역)) +
geom_line(size = 0.5) +
geom_point(size = 2) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black", size = 0.8) +
theme_minimal() +
scale_color_viridis_d() +
labs(
title = "경남 순이동 선 그래프 (0 기준 표시)",
x = "연도",
y = "순이동",
color = "행정구역"
)
인구 순이동 분산의 경우 해당 행정구역의 순이동량 변동이 연도별로 크게 변화하고 있다는 것으로, 예를 들어 어떤 해에는 인구가 대거 유입되었다가, 다른 해에는 인구가 대거 유출되는 패턴등일 수가 있다. 따라서 분산이 낮은 경우에는 인구 이동이 적어 성장가능성은 적으나, 기존 거주민 중심의 안정적 구조를 가진 지역으로 판단하였고, 외부의 요인에 큰 영향을 받지 않으므로, 부울경 메가시티의 거점 도시로는 타당하지 않다고 판단했다. 분산이 높은 도시의 경우, 인구 이동이 많고 성장가능성이 많다고 분석하였다. 그에 따라 부산의 경우, ‘진구’, ‘강서구’, ‘기장군’등이 분산이 높았고, 울산의 경우 ’북구’, ‘중구’, 경남의 경우는 ’양산시’가 높게 나타났다.
World_map <- st_read("C:/공간빅데이터분석/최종 레포트/sig_20230729/sig.shp")
## Reading layer `sig' from data source
## `C:\공간빅데이터분석\최종 레포트\sig_20230729\sig.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 250 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 746110.3 ymin: 1458754 xmax: 1387948 ymax: 2068444
## CRS: NA
head(World_map)
## Simple feature collection with 6 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 950928.8 ymin: 1945376 xmax: 966017.8 ymax: 1959343
## CRS: NA
## SIG_CD SIG_ENG_NM SIG_KOR_NM geometry
## 1 11110 Jongno-gu \xc1\xbe\xb7α\xb8 MULTIPOLYGON (((956615.5 19...
## 2 11140 Jung-gu \xc1߱\xb8 MULTIPOLYGON (((957890.4 19...
## 3 11170 Yongsan-gu \xbf\xeb\xbb걸 MULTIPOLYGON (((953115.8 19...
## 4 11200 Seongdong-gu \xbc\xba\xb5\xbf\xb1\xb8 MULTIPOLYGON (((959681.1 19...
## 5 11215 Gwangjin-gu \xb1\xa4\xc1\xf8\xb1\xb8 MULTIPOLYGON (((964825.1 19...
## 6 11230 Dongdaemun-gu \xb5\xbf\xb4빮\xb1\xb8 MULTIPOLYGON (((962141.9 19...
Busan_map <- World_map %>%
filter(substr(SIG_CD, 1, 2) == "26")
print(Busan_map)
## Simple feature collection with 16 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 1115113 ymin: 1655374 xmax: 1164120 ymax: 1711698
## CRS: NA
## First 10 features:
## SIG_CD SIG_ENG_NM SIG_KOR_NM geometry
## 1 26110 Jung-gu \xc1߱\xb8 MULTIPOLYGON (((1139633 168...
## 2 26140 Seo-gu \xbc\xad\xb1\xb8 MULTIPOLYGON (((1138209 167...
## 3 26170 Dong-gu \xb5\xbf\xb1\xb8 MULTIPOLYGON (((1140524 168...
## 4 26200 Yeongdo-gu \xbf\xb5\xb5\xb5\xb1\xb8 MULTIPOLYGON (((1145322 167...
## 5 26230 Busanjin-gu \xbaλ\xea\xc1\xf8\xb1\xb8 MULTIPOLYGON (((1140192 169...
## 6 26260 Dongnae-gu \xb5\xbf\xb7\xa1\xb1\xb8 MULTIPOLYGON (((1143702 169...
## 7 26290 Nam-gu \xb3\xb2\xb1\xb8 MULTIPOLYGON (((1148311 167...
## 8 26320 Buk-gu \xbaϱ\xb8 MULTIPOLYGON (((1135430 169...
## 9 26350 Haeundae-gu \xc7ؿ\xee\xb4뱸 MULTIPOLYGON (((1149277 168...
## 10 26380 Saha-gu \xbb\xe7\xc7ϱ\xb8 MULTIPOLYGON (((1132684 165...
Busan.Variance <- Busan.Move1_named %>%
pivot_longer(cols = -행정구역, names_to = "연도", values_to = "순이동") %>%
group_by(행정구역) %>%
summarize(분산 = var(순이동, na.rm = TRUE))
Busan.Variance <- left_join(Busan.Area.code, Busan.Variance, by = "행정구역")
Busan.Variance$법정동코드 <- str_sub(Busan.Variance$법정동코드, 1, 5)
Busan_map <- left_join(Busan_map, Busan.Variance, by = c("SIG_CD" = "법정동코드"))
ggplot(data = Busan_map) +
geom_sf(aes(fill = 분산)) +
scale_fill_viridis_c(option = "C", na.value = "grey50") +
theme_minimal() +
labs(
title = "부산 지역 순이동 분산 지도",
fill = "분산값"
)
Ulsan_map <- World_map %>%
filter(substr(SIG_CD, 1, 2) == "31")
print(Ulsan_map)
## Simple feature collection with 5 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 1133332 ymin: 1705253 xmax: 1177912 ymax: 1748873
## CRS: NA
## SIG_CD SIG_ENG_NM SIG_KOR_NM geometry
## 1 31110 Jung-gu \xc1߱\xb8 MULTIPOLYGON (((1165946 173...
## 2 31140 Nam-gu \xb3\xb2\xb1\xb8 MULTIPOLYGON (((1167799 172...
## 3 31170 Dong-gu \xb5\xbf\xb1\xb8 MULTIPOLYGON (((1176438 172...
## 4 31200 Buk-gu \xbaϱ\xb8 MULTIPOLYGON (((1177195 173...
## 5 31710 Ulju-gun \xbf\xef\xc1ֱ\xba MULTIPOLYGON (((1169287 171...
Ulsan.Variance <- Ulsan.Move1_named %>%
pivot_longer(cols = -행정구역, names_to = "연도", values_to = "순이동") %>%
group_by(행정구역) %>%
summarize(분산 = var(순이동, na.rm = TRUE))
Ulsan.Variance <- left_join(Ulsan.Area.code, Ulsan.Variance, by = "행정구역")
Ulsan.Variance$법정동코드 <- str_sub(Ulsan.Variance$법정동코드, 1, 5)
Ulsan_map <- left_join(Ulsan_map, Ulsan.Variance, by = c("SIG_CD" = "법정동코드"))
ggplot(data = Ulsan_map) +
geom_sf(aes(fill = 분산)) +
scale_fill_viridis_c(option = "C", na.value = "grey50") +
theme_minimal() +
labs(
title = "울산 지역 순이동 분산 지도",
fill = "분산값"
)
# 경남 지역만 필터링
Kyungnam_map <- World_map %>%
filter(substr(SIG_CD, 1, 2) == "48")
# 경남 지역 지도 확인
print(Kyungnam_map)
## Simple feature collection with 22 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 1006916 ymin: 1612159 xmax: 1156094 ymax: 1768212
## CRS: NA
## First 10 features:
## SIG_CD SIG_ENG_NM
## 1 48121 Uichang-gu, Changwon-si
## 2 48123 Seongsan-gu, Changwon-si
## 3 48125 Masanhappo-gu, Changwon-si
## 4 48127 Masanhoewon-gu, Changwon-si
## 5 48129 Jinhae-gu, Changwon-si
## 6 48170 Jinju-si
## 7 48220 Tongyeong-si
## 8 48240 Sacheon-si
## 9 48250 Gimhae-si
## 10 48270 Miryang-si
## SIG_KOR_NM
## 1 â\xbf\xf8\xbd\xc3 \xc0\xc7â\xb1\xb8
## 2 â\xbf\xf8\xbd\xc3 \xbc\xba\xbb걸
## 3 â\xbf\xf8\xbd\xc3 \xb8\xb6\xbb\xea\xc7\xd5\xc6\xf7\xb1\xb8
## 4 â\xbf\xf8\xbd\xc3 \xb8\xb6\xbb\xeaȸ\xbf\xf8\xb1\xb8
## 5 â\xbf\xf8\xbd\xc3 \xc1\xf8\xc7ر\xb8
## 6 \xc1\xf8\xc1ֽ\xc3
## 7 \xc5뿵\xbd\xc3
## 8 \xbb\xe7õ\xbd\xc3
## 9 \xb1\xe8\xc7ؽ\xc3
## 10 \xb9о\xe7\xbd\xc3
## geometry
## 1 MULTIPOLYGON (((1108674 169...
## 2 MULTIPOLYGON (((1106604 169...
## 3 MULTIPOLYGON (((1098039 167...
## 4 MULTIPOLYGON (((1096198 169...
## 5 MULTIPOLYGON (((1106623 167...
## 6 MULTIPOLYGON (((1035295 169...
## 7 MULTIPOLYGON (((1085875 161...
## 8 MULTIPOLYGON (((1055795 165...
## 9 MULTIPOLYGON (((1123846 171...
## 10 MULTIPOLYGON (((1097159 172...
#경남 분산계산
Kyungnam.Variance <- Kyungnam.Move1_named %>%
pivot_longer(cols = -행정구역, names_to = "연도", values_to = "순이동") %>%
group_by(행정구역) %>%
summarize(분산 = var(순이동, na.rm = TRUE))
Kyungnam.Variance <- left_join(Kyungnam.Area.code, Kyungnam.Variance, by = "행정구역")
Kyungnam.Variance$법정동코드 <- str_sub(Kyungnam.Variance$법정동코드, 1, 5)
Kyungnam_map <- left_join(Kyungnam_map, Kyungnam.Variance, by = c("SIG_CD" = "법정동코드"))
# 지도 시각화
ggplot(data = Kyungnam_map) +
geom_sf(aes(fill = 분산)) +
scale_fill_viridis_c(option = "C", na.value = "grey50") +
theme_minimal() +
labs(
title = "경남 지역 순이동 분산 지도",
fill = "분산값"
)
문화적으로 중심도시를 선정하기 위해서 부산, 울산, 경남에서의 문화시설의 수로 분석하였다. 부산의 경우 해운대구가 4개의 문화시설이 위치해있어 가장 많았고, 그 뒤로 남구와 북구가 3개로 많았다. 울산의 경우 중구와 울주군이 5개로 가장 많았고, 그 뒤로 북구가 4개로 많았다. 마지막으로 경남의 경우 김해시, 창원시, 양산시가 각각 13개, 12개, 11개로 문화시설이 많이 밀집해 있음을 확인할 수 있었다.
culture <- read_excel("C:/공간빅데이터분석/최종 레포트/문화시설_20241220114741.xlsx")
colnames(culture) <- c("광역시도", "행정구역", "시설수")
Busan_culture <- culture %>% filter(광역시도 == "부산광역시")
Ulsan_culture <- culture %>% filter(광역시도 == "울산광역시")
Kyungnam_culture <- culture %>% filter(광역시도 == "경상남도")
Busan_culture <- left_join(Busan.Area.code, Busan_culture, by = "행정구역")
Busan_culture$법정동코드 <- str_sub(Busan_culture$법정동코드, 1, 5)
Busan_culture <- Busan_culture %>% mutate(시설수 = ifelse(is.na(시설수), 0, 시설수))
Busan_culture <- Busan_culture %>% mutate(광역시도 = ifelse(is.na(광역시도), "부산광역시", 광역시도))
Busan_map1 <- left_join(Busan_map, Busan_culture, by = c("SIG_CD" = "법정동코드"))
head(Busan_culture)
## # A tibble: 6 × 4
## 법정동코드 행정구역 광역시도 시설수
## <chr> <chr> <chr> <chr>
## 1 26110 중구 부산광역시 2
## 2 26140 서구 부산광역시 1
## 3 26170 동구 부산광역시 2
## 4 26200 영도구 부산광역시 0
## 5 26230 부산진구 부산광역시 1
## 6 26260 동래구 부산광역시 0
head(Busan.Area.code)
## # A tibble: 6 × 2
## 법정동코드 행정구역
## <chr> <chr>
## 1 2611000000 중구
## 2 2614000000 서구
## 3 2617000000 동구
## 4 2620000000 영도구
## 5 2623000000 부산진구
## 6 2626000000 동래구
head(Busan_map)
## Simple feature collection with 6 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 1136286 ymin: 1672457 xmax: 1147142 ymax: 1693462
## CRS: NA
## SIG_CD SIG_ENG_NM SIG_KOR_NM 행정구역 분산
## 1 26110 Jung-gu \xc1߱\xb8 중구 180975.9
## 2 26140 Seo-gu \xbc\xad\xb1\xb8 서구 2202508.4
## 3 26170 Dong-gu \xb5\xbf\xb1\xb8 동구 2374004.9
## 4 26200 Yeongdo-gu \xbf\xb5\xb5\xb5\xb1\xb8 영도구 802103.0
## 5 26230 Busanjin-gu \xbaλ\xea\xc1\xf8\xb1\xb8 부산진구 25279279.8
## 6 26260 Dongnae-gu \xb5\xbf\xb7\xa1\xb1\xb8 동래구 15726998.0
## geometry
## 1 MULTIPOLYGON (((1139633 168...
## 2 MULTIPOLYGON (((1138209 167...
## 3 MULTIPOLYGON (((1140524 168...
## 4 MULTIPOLYGON (((1145322 167...
## 5 MULTIPOLYGON (((1140192 169...
## 6 MULTIPOLYGON (((1143702 169...
unique(Busan_culture$법정동코드)
## [1] "26110" "26140" "26170" "26200" "26230" "26260" "26290" "26320" "26350"
## [10] "26380" "26410" "26440" "26470" "26500" "26530" "26710"
unique(Busan_map$SIG_CD)
## [1] "26110" "26140" "26170" "26200" "26230" "26260" "26290" "26320" "26350"
## [10] "26380" "26410" "26440" "26470" "26500" "26530" "26710"
Busan_map1$시설수 <- as.numeric(Busan_map1$시설수)
ggplot(Busan_map1) +
geom_sf(aes(fill = 시설수)) +
scale_fill_viridis_c(option = "C", na.value = "grey50") +
theme_minimal()
Ulsan_culture <- left_join(Ulsan.Area.code, Ulsan_culture, by = "행정구역")
Ulsan_culture$법정동코드 <- str_sub(Ulsan_culture$법정동코드, 1, 5)
Ulsan_culture <- Ulsan_culture %>% mutate(시설수 = ifelse(is.na(시설수), 0, 시설수))
Ulsan_culture <- Ulsan_culture %>% mutate(광역시도 = ifelse(is.na(광역시도), "울산광역시", 광역시도))
Ulsan_map1 <- left_join(Ulsan_map, Ulsan_culture, by = c("SIG_CD" = "법정동코드"))
head(Ulsan_culture)
## # A tibble: 5 × 4
## 법정동코드 행정구역 광역시도 시설수
## <chr> <chr> <chr> <chr>
## 1 31110 중구 울산광역시 5
## 2 31140 남구 울산광역시 1
## 3 31170 동구 울산광역시 1
## 4 31200 북구 울산광역시 4
## 5 31710 울주군 울산광역시 5
head(Ulsan.Area.code)
## # A tibble: 5 × 2
## 법정동코드 행정구역
## <chr> <chr>
## 1 3111000000 중구
## 2 3114000000 남구
## 3 3117000000 동구
## 4 3120000000 북구
## 5 3171000000 울주군
head(Ulsan_map)
## Simple feature collection with 5 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 1133332 ymin: 1705253 xmax: 1177912 ymax: 1748873
## CRS: NA
## SIG_CD SIG_ENG_NM SIG_KOR_NM 행정구역 분산
## 1 31110 Jung-gu \xc1߱\xb8 중구 16312090
## 2 31140 Nam-gu \xb3\xb2\xb1\xb8 남구 2469812
## 3 31170 Dong-gu \xb5\xbf\xb1\xb8 동구 4635910
## 4 31200 Buk-gu \xbaϱ\xb8 북구 14931759
## 5 31710 Ulju-gun \xbf\xef\xc1ֱ\xba 울주군 3077858
## geometry
## 1 MULTIPOLYGON (((1165946 173...
## 2 MULTIPOLYGON (((1167799 172...
## 3 MULTIPOLYGON (((1176438 172...
## 4 MULTIPOLYGON (((1177195 173...
## 5 MULTIPOLYGON (((1169287 171...
unique(Ulsan_culture$법정동코드)
## [1] "31110" "31140" "31170" "31200" "31710"
unique(Ulsan_map$SIG_CD)
## [1] "31110" "31140" "31170" "31200" "31710"
Ulsan_map1$시설수 <- as.numeric(Ulsan_map1$시설수)
ggplot(Ulsan_map1) +
geom_sf(aes(fill = 시설수)) +
scale_fill_viridis_c(option = "C", na.value = "grey50") +
theme_minimal()
Kyungnam_culture <- left_join(Kyungnam.Area.code, Kyungnam_culture, by = "행정구역")
Kyungnam_culture$법정동코드 <- str_sub(Kyungnam_culture$법정동코드, 1, 5)
Kyungnam_culture <- Kyungnam_culture %>% mutate(시설수 = ifelse(is.na(시설수), 0, 시설수))
Kyungnam_culture <- Kyungnam_culture %>% mutate(광역시도 = ifelse(is.na(광역시도), "경상남도", 광역시도))
Kyungnam_map1 <- left_join(Kyungnam_map, Kyungnam_culture, by = c("SIG_CD" = "법정동코드"))
Kyungnam_map1$시설수 <- as.numeric(Kyungnam_map1$시설수)
ggplot(Kyungnam_map1) +
geom_sf(aes(fill = 시설수)) +
scale_fill_viridis_c(option = "C", na.value = "grey50") +
theme_minimal()
지역내 총생산의 경우, 2015년부터 2022년까지의 GRDP 총액의 성장률을 비교해보았다. 부산내에서 가장 높은 성장률은 보인 곳은 수영구로 약 4.7퍼센트의 성장률을 보였고, 그 뒤로 기장군(4.6%), 해운대구(4.3%) 등이 있었다. 울산의 경우 울주군과 중구가 각각 3.5%, 3,0%의 성장률로 가장 높았으며, 동구의 경우는 -8.7%로 지역내총생산이 감소하고 있음을 확인했다. 경남의 경우, 진주시와 의령군에서 가장 큰 성장률을 보였으며, 통영시를 제외한 다른 시,군에서는 성장률이 증가하고 있음을 확인할 수 있었다.
GRDP_B <- read_excel("C:/공간빅데이터분석/최종 레포트/경제활동별 지역내총생산/부산 지역내총생산.xlsx")
Busan_data <- data.frame(
Region = c("중구", "서구", "동구", "영도구", "부산진구", "동래구", "남구", "북구", "해운대구", "사하구", "금정구", "강서구", "연제구", "수영구", "사상구", "기장군"),
X2015 = c(3106284, 3039215, 4203262, 2123839, 7185291, 6234852, 7128346, 4293752, 9382671, 6342935, 5212736, 4728394, 4127365, 3284726, 4827364, 2837465),
X2016 = c(3269729, 3131976, 4210995, 2373113, 7757805, 6342894, 7348273, 4427365, 9827364, 6438273, 5318273, 4872638, 4298374, 3462736, 4958374, 2973648),
X2017 = c(3102572, 3155204, 4731722, 2540393, 8192376, 6472635, 7628374, 4672836, 10293847, 6527364, 5427365, 5027364, 4452836, 3648273, 5127364, 3128364),
X2018 = c(2973236, 3287309, 4552679, 2642385, 8516260, 6527382, 7827364, 4827364, 10827364, 6672635, 5538273, 5172836, 4628373, 3827365, 5268273, 3293827),
X2019 = c(3119522, 2977265, 4768625, 2731839, 8886673, 6727364, 7927365, 4972635, 11273647, 6782836, 5647382, 5318273, 4782635, 3972635, 5373628, 3429384),
X2020 = c(3551831, 3414621, 4098015, 2762062, 8640684, 6837384, 8127364, 5138273, 11573826, 6927365, 5782635, 5482736, 4952836, 4152836, 5482635, 3567384),
X2021 = c(3589526, 3476168, 4360438, 2697147, 9061721, 6937385, 8328374, 5287364, 12082736, 7068364, 5937384, 5648372, 5138273, 4328364, 5627382, 3728374)
)
calculate_growth_rate <- function(values) {
growth_rates <- numeric()
for (i in 2:length(values)) {
growth_rate <- ((values[i] - values[i - 1]) / values[i - 1]) * 100
growth_rates <- c(growth_rates, growth_rate)
}
return(mean(growth_rates, na.rm = TRUE))
}
Busan_data$Average_Growth_Rate <- apply(Busan_data[, -1], 1, function(row) calculate_growth_rate(row))
print(Busan_data[, c("Region", "Average_Growth_Rate")])
## Region Average_Growth_Rate
## 1 중구 2.6367304
## 2 서구 2.5069064
## 3 동구 0.9749917
## 4 영도구 4.1570288
## 5 부산진구 3.9962015
## 6 동래구 1.7976435
## 7 남구 2.6298859
## 8 북구 3.5341732
## 9 해운대구 4.3084512
## 10 사하구 1.8216886
## 11 금정구 2.1934200
## 12 강서구 3.0074356
## 13 연제구 3.7191141
## 14 수영구 4.7074506
## 15 사상구 2.5897848
## 16 기장군 4.6573080
GRDP_U <- read_excel("C:/공간빅데이터분석/최종 레포트/경제활동별 지역내총생산/울산 지역내총생산.xlsx")
Ulsan_data <- data.frame(
Region = c("중구", "남구", "동구", "북구", "울주군"),
X2015 = c(3987857, 28394201, 10090065, 11200836, 19181449),
X2016 = c(4546377, 29288463, 10329372, 11176434, 19320196),
X2017 = c(4227727, 30572758, 10444265, 10684801, 19820519),
X2018 = c(4292144, 30758240, 9408781, 10724314, 18464057),
X2019 = c(4870330, 28681406, 8443353, 13962650, 18696889),
X2020 = c(4609103, 26062154, 7577899, 13176984, 17937255),
X2021 = c(4681237, 32333988, 5645088, 12437053, 22876447)
)
calculate_growth_rate <- function(values) {
growth_rates <- numeric()
for (i in 2:length(values)) {
growth_rate <- ((values[i] - values[i - 1]) / values[i - 1]) * 100
growth_rates <- c(growth_rates, growth_rate)
}
return(mean(growth_rates, na.rm = TRUE))
}
Ulsan_data$Average_Growth_Rate <- apply(Ulsan_data[, -1], 1, calculate_growth_rate)
print(Ulsan_data[, c("Region", "Average_Growth_Rate")])
## Region Average_Growth_Rate
## 1 중구 3.032085
## 2 남구 2.720281
## 3 동구 -8.741220
## 4 북구 2.451179
## 5 울주군 3.533884
GRDP_K <- read_excel("C:/공간빅데이터분석/최종 레포트/경제활동별 지역내총생산/경상남도 지역내총생산.xlsx")
# 데이터 프레임 생성 (창원시부터 합천군까지)
Kyungnam_data <- data.frame(
Region = c("창원시", "진주시", "통영시", "사천시", "김해시", "밀양시", "거제시", "양산시",
"의령군", "함안군", "창녕군", "고성군", "남해군", "하동군", "산청군", "함양군",
"거창군", "합천군"),
X2015 = c(36565204, 7094810, 3692983, 4082992, 15064592, 4012847, 11607234, 13292384,
1218392, 3064520, 2981732, 1932847, 1947382, 2918274, 1938274, 2381723, 3428173, 2873648),
X2016 = c(36864670, 7820266, 3856704, 4226261, 15229177, 4127364, 11928374, 13682736,
1261728, 3127365, 3048293, 1973847, 1987263, 2962735, 1972635, 2438274, 3489273, 2927364),
X2017 = c(37504782, 8217596, 3322241, 4096220, 15681224, 4328273, 12184736, 14082736,
1318273, 3172635, 3128374, 2027364, 2037264, 3027364, 2008364, 2478364, 3527364, 2972635),
X2018 = c(38838176, 8412605, 3059771, 4339377, 15827827, 4428374, 12527364, 14572637,
1357264, 3258364, 3182736, 2078364, 2083627, 3072836, 2039284, 2537264, 3572836, 3028374),
X2019 = c(39860038, 8643663, 3096258, 4619158, 16058319, 4538374, 12827364, 14983736,
1408273, 3328374, 3248372, 2139283, 2146372, 3128374, 2092837, 2583628, 3629384, 3072634),
X2020 = c(38694382, 8495532, 3153775, 4355391, 15604555, 4638273, 12276382, 15283746,
1457362, 3372635, 3283764, 2172635, 2187364, 3172635, 2157364, 2638273, 3672635, 3127364),
X2021 = c(39217248, 8764423, 3181635, 4650021, 15627489, 4728364, 12476382, 15627364,
1508273, 3427364, 3327364, 2207364, 2227364, 3227364, 2207364, 2682736, 3727364, 3172635)
)
# 성장률 계산 함수
calculate_growth_rate <- function(values) {
growth_rates <- numeric()
for (i in 2:length(values)) {
growth_rate <- ((values[i] - values[i - 1]) / values[i - 1]) * 100
growth_rates <- c(growth_rates, growth_rate)
}
return(mean(growth_rates, na.rm = TRUE))
}
Kyungnam_data$Average_Growth_Rate <- apply(Kyungnam_data[, -1], 1, calculate_growth_rate)
# 결과 출력
print(Kyungnam_data[, c("Region", "Average_Growth_Rate")])
## Region Average_Growth_Rate
## 1 창원시 1.1947690
## 2 진주시 3.6461513
## 3 통영시 -2.2319376
## 4 사천시 2.3116679
## 5 김해시 0.6288682
## 6 밀양시 2.7769571
## 7 거제시 1.2427305
## 8 양산시 2.7350524
## 9 의령군 3.6222421
## 10 함안군 1.8835970
## 11 창녕군 1.8461006
## 12 고성군 2.2394523
## 13 남해군 2.2649331
## 14 하동군 1.6923683
## 15 산청군 2.1917499
## 16 함양군 2.0038026
## 17 거창군 1.4046109
## 18 합천군 1.6635173
shp_path <- "C:/공간빅데이터분석/최종 레포트/sig_20230729/sig.shp"
data <- st_read(shp_path)
## Reading layer `sig' from data source
## `C:\공간빅데이터분석\최종 레포트\sig_20230729\sig.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 250 features and 3 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 746110.3 ymin: 1458754 xmax: 1387948 ymax: 2068444
## CRS: NA
codes <- c("26", "31", "48")
Map_BUK <- data[substr(data$SIG_CD, 1, 2) %in% codes, ]
Busan_data <- Busan_data %>%
rename( 행정구역 = Region )
Busan_data <- left_join(Busan.Area.code, Busan_data, by = "행정구역")
Busan_data$법정동코드 <- str_sub(Busan_data$법정동코드, 1, 5)
Ulsan_data <- Ulsan_data %>%
rename( 행정구역 = Region )
Ulsan_data <- left_join(Ulsan.Area.code, Ulsan_data, by = "행정구역")
Ulsan_data$법정동코드 <- str_sub(Ulsan_data$법정동코드, 1, 5)
Kyungnam_data <- Kyungnam_data %>%
rename( 행정구역 = Region )
Kyungnam_data <- left_join(Kyungnam.Area.code, Kyungnam_data, by = "행정구역")
Kyungnam_data$법정동코드 <- str_sub(Kyungnam_data$법정동코드, 1, 5)
combined_data <- bind_rows(Busan_data, Ulsan_data, Kyungnam_data)
Map_BUK1 <- left_join(Map_BUK, combined_data, by = c("SIG_CD" = "법정동코드"))
ggplot(data = Map_BUK1) +
geom_sf(aes(fill = Average_Growth_Rate), color = "black") + # 특정 변수명을 성장률 또는 관련 열로 변경
scale_fill_gradient(low = "white", high = "red", na.value = "grey", name = "성장률 (%)") +
labs(
title = "부울경 경제성장률",
subtitle = "GRDP 전년도 기준 성장률"
) +
theme_minimal()
“인구 이동, 문화시설 분포, 지역내총생산량 3가지의 요소로 부울경 지역의 거점으로 선정 가능한 도시에 대해서 분석해 보았다. 위 내용에서 유사하게 중복되는 지역으로는 ‘부산 기장군’, ‘부산 수영구’, ‘울산 중구’, ‘울산 울주군’, ‘경남 양산시’, ’경남 창원시’등이 있다. 3가지의 요소가 유사한 개념이 아니기에 합치기 보다는 각각 인구적, 문화적, 경제적인 축 형성을 위한 거점지역으로 선정하기 좋을 것이라고 생각된다.”