t 검정(t-test)란?

- 두 집단의 평균통계적으로 유의한 차이가 있는지 알아볼 때 사용하는 통계 분석 기법

- R에 내장된 t.test()를 이용해 t 검정 가능

 

 

■ ggplot2 패키지의 mpg 데이터를 이용해 compact 자동차와 suv 자동차의 도시 연비 t 검정을 수행

(1) mpg 데이터를 불러와 class, cty 변수만 남긴 뒤 class 변수가 "compact"인 자동차와 "suv"인 자동차를 추출

mpg <- as.data.frame(ggplot2::mpg)
library(dplyr)
mpg_diff <- mpg %>%
  select(class, cty) %>%
  filter(class %in% c("compact","suv"))
head(mpg_diff)

table(mpg_diff$class)

 

 

(2) t.test()를 이용해 t 검정

- 추출한 mpg_diff 데이터를 지정하고, ~ 기호를 이용해 비교할 값cty(도시 연비) 변수비교할 집단class(자동차 종류) 변수 지정

- t 검정은 비교하는 집단의 분산이 같은지 여부에 따라 적용하는 공식이 다름. (여기서는 집단 간 분산이 같다고 가정하고 var.equalT를 지정)

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

 

① 출력된 t 검정 결과에서 'p-value'가 유의확률을 의미

(블로그 좌측 [Probability $ Statistics >> Lecture Summary] 의 '통계적 가설 검정이란?' 포스팅 참고)

    - 일반적으로 유의확률 5%를 판단 기준으로 삼고, p-value가 0.05 미만이면 '집단 간 차이가 통계적으로 유의하다'고 해석. 실제로는 차이가 없는데 이런 정도의 차이가 우연히 관찰된 확률이 5%보다 작다면, 이 차이를 우연이라고 보기 어렵다는 결론. 'p-value < 2.2e - 16'은 유의확률이 2.2*10^-16 보다 작다는 의미이므로 여기서 p-value가 0.05보다 작다는 의미이다.

따라서 이 분석 결과는 'compact 와 suv 간 평균 도시 연비 차이가 통계적으로 유의하다'고 해석할 수 있다.

 

② 'sample estimates'

    - 'sample estimates' 부분을 보면 각 집단의 cty 평균이 나타나 있음. "compact"는 20인 반면, "suv"는 13이므로, "suv"보다 "compact"의 도시 연비가 더 높다고 할 수 있음

 

 

 

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

인터랙티브 그래프(Interactive Graph)란?

- 마우스 움직임에 반응하며 실시간으로 형태가 변하는 그래프

 

** 참고

https://plot.ly/ggplot2/ 에 접속하면 plotly 패키지를 이용해 만든 인터랙티브 그래프들 직접 조작 가능

 

plotly

Plotly for ggplot2 is an interactive, browser-based charting library built on Plotly's open source javascript graphing library, plotly.js. It works entirely locally, through the HTML widgets framework.

plot.ly

 

 

■ plotly 패키지로 인터랙티브 그래프 만들기

(1) 패키지 준비하기

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

 

(2) ggplot2로 그래프 만들기

- ggplot2로 만든 그래프를 plotly 패키지의 ggplotly()에 적용하면 인터랙티브 그래프가 생성됨

- 먼저 ggplot()을 이용해 그래프 제작 (mpg 데이터를 이용할 예정)

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

 

(3) 인터랙티브 그래프 만들기

ggplotly(p)

 

(4) HTML로 저장하기

- 뷰어 창에서 [Export > Save as Web Page...]를 클릭하면 인터랙티브 그래프를 HTML 포맷으로 저장 가능

인터랙티브 산점도 그래프.html
4.14MB

 

(5) 인터랙티브 막대 그래프 만들기

- 산점도 외에도 ggplot2 패키지로 만든 그래프는 ggplotly()를 이용해 인터랙티브 그래프로 제작 가능

- ggplot2 패키지에 내장된 diamonds 데이터(다이아몬드 5만여 개의 캐럿, 컷팅 방식, 가격 등의 속성을 담은 데이터)를 이용해 막대 그래프를 만든 후 ggplotly()에 적용해 인터랙티브 그래프 제작

 

 

 

 

