ggplot2를 이용한 산포도 작성 (예제 포함)

 

그래프는 데이터 분석 과정의 세 번째 부분이다. 첫 번째 부분은 데이터 추출(data extraction)에 관한 것으로, 두 번째 부분은 클린징(cleansing)과 데이터 조작(data manipulation)을 다룬다. 마지막으로 데이터 과학자는 자신의 결과를 그래픽으로 전달(시각화 : visualization)해야 하는 것이다.

데이터 과학자의 일은 다음 그림에서 검토될 수 있다.

img

 

이 튜토리얼에서, 다음에 대하여 학습한다.

 

ggplot2 패키지

튜토리얼의 이 부분은 R로 그래프/차트를 만드는 방법에 초점을 맞춘다.

이 튜토리얼에서는 ggplot2 패키지를 사용할 것이다. 이 패키지는 2005년 Wilkinson에 의해 쓰여진 '그래픽의 문법(Grammar of Graphics)'의 일관된 기초 위에 만들어졌으며, ggplot2는 매우 유연하며, 많은 주제와 플롯 사양을 높은 추상화 수준에서 통합한다. ggplot2로는 3차원 그래픽과 인터랙티브 그래픽을 만들 수는 없다.

ggplot2에서 그래프는 다음과 같은 인수로 구성된다.

 

당신은 튜토리얼에서 그러한 인수들을 제어하는 방법을 배우게 될 것이다.

ggplot2의 기본 구문은 다음과 같다.

인수 :

 

산포도

ggplot이 mtcar 데이터 세트에서 어떻게 작동하는지 확인해 보자. 먼저 mpg 변수와 drat 변수의 산포도를 작성하기로 한다.

 

기본 산포도

코드 설명 :

결과 :

1569992347523

 

 

그룹별 산포도

때로는 데이터 그룹(즉, factor 수준 데이터)에 의해 값들을 구별하는 것이 흥미로울 수 있다.

코드 설명 :

결과 :

1569992375136

 

축 변경

데이터의 척도 변경은 이터 과학자의 업무에서 큰 부분을 차지한다. 드물게 데이터는 멋진 종 모양으로 나온다. 데이터를 특이치(outlier)에 덜 민감하게 만드는 한 가지 해결책은 데이터의 크기를 다시 조정하는 것이다.

코드 설명 :

주의 : 다른 변환은 표준화(standardization)와 정규화(normalization) 등을 적용할 수 있다.

결과 :

img

 

예측 값(fitted value)의 산포도

그래프에 다른 수준의 정보를 추가할 수 있다. 선형 회귀 분석에 의한 예측값(fitted value)을 표시할 수 있다.

코드 설명 :

결과 :

img

주의 : 이용가능한 평활 방법은 다음과 같다.

 

그래프에 정보 추가

지금까지 그래프에 정보를 추가하지 않았다. 그래프는 많은 정보를 담고 있어야 한다. 독자는 추가 문서를 참조하지 않고 그래프를 보는 것만으로도 데이터 분석 뒤에 숨어있는 스토리를 보아야 한다. 따라서 그래프는 좋은 라벨을 필요로 한다. lab() 함수를 사용하여 라벨을 추가할 수 있다.

lab() 함수의 기본 구문은 다음과 같다 :

인수 :

 

제목 추가

추가해야 할 하나의 필수 정보는 분명히 제목(title)이다.

코드 설명 :

결과 :

img

 

동적 이름을 갖는 제목 추가

동적 제목(dynamic title)은 제목에 더 정확한 정보를 추가하는 데 도움이 된다.

정적 텍스트(static text)와 동적 텍스트(dynamic text)를 출력할 paste() 함수를 사용할 수 있다. paste()의 기본 구문은 다음과 같다.

인수 :

예제 :

결과 :

 

결과 :

 

이제 우리의 그래프에 동적 이름, 즉 mpg의 평균을 추가할 수 있다.

코드 설명 :

결과 :

img

 

부제목 추가

두 가지 추가 세부 사항이 그래프를 더 명확하게 만들 수 있다. 부제목(subtitle)과 캡션(caption)을 말하고 있는 것이다. 부제목(subtitle)은 제목(title) 바로 아래에 있다. 캡션(caption)은 누가 계산을 했는지 그리고 데이터의 출처에 대하여 알려줄 수 있다.

코드 설명 :

결과 :

img

 

x축과 y축의 제목 설정

데이터 세트에 있는 변수 자체는 항상 명시적이지 않으며 또는 복수의 단어(예: GDP_CAP)가 있는 경우 관례상 _를 이용한다. 당신은 그런 이름이 당신의 그래프에 나타나기를 원하지 않는다. 이름을 변경하거나 단위와 같은 세부사항을 추가하는 것이 중요하다.

코드 설명 :

결과 :

img

 

척도의 제어

축의 척도를 조절할 수 있다.

seq() 함수는 연속된 숫자(수열, sequence)를 만들 필요가 있을 때 편리하다. 기본 구문은 다음과 같다 :

인수 :

 

예를 들어, 0에서 12까지 4을 단계로 하는 범위를 생성하고자 한다면, 0, 4, 8, 12 등의 네 개의 숫자가 생성될 것이다.

결과 :

 

여러분은 x-축과 y-축의 척도를 다음과 같이 제어할 수 있다.

코드 설명 :

결과 :

img

 

테마

마지막으로, R은 우리가 다양한 테마로 플롯을 커스터마이징할 수 있게 해준다. ggplot2 라이브러리에는 다음과 같은 8가지 테마가 포함되어 있다 :

결과 :

img

 

그래프 저장

이 모든 단계를 거쳐, 그래프를 저장하고 공유할 시간이다. 그래프를 그린 직후 ggsave('FILE의 이름')를 추가하면 하드 드라이브에 저장된다.

그래프는 작업 디렉토리에 저장된다. 작업 디렉토리를 확인하려면 다음 코드를 실행한다 :

환상적인 그래프를 그려보고, 저장하고, 위치를 확인해보자

결과 :

img

Output:

주의 : 교육적 목적으로만, 우리는 당신을 위해 디렉토리 폴더를 열기 위한 open_folder()라는 함수를 만들었다. 아래 코드를 실행하여 사진이 저장되어 있는 위치를 확인하고, my_fantastic_plot.png 파일 이름을 확인하십시오.

 

요약

아래 표에 산포도를 작성하기 위한 인수를 요약한다 :

목적코드
기본 산포도ggplot(df, aes(x = x1, y = y)) + geom_point()
컬러 그룹 산포도ggplot(df, aes(x = x1, y = y)) +<br /> geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
예측치 추가ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
제목 추가ggplot(df, aes(x = x1, y = y)) + <br />geom_point() + <br />labs(title = paste("Hello Guru99"))
부제목 추가ggplot(df, aes(x = x1, y = y)) + <br />geom_point() + labs(subtitle = paste("Hello Guru99"))
x축 재설정ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1")
y축 재설정ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1")
척도의 제어ggplot(df, aes(x = x1, y = y)) + <br />geom_point() + <br />scale_y_continuous(breaks = seq(10, 35, by = 10)) + <br />scale_x_continuous(breaks = seq(2, 5, by = 1)
log 생성ggplot(df, aes(x =log(x1), y = log(y))) + geom_point()
테마ggplot(df, aes(x = x1, y = y)) + geom_point() + <br />theme_classic()
저장ggsave("my_fantastic_plot.png")