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

R. 연속형 변수 특성 요약과 시각화(등간형)

by hyun-am 2020. 8. 24.

연속형 변수 특성 요약과 시각화

 

연속형 변수 컬럼 서브데이터셋 추출하기

 

전체 데이터셋 변수 컬럼 중에서 분석 대상 객체 속성의 양적인 크기를 파악한 등간•간격척도와 비율 척도로 측정된 연속형 변수 컬럼 서브데이터셋을 별도로 추출합니다.

 

먼저 연속형 변수를 꺼내오기 위해 범주형 변수컬럼명을 파악한 후 데이터를 도출하겠습니다.

 

1. 전체 변수 컬럼명 파악

all_names <- names(my)

2. 범주형 변수컬럼명 파악하기

ctg_names <- c('month', 'gender', 'edu', 'job', 
               'age', 'nat', 'other', 'object', 
               'member', 'accom', 'activity')

3. 연속형 변수컬럼명 도출하기

cnt_names <- setdiff(all_names, ctg_names)
cnt_names

4. cnt라는 연속형 변수컬럼 데이터셋을 추출하기.

 

또한 첫번째 변수 id 변수는 사용하지 않을것이므로 제외시키겠습니다.

cnt <- my[cnt_names]
cnt <- cnt[-1]
cnt

 

등간형 척도 변수컬럼 특성파악

등간형 척도 중에서 전반적 만족도(overal)변수를 선정하여 전반적 만족도 수치들이 가진 중심성, 변동성, 정규성 분포 특성을 파악합니다.

 

먼저 대략적인 분포를 확인하기 위해 Hmisc::describe()를 사용하겠습니다.

Hmisc::describe(cnt$overal)

이제 자세한 값들을 파악하겠습니다.

 

1. 산술 평균 확인하기

mean(cnt$overal)
mean(cnt$overal, na.rm = TRUE)
mean(cnt$overal, na.rm = TRUE, trim = 0.3)

- na.rm은 TRUE이면 NA값을 제거한 후 평균을 구하라는 뜻입니다.

- trim = 0.3은 양쪽 값을 30%만큼 제거하라는 뜻이다 예를들면 [-4,-3,-2,-1,0,1,2,3,4,5]로 되어 있으면 (-4,-3,-2) (3,4,5)는 제외하고 평균을 구하라는 뜻입니다.

 

이제 코드들을 실행시키면 서로 다른 값들이 나오는 것을 확인할 수 있습니다.

또한 중앙 값을 파악하기 위해서는 median 함수를 사용하시면 됩니다.

median(cnt$overal)

출력되는 값은 4입니다.

 

2. 최빈값 출력하기

 

먼저 overal의 빈도수를 테이블로 표현하겠습니다.

overal_freq <- table(cnt$overal)
overal_freq

그 후 which.max 함수를 이용해서 최빈값을 찾아내겠습니다.

names(which.max(overal_freq))

이렇게 하면 측정 정도를 확인하기가 어렵습니다. 따라서 만족도 수치에 레이블을 붙여 최빈값을 구하겠습니다.

cnt$overal_f <- factor(cnt$overal, levels = c(1, 2, 3, 4, 5),
                       labels = c('매우불만족', '불만족', '보통', '만족', '매우만족'))

이제 다시 최빈값을 출력해보겠습니다.

names(which.max(overal_f_freq))

대부분 만족하는 것을 확인할 수 있습니다.

 

3. 분산, 표준편차, 범위, (최대/최소) 확인하기

 

분산

분산은 크기가 커질수록 평균으로 부터 많이 퍼져있다는 뜻이고 작을수록 평균에 데이터가 몰려 있다는 것을 확인할 수 있습니다.

var(cnt$overal)
var(cnt$overal, na.rm = TRUE)

 

표준편차

표준편차는 마찬가지로 값이 크면 데이터가 평균으로 부터 많이 퍼져있고 작을수록 평균에 데이터가 몰려 있다는 것을 확인할 수 있습니다.

sd(cnt$overal)
sd(cnt$overal, na.rm = TRUE)

범위

범위는 최소 ~ 최대 간격을 나타내 줍니다.

range(cnt$overal)
range(cnt$overal, na.rm = TRUE)

최대/최소

최대값과 최소값을 구할수 있게 해줍니다.

max(cnt$overal)
min(cnt$overal)

4. 첨도와 왜도 확인하기(kurtosis and skewness)

 

왜도는 중심을 기준으로 좌우로 치우침을 확인할 수 있습니다.

첨도는 중심을 기준으로 데이터의 극단성을 확인할 수 있습니다. 이해하기 쉽게 그림으로 보겠습니다.

왼쪽이 왜도이고 오른쪽이 첨도입니다. 

이제 왜도와 첨도를 출력하겠습니다. 먼저 왜도와 첨도 계산용 패키지를 설치하고 로딩하겠습니다.

install.packages("fBasics")
library(fBasics)

그 후 왜도와 첨도를 구하겠습니다.

# 왜도(skewness)
skewness(cnt$overal)
skewness(cnt$overal, na.rm = TRUE)

# 첨도(kurtosis)
kurtosis(cnt$overal)
kurtosis(cnt$overal, na.rm = TRUE)

 

⭐️ 등간형 척도 변수컬럼 시각화 하기

 

이제 앞에서 만든 값들을 이용해서 시각화를 하겠습니다. 먼저 간단한 플로팅 먼저 구현하겠습니다.

plot(cnt$overal, type = "p", 
     pch = 21, bg = "blue")

이런식으로 플로팅 된 것을 확인할 수 있는데 자세히 보면 4번과 5번은 너무 촘촘해서 검은색 선으로 보입니다. 이것은 값이 꾸준히 많이 나오고 있다는 것을 뜻합니다. 

 

만약 이런 도표를 보기 어렵다면 abline()을 이용한 가이드라인을 그리겠습니다.

abline(h = seq(from = 1, 
               to = 5, 
               by = 1), 
       col = "gray", lty = 2)
abline(v = seq(from = 1000, 
               to = 14000, 
               by = 1000), 
       col = "gray", lty = 2)

그러면 plot창에 다음과 같은 가이드라인이 생기는 것을 확인할 수 있습니다.

 

다음은 히스토그램과 확률 밀도 곡선을 통해 데이터 분포를 확인하겠습니다. 

 

먼저 전에 시각화 할때 구현했던 것 처럼 화면을 4칸으로 나눈 후 진행하겠습니다.

par(mfrow=c(2, 2))

hist(cnt$overal, main="hist(), Frequency 옵션")
hist(cnt$overal, probability=TRUE,
     main="hist(), Probabilty 옵션")
plot(density(cnt$overal), main="density() 확률밀도 옵션")

hist(cnt$overal, probability=TRUE,
     main="hist() 히스토그램과 density() 확률밀도함수 통합")
lines(density(cnt$overal))

나오는 도표는 다음과 같습니다.

 


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

 

 

K-ICT 빅데이터센터

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

www.youtube.com

 

댓글