■ dygraphs 패키지로 인터랙티브 시계열 그래프 만들기

- 인터랙티브 시계열 그래프를 이용하면 마우스로 시간 축을 움직이면서 시간에 따라 데이터가 어떻게 변하는지 자세히 살펴볼 수 있음

- ggplot2 패키지에 내장된 economics 데이터를 이용해 그래프 제작 (economics는 실업자 수, 저축률 등 1967~2015년 미국의 월별 경제 지표를 담은 데이터)

 

(1) dygraphs 패키지 설치 및 로드

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

 

(2) economics 데이터 불러오기

economics <- ggplot2::economics
head(economics)

 

(3) 데이터 타입 변경하기

- ★ dygraphs 패키지를 이용해 인터랙티브 시계열 그래프를 만들려면 데이터가 시간 순서 속성을 지니는 xts 데이터 타입으로 되어 있어야 함

- xts()를 이용해 economics 데이터의 unemploy(실업자 수)를 xts 타입으로 변경

(참고: xts 패키지는 R에 내장되어 있으니 별도 설치 필요X)

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

 

(4) 인터랙티브 시계열 그래프 만들기

- dygraphs 패키지의 dygraph()를 이용해 인터랙티브 시계열 그래프 제작

dygraph(eco)

선 위에 마우스 커서를 올리면 그래프 우측 상단에 날짜와 실업자 수가 표시됨

 

(5) 날짜 범위 선택 기능

- dygraph()에 %>%를 이용해 dyRangeSelector()를 추가하면 그래프 아래에 날짜 범위 선택 기능이 추가됨

- 버튼을 움직여 특정 기간만 선택 가능하고, 범위를 정한 뒤 좌우로 움직이면 시간에 따른 데이터의 변화를 볼 수 있음

dygraph(eco) %>% dyRangeSelector()

 

 

(6) 여러 값 표현하기

- 인터랙티브 시게열 그래프여러 값을 동시에 표현 가능함 (시간을 중심으로 나머지 데이터들 표현 가능)

- economics 데이터의 unemploy(실업자 수)와 psavert(저축률)를 그래프에 함께 표현 가능

# 저축률
eco_a <- xts(economics$psavert, order.by = economics$date)

# 실업자 수
eco_b <- xts(economics$unemploy/1000, odrer.by = economics$date)

 

(7)

eco2 <- cbind(eco_a, eco_b)                   # 데이터 결합
colnames(eco2) <- c("psavert", "unemploy")    # 변수명 바꾸기
head(eco2)

 

(8) dygraph()를 이용해 인터랙티브 시계열 그래프 제작

dygraph(eco2) %>% dyRangeSelector()

마우스 커서를 올리면 그래프 우측 상단에 두 변수의 값이 동시에 표시됨

 

 

 

 

** 참고한 자료

- Plotly ggplot2 Library: https://plot.ly/ggplot2/

 

plotly

Plotly for ggplot2 is an interactive, browser-based charting library built on Plotly's open source javascript graphing library, plotly.js. It works entirely locally, through the HTML widgets framework.

plot.ly

- dygraphs for R: http://rstudio.github.io/dygraphs

 

dygraphs for R

The dygraphs package is an R interface to the dygraphs JavaScript charting library. It provides rich facilities for charting time-series data in R, including: Automatically plots xts time series objects (or any object convertible to xts). Highly configurab

rstudio.github.io

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

 

■ 선 그래프 - 시간에 따라 달라지는 데이터 표현하기

선 그래프(Line Chart): 데이터를 선으로 표현한 그래프

- 시간에 따라 달라지는 데이터를 표현할 때 이용  >> 공식: x축 - 시간(날짜)

 

** 시계열 데이터(Time Series Data): 일정 시간 간격을 두고 나열된 데이터 ex. 일별 환율

** 시계열 그래프(Time Series Chart): 시계열 데이터를 선으로 표현한 그래프

 

(1) 시계열 그래프 만들기

- economics는 미국의 경제 지표들을 월별로 나타낸 데이터

- 시간에 따라 실업자 수가 어떻게 변하는지 나타낸 시계열 그래프

