r 기초 2 데이터시각화 - seoul national...

27
R 기초 2 데이터 시각화 한국어 정보의 전산 처리 2019. 4. 9.

Upload: others

Post on 24-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

R 기초 2데이터 시각화

한국어 정보의 전산 처리

2019. 4. 9.

Page 2: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

ggplot2 기초: 함수 호출의 기초적 방법• Grammar of Graphics를 구현. Hadley Wickam이 만들었음.

• ggplot이라는 기본 함수와 geom(geometry) function이라는 layer를 결합하여 plot을 그림.

• 함수 호출의 기본 개요• ggplot(data=<data>) + geom_<...>(mapping=aes(x=…, y=…))

• geometry function의 mapping argument에 aes(aesthetics) 함수를 연결함.• aes 함수에서는 x, y 좌표축에 연결할 변수를 제시하고• 그 외의 변수도 추가로 지정할 수 있음.• mapping은 ggplot 함수의 argument로 제시할 수도 있음.

• 붉은색 부분은 고정된 것이므로, 생략해도 됨.

• ggplot(mpg) + geom_point( aes(displ, hwy) )• mpg(자동차 모델별 정보)라는 데이터(테이블)에서 displ 변수(엔진 크기: 리터 수)를

x축으로, hwy(고속도로 연비)를 y축으로 하여, 각 모델을 이 좌표축 위에 점으로 나타냄.

Page 3: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

aes 함수의 mapping, attribute• aes 함수에 x, y 좌표뿐 아니라, 기타 변수의 값에 따른 구분을 색깔(color), 모양(shape. 6개까지), 농도(alpha), 크기(size) 등으로 나타낼 수 있음.

• ggplot(mpg) + geom_point( aes(displ, hwy, color=class) )• class 구분(SUV, 2-seat, compact 등)을 색깔로 구분

• ggplot(mpg) + geom_point( aes(displ, hwy, shape=drv) )• drv 구분(4륜구동, 전륜구동, 후륜구동)을 모양으로 구분

• ggplot(mpg) + geom_point( aes(displ, hwy, alpha=cyl) )• cyl(실린더 수)을 농도로 구분

• ggplot(mpg) + geom_point( aes(displ, hwy, size=year) )• year(출시 연도)를 크기로 구분

• ggplot(mpg) + geom_point( aes(displ, hwy, color=class, shape=drv))• class를 색깔로, drv를 모양으로 구분

• ggplot(stu) + geom_point(aes(kor,math, color=job, shape=gender, size=class)) 국어(x축), 수학(y축), 직업(색), 성별(모양), 계층(크기)

Page 4: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 5: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 6: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

Facet을 이용한 多패널 plot• aes 함수 내에서 x, y 좌표 외에 제3의 변수를 색깔 등으로 나타내는방법 외에, 제3의 변수가 범주형 변수인 경우, 이 변수의 값에 따라facet을 나누어 그래프를 따로 그릴 수도 있음.• ggplot(mpg) + geom_point(aes(displ, hwy)) + facet_wrap(~class, nrow=2)

• x축=displ, y축=hwy로 하되, class의 값에 따라 7개의 facet으로 나누어 제시

• ggplot(stu) + geom_point(aes(kor,math)) + facet_wrap(~job, nrow=2)

• x축=kor, y축=math로 하되, job의 값에 따라 7개의 facet으로 나누어 제시

• 제3 변수, 제4 변수를 조합하여 grid 형태로 제시할 수도 있음.• ggplot(mpg) + geom_point(aes(displ, hwy)) + facet_grid(drv~cyl)

• drv(3가지 값)×cyl(4가지 값)=12가지 facet으로 나누어 제시

• ggplot(stu) + geom_point(aes(kor,math)) + facet_grid(party~class)

• party(2가지 값)×class(3가지 값)=6가지 facet으로 나누어 제시

Page 7: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 8: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

geom function들

• scatterplot을 그려 주는 geom_point 함수 외에도 여러 geom 함수들이있음. 함수의 이름은 plot의 종류와 대개 일치.

• geom_smooth: 두 수치 변수의 관계를 보여 주는 추이선(smooth) 및 표준오차범위(standard error)를 보여줌

• geom_boxplot: 관측치들의 분포를, 범주형 변수의 값 별로 boxplot으로보여줌

• geom_histogram

• geom_freqpoly

• geom_bar: 범주형 변수의 분포를 보여줌.

• geom_path, geom_line: 관측치들의 시간에 따른 변화 추이 양상을 선으로 나타냄. 후자는 좌→우만 가능. 전자는 어느 방향이든 가능.

Page 9: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

geom_smooth• ggplot(stu) + geom_smooth(aes(math,phy))

• x축=수학점수, y축=물리점수, 청색 선=smooth, 회색 띠=smooth를 중심으로 한오차범위. 두 변수가 대체로 비례

