자료의 탐색

2024. 9. 1. 17:31확률 통계/R 데이터 분석

BostonHousing 데이터셋

변수 설명
crim 지역의 1인당 범죄율
rm 주택 1가구당 방의 개수
dis 보스턴의 5개 직업 센터까지의 거리
tax 재산 세율
medv 주택 가격
  • mlbench 패키지에서 제공하는 BostonHousing  데이터셋은 보스턴 지역의 주택 가격정보와 주택 가격에 영향을 주는 요소들을 담고 있다.

탐색적 데이터 분석과정

  • 데이터 셋 준비하기
library(mlbench)
data("BostonHousing")
x<-BostonHousing[,c("crim","rm","dis","tax","medv")]
x
mlbench패키지 설치
오른쪽 하단에 있는 창에서 Packages를 클릭 후 Install을 클릭한다. 그런 다음 입력창이 열린다면 mlbench를 입력하고 install을 누른다.

  • grp변수 추가하기

grp는 25.0이상이면 H, 17.0 이하 이면 L, 나머지는 M으로 분류해 준다.

library(mlbench)
data("BostonHousing")
x<-BostonHousing[,c("crim","rm","dis","tax","medv")]
grp<-c()
for(i in 1:nrow(x)){
  if(x$medv[i]>=25.0){
    grp[i]<-'H'
  }else if(x$medv[i]<=17.0){
    grp[i]<-'L'
  }else{
    grp[i]<-'M'
  }
}
grp<-factor(grp)
grp<-factor(grp,levels=c("H","M","L"))
x<-data.frame(x,grp)
x
> x
       crim    rm    dis tax medv grp
1   0.00632 6.575 4.0900 296 24.0   M
2   0.02731 6.421 4.9671 242 21.6   M
3   0.02729 7.185 4.9671 242 34.7   H
4   0.03237 6.998 6.0622 222 33.4   H
5   0.06905 7.147 6.0622 222 36.2   H
6   0.02985 6.430 6.0622 222 28.7   H
7   0.08829 6.012 5.5605 311 22.9   M
8   0.14455 6.172 5.9505 311 27.1   H
9   0.21124 5.631 6.0821 311 16.5   L
10  0.17004 6.004 6.5921 311 18.9   M
  • for(i in 1:iris(x)): 열의 길이만큼 for문을 반복해 준다.
  • 만약 25.0보다 크거나 같으면 grp [i]에 "H"를 17.0보다 작거나 같으면 "L", 나머지는 "M"을 넣는다.
  • grp는 문자형태의 벡터이기 때문에 factor형으로 변경하여 준다.
  • grp를 알파벳 순이 아니라 H, M, L순으로 바꿔 준다.

데이터셋의 형태와 기본적인 내용 파악

library(mlbench)
data("BostonHousing")
x<-BostonHousing[,c("crim","rm","dis","tax","medv")]
grp<-c()
for(i in 1:nrow(x)){
  if(x$medv[i]>=25.0){
    grp[i]<-'H'
  }else if(x$medv[i]<=17.0){
    grp[i]<-'L'
  }else{
    grp[i]<-'M'
  }
}
grp<-factor(grp)
grp<-factor(grp,levels=c("H","M","L"))
x<-data.frame(x,grp)
str(x)
head(x)
table(x$grp)
> str(x)
'data.frame':	506 obs. of  6 variables:
 $ crim: num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
 $ rm  : num  6.58 6.42 7.18 7 7.15 ...
 $ dis : num  4.09 4.97 4.97 6.06 6.06 ...
 $ tax : num  296 242 242 222 222 222 311 311 311 311 ...
 $ medv: num  24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
 $ grp : Factor w/ 3 levels "H","M","L": 2 2 1 1 1 1 2 1 3 2 ...

> head(x)
     crim    rm    dis tax medv grp
1 0.00632 6.575 4.0900 296 24.0   M
2 0.02731 6.421 4.9671 242 21.6   M
3 0.02729 7.185 4.9671 242 34.7   H
4 0.03237 6.998 6.0622 222 33.4   H
5 0.06905 7.147 6.0622 222 36.2   H
6 0.02985 6.430 6.0622 222 28.7   H

> table(x$grp)

  H   M   L 
132 247 127
  • 506개의 주택에 대한 정보와 6개의 변수를 가지고 있음을 알 수 있다. 그리고 grp는 펙터의 형태이고 이를 제외한 나머지는 숫자형을 띠고 있다.
  • H는 132, M은 247, L은 127채가 존재한다.

히스토그램에 의한 관측값 분포 확인