- x축에는 시간(date), y축에는 실업자 수(unemploy)를 지정하고, 선 그래프를 표현하는 함수 geom_line() 사용

ggplot(data = economics, aes(x = date, y = unemploy)) + geom_line()

>> 실업자 수가 약 5년 주기로 등락을 반복하고, 2005년 이후 급격하게 증가했다가 2010년 이후 다시 감소하는 추세라는 것을 알 수 있음

 

(2) <혼자서 해보기>

Q. psavert(개인 저축률)가 시간에 따라 어떻게 변해 왔는지 알아보려고 합니다. 시간에 따른 개인 저축률의 변화를 나타낸 시계열 그래프를 만들어 보세요.

- x축에는 시간(date), y축에는 변화를 알아보려는 psavert를 지정하고, 선 그래프를 나타내는 함수 geom_line()을 이용

ggplot(data = economics, aes(x = date, y = psavert)) + geom_line()

 

 

 

■ 상자 그림 - 집단 간 분포 차이 표현하기

상자 그림(Box Plot): 데이터의 분포를 직사각형 상자 모양으로 표현한 그래프

- 상자 그림을 보면 분포를 알 수 있기 때문에 평균만 볼 때보다 데이터의 특징을 더 자세히 이해할 수 있다.

- 보통 x축에 범주형, y축에 연속형

- drv(구동 방식)별 hwy(고속도로 연비)를 상자 그림으로 표현하려면 x축을 drv, y축을 hwy로 지정한 후 상자 그림으로 표현하도록 하는 geom_boxplot() 함수를 사용

ggplot(data = mpg, aes(x = drv, y = hwy)) + geom_boxplot()

>> 상자 그림은 값을 크기 순으로 나열해 4등분 했을 때 위치하는 값인 '사분위수'를 이용해 그려짐.

 

상자 그림이 의미하는 내용 / 1.5 IQR: 사분위 범위(Q1~Q3 간 거리)의 1.5배

 

 

 

 

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

그래프(Graph)란?

- 데이터를 보기 쉽게 그림으로 표현한 것. 데이터를 그래프로 표현하며 추세와 경향성이 드러나기 때문에 특징을 쉽게 이해할 수 있고, 그래프를 만드는 과정에서 새로운 패턴을 발견하기도 함. 특히 분석 결과를 발표해야 한다면 데이터의 특징을 쉽게 이해할 수 있도록 그래프를 만드는 것이 좋음.

 

R 그래프의 종류

- 2차원 그래프, 3차원 그래프, 지도 그래프, 네트워크 그래프, 시간에 따라 변화하는 모션 차트, 마우스 조작에 반응하는 인터랙티브 그래프 등

 

사용하는 패키지

- ggplot2는 그래프를 만들 때 가장 많이 사용하는 패키지 / ggplot2 문법은 레이어(layer) 구조

1단계: 배경 설정(축)  /  2단계: 그래프 추가(점, 막대, 선)  /  3단계: 설정 추가(축 범위, 색, 표시)

 

 

■ 산점도 - 변수 간 관계 표현하기

산점도(Scater Plot): 데이터를 x축과 y축에 점으로 표현한 그래프

- 나이와 소득처럼 연속 값으로 된 두 변수의 관계를 표현할 때 사용됨 >> 변수 둘 다 연속형일 때

 

(1) 배경 설정하기

library(ggplot2)  #ggplot2 패키지 로드

# x축은 displ, y축은 hwy로 지정해 배경 설정
ggplot(data=mpg, aes(x=displ, y=hwy))

 

>> 코드를 실행하면 R 스튜디오 우측 하단에 있는 플롯 창에 배경 그림이 생성

 

(2) 그래프 추가하기

- + 기호를 이용해 그래프 유형을 지정하는 함수를 추가

- 산점도를 그리는 함수 geom_point()

(** 참고) dplyr 패키지 함수들은 %>% 기호로 연결하는 반면 ggplot2 패키지 함수들은 + 기호로 연결

# 배경에 산점도 추가
ggplot(data = mpg, aes(x = displ, y = hwy)) + geom_point()

>> 앞에서 만든 배경 위에 점 표식이 추가된 산점도가 만들어짐. 산점도에 표시된 점들은 각각의 관측치(행)를 의미하고, 여기서는 각 점이 하나의 자동차 모델을 의미.

