plotly로 대화형 플롯 만들기

shinydashboard로 대시보드 만들기

Png Kee Seng

Researcher

예시: 런던의 Airbnb 숙소 목록

  • 런던 기반 여행사에서 일한다고 가정합니다
  • Airbnb와 협업했습니다
    library(tidyverse)
    listings <- read_csv("../data/listings.csv")
    
...
 $ host_name                     : chr [1:69351] "Susie" "Alina" "Luca" "Simon" ...
 $ neighbourhood_group           : logi [1:69351] NA NA NA NA NA NA ...
 $ neighbourhood                 : chr [1:69351] "Tower Hamlets" "Islington" "Tower Hamlets" "Islington" ...
 $ latitude                      : num [1:69351] 51.5 51.6 51.5 51.5 51.5 ...
 $ longitude                     : num [1:69351] -0.054 -0.1127 -0.0743 -0.1048 -0.2 ...
 $ room_type                     : chr [1:69351] "Private room" "Private room" "Entire home/apt" "Private room" ...
 $ price                         : num [1:69351] 55 50 90 180 297 75 204 379 90 30 ...
 $ minimum_nights                : num [1:69351] 3 1 5 4 14 3 2 4 3 7 ...
 $ number_of_reviews             : num [1:69351] 65 30 42 493 6 89 581 51 104 32 ...
 $ last_review                   : Date[1:69351], format: "2016-06-10" "2022-07-15" "2022-01-04" "2022-09-02" ...
 $ reviews_per_month             : num [1:69351] 0.47 0.2 0.34 3.59 0.05 0.57 4.26 0.36 0.86 0.29 ...
 $ calculated_host_listings_count: num [1:69351] 1 2 1 5 1 1 1 5 1 1 ...
 $ availability_365              : num [1:69351] 74 343 222 236 180 70 193 249 318 251 ...
...
shinydashboard로 대시보드 만들기

plotly 시작하기

  • plotly 라이브러리를 불러옵니다

    library(plotly)
    
  • ggplot 객체를 ggplotly()에 넣어 plotly 객체를 만듭니다

    ggplotly(<ggplot object>)
    
shinydashboard로 대시보드 만들기

ggplot으로 버블 플롯

  • 버블 플롯을 만들고 bubble로 저장합니다
    • 평균 price와 availability_365의 관계를 보여줍니다
    • room_type별로 색을 다르게 합니다
    • 버블 크기는 숙소 수에 비례합니다
    • 보기 좋게 추가 레이어를 더합니다
bubble <- listings %>%

group_by(room_type, neighbourhood) %>% summarise(avg_price = mean(price, na.rm=TRUE), avg_availability = mean(availability_365, na.rm=TRUE),
Count = n(), .groups = "drop") %>%
ggplot(aes(x = avg_price, y = avg_availability,
color = room_type,
size = Count)) +
geom_point() +
labs(x = "Average price", y = "Average availability", color = "Room type") + theme_classic()
shinydashboard로 대시보드 만들기

ggplot 버블 플롯, 렌더링됨

ggplot으로 만든 일반 버블 플롯.

shinydashboard로 대시보드 만들기

plotly로 대화형 버블 플롯

  • bubble을 ggplotly()로 감쌉니다
ggplotly(bubble)

대화형 plotly 버블 플롯.

shinydashboard로 대시보드 만들기

plotly의 가로 상자그림

  • 일부 플롯은 올바르게 변환되지 않습니다

  • 가로 방향의 상자그림을 만듭니다

    • room_type별 availability_365 분포를 설명합니다
  • ggplotly() 변환이 작동하지 않습니다
boxH <- listings %>%

ggplot(aes(x = availability_365, y=room_type)) +
geom_boxplot() +
labs(x="Availbility (out of 365 days)", y="Room type") + theme_classic()
ggplotly(boxH)

ggplot으로 만든 가로 방향 상자그림.

ggplotly로 변환된 가로 방향 상자그림.

shinydashboard로 대시보드 만들기

plotly의 세로 상자그림

  • aes()에서 x와 y를 바꿉니다
  • 이제 plotly 변환이 작동합니다
boxV <- listings %>%

ggplot(aes(y = availability_365, x=room_type)) + geom_boxplot() + labs(y="Availbility (out of 365 days)", x="Room type") + theme_classic()
ggplotly(boxV)

ggplot의 세로 방향 상자그림.

ggplotly의 세로 방향 상자그림.

shinydashboard로 대시보드 만들기

plotly로 가로 상자그림 수정하기

  • 가로 상자그림이 필요하면 어떻게 할까요?
    • coord_flip()을 추가합니다
  • facet_wrap()도 사용할 수 있습니다
    • 각 패널은 충분히 커야 합니다
ggplotly(boxV + coord_flip())
ggplotly(boxV + coord_flip() + 
    facet_wrap(~neighbourhood))

뒤집은 세로 plotly 상자그림.

격자화한 plotly 상자그림.

shinydashboard로 대시보드 만들기

Ayo berlatih!

shinydashboard로 대시보드 만들기

Preparing Video For Download...