R 프로그래밍

[R] ggplot2 발표 자료 코드

스노(Snow) 2021. 6. 2. 23:44

# 대부분 인스톨이 되어 있겠지만 혹시 안되시는 분들을 위해 패키지 인스톨부터시작 하겠습니다
# 우선은 intall.packages를 활용해 ggplot2를 인스톨 받으신후 라이브러리를 통해 ggplot2를 적용 시키시면 됩니다.
ggplot2 
install.packages("ggplot2")
library(ggplot2)
install.packages("gridExtra")
library(gridExtra)
#grid.arrange(p1, p2, ncol=2)
##########+############################################################################
#저희가 활용할 객체는 ggplot의 객체인 diamonds입니다.
#View를 활용해서 정보를 보도록 하겠습니다.
View(diamonds)
#diamonds에는 질적자료와 양적자료가 있는데, 질적자료 3가지를 찾아주시기 바랍니다.
#혹시 질적자료와 양적 자료가 헷갈리시면 str을 이용해 편하게 구분 하실 수 있습니다.
str(diamonds)
# diamiond의 자료구성입니다.
# 질적자료는 숫자로 표시될 수 없는 자료를 가르킴으로 fctor형인 cut, clarity, color가 있습니다.
# 그외의 자료들은 양적자료로 자료 자체가 숫자로 표현되어 있다. 여기서는 carat,depth,table,price 등이 있습니다.

# 앞에서 배웠던 것을 토대로 cut에 대해 그래프로 표현해 보시기 바랍니다.
# 힌트는 cut은 질적자료이며, x축만 제공하기에 막대형식의 그래프를 사용하시면 됩니다.
# 안되거나 기억이 안나시는 부분은 손들어주시면 보조강사분들이 가겠습니다.

#qplot과 ggplot으로 작성하신 분들이 있을텐데요
#qpolt과 ggplot의 차이는 무엇일까요? 츄파춥스준다.
#qplot은(quick plot)으로 데이터와 표현방식을 함께 기입하여 코드의 길이가 매우 짧으며 간단한 반면에
#ggplot은 데이터 입력후 "+"를 사용해 그래프 형식을 정해주어야합니다. 불편해 보이지만 +를 사용함으로 추가가 용이합니다.
#ggplot이 더 복잡한 작업을 할때 시각화부분에 더 강력하다고 할 수 있습니다.
#말 그대로 qplot은 빠르게 plot 할 때 (그래프를 그릴 때) 사용하는 것이고
#ggplot(grammer of graphic)은 문법대로 더 상세하게 구현할 때 사용한다고 한다


qplot(cut,data=diamonds) 
qplot(cut,data=diamonds,geom="bar",xlab="cut",ylab="count") #geom의 default값이 "bar", ylab으로 이름설정

ggplot(data=diamonds, aes(x=cut))+geom_bar() #이와 같이 작성은 가능하지만


g <- ggplot(data=diamonds, aes(x=cut)) #어떤 데이터를 사용할 것인지만 지정된 상태
g + geom_bar()   #변수에 데이터를 넣은 후 출력형식을 +로  연결해주시면 됩니다.
#이와같이 지속적으로 추가시킬수 있습니다.
# x축만 제공됨으로 y축이 필요한 함수는 추가할 수 없습니다.

# cut의 막대그래프 - 질적 변수인 cut을 기준으로 도수의 크기를 비교한 막대그래프


###########################################################################################


# 방금전에 cut은 질적자료였죠 그럼 carat은 무슨 자료일까요?

# 잘적자료는 바를 사용한다면 양적자료는 무엇을 사용할까요?

# 막대그래프와 히스토그램의 차이가 무엇인가요?

# carat을 그래프로 표현해 보시기 바랍니다.

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

g + geom_histogram(binwidth = 1 )
g + geom_histogram(binwidth = 0.1 )
g + geom_histogram(binwidth = 0.05 )
# 앞의 히스토그램의 계급의 수를 변경하는 등 작성자의 주관적인 판단에 좌우되어 해석이 좌우된다.

##############################################################################################
#다음은 line을 실습해 보겠습니다.
#line은 질적변수를 사용하지 않고 X축과 Y축 변수가 필요합니다.
#x축은 케럿 y축은 프라이스로 line을 만들어보세요

g <- ggplot(data=diamonds, aes(x=carat,y=price))
g+geom_line()
#x,y값만으로 했을때 그래프가 변동이 심하죠 이거는 다른 변동요인 있을 수 있다는걸 뜻합니다.
#컬러변수를 넣어서 확인해볼까요"?
g+geom_line(aes(colour=color))

