본문 바로가기
Data·AI/R 데이터분석

R. 데이터 시각화탐색(산점도 매트릭스, 상관관계)

by hyun-am 2020. 8. 24.

전체변수간 산점도 매트릭스 

데이터셋을 구성하고 있는 모든 변수컬럼 간의 상호관련성을 산점도(scatter plot) 매트릭스(matrix)를 통해서 살펴볼 수 있습니다.

 

산점도 매트릭스를 표현하기 위해 사용된 함수는 plot( )입니다.

먼저 산점도 매트릭스를 표현하기 전에 데이터를 불러오겠습니다. 

# 여행자 관련 csv 파일
my <- read.csv(file = 'tour.csv', 
               header = TRUE, sep = ',',
               stringsAsFactors = TRUE, 
               strip.white = TRUE,
               na.strings = c('.', '?', 'NA'))

파일을 불러오는 방법은 여기를 참고하면 됩니다. 

https://hyun-am-coding.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B-%EB%A1%9C%EB%94%A9%ED%95%98%EA%B8%B0-%ED%94%8C%EB%A0%88%EC%9D%B8-%ED%85%8D%EC%8A%A4%ED%8A%B8-%ED%8C%8C%EC%9D%BC

 

R. 데이터셋 로딩하기 - 플레인 텍스트 파일

데이터셋 로딩하기 먼저 아래와 같은 명령어를 통해 현재 작업 경로를 확인하고 변경하겠습니다. getwd() setwd('현재 작업하고 있는 경로') 저는 setwd에 제가 작업하는 주소가 /Users/hyeon-am/Desktop/Data

hyun-am-coding.tistory.com

 

이제 plot함수를 실행시켜보겠습니다.

plot(my)

그러면 이런식으로 산점도 메트릭스가 출력되는 것을 확인할 수 있습니다.

전체변수간 상관관계 매트릭스 

다음은 데이터셋을 구성하고 있는 모든 변수컬럼 간의 상호관련성을 연관∙상관관계 매트릭스를 통해서 살펴볼 수 있습니다.

 

round(cor(my),3))

여기서 cor( ) 함수는 상관관계를 그려주는 함수이고 round(변수, 표현하고 싶은 소수점자리)는 소수점 자리 정리를 위해 사용합니다.

 

위에 식을 상관관계 결과를 변수로 만든후 다시 round함수를 통해 소수점 자리 정리를 해서 표현할 수도 있습니다.

temp <- cor(my)
round(temp,3)

결과 값은 아래와 같습니다.

여기서 만약 NA값을 없애고 싶으면 use='complete.obs'를 사용하면 됩니다.

temp <- cor(my, 
            use = 'complete.obs')
round(temp, 2)

NA가 사라진 것을 볼 수 있습니다. 

 

범주형 변수간 산점도∙연관관계 매트릭스

일부 범주형 변수컬럼 간의 상호관련성을 산점도와 연관관계 매트릭스를 통해서 살펴볼 수 있습니다.

 

먼저 일부 변수형 컬럼만 꺼내어서 plot차트를 만들어 보겠습니다.

plot(my$gender, my$age)

 

다음과 같은 Plot차트가 생성된 것을 확인할 수 있습니다. 하지만 이걸로는 연관성을 확인할 수 없습니다. 따라서 cor함수를 이용해서 연관성을 파악하겠습니다.

cor(my$gender, my$age, method = 'spearman', use = 'complete.obs')

여기서 method = 'spearman'Spearman의 순위상관계수 혹은 Spearman이 ρ(rho) 지정, 비모수 상관계수 계산 (정규성 불충족 시)을 뜻합니다.(범주형 데이터 간의 상관계수)

 

결과값은 다음과 같습니다.

반올림하면 약 -0.17정도이므로 성별과 나이는 상관관계가 별로 없다는 것을 확인할 수 있습니다. 

 

여기서 상관관계 계수를 이해할려면 아래의 표를 참고 하시면 됩니다.

상관계수 상관관계 정도
-0.9 ~ -1.0 , 0.9 ~ 1.0 매우강함
-0.7 ~ -0.9 , 0.7 ~ 0.9 강함
-0.4 ~ -0.7 , 0.4 ~ 0.7 상관관계가 있음
-0.2 ~ -0.4 , 0.2 ~ 0.4  약함
-0.2 ~ 0.0 , 0.0 ~ 0.2  매우 약함

 

이제 마지막으로 범주형 카테고리를 4개 선정해서 서로 연관성이 어느정도 인지 한번 비교해 보겠습니다.

 