• ggplot(mpg) + geom_smooth(aes(displ,hwy))• x축=엔진크기, y축=고속도로연비, 이 둘이 대체로 반비례

• geom_point와 geom_smooth를 함께 쓸 수도 있음.• ggplot(stu) + geom_point(aes(math,phy)) + geom_smooth(aes(math,phy))

• 수학점수와 물리점수의 관측치들에 대한 scatterplot과 smooth를 함께 제시

• aes 함수의 mapping 내용이 두 geom 함수에 공통되므로, 공통 부분을 ggplot 함수의 argument로 몰아서 제시할 수도 있음.

• ggplot( stu, aes(math,phy) ) + geom_point() + geom_smooth()

• ggplot( mpg, aes(displ,hwy) ) + geom_point() + geom_smooth()

Page 10: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 11: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

geom_smooth의 attribute• geom_point 함수에서 색깔, 모양, 농도, 크기 등의 attribute를 사용할 수있듯이, geom_smooth에서도 linetype 등의 attribute를 사용할 수 있음.

• ggplot( stu, aes( math, phy ) ) + geom_point() + geom_smooth( aes( linetype=gender ) )• 수학, 물리 smooth 곡선을 그리되, 성별에 따라 선 모양을 구분하여 그림

• linetype 대신 group을 사용하면, 선 모양은 같되, smooth 곡선을 따로 그림

• ggplot( stu, aes( math, phy, color=gender ) ) + geom_point() + geom_smooth( aes( linetype=gender ) )• color=gender가 ggplot 함수의 argument 속에 들어 있으므로, geom_point와

geom_smooth 양쪽에 다 적용됨.

• ggplot( stu, aes( math, phy ) ) + geom_point() + geom_smooth() + facet_wrap( ~gender, nrow=2 )• 수학, 물리 사이의 관계 그래프를 성별에 따라 두 facet으로 나누어 따로 그림

Page 12: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 13: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

geom_smooth의 method• geom_smooth 함수의 method parameter: smooth 곡선을 fitting할 때사용할 통계모델과 방법을 지정함.

• default argument: loess• n(관측치의 개수)이 작을 때 적당.

• local regression(최소제곱법)을 사용

• 곡선의 구불구불한 정도(wiggliness)를 span parameter로 지정. 0(매우 구불구불)~1(구불구불하지 않고 매끈함)

• ggplot(stu,aes(math,phy)) + geom_point() + geom_smooth(span=0.7)

• ggplot(stu,aes(math,phy)) + geom_point() + geom_smooth(span=0.2)

• lm(linear model) method: 두 변수 사이의 관계가 선형 관계라고 전제• ggplot(stu,aes(math,phy)) + geom_point() + geom_smooth(method=lm)

• gam(generalized additive model) method: mgcv 패키지 load 필요• ggplot(stu,aes(math,phy)) + geom_point() + geom_smooth(method=gam,

formula = y~s(x))

Page 14: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 15: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

geom_boxplot

• 범주형 변수를 x축에, 수치형 변수를 y축에 표시.

• ggplot( stu, aes( job, avg ) ) + geom_boxplot()• job별로 avg의 boxplot을 그림

• ggplot( stu, aes( job, avg ) ) + geom_boxplot() + coord_flip()• 90도 돌려서 제시함. x축 각 범주의 이름이 길어서 겹칠 때 유용.

• ggplot( stu, aes( job, avg ) ) + geom_violin()• box 모양 대신 violin 모양으로 보여줌

• 어느 수치대에 관측치들이 몰려 있는지를 알아보고 싶을 때 유용

• ggplot( stu, aes( gender, avg ) ) + geom_boxplot()

• ggplot( stu, aes( party, avg ) ) + geom_boxplot()

• ggplot( stu, aes( class, avg ) ) + geom_boxplot()

Page 16: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 17: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

geom_bar• 범주형 변수의 빈도를 barplot으로 보여줌.

• ggplot( stu, aes( job ) ) + geom_bar()

• 모든 geom_*** 함수는 stat_*** 함수를 자동 호출하며

• default로 연결된 stat_*** 함수가 있음.

• geom_bar와 default로 연결된 것은 stat_count

• stat_count 함수는 범주형 변수의 빈도를 계산해 줌.

• stat_*** 함수를 호출해도, 마찬가지로 이와 default로 연결된 geom_*** 함수가 함께 자동 호출됨.

• geom_***와 stat_*** 사이의 이러한 default 연결을 바꿔 줄 수도 있음.• ggplot( stu, aes( name, avg ) ) + geom_bar( stat="identity" ) + coord_flip()

• name의 값의 빈도를 보여주는 게 아니라, y축을 avg로 명시했음.

• ggplot(stu) + geom_bar(aes(x=job, y=..prop.., group=1))

