1. 지오 데이터 프레임 CP 6
1) 전처리한 주소 데이터 + 지오 코딩 데이터 (경도, 위도 = 좌표) 합치기 // 결측치 제거까지
# 지오 데이터프레임
# 전처리 완료한 데이터 불러오기
apt_price <- read.csv("./data/preprocess.csv")
head(apt_price)
# 지오 코딩 데이터 불러오기
juso_geocoding <- read.csv("./data/05_juso_geocoding.csv")
head(juso_geocoding)
# 전처리 완료 데이터 (주소) & 지오 코딩 데이터(경도, 위도 = 좌표) 합치기
library(tidyverse)
apt_price <- left_join(apt_price, juso_geocoding, by = c("juso" = "apt_juso"))
# 결측치 확인
table(is.na(apt_price))
# 결측치 제거
apt_price<- na.omit(apt_price)
2) 지오데이터프레임 생성해서 시각화 후 저장까지
# 지오데이터프레임 만들기
# 라이브러리 준비
# install.packages("sp")
library(sp)
# install.packages("sf")
library(sf)
# 좌표값 설정
coordinates(apt_price) <- ~coord_x+coord_y
# 좌표계 정의
proj4string(apt_price) <- "+proj=longlat +datum=WGS84 +no_defs"
# sp형을 sf형으로 변환
apt_price <- st_as_sf(apt_price)
head(apt_price)
# 시각화
plot(apt_price$geometry, axes =T , pch = 1)
# install.packages("leaflet")
library(leaflet)
leaflet() %>%
addTiles() %>%
addCircleMarkers(data = apt_price[1:10,], label = ~apt_nm)
# 지오 데이터프레임 저장
write.csv(apt_price, file = "./data/apt_price1.csv", row.names = F)
2. 분석 주제를 지도로 시각화하기 CP 7
분석 주제 1 : 상반기와 하반기를 비교해서 상반기보다 하반기에 많이 올라간 아파트는 무엇인지 2021
1) 데이터 합치기, 시각화
# 분석 주제를 지도 시각화하기
# 1. 어느 지역이 제일 비쌀까?
# 어느 지역이 비싼지 표현하기 위해 커널 밀도 함수를 사용할 예정
# 지수 표현 비활성화
options(scipen = 99)
head(apt_price)
# 데이터 불러오기
load("./data/apt_price.rdata")
head(apt_price)
# 서울시 1km 그리드 데이터 불러오기
grid <- st_read("./data/sigun_grid/seoul.shp")
head(grid)
# 데이터 합치기
apt_price <- st_join(apt_price, grid, join = st_intersects)
head(apt_price)
# 그리드 ID별 평균 가격 만들기
apt_high <- aggregate(apt_price$py, by= list(apt_price$ID), mean )
colnames(apt_high) <- c("ID","avg_price")
head(apt_high)
# 그리드 데이터와 평균 가격 합치기
apt_high <- merge(grid, apt_high, by = "ID")
head(apt_high)
# 시각화
library(ggplot2)
library(tidyverse)
apt_high %>% ggplot(aes(fill=avg_price))+
geom_sf() + scale_fill_gradient(low="white", high="red")
2) 지도 경계 그리기, 지도 경계선 시각화
# 지도 경계 그리기
library(sp)
# sf형을 sp형으로 변환
apt_high_sp <- as(st_geometry(apt_high), "Spatial")
head(apt_high_sp)
# 경도
x <- coordinates(apt_high_sp)[,1]
# 위도
y <- coordinates(apt_high_sp)[,2]
# 외곽 끝 지점
bbox(apt_high_sp)
#
l1 <- bbox(apt_high_sp)[1,1] # 서쪽 끝
l2 <- bbox(apt_high_sp)[1,2] # 동쪽 끝
l3 <- bbox(apt_high_sp)[2,1] # 남쪽 끝
l4 <- bbox(apt_high_sp)[2,2] # 북쪽 끝
# spatial statistics 공간 통계 분석 패키지
# install.packages("spatstat")
library(spatstat)
# 지도 경계선 만들기
win <- owin(xrange = c(l1,l2),
yrange = c(l3,l4))
# 지도 경계선 시각화
plot(win)
3) 밀도 그래프 시각화
#
# 밀도 그래프 시각화
# 경도와 위도를 포인트로 전환
# point pattern datasets
p <- ppp(x,y, window = win)
# 포인트를 커널밀도로 변환
d <- density.ppp(p,
weights = apt_high$avg_price,
sigma = bw.diggle(p),
kernal = "gaussian")
plot(d)
4) 레스터 이미지
# 레스터 이미지
library(raster)
raster_high <- raster(d)
plot(raster_high)
# 커널밀도하무에서 의미 있는 데이터는 상위 20~30% 범위 안에 있음 = 노이즈 제거하는 법
d[d<quantile(d)[4]] <- NA
raster_high <- raster(d)
plot(raster_high)
# +(quantile(d)[4]*0.1)] <- NA
5) 서울시 외각선 그리기
# 서울시 경계선 데이터 불러오기
bnd <- st_read("./data/sigun_bnd/seoul.shp")
# 서울시 경계선으로 레스터 이미지 자르기
raster_high <- crop(raster_high,extent(bnd))
plot(raster_high)
# 좌표계 정의
crs(raster_high) <- sp::CRS("+proj=longlat +datum=WGS84 +no_defs")
# 레스터 이미지를 지도로 그리기
plot(raster_high)https://blog.kakaocdn.net/dn/c7GfHO/btr2DDQg4k8/hLkwJ3PfA4KASjj9gE8J71/img.png
# 서울시 외곽선을 빨간선으로 그리기
plot(bnd,
col = NA,
border = "red",
add = T)
6) 지도에 레스터 이미지 시각화하기 : 저장까지
# 지도에 레스터 이미지 시각화하기
# r geospatial data abstraction library = 지리 공간 정보를 가지고 있는 레스터 데이터 처리하는 패키지
install.packages("rgdal")
library(leaflet)
leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
#서울시 외곽선(경계선)
addPolygons(data = bnd,
fill = NA,
weight = 2,
color = "red") %>%
# 레스터 이미지
addRasterImage(raster_high,
colors = colorNumeric(palette = c("blue","green","yellow","red"), domain=values(raster_high),
na.color = "transparent"), opacity = 0.4)
# 저장하기
save(raster_high, file = "./data/raster_high.rdata")
* join은 merge에서 by에 공통된 변수 입력
7) 뜨고 있는 지역 확인하기
# 2. 요즘 뜨는 지역은 어디일까?
load("./data/apt_price.rdata")
head(apt_price)
grid <- st_read("./data/sigun_grid/seoul.shp")
head(grid)
# 그리드 데이터 합치기
apt_price <- st_join(apt_price, grid, join = st_intersects)
head(apt_price)
# 전과 후 데이터 만들기
# 기준 날짜 : 2021년 7월 1일
# 기준 날짜 이전 데이터
apt_before <- subset(apt_price, ymd < "2021-07-01")
# 기준 날짜 이후 데이터
apt_after <- subset(apt_price, ymd >= "2021-07-01")
# 전과 후 가격의 변화율 계산
# 조인 (before,after)
apt_diff <- merge(apt_before, apt_after, by = "ID" )
head(apt_diff)
# (후 가격 - 전 가격)/ 전 가격 * 100
apt_diff$diff <- round((apt_diff$after - apt_diff$before)/apt_diff$before * 100)
head(apt_diff$diff)
기준 날짜 이전, 이후 데이터 확인 (colname 변경까지)
전과 후 가격 변화율 계산 1
# 가격이 오른 지역
library(sf)
apt_diff <- apt_diff[apt_diff$diff>0,]
# 그리드 데이터와 상승 지역 데이터 합치기
apt_hot <- merge(grid,apt_diff,by = "ID")
head(apt_hot)
# 시각화
library(ggplot2)
apt_hot %>%
ggplot(aes(fill=diff))+
geom_sf() + scale_fill_gradient(low="white", high="red")
그리드 데이터 + 상승 지역 데이터 합치기
시각화
# 지도 경계선 그리기 (이전 코드 변수명만 바꿔서 복사)
library(sp)
# sf형을 sp형으로 변환
apt_hot_sp <- as(st_geometry(apt_hot),"Spatial")
# 지도 경계 그리기
library(sp)
# 경도
x <- coordinates(apt_hot_sp)[,1]
# 위도
y <- coordinates(apt_hot_sp)[,2]
# 외곽 끝 지점
bbox(apt_hot_sp)
#
l1 <- bbox(apt_hot_sp)[1,1] # 서쪽 끝
l2 <- bbox(apt_hot_sp)[1,2] # 동쪽 끝
l3 <- bbox(apt_hot_sp)[2,1] # 남쪽 끝
l4 <- bbox(apt_hot_sp)[2,2] # 북쪽 끝
# spatial statistics 공간 통계 분석 패키지
# install.packages("spatstat")
library(spatstat)
# 지도 경계선 만들기
win <- owin(xrange = c(l1,l2),
yrange = c(l3,l4))
# 지도 경계선 시각화
plot(win)
#
# 이후 코드 복사
#
# 밀도 그래프 시각화
# 경도와 위도를 포인트로 전환
# point pattern datasets
p <- ppp(x,y, window = win)
# 포인트를 커널밀도로 변환
d <- density.ppp(p,
weights = apt_hot$avg_price,
sigma = bw.diggle(p),
kernal = "gaussian")
plot(d)
# 레스터 이미지
library(raster)
raster_hot <- raster(d)
plot(raster_hot)
# 커널밀도하무에서 의미 있는 데이터는 상위 20~30% 범위 안에 있음 = 노이즈 제거하는 법
d[d<quantile(d)[4]] <- NA
raster_hot <- raster(d)
plot(raster_hot)
# +(quantile(d)[4]*0.1)] <- NA
# 서울시 경계선 데이터 불러오기
bnd <- st_read("./data/sigun_bnd/seoul.shp")
# 서울시 경계선으로 레스터 이미지 자르기
raster_hot <- crop(raster_hot,extent(bnd))
plot(raster_hot)
# 좌표계 정의
crs(raster_hot) <- sp::CRS("+proj=longlat +datum=WGS84 +no_defs")
# 레스터 이미지를 지도로 그리기
plot(raster_hot)
# 서울시 외곽선을 빨간선으로 그리기
plot(bnd,
col = NA,
border = "red",
add = T)
# 지도에 레스터 이미지 시각화하기
# r geospatial data abstraction library = 지리 공간 정보를 가지고 있는 레스터 데이터 처리하는 패키지
# install.packages("rgdal")
library(leaflet)
leaflet() %>%
addProviderTiles(providers$CartoDB.Positron) %>%
#서울시 외곽선(경계선)
addPolygons(data = bnd,
fill = NA,
weight = 2,
color = "red") %>%
# 레스터 이미지
addRasterImage(raster_hot,
colors = colorNumeric(palette = c("blue","green","yellow","red"), domain=values(raster_hot),
na.color = "transparent"), opacity = 0.4)
# 저장하기
save(raster_hot, file = "./data/raster_hot.rdata")
변수 high -> hot으로 변경 후 복사
* 핵심
- ppp 문법 이해하기
- bbox 사용법 이해
- 좌표계 정의 이해
- 조인 방법 (merge) 이해하기 // 그리드 데이터 합치기
- addPolygons (외곽선 그리기)
- addRasterImage (레스터 이미지)
728x90
반응형
LIST
'배운 책들 정리 > 공공데이터로 배우는 R 데이터 분석 with 샤이니' 카테고리의 다른 글
공공데이터 with 샤이니 12 - 샤이니 app 활용 사례 (지진 발생 분석) (1) | 2023.03.15 |
---|---|
공공데이터 with 샤이니 9,10 - 샤이니 입문하기, 데이터 분석 app 개발하기 (0) | 2023.03.14 |
공공데이터 with 샤이니 7,8 - 분석 주제를 지도로 시각화하기, 통계 분석과 시각화 (0) | 2023.03.09 |
공공데이터 with 샤이니 4~5 - 데이터 전처리, 지오 코딩 (0) | 2023.03.07 |
공공데이터 with 샤이니 1~3 - 데이터 분석가, API 크롤링 (0) | 2023.03.06 |