#캐럿에 따라 가격 상승, 색에따라서 가격 상승
# line여기서 마치고 이어서 point부터는 이용희학생이 진행하겠습니다.






















#############################################
# 이어서 발표하겠습니다.(지옴 지오메틱)
# 포인트 그래프는 x축과 y축을 설정한 뒤 geom_point()를 추가하면 그려집니다.
# 케럿과 프라이스 변수로 포인트 그래프를 만들어보세요.
ggplot(data=diamonds, aes(x=carat,y=price)) + 
  geom_point()
# 수많은 점이 찍힌것을 볼 수 있으시죠?
# 이제 이 그래프에 깨끗한 정도의 변수를 넣어 색을 변경해보겠습니다.
# 변수에 따라 point를 다르게 표현하고 싶다면 aes에서 설정해주면 됩니다.
# aes에 컬러는 클라리티를 넣어 확인해봅시다.
ggplot(data=diamonds, aes(x=carat,y=price, colour=clarity)) + 
  geom_point()
# 클라리티 변수에 따라 포인트들의 색이 변경되었음을 보실 수 있으실겁니다.
# 그래프를 보시면 노란색 점, 즉 결점이 적은 다이아가 위쪽으로 많이 분포해있고,
# 검은색 점이 아래쪽에 많이 분포되어있음을 알 수 있습니다.
# 간단하게 해석해보면 다이아몬드에 결점이 적을수록
# 가격이 높으며, 무게가 큰 것을 찾기 힘들어진다는 것을 알 수 있습니다.

# 이제 추세선을 그려보겠습니다.
# 앞에 있었던 포인트나 라인같이 무수한 데이터들로 이루어진 산포도로는
# 그 경향을 읽어내기가 어렵습니다.
# 이런 경우, 추세선을 통해 그 경향을 읽을 수 있습니다.
# 추세선은 geom=smooth를 통해 표현할 수 있습니다.
# 앞에 그렸던 포인트 그래프에 스무스를 추가하여 보세요.
ggplot(data=diamonds, aes(x=carat,y=price, colour=clarity)) + 
  geom_point()+
  geom_smooth()
# (만약 포인트에 aes를 넣어 만든사람은 한개의 회귀선만 나타난다. ase(colour=clarity)라는
# 옵션은 디폴트로 주어진 것이 아니라 추가적인 레이어에서 새롭게 설정된 값이라서)
# 그래프를 보시면 clarity에 따른 각각의 회귀선이 나타남을 알 수 있습니다.
# 이는 맨 처음 레이어에서 colour=clarity옵션까지 디폴트로 적용되었기 때문입니다.

# 이제 박스플롯을 그려보겠습니다.

# boxplot은 중앙값, 최대값, 최솟값, 사분위를 사용하여 자료의 측정값들이 어떤 모양
# 으로 분포되어 있는지 알려줍니다.
# 클라리티와 케럿에 대한 상자그림을 그려보세요.
ggplot(data=diamonds, aes(x=clarity,y=carat)) + 
  geom_boxplot()
# boxplot을 통해서 이상치나 자료의 대칭성, 산포도, 중앙값등을 한 눈에 볼 수 있습니다.
# boxplot의 색과 크기는 fill,color,width 지정을 통해 바꾸어 줄 수 있습니다.
ggplot(data=diamonds, aes(x=clarity,y=carat)) + 
  geom_boxplot(fill='slategrey',color='darkslategrey',width=0.3)
# (이상치를 없애려면 oulier.shape를 NA로 지정해주시면 됩니다.)
# 중앙값 이외에도 평균을 알고 싶다면 stat_summary를 통해 평균을 추가해줄 수 있습니다.
ggplot(data=diamonds, aes(x=clarity,y=carat)) + 
  geom_boxplot()+
  # fun.y 인자를 설정해주면 x값에 대응하는 y값을 구할 수 있습니다.
  # stat_summary 함수에서 fun.y 인자에 mean을 입력해주면 그래프에 평균값이 나타나게 됩니다.
  stat_summary(fun.y="mean", geom="point", shape=22, size=3, fill="blue")

# 박스플롯에 분포의 형태를 보다 구체적으로 표현하는 방법으로는 violin plot이 있습니다.
# 클라리티와 프라이스의 바이올린 플롯을 그려보세요
ggplot(data=diamonds, aes(x=clarity,y=price)) +
  geom_violin()
# 바이올린 그래프를 보면 분포가 옆으로 나열되기 때문에 아까 봤던 포인트처럼 데이터가
# 무수히 많을 때 분포를 비교하기 힘들었던 자료도 쉽게 비교할 수 있습니다.

# 이렇게 기초 통계와 ggplot2의 그래프들 중 7가지 그래프를 알아봤습니다.