ABOUT ME

Today
Yesterday
Total
  • [R] plotly 패키지로 인터랙티브 그래프 만들기
    Data Analysis/R 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

    반응형

    댓글

Designed by Tistory.