- 지하철역 주변 아파트 시세 분석
- '지하철역 주변의 아파트 시세를 알아보고,
지하철역에서 아파트까지의 거리에 따라 가격 분포가 어떻게 다른지를 비교'
- 결과 시각화 : 구글 지도를 활용하여 서울시 지도에 지하철역과 주변 아파트 실거래가 표시
1. 공공 데이터 다운로드
1-1. 지하철역 정보 다운로드 및 전처리
지하철역 주소 정보 : 서울 열린 데이터 광장 URL : http://data.seoul.go.kr
URL2 : http://data.seoul.go.kr/dataList/datasetView.do?infId=OA-12035&srvType=S&serviceKind=1
1-2. 아파트 실거래가 다운로드 및 전처리
국토교통부 실거래가 공개 시스템 URL : http://rtdown.molit.go.kr
1-3. 구글 지도 정보
library(ggmap)
2. ==========지하철역 데이터 가공하기============
#1. 지하철역 주소 파일 읽어들이기
#1-1. 원시데이터 가져오기
station_data <- read.csv("./data/역별_주소_및_전화번호.csv")
str(station_data)
#2. 지하철역 좌표 정보 구하기
#만약 구주소가 Factor형일 경우, as.character() 함수로 문자형 변환 할 것.
station_code <- as.character(station_data$"구주소")
library(ggmap)
googleAPIKey <- "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #본인 코드 입력할 것.
register_google(key = googleAPIKey) #google api key 등록
station_code <- geocode(station_code) #geocode()함수로 station_code 값을 위도와 경도로 변환
head(station_code)
station_code <- as.character(station_data$"구주소") %>%
enc2utf8() %>% geocode() # utf8로 인코딩해서 geocode 불러온다.
#기존 station_data와 위도, 경도 가진 station_code를 합친후,
#station_code_final에 할당
station_code_final <- cbind(station_data, station_code)
head(station_code_final) #station_code_final의 앞부분 확인
역명 구주소 lon
1 시청 서울 중구 서소문동 27 126.9753
2 을지로입구 서울 중구 을지로1가 89-1 126.9826
3 을지로3가 서울 중구 을지로3가 70-1 126.9917
4 을지로4가 서울 중구 을지로4가 261-1 126.9973
5 동대문역사문화공원 서울 중구 을지로7가 1 127.0110
6 신당 서울 중구 신당5동 106-1 127.0196
lat
1 37.56389
2 37.56598
3 37.56613
4 37.56639
5 37.56728
6 37.56565
3. ==========아파트 실거래가 데이터 가공하기============
#원시데이터 가져오기
apart_data <- read.csv("./data/아파트_실거래가.csv")
head(apart_data)
#전용면적 데이터 반올림하여 정수로 표현
apart_data$전용면적 <- round(apart_data$전용면적)
head(apart_data)
#가장 거래 빈도가 높은 전용면적 구하기 #count() 지정한 변수의 그룹별 개수 반환
count(apart_data, 전용면적) %>%
arrange(desc(n))
#전용면적 85의 개수가 가장 많다. (n=434)
#전용면적 85와 같은 데이터 추출
apart_data_85 <- subset(apart_data, 전용면적 =="85") #subset() 지정한 조건에 맞는 데이터만 추출해주는 함수. 기본함수. dplyr패키지의 filter()와 유사
head(apart_data_85)
#===========================================================
#거래금액 chr 문자열로 되어 있고, ","가 들어있음
#쉼표를 공백("")으로 대체하여 제거
apart_data_85$거래금액 <- gsub(",", "", apart_data_85$거래금액) #gsub() 값 변환하는 함수
head(apart_data_85)
#거래금액을 정수형으로 변환하여 단지명별 평균을 구한후
#apart_data_85_cost 변수에 할당
apart_data_85_cost <- aggregate(as.integer(거래금액) ~ 단지명,
apart_data_85, mean) #aggregate() 그룹화하는 함수
#데이터 불러오고, 단지명 기준으로 그룹화하여, 거래금액을 실수로변환하고, 금액의 평균값을 구함
head(apart_data_85_cost)
#"as.integer(거래금액")을 "거래금액"으로 변경하여 저장
apart_data_85_cost <- rename(apart_data_85_cost,
"거래금액" = "as.integer(거래금액)")
head(apart_data_85_cost)
#단지명이 중복된 행을 제거하고 뽑아서, apart_data_85에 할당
apart_data_85 <- apart_data_85[!duplicated(apart_data_85$단지명),] #duplicated() 중복제거 함수
head(apart_data_85)
#"단지명" 기준으로 apart_data_85와 apart_data_85_cost 합치기
apart_data_85 <- left_join(apart_data_85, apart_data_85_cost, by="단지명")
head(apart_data_85)
#"단지명", "시군구", "번지", "전용면적", "거래금액.y" 만 추출하고 저장
apart_data_85 <- apart_data_85 %>% select("단지명", "시군구", "번지",
"전용면적", "거래금액.y")
head(apart_data_85)
#"거래금액.y"를 "거래금액"으로 변경한 후 저장
apart_data_85 <- rename(apart_data_85, "거래금액" = "거래금액.y")
head(apart_data_85)
#===========================================================
#paste()함수로 "시군구", "번지"열을 합친후 apart_address에 저장
#paste()는 합칠때 공백이 자동으로 들어가고, paste0()은 공백없이 합쳐진다.
apart_address <- paste(apart_data_85$"시군구", apart_data_85$"번지") %>%
data.frame()
#values(벡터형)으로 apart_address가 저장되므로, data.frame()으로 데이터프레임으로 저장한다.
head(apart_address)
# "."컬럼명을 "주소"로 변경하여 저장
apart_address <- rename(apart_address, "주소" =".")
head(apart_address)
#좌표 정보 추가후, 최종 데이터 만들기
#아파트 주소를 위,경도로 변환하여 apart_address_code에 저장
apart_address_code <- as.character(apart_address$"주소") %>%
enc2utf8() %>% geocode()
head(apart_address_code)
#데이터 세트를 합친후 일부 열만 apart_code_final에 저장
#apart_address, apart_data, apart_address_code
apart_code_final <- cbind(apart_data_85, apart_address, apart_address_code) %>%
select("단지명", "전용면적", "거래금액", "주소", lon, lat)
head(apart_code_final)
4. 구글지도에 아파트 가격 표시하기
#홍대역 지도 정보 가져와 mapo_map에 저장
mapo_map <- get_googlemap("mapogu", maptype = "roadmap", zoom=12)
library(ggmap)
ggmap(mapo_map) #구글 지도 호출
library(ggplot2)
#지하철역 위치 및 아파트 가격 정보 표시하기
#산점도를 이용한 지하철역 위치 표시 및 역명 표시
ggmap(mapo_map) +
geom_point(data=station_code_final, aes(x=lon, y=lat), colour="red",size=3) +
geom_text(data=station_code_final, aes(label=역명, vjust=-1)) #vjust는 기본값. 변경x
#홍대입구역 지도 정보를 가져와 hongdae_map 변수에 저장
hongdae_map <- get_googlemap("hongdae station",maptype = "roadmap", zoom=15)
#홍대입구역 지도에 지하철 정보 및 아파트 정보 일괄 표시
ggmap(hongdae_map) +
geom_point(data = station_code_final, aes(x=lon,y=lat), colour ="red", size=3)+
geom_text(data=station_code_final, aes(label=역명,vjust=-1))+
geom_point(data=apart_code_final, aes(x=lon,y=lat))+
geom_text(data=apart_code_final, aes(label=단지명,vjust=-1))+
geom_text(data=apart_code_final, aes(label=거래금액, vjust=1), colour="red")
'인공지능 개발자 양성 과정' 카테고리의 다른 글
[0420] MySQL과 모바일 웹으로 만나는 '데이터베이스의 정석' (1) (0) | 2022.04.21 |
---|---|
[0419] 데이터 분석 실습 - 한국 프로야구 선수별 기록분석 (0) | 2022.04.19 |
[0419] 데이터 분석 실습 - 서대문구 치킨집 많은 동은? (0) | 2022.04.19 |
[0418] 데이터 분석 실습 - 한국 복지 패널 (0) | 2022.04.19 |
[0412] R 프로그래밍 익히기 (0) | 2022.04.13 |