탐색적 데이터 분석 과정
실습 데이터 셋 변수 설명
변수 | 설명 |
crim | 지역의 1인당 범죄율 |
rm | 주택 1가구당 방의 개수 |
dis | 보스턴의 5개 직업 센터까지의 거리 |
tax | 재산세율 |
medv | 주택 가격 |
1단계 : 분석 대상 데이터셋 준비
R-Code
install.packages("mlbench") library(mlbench) data("BostonHousing") myds<-BostonHousing[,c("crim","rm","dis","tax","medv")] |
2단계 : grp 변수 추가
myds가 앞으로 우리가 탐색할 데이터셋인데 여기에 grp라는 범주형 변수를 하나 더 추가하려고 한다.
grp는 주택 가격을 상(H) , 중(M) , 하(L)로 분류한 것으로 25.0 이상이면 상(H), 17.0 이하면 하(L)
나머지를 중(M)으로 분류한다.
grp <-c() for(i in 1:nrow(myds)){ #myds$medv 값에 따라 그룹 분류 if (myds$medv[i] >= 25.0){ grp[i] <-"H" } else if (myds$medv[i] <= 17.0){ grp[i] <-"L" } else { grp[i] <-"M" } } grp <- factor(grp) # 문자 벡터를 팩터 타입으로 변경 grp <- factor(grp, levels=c("H","M","L")) # 레벨의 순서를 H,L,M -> H,M,L myds <- data.frame(myds, grp) #myds에 grp 열 추가 |
grp <- factor(grp) 명령문으로 문자열 벡터 grp를 팩터로 변환하면 레벨이 알파벳 순서에 의해
H,L,M으로 지정이 되는데, 그래프를 그리면 결과가 이 순서대로 나이기 때문에 보기가 불편하다.
따라서 우리가 원하는 순서인 H,M,L로 변경해야 한다.
3단계 : 데이터셋의 형태와 기본적인 내용 파악
데이터셋이 준비되었으니 데이터셋의 형태와 기본적인 내용을 파악해보자.
str(myds) |
head(myds) |
table(myds$grp) |
먼저 str() 함수의 결과를 보면 myds 데이터셋은 데이터프레임이고, 506개의 주택에 대한 정보를 담고 있으며 6개의 변수로 구성되어 있음을 알 수 있다. 6개의 변수 중 grp는 팩터 타입이고 나머지는 숫자 타입의 변수이다.
head() 함수를 통해서 데이터가 어떤 형태로 저장되어 있는지 확인한다.
grp는 그룹 정보를 담고 있기 때문에 각 그룹별 관측값들의 개수를 알아보는 것이 필요하다.
table() 함수를 통해 도수분포표를 작성하면 가격이 상위인 주택이 132채, 중간이 247채, 하위가 127채임을 알 수 있다.
4단계 : 히스토그램에 의한 관측값의 분포 확인
그룹 정보(grp)를 제외한 나머지 5개 변수에 대해 관측값들의 분포를 확인해보자.
par(mfrow=c(2,3)) #2x3 가상화면 분할 for(i in 1:5) { hist(myds[,i],main=colnames(myds)[i],col="yellow") } |
par(mfrow=c(1,1)) #가상화면 분할해제 |
결과를 보면 rm,mdev 변수만 종 모양의 정규분포에 가깝고,
crim, dis 는 관측값들이 한쪽으로 쏠려서 분포함을 알 수 있다.
tax는 중간에 관측값이 없는 빈 구간이 존재하는 특징을 보인다.
5단계 : 상자그림에 의한 관측값의 분포 확인
이번에는 그룹 정보(grp)를 제외한 나머지 5개 변수에 대하 boxplot()함수를 작성하여 분포를 확인해보자.
par(mfrow=c(2,3)) for(i in 1:5){ boxplot(myds[,i],main=colnames(myds)[i]) } par(mfrow=c(1,1)) |
결과를 보면 1인당 범죄율(crim)은 관측값들이 좁은 지역에 밀집되어 있다.(관측값들의 편차가 매우 작음)
재산세율(tax)은 넓게 퍼져 있는 것(관측값들의 편차가 비교적 크다)을 확인 할 수 있다.
6단계 : 그룹별 관측값 분포 확인
이제 그룹 정보를 이용하여 각 변수별로 그룹별 분포를 확인해보자.
boxplot(myds$crim~myds$grp, main="1인당 범죄율") |
범죄율(crim)을 주택 가격별 그룹으로 살펴보면 , 주택 가격이 높은 지역이나 중간 지역의 범죄율은 낮고,
주택 가격이 낮은 지역의 범죄율이 높게 나타난다.
boxplot(myds$rm~myds$grp, main="방의 개수") |
그룹별로 주택의 방의 개수를 살펴포면 주택 가격이 높으면 방의 개수도 많다는 것을 알 수 있다.
주택 가격이 중간인 지역과 하위인 지역이 있어서 방의 개수의 평균은 큰 차이가 나지 않지만,
중간 그룹의 방의 개수가 5.2~6.8 사이로 비교적 균일한 반면
하위 그룹의 방의 개수는 4.5~7.2사이로 넓게 퍼져있는 것을 알 수 있다.
7단계 : 다중 산점도를 통한 변수 간 상관 관계 확인
pairs(myds[,-6]) |
medv(주택가격)과 rm(가구당 방의 개수)는 양의상관관계가 있어보이고.
crim(1인당 범죄율)은 medv(주택가격)과 음의 상관관계가 있어보인다.
가구당 방의 개수가 많으면 집이 크다는 의미이니 주택 가격이 높아질 것이고,
범죄율이 높은 지역은 주택 가격이 떨어진다는 의미로 해석할 수 있다.
8단계 : 그룹 정보를 포함한 변수 간 상관 관계 확인
그룹 정보를 포함하여 다중 산점도를 작성하고 시사점이 있는지 확인해본다.
point <- as.integer(myds$grp) #점의 모양 지정 color <-c("red","green","blue") #점의 색 지정 pairs(myds[,-6] , pch=point, col=color[point]) |
결과를 관찰해 보면(crim-medv), (rm-medv), (dis-medv) , (tax-medv) 산점도에서
그룹별로 분포 위치가 뚜렷하게 구분되는 것을 알 수 있다. 또한 주택 가격 중간 그룹(녹색점)은
상위 그룹(빨간색), 하위 그룹(파란색)에 비해 주택 가격의 변동폭이 좁다는 사실도 관찰할 수 있다.
9단계 : 변수 간 상관계수의 확인
cor(myds[,-6]) |
medv(주택 가격)를 기준으로 보았을 때 상관계수가 가장 높은 것은 rm(가구당 방의 개수)으로 0.6953599이다.
음의 상관성이 높은것으로 보였단 crim(1인당 범죄율)은
상관계수가 -0.3883046으로, 실제로는 상관도가 높지 않다는 것을 알 수 있다.
'Data Science > R' 카테고리의 다른 글
[R] 그래프 시각화 ( 선그래프 , graph , line graph ) (0) | 2020.06.16 |
---|---|
[R] 그래프 시각화 ( 상관분석 , Correlation analysis , 상관계수 r) (0) | 2020.06.15 |
[R] 그래프 시각화 ( 산점도 scatter plot, scatter graph) (0) | 2020.06.15 |
[R]. 그래프 시각화 ( 사분위수 , 히스토그램 , 상자그림 ) (0) | 2020.06.11 |
[R]. 그래프 시각화 ( 도수분표표 , 막대그래프 , 원그래프 ) (0) | 2020.06.11 |