R 과 데이터분석/[활용] 공동주택 가격 분석

[R 데이터분석] 공동주택 가격현황분석 - (5) 상관, 회귀분석

JoyfulS 2019. 11. 28. 17:03

 

 

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)

 

 

 


결론 및 한계점