[R 데이터분석] 공동주택 가격현황분석 - (5) 상관, 회귀분석
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)
결론 및 한계점