본문 바로가기

My Work/Data Literacy

R 공부 (8편) - 쉽게 배우는 R 데이터 분석

지도 시각화

지역별 통계치를 색깔의 차이로 표현한 지도를 '단계 구분도'라고 한다. 단계 구분도를 보면 지역별 특성이 어떻게 다른지 쉽게 이해할 수 있다. 

 

미국 주별 강력 범죄율 데이터를 이용해서 단계 구분도를 만들어보겠다. 필요한 데이터 전처리 과정은 생략하겠다. 단계 구분도는 'ggiraphExtra' 패키지를 이용해서 만들 수 있다. 또한, 미국 주별 위경도 데이터가 들어있는 'maps' 패키지를 사용하겠다. 

install.packages("ggiraphExtra")
library(ggiraphExtra)

library(ggplot2)
states_map <- map_data("state")

ggChoropleth(data = crime,         # 지도에 표현할 데이터
             aes(fill = Murder,    # 색깔로 표현할 변수
                 map_id = state),  # 지역 기준 변수
             map = states_map)     # 지도 데이터

 

'ggChoropleth' 를 이용해 단계 구분도를 만들어봤다. 

 

추가로, 마우스 움직임에 반응하는 인터랙티브 단계 구분도는 ggChoropleth() 함수 매개변수에 'interactive = T' 를 추가하면 된다. 

 

인터랙티브 그래프

인터랙티브 그래프란 마우스 움직임에 반응하며 실시간으로 형태가 변형하는 그래프를 말한다. 그래프를 HTML 포맷으로 저장하면, 일반 사용자들도 웹 브라우저를 이용해서 그래프를 조작할 수 있다. 

 

일단 plotly 패키지를 사용해서 인터랙티브 그래프를 만들어보겠다. ggploty() 함수를 사용하면 인터랙티브 그래프를 만들 수 있다. 

install.packages("plotly")
library(plotly)

library(ggplot2)
p <- ggplot(data = mpg, aes(x = displ, y = hwy, col = drv)) + geom_point()

ggplotly(p)

 

인터랙티브 시계열 그래프는 dygraphs 패키지로 만들 수 있다. ggolot2에 내장된 economics 데이터를 통해서 만들어보겠다. 

install.packages("dygraphs")
library(dygraphs)

economics <- ggplot2::economics

library(xts)
eco <- xts(economics$unemploy, order.by = economics$date)

# 그래프 생성
dygraph(eco)

 

선 위에 마우스 커서을 올리면 우측 상단에 날짜와 실업자 수가 표기된다. 또한, 사진 밑부분 처럼 마우스를 드래그하면 특정 기간만 확대할 수 있다. 

 

통계적 가설 검정

통계 분석은 크게 2가지로 나뉜다. 데이터를 요약해 설명하는 '기술 통계' 와 어떤 값이 발생할 확률을 계산하는 통계 기법인 '추론 통계' 가 있다. 또한, 수집된 데이터에서 발생한 '차이' 가 우연히 발생할 확률을 계산한다. 만약, 차이가 우연히 나타날 확률이 작다면 통계적으로 '유의하다(statistically significant)' 라고 결론 내린다. 일반적으로 통계 분석을 했다는 것은 추론 통계를 통해 가설 검정을 했다는 것을 의미한다. 

 

따라서, 유의확률을 이용해 가설을 검정하는 것을 통계적 가설 검정이라고 한다. 유의확률(p-value)은 실제로는 집단 간 차이가 없는데 우연히 차이가 있는 데이터가 추출될 확률을 의미한다. 유의확률이 크다면 당연히 통계적으로 유의하지 않다고 하고 유의확률이 작다면 집단 간 차이가 통계적으로 유의하다고 해석한다. 

 

't-검정' 은 두 집단의 평균에 통계적으로 유의한 차이가 있는지 알아볼 때, 사용한다. t.test() 함수를 사용해서 t 검정을 할 수 있다. mpg 데이터를 사용해서 통계적으로 유의한 차이가 있는지 알아보겠다. 'compact' 차종과 'suv' 차종이 도시 연비에서 통계적으로 유의했는지 알아볼 것인데 먼저, mpg 데이터를 불러와서 class, cty 변수만 남기겠다. 

mpg <- as.data.frame(ggplot2::mpg)

library(dplyr)
mpg_diff <- mpg %>% 
  select(class, cty) %>% 
  filter(class %in% c("compact", "suv"))

t.test(data = mpg_diff, cty ~ class, var.equal = T)

# 출력값
t = 11.917, df = 107, p-value < 2.2e-16
alternative hypothesis: true difference in means between group compact and group suv is not equal to 0
95 percent confidence interval:
 5.525180 7.730139
sample estimates:
mean in group compact     mean in group suv 
             20.12766              13.50000

 

t.test() 를 이용해서 t 검정을 해봤다. 여기서 집단 간 분산이 같다고 가정하고 var.equal은 T로 지정했다. 출력값에서 'p-value' 를 확인하면 2.2e-16(2.2 x 10의 -16승) 이므로 0.05보다 작기 때문에 통계적으로 유의하다고 볼 수 있다. 

 

'상관분석(Correlation Analysis)' 은 두 연속 변수가 서로 관련이 있는지 검정하는 통계 분석이다. 상관 분석을 통해 도출한 상관계수는 0~1 사이의 값을 가지고 클수록 관련성이 크다는 것을 의미한다. 

 

economics 데이터를 이용해서 unemploy(실업자 수)와 pce(개인 소비 지출) 간에 통계적으로 유의한 상관관계가 있는지 알아보겠다. cor.test()를 이용하면 된다. 

economics <- as.data.frame(ggplot2::economics)
cor.test(economics$unemploy, economics$pce)

# 출력값
	Pearson's product-moment correlation

data:  economics$unemploy and economics$pce
t = 18.63, df = 572, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.5608868 0.6630124
sample estimates:
      cor 
0.6145176

 

cor 값을 확인할 때, 양수 0.61인 것을 보아 어느정도 정비례 관계임을 알 수 있다. 

 

여러 변수의 관련성을 한 번에 알아보고자 할 때는 상관 행렬(Correlation Matrix)를 사용한다. cor() 함수를 통해 상관 행렬을 만들고, corrplot() 함수를 이용해서 상관행렬을 히트맵으로 만든다. 

head(mtcars)
car_cor <- cor(mtcars)  # 상관행렬 생성
round(car_cor, 2)       

install.packages("corrplot")
library(corrplot)

corrplot(car_cor)  # 히트맵

 

변수 타입

변수는 연속 변수와 범주 변수로 분류할 수 있다. 연속 변수는 키, 몸무게 같은 연속적이고 크기를 의미하는 값이다. 범주 변수는 값이 대상을 분류하는 의미를 지니는 변수라고 할 수 있다.  여기서 factor 변수는 연산이 되지 않음을 주의하자. 또한, class() 함수를 사용하면 변수 타입을 확인할 수 있다. 또한, 아래와 같이 as. 으로 시작하는 함수들은 변수의 타입을 바꾸는 기능을 한다. 

 

as.numeric() : numeric으로 변환

as.factor() : factor으로 변환

as.character() : character로 변환

 

데이터 구조 

R에서 사용하는 데이터 구조 표이다. 

데이터 구조 차원 특징
벡터 1차원 한 가지 변수 타입
데이터 프레임 2차원 다양한 변수 타입
매트릭스 2차원 한 가지 변수 타입
어레이 다차원 2차원 이상의 매트릭스
리스트 다차원 서로 다른 데이터 구조 포함