• job의 값의 빈도 대신 비율을 보여줌.

Page 18: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 19: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

geom_bar의 attribute들• color: 막대의 윤곽선에 색깔이 추가됨.

• ggplot(stu) + geom_bar( aes( job, color=job) )

• fill: 막대 내부에 색깔이 채워짐.• ggplot(stu) + geom_bar( aes( job, fill=job) )

• x축 변수와 attribute에 연결하는 변수를 달리하면, 막대 내부에서 구분을 보여줌.• ggplot(stu) + geom_bar( aes( job, fill=gender) )

• position이라는 parameter는 “dodge”, “fill”, “identity” 값을 가질 수 있음.• position parameter의 default는 “stack”

• 주의: color, fill은 aes 내부에 제시하는 반면에, position은 aes 바깥에 제시.

• identity: 막대들이 겹치게 됨. 2D geom에 적당.

• fill: 각 막대의 길이를 동일하게 함. 비율 비교에 적당.• ggplot(stu) + geom_bar(aes( job, fill=gender), position="fill" )

• dodge: x축 범주형 변수의 각 값마다, fill 범주형 변수의 각 값에 해당하는 막대들을(stack식이 아니라) 옆에 나란히 보여줌.• ggplot(stu) + geom_bar(aes( job, fill=gender), position=“dodge" )

Page 20: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 21: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

jitter• scatterplot을 그릴 때, 동일한 관측치가 있으면 둘 이상의 관측치가 하나의 점으로 표시됨.

• 이 경우, 어느 부분에 관측치가 많이 몰려 있는지를 보려 할 때, 실제 자료의 빈도를 그래프가 제대로 반영하지 못하게 됨.

• 점의 위치에 약간의 오차를 도입하면 점들이 겹치지 않게 됨.

• ggplot(mpg, aes(displ, hwy)) + geom_point( position="jitter" )

• ggplot(mpg, aes(displ, hwy)) + geom_jitter()

• 특히 x축 변수가 범주형 변수일 때는 관측치가 동일 위치에 몰리는 현상이 두드러지므로, jitter가 유용함.• ggplot(mpg, aes(drv, hwy)) + geom_point()

• ggplot(mpg, aes(drv, hwy)) + geom_jitter()

Page 22: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 23: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

geom_histogram, geom_freqpoly

• histogram: 수치형 변수 1개를 x축에 일정한 범위(bin)로 묶어서 각 bin에 속하는 관측치의 빈도를 보여줌.

• ggplot( stu, aes(avg) ) + geom_histogram()

• default bin의 개수는 30개

• ggplot( stu, aes(avg) ) + geom_histogram( binwidth=5 )• bin의 폭을 5로 설정

• freqpoly: histogram과 비슷한 것을 꺾은선 그래프로 보여줌

• ggplot( stu, aes(avg) ) + geom_freqpoly( binwidth=1 )

• ggplot( stu, aes(avg) ) + geom_freqpoly( binwidth=5 )

• 범주형 변수를 attribute로 추가할 수 있음.

• ggplot( stu, aes(avg, color=gender) ) + geom_freqpoly( binwidth=5 )

Page 24: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 25: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

시계열과 geom_line, geom_path• geom_line과 geom_path는 시계열(time series) 자료, 즉 시간의 흐름에 따른데이터의 변화 추이를 보여주는 데 적합.

• geom_line은 좌→우의 방향만 가능

• geom_path는 어느 방향이든지 가능

• 연도별 실업률 추이• ggplot(economics, aes(date, unemploy / pop)) + geom_line()

• 연도별 실업 주수 중앙값 추이• ggplot(economics, aes(date, uempmed)) + geom_line()

• x=실업률, y=실업주수중앙값• ggplot(economics, aes(unemploy/pop, uempmed)) + geom_point() + geom_path()

• 추이선=회색, 관측치 농도를 연도별로 다르게 함.• year <- function(x) as.POSIXlt(x)$year + 1900• ggplot(economics, aes(unemploy/pop, uempmed)) +

geom_point(aes(color=year(date))) + geom_path(color="grey50")

Page 26: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)
Page 27: R 기초 2 데이터시각화 - Seoul National Universityhosting03.snu.ac.kr/~korean/old/data/han/0409.pdf · 2019-04-08 · •geom_point와geom_smooth를께 쓸수도있음. •ggplot(stu)

ggplot의 geom_*** 총괄

• cheatsheet : https://www.rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf

• 1변수 plot: y축은 빈도• 범주형(이산형) 변수: geom_bar

• 수치형(연속형) 변수: geom_histogram, geom_freqpoly

• 2변수 plot• x축 변수, y축 변수 둘 다 수치형(연속형) 변수: geom_point,

geom_smooth

• x축 변수는 범주형(이산형)이고 y축 변수는 수치형: geom_bar, geom_boxplot, geom_violin