전반적으로 배기량이 큰 자동차일수록 고속도로 연비가 낮은 경향이 있다는 것을 알 수 있음

 

(3) 축 범위를 조정하는 설정 추가하기

- 축은 기본적으로 최솟값에서 최댓값까지 모든 범위의 데이터가 표현되도록 설정되어 있음

- 축 범위는 xlim()과 ylim()을 이용해 지정 가능. xlim()을 이용해 x축을 지정하고, 축이 시작되는 값과 끝나는 값을 쉼표로 나열하면 됨. ex) x축이 3~6까지만 표현되도록 설정: xlim(3, 6) / y축이 10~30까지만 표현되도록 설정: ylim(10, 30)

# x축 범위 3~6으로 지정
ggplot(data = mpg, aes(x = displ, y = hwy)) + geom_point() + xlim(3, 6)

 

<참고>

ggplot() 함수는 레이어 구조로 되어 있어, 각각의 요소를 어떻게 지정하느냐에 따라 다른 그래프가 생성됨

 

 

Q. ggplot과 qplot의 차이?

- 이전까지는 그래프를 만들 때 qplot()을 사용. qplot()은 기능은 많지 않지만 문법이 간단하기 때문에 주로 전처리 단계에서 데이터를 빠르게 확인해보는 용도로 활용함. 그러나 최종적으로 분석 결과를 보고하기 위해 그래프를 만들 때는 ggplot()을 사용한다. ggplot()을 사용하면 다양한 그래프를 만들 수 있고 색, 크기, 폰트 등 세부 요소들을 자유롭게 조절할 수 있다.

 

 

 

■ 막대 그래프 - 집단 간 차이 표현하기

막대 그래프(Bar Chart): 데이터의 크기를 막대의 길이로 표현한 그래프

- 성별 소득 차이처럼 집단 간 차이를 표현할 때 주로 사용 >> 범주형 + 연속형 (~별 ~ / ~당 ~)

 

가장 많이 사용되는 막대 그래프는 각 집단의 평균값을 막대 길이로 표현한 평균 막대 그래프이다. mpg 데이터를 이용해 drv(구동방식)별 평균 hwy(고속도로 연비) 막대 그래프를 만들어 보자.

(1) 집단별 평균표 만들기

- 평균 막대 그래프를 만들려면 집단별 평균표로 구성된 데이터 프레임 필요 (구동 방식별 평균 고속도로 연비)

library(dplyr)

df_mpg <- mpg %>%
	group_by(drv) %>%
    summarise(mean_hwy = mean(hwy))

 

(2) 그래프 생성하기

- aes의 x축에 범주를 나타내는 변수를 지정하고, y축에 평균값을 나타내는 변수를 지정

- 막대 그래프 만드는 함수: geom_col()

ggplot(data = df_mpg, aes(x = drv, y = mean_hwy)) + geom_col()

 

(3) 크기 순으로 정렬하기

- 막대는 기본적으로 범주의 알파벳 순서로 정렬됨

- reorder()를 사용하면 막대를 값의 크기 순으로 정렬 가능. reorder()에 x축 변수와 정렬 기준으로 삼을 변수를 지정하면 됨. (정렬 기준 변수 앞에 - 기호를 붙이면 내림차순으로 정렬)

ggplot(data = df_mpg, aes(x = reorder(drv, -mean_hwy), y = mean_hwy)) + geom_col()

>> 참고: 변수의 값이 숫자와 문자로 함께 구성되면 숫자 오름차순, 알파벳 오름차순으로 정렬됨

 

Q. geom_col() vs geom_bar()?

- 평균 막대 그래프는 데이터를 요약한 평균표를 먼저 만든 후 이 평균표를 이용해 만든다. 반면 빈도 막대 그래프는 별도로 표를 만들지 않고 원자료를 이용해 바로 만든다. 요약표를 이용하는지 원자료를 이용하는지에 따라 그래프를 만드는 절차와 함수가 다르므로 유의

 

 

 

(출처; 가천대학교 컴퓨터공학과, 이영호 교수님)

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

+ Recent posts