Data Analysis/R

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

여름시 2022. 12. 29. 13:49
반응형
인터랙티브 그래프란?

 

마우스 움직임에 반응하여 실시간으로 변하는 그래프를 의미합니다.

그래프 결과를 HTML파일로 저장하면, R을 사용하지 않는 일반 사용자들도 그래프를 조작할 수 있습니다.

 

1. iris 데이터로 인터랙티브 그래프 만들기

패키지 설치

 

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

 

그래프 만들기

 

iris 데이터를 이용해서 간단하게 산점도를 그려보겠습니다.

x축은Sepal.Length, y축은 Petal.Width로 설정하고 색상은 Species에 따라 다른 색으로 표현하겠습니다.

*geom_point()는 그래프를 산점도로 나타내고 싶을때 사용하는 함수입니다.

p <- ggplot(data = iris, aes(x = Sepal.Length, y = Petal.Width,
                            col = Species)) + geom_point()

 

인터랙티브 그래프 만들기

 

ggplot()으로 그래프를 만들고 {plotly}패키지의 ggplotly를 적용해주면 간편하게 인터랙티브 그래프를 만들 수 있습니다.

ggplotly(p)

 

HTML로 저장하기

 

Export > Save as Web Page...

 

 

위에서 언급한것 처럼, HTML로 저장해주면 R을 사용하지 않는 사용자도 R에서 처럼 동일하게 조작할 수 있습니다.

 

 

[HTML 파일]

iris_scatterplot.html
3.70MB

 

 

 

2. 코로나 데이터로 인터랙티브 그래프 만들기

코로나 데이터를 활용해서 시간에 따른 확진자, 완치자, 사망자 수의 변화 추이를 알아 볼 수 있는 라인그래프를 만들어 보겠습니다.

 

데이터 준비 및 패키지 설치

 

https://dacon.io/competitions/official/235590/data

 

월간 데이콘 코로나 데이터 시각화 AI 경진대회 - DACON

분석시각화 대회 코드 공유 게시물은 내용 확인 후 좋아요(투표) 가능합니다.

dacon.io

위 사이트에 접속하여 Time 데이터를 다운받아주세요.

 

# 패키지 불러오기
library(dplyr)
library(tidyr)
library(ggplot2)
library(lubridate)
library(plotly)

## 데이터 불러오기
# 작업 폴더 지정
setwd("경로")
# 데이터 불러오기
time <- read.csv("Time.csv")
head(time)

date time test negative confirmed released deceased
1 2020-01-20   16    1        0         1        0        0
2 2020-01-21   16    1        0         1        0        0
3 2020-01-22   16    4        3         1        0        0
4 2020-01-23   16   22       21         1        0        0
5 2020-01-24   16   27       25         2        0        0
6 2020-01-25   16   27       25         2        0        0

 

[Time 데이터 설명]

test : 누적 검사자 수
negative : 누적 음성자 수
confirmed : 누적 양성자 수
released : 누적 완치자 수
deceased : 누적 사망자 수

 

 

데이터 정제

 

time 데이터에서 필요한 변수인 date, confirmed, released, deceased 만 추출하겠습니다.

gather 함수를 사용해서 해당 날짜의 환자수를 상태별로 집계해보겠습니다.

 

time <- time %>% select(date, confirmed, released, deceased) # time 데이터에서 변수를 선택하여 저장
time <- time %>% gather(state, number, -date) # date를 제외한 나머지 변수를 number형태로 모아 state변수를 생성 
time$date <- as.Date(time$date) # 날짜 형식으로 변환
head(time)

        date     state number
1 2020-01-20 confirmed      1
2 2020-01-21 confirmed      1
3 2020-01-22 confirmed      1
4 2020-01-23 confirmed      1
5 2020-01-24 confirmed      2
6 2020-01-25 confirmed      2

 

 

그래프 만들기

 

date를 x축에 확진자 수를 y축에 두고 state에 따라 색이 다른 라인 그래프를 만들어 보겠습니다.

 

p <- ggplot(time, (aes(x = date, y = number, color = state))) + # x축은 date, y축은 number,   state에 따라 색을 다르게 지정
  geom_line(lwd = 2) + # line graph 형태로 표현 , 선굵기 지정
  scale_x_date(breaks = "month") +  # x축을 한달 단위로 표시
  xlab(label = "날짜") +  # x축, y축의 라벨 지정
  ylab(label = " ") +
  ggtitle("누적 확진자,완치자,사망자 수") + # 제목 지정
  theme(text=element_text(color="grey50")) +  # 텍스트 색 지정
  theme(axis.title=element_text(size=15)) + # 축 제목 크기 지정
  theme(plot.title=element_text(hjust=0.5,size=20, color="royalblue4")) # 제목의 위치, 크기, 색 지정

ggplotly(p)

 

[HTML 파일]

covid_line.html
3.72MB

반응형