library(mlbench)
data("BostonHousing")
x<-BostonHousing[,c("crim","rm","dis","tax","medv")]
grp<-c()
for(i in 1:nrow(x)){
  if(x$medv[i]>=25.0){
    grp[i]<-'H'
  }else if(x$medv[i]<=17.0){
    grp[i]<-'L'
  }else{
    grp[i]<-'M'
  }
}
grp<-factor(grp)
grp<-factor(grp,levels=c("H","M","L"))
x<-data.frame(x,grp)
par(mfrow=c(2,3))
for(i in 1:5){
  hist(x[,i],main=colnames(x)[i], col="green")
}

결과

 

  • par을 활용하여서 화면은 2*3으로 분할해준다.
  • 각 열에 해당하는 데이터들을 반복문을 통해서 히스토그램을 출력해 준다. 

상자그림에 의한 관측값의 분포 확인

library(mlbench)
data("BostonHousing")
x<-BostonHousing[,c("crim","rm","dis","tax","medv")]
grp<-c()
for(i in 1:nrow(x)){
  if(x$medv[i]>=25.0){
    grp[i]<-'H'
  }else if(x$medv[i]<=17.0){
    grp[i]<-'L'
  }else{
    grp[i]<-'M'
  }
}
grp<-factor(grp)
grp<-factor(grp,levels=c("H","M","L"))
x<-data.frame(x,grp)
par(mfrow=c(2,3))
for(i in 1:5){
  boxplot(x[,i],main=colnames(x)[i], col="green")
}
par(mfrow=c(1,1))

결과

그룹별 관측값 분포의 확인

library(mlbench)
data("BostonHousing")
x<-BostonHousing[,c("crim","rm","dis","tax","medv")]
grp<-c()
for(i in 1:nrow(x)){
  if(x$medv[i]>=25.0){
    grp[i]<-'H'
  }else if(x$medv[i]<=17.0){
    grp[i]<-'L'
  }else{
    grp[i]<-'M'
  }
}
grp<-factor(grp)
grp<-factor(grp,levels=c("H","M","L"))
x<-data.frame(x,grp)
boxplot(x$crim~x$grp,main="1인당 범죄율",xlab="주택가격",ylab="범죄율",col='green')
boxplot(x$rm~x$grp,main="방의 수",xlab="주택가격",ylab="방의 수",col='green')

결과1
결과2

다중 산점도를 통한 변수 간 상관관계 확인

library(mlbench)
data("BostonHousing")
x<-BostonHousing[,c("crim","rm","dis","tax","medv")]
grp<-c()
for(i in 1:nrow(x)){
  if(x$medv[i]>=25.0){
    grp[i]<-'H'
  }else if(x$medv[i]<=17.0){
    grp[i]<-'L'
  }else{
    grp[i]<-'M'
  }
}
grp<-factor(grp)
grp<-factor(grp,levels=c("H","M","L"))
x<-data.frame(x,grp)
pairs(x[,-6])

결과

  • pairs(x [,-6]): 6번째 값, 즉 grp만 제외하고 산점도를 출력해 준다.

그룹 정보를 포함한 변수 간 상관관계의 확인

library(mlbench)
data("BostonHousing")
x<-BostonHousing[,c("crim","rm","dis","tax","medv")]
grp<-c()
for(i in 1:nrow(x)){
  if(x$medv[i]>=25.0){
    grp[i]<-'H'
  }else if(x$medv[i]<=17.0){
    grp[i]<-'L'
  }else{
    grp[i]<-'M'
  }
}
grp<-factor(grp)
grp<-factor(grp,levels=c("H","M","L"))
x<-data.frame(x,grp)
y<-as.integer(x$grp)
pairs(x[,-6],pch=y, col=c('blue','green','red'))

결과

변수 간 상관계수의 확인

> cor(x[,-6])
           crim         rm        dis        tax       medv
crim  1.0000000 -0.2192467 -0.3796701  0.5827643 -0.3883046
rm   -0.2192467  1.0000000  0.2052462 -0.2920478  0.6953599
dis  -0.3796701  0.2052462  1.0000000 -0.5344316  0.2499287
tax   0.5827643 -0.2920478 -0.5344316  1.0000000 -0.4685359
medv -0.3883046  0.6953599  0.2499287 -0.4685359  1.0000000
  • cor함수를 사용하여서 상관관계를 확인해 준다.

'확률 통계 > R 데이터 분석' 카테고리의 다른 글

데이터 시각화1  (0) 2024.09.03
데이터 전처리  (1) 2024.09.02
다중변수 자료의 탐색  (0) 2024.08.30
단일변수 자료의 탐색  (0) 2024.08.29
(Ch8) 조건에 맞는 데이터의 위치 찾기  (1) 2024.08.26