'추세선'에 해당되는 글 1건

  1. 2019.11.06 :: GGPLOT2을 이용한 데이터 분석 (DIAMOND)
R 프로그래밍 2019. 11. 6. 11:05

R을 이용하여 Diamond의 데이터로 기하학적 객체들(점, 선, 막대 등)에 미적 특성(색상, 모양, 크기)를 매핑하여 시각적으로 분석합니다.

 

ggplot2

ggplot2는 다음과 같은 다섯 가지 사항으로 그림을 그립니다.

 

data

- 그래프를 그리려는 데이터로 구조는 데이터 프레임이고 데이터의 기록 방식은 long-farmat에 기반한 tidy data여야 합니다.

(aesthetic) Mapping

- 데이터의 요소와 그래프의 요소를 대응시키는 과정으로 그리고싶은 그래프가 필수적으로 요구하는 대응 요소를 만족시키면 됩니다. 하나의 변수가 여러가지 시각적 요소에 대응할 수 있습니다.

geometric object

- 어떤 형태의 그래프를 그릴지 지정해야 합니다. ggplot2에서는 이것을 geometric object라고 하며, 줄여서 geom이라고 합니다.

position

- 그래프의 형태를 지정했다면 그래프에서 각 도형이 어떤 식으로 배치될 지를 결정할 수 있습니다. 이러한 옵션을 position이라고 합니다. 막대그래프나 선 그래프라면 누적 그래프를 그리거나 할 때 position 옵션을 조정해 형태를 변경할 수 있습니다.

statistical transformation

- 값이 어떻게 그래프에 반영되는지 결정하는 옵션입니다. 줄여서 stat 이라고 합니다. 히스토그램과 같이 구간 내에 존재하는 값의 개수를 세거나 밀도를 계산하는 등, 주어진 값을 변형시켜서 그래프에 반영시킬 때 사용합니다.

 

자료 시각화의 핵심

plot = data + aesthetics + geometry

 

data : 무엇을 시각화할 것인가?

geom : 무엇으로 시각화할 것인가? 예)점, 선, 막대 등

aesthetics : 어떤 시각적 특성(visual attributes)를 사용할 것인가? 예) 위치(x,y), 크기(size), 모양(shape), 색깔(col) 등

 

ggplot2 기본 문법

1. 축을 그립니다.  (x축,y축을 정해줍니다.)

ggplot(데이터명, aes(x=변수1,y=변수2))

 

2. 그래프를 그립니다.

geom_bar()            막대 도표를 그립니다.

geom_histogram()   히스토그램을 그립니다.

geom_boxplot()      박스 플롯을 그립니다.

geom_line()            선 그래프를 그립니다.

geom_point()         포인트 그래프를 그립니다.

geom_smooth()      추세선을 그립니다.

geom_violin()         바이올린 박스 플롯을 그립니다.

 

3. 기타 옵션을 수정하여, 그래프를 정교화 합니다.

labs()               범례 제목 수정

ggtitle()            제목 수정

xlabs(), vlabs()    x축,y축 이름 수정

 

diamonds

우선은 ggplot2부터 인스톨 하겠습니다.

 

install.packages("ggplot2")

library(ggplot2)

 

저희가 활용할 객체는 ggplot의 diamonds입니다.

View를 활용하여 정보를 얻을 수 있습니다.

 

View(diamonds)

 

질적자료인지 양적 자료인지 헷갈리시면 str을 이용해 편하게 구분 하실 수 있습니다.

 

str(diamonds)

 

diamonds의 자료구성입니다.

질적자료는 숫자로 표시될 수 없는 자료를 가르킴으로 factor형인 cut, clarity, color가 있습니다.

 

어떤 데이터를 사용할 것인지 지정하시려면 다음과 같이 작성하시면 됩니다.

g <- ggplot(data=diamonds, aes(x=cut))

 

그 후 변수에 데이터를 넣은 후 출력형식을 +로 연결해주시면 됩니다.

g + geom_bar()

 

위에 것을 실행하시면 cut의 막대그래프가 나올 것입니다.

질적 변수인 cut을 기준으로 도수의 크기를 비교한 막대그래프입니다.

 

 

양적자료인 carat은 막대그래프가 아닌 히스토그램을 사용하시면 됩니다.

 

g <- ggplot(data=diamonds, aes(x=carat))

g + geom_histogram(binwidth = 1 )
g + geom_histogram(binwidth = 0.1 ) 

 

히스토그램의 계급수를 변경하는 등 작성자의 주관적인 판단에 해석이 좌우 될 수 있습니다.

 

다음은 line을 실습해 보겠습니다.

x축은 carat, y축은 price로 line을 만들어 보겠습니다.

g <- ggplot(data=diamonds, aes(x=carat,y=price))
g+geom_line()

그래프가 변동이 변동이 심하고 알아보기도 힘든 것을 확인하실 수 있습니다.

한번 color 변수를 넣어보겠습니다.

 

g+geom_line(aes(colour=color))

 

carat의 크기와 색에 따라서 가격이 상승된다는 것을 알 수 있습니다.

 

이번에는 포인트 그래프를 만들어 보겠습니다. 변수로는 carat과 price, clarity를 비교해보겠습니다.

 

ggplot(data=diamonds, aes(x=carat,y=price, colour=clarity)) + 
    geom_point()

그래프를 보시면 노란색 점이 위쪽으로 많이 분포되어있고, 검은색 점이 아래쪽에 많이 분포되어있음을

알 수 있습니다. 간단하게 해석해보면 다이아몬드에 결점이 적을수록 가격이 높으며, 무게가 큰 것은 찾기

힘들다는 것을 알 수 있습니다.

 

이번에는 위에 있는 포인트그래프에 추세선을 그려보겠습니다.

 

ggplot(data=diamonds, aes(x=carat,y=price, colour=clarity)) + 
     geom_point() +
     geom_smooth()

위에 있었던 포인트나 라인그래프같이 무수한 데이터들로 이루어진 산포도로는 그 경향을 정확히 읽어내기가 어렵습니다. 이런 경우, 추세선을 통하여 그 경향을 좀 더 편하게 읽을 수 있습니다.

posted by 스노(Snow)
: