자료의 탐색
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')


다중 산점도를 통한 변수 간 상관관계 확인
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 |