R을 이용해 공동주택 가격에 대한 통계분석을 시도해보았습니다.
이번 게시물에서는
1. 공동주택에 대한 설명
2. 사용한 데이터에 대한 소개
3. 데이터 전처리
4. EDA
5. 가격의 통계분석
6. 교차분석
7. 추가 상관분석 & 회귀분석
8. 결론 및 한계점
에 대해 다뤄보겠습니다.
>> 이전 게시물
[R 데이터분석] 공동주택 가격현황분석 - (4) 교차분석
>> 사용 데이터 파일은 다음 링크를 통해 다운 받으실 수 있습니다.
https://drive.google.com/file/d/1DzOminjLAGnGlEPIj7RkbtYG_U3VMO3y/view?usp=sharing
############################
### 데이터 추가 (인구수, 부동산)
############################
# 인구수 데이터 불러오기
install.packages("readxl")
library(readxl)
setwd("C:/Rwork/Gong")
pp <- read_excel("people.xlsx", col_names = FALSE)
colnames(pp) <- c("시도명", "연령별", "인구수(내국인(명))",
"인구수(남자(명))", "인구수(여자(명))", "인구수(성비)")
# => 칼럼 이름 없이 엑셀에 입력 되어있는 인구수 데이터 불러오기, 칼럼 이름 추가하기
# 시도명별로 보증금 평균 값 구하기(data frame형태로)
sido_mean <- aggregate(gd1$보증금~gd1$시도명, gd1, mean)
str(sido_mean) # 'data.frame'
colnames(sido_mean) <- c("시도명","보증금")
# => 인구수 데이터와 결합할 ‘시도별 가격 평균’ 데이터 생성
# 인구수 데이터와 시도명별 보증금 평균값 데이터 결합하기
vv <- inner_join(sido_mean, pp, by = c("시도명"="시도명"))
# => vv : 시도별 인구수 데이터 + 시도별 가격 평균
str(vv)
vv <- vv[,-3]
str(vv)
# 'data.frame': 17 obs. of 5 variables:
#$ 시도명 : chr "강원도" "경기도" "경상남도" "경상북도" ...
#$ 보증금 : num 11911 25053 17470 12845 16814 ...
#$ 인구수(내국인(명)): chr "1502387" "12199257" "3247448" "2621463" ...
#$ 인구수(남자(명)) : chr "759122" "6122936" "1636954" "1316296" ...
#$ 인구수(여자(명)) : chr "743265" "6076321" "1610494" "1305167" ...
# character형인 인구수 데이터를 숫자형으로 변환
vv$`인구수(내국인(명))` <- as.numeric(vv$`인구수(내국인(명))`)
vv$`인구수(남자(명))` <- as.numeric(vv$`인구수(남자(명))`)
vv$`인구수(여자(명))` <- as.numeric(vv$`인구수(여자(명))`)
# 지역별 부동산 수 데이터 결합
budong <- read_excel("budong.xlsx", col_names = TRUE)
# => 엑셀에 입력된 부동산 데이터 불러오기
View(budong)
budong_num <- aggregate(budong$소상공인수~budong$시도명, budong, sum)
str(budong_num) # 'data.frame'
colnames(budong_num) <- c("시도명","소상공인수")
# => 시도별 부동산 소상공인수의 합을 ‘budong_num’에 저장, 새로 변경된 칼럼명을 다시 수정
ww <- inner_join(vv, budong_num, by = c("시도명"="시도명"))
# => ‘시도명’을 기준으로 이전에 만든 ‘vv’와 ‘budong_num’ 결합
str(ww)
# 'data.frame': 17 obs. of 7 variables:
# $ 시도명 : chr "강원도" "경기도" "경상남도" "경상북도" ...
# $ 보증금 : num 11911 25053 17470 12845 16814 ...
# $ 인구수(내국인(명)): num 1502387 12199257 3247448 2621463 1477856 ...
# $ 인구수(남자(명)) : num 759122 6122936 1636954 1316296 734092 ...
# $ 인구수(여자(명)) : num 743265 6076321 1610494 1305167 743764 ...
# $ 인구수(성비) : chr "102.1" "100.8" "101.6" "100.9" ...
# $ 소상공인수 : num 3585 35136 7991 4861 3845 ...
View(ww)
###################
### 추가 상관분석
###################
# 시도별 가격평균과 인구수, 부동산 수 상관관계 분석
# 1. 상관계수
ww_cor <- ww[ , c("보증금","인구수(내국인(명))",
"인구수(남자(명))","인구수(여자(명))","소상공인수")]
cor(ww_cor)
# 2. 상관계수 시각화
install.packages("corrplot")
library(corrplot)
aq.cor <- cor(ww_cor)
corrplot(aq.cor, method="number")
install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
chart.Correlation(ww_cor)
- 지역별 평균 가격과 인구수는 상관계수 0.69로 꽤 높은 상관관계를 보인다.
- 가격과 부동산업체 수는 상관계수 0.79로, 아주 강한 상관관계를 보인다.
- 상관계수 1.00을 보이는 값들은 같은 인구 수 데이터들이라 의미가 없다고 판단.
- 부동산업체 수도 인구 수에 아주 높은 양의 상관관계를 보인다.
- 정리 : 인구 수가 많을수록 공동주택 가격이 높은 편이며, 부동산 업체 수도 많다
###################
### 회귀분석
###################
# 시도별로 가격, 평당가, 인구수, 부동산수 합치기
# 시도명별로 보증금 평균 값 구하기(data frame형태로)
sido_mean <- aggregate(gd1$보증금~gd1$시도명, gd1, mean)
colnames(sido_mean) <- c("시도명","평균가격")
# 시도명별로 평당가 평균 값 구하기(data frame형태로)
gd1$평당가 <- (gd1$보증금/gd1$평형)
sido_mean평 <- aggregate(gd1$평당가~gd1$시도명, gd1, mean)
colnames(sido_mean평) <- c("시도명","평균평당가")
# 인구수 데이터
pp <- read_excel("people.xlsx", col_names = FALSE)
colnames(pp) <- c("시도명", "연령별", "인구수(내국인(명))",
"인구수(남자(명))", "인구수(여자(명))", "인구수(성비)")
# 지역별 부동산 수 데이터
budong <- read_excel("budong.xlsx", col_names = TRUE)
budong_num <- aggregate(budong$소상공인수~budong$시도명, budong, sum)
colnames(budong_num) <- c("시도명","소상공인수")
# => 시도별 보증금 평균값, 평당가 평균값, 인구수, 부당산업체수(소상공인수) 데이터 만들기
# 시도별 가격, 평당가, 인구수, 부동산수 데이터 결합하기
ff <- inner_join(sido_mean, sido_mean평, by = c("시도명"="시도명"))
ff <- inner_join(ff, pp, by = c("시도명"="시도명"))
ff <- inner_join(ff, budong_num, by = c("시도명"="시도명"))
# => 시도별로 만든 4개의 변수 필드 결합하기
# character형인 인구수 데이터를 숫자형으로 변환
ff$`인구수(내국인(명))` <- as.numeric(ff$`인구수(내국인(명))`)
ff <- ff[,c(1,2,3,5,9)]
str(ff)
# 시도별 가격평균과 평균평당가, 인구수, 부동산수 상관관계 분석
# 상관계수
ff_cor <- ff[ , -1]
cor(ff_cor)
install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
chart.Correlation(ff_cor)
# 시도별 평균 가격과 평균 평당가의 상관계수는 약 0.99로, 아주 강한 양의 상관관계를 가진다.
# => (상관계수 거의 1, 압도적)
# 인구수와 부동산업체수도 각각 0.69, 0.79의 상관계수를 가지며, 강한 양의 상관관계를 가진다.
# 회귀모델
pre_lm <-lm(formula = 평균가격 ~., data = ff_cor )
pre_lm
# 회귀모델 분석
summary(pre_lm)
결론 및 한계점
'R 과 데이터분석 > [활용] 공동주택 가격 분석' 카테고리의 다른 글
[R 데이터분석] 공동주택 가격현황분석 - (4) 교차분석 (0) | 2019.11.28 |
---|---|
[R 데이터분석] 공동주택 가격현황분석 - (3) EDA 및 통계분석 (0) | 2019.11.28 |
[R 데이터분석] 공동주택 가격현황분석 - (2) 데이터 전처리 (0) | 2019.11.28 |
[R 데이터분석] 공동주택 가격현황분석 - (1) 개요 (0) | 2019.11.28 |
댓글