먼저 카테고리 4개를 따로뺀 변수를 만들겠습니다. 

ctg <- my[c('gender', 'age', 'object', 'accom')]

그 후 plot을 통해 비교할수 있는지 확인하겠습니다.

그래프로는 무엇을 뜻하는지 확인하기가 어렵습니다. 다음은 cor 함수를 통해 서로 상관관계가 어느정도 있는지 확인하겠습니다.

만약 상관관계가 매우약한것도 표현하고 싶으면 use='complete.obs' 를 사용하고 아니면 NA로 표현하고 싶으면 사용하지 않겠습니다.

 

여기서 보면 대부분 상관관계가 매우 약합니다. 그나마 성별과 목적이 약한 상관관계를 가지고 있다고 설명할 수 있습니다.

 

연속형 변수간 산점도•상관관계 매트릭스

다음은 일부 연속형 컬럼간의 상호 관련성을 확인하겠습니다. 위에서 본것과 마찬가지로 plot함수나 cor함수를 통해 확인할 수 있습니다.

 

먼저 여행 방문후 이미지와 재 방문의지 간 관련성이 있는지 확인하겠습니다. 

cor(my$af_img, my$revisit, method = 'pearson')

결과값은 0.44가 출력됩니다. 이것을 통해 여행 방문후 이미지와 재방문의지간의 관련성이 있다고 확인할 수 있습니다.

여기서 method = 'pearson'을 사용했는데 이것은 연속형 변수간 상관관계를 구해줄때 도움을 주는 method입니다.

 

산점도 매트릭스 패키지 이용

 

1. psych::pairs.panels() 함수를 이용한 산점도 매트릭스

개별 변수의 분포 모양을 히스토그램(histogram)과 밀도곡선(density plot)으로 표시하며, 각 변수간 관련성을 수치와 다원형 분포모양과 빨간색 추세선으로 나타냅니다.

 

위에서 만든 연속형과 범주형 각각 산점도 매트릭스를 찍어보겠습니다.

 

범주형 데이터

pairs.panels(ctg,  
             method = "spearman",
             hist.col = "green",
             density = TRUE,
             ellipses = TRUE)

연속형 데이터

pairs.panels(cnt,  
             method = "pearson",
             hist.col = "green",
             density = TRUE,
             ellipses = TRUE)

이렇게 상승되는 것이 뚜렷하게 보이면 상관관계가 어느정도 있는것을 확인할 수 있습니다.

 

2. PerformanceAnalytics::chart.Correlation()함수를 이용한 산점도 매트릭스

개별변수의 분포모양을 히스토그램(histogram)과 밀도곡선(density plot)으로 표시하며, 각 변수간 관련성을 수치와 별표, 산점도와 빨간색 추세선으로 나타냅니다.

 

범주형 데이터

chart.Correlation(ctg, histogram = T)

연속형 데이터

chart.Correlation(ctg, histogram = T)

3. corrplot::corrplot()함수를 이용한 산점도 매트릭스

결측치(NA) 포함유무에 따라 물음표(?) 기호가 나타나고 관계정도를 색상스펙트럼과 수치로 나타내며, 파이차트와 부채꼴 모양, 수치형 혼합 등 다양한 형태의 산점도 매트릭스를 구현해줍니다.

 

⭐️ 먼저 NA포함 데이터 관찰치를 제외하겠습니다.

ctg_pure <- na.omit(ctg)
cnt_pure <- na.omit(cnt)
my_pure <- na.omit(my)

 

범주형 데이터

 

- NA 값 포함

corrplot(cor(ctg))

corrplot.mixed(cor(ctg))

 

NA값 미포함

corrplot(cor(ctg_pure), method = 'pie')

corrplot.mixed(cor(cnt_pure))

 

연속형 데이터

 

- NA 값 포함

corrplot(cor(cnt))

corrplot.mixed(cor(cnt))

- NA 값 미포함

corrplot(cor(cnt_pure), method = 'pie')

corrplot.mixed(cor(cnt_pure))

 

전체데이터 상관관계 파악하기

 

결측치 포함

corrplot(cor(my))

 

결측치 미포함

corrplot.mixed(cor(my_pure))

 

 


이 자료는 https://www.youtube.com/channel/UChPuesN49tcqQqYRQHrLCuw를 참조하여 작성하였습니다.

 

 

K-ICT 빅데이터센터

판교 K-ICT 빅데이터센터 공식 유튜브 채널입니다.

www.youtube.com

 

댓글