🚀
CHAPTER 14

インタラクティブ可視化とplotly

静的なグラフを超えて、動的でインタラクティブな可視化の世界へ。plotlyとshinyを使って、ユーザーが操作できる魅力的なデータ体験を創造しよう。

🌟 インタラクティブ可視化の世界

インタラクティブ可視化は、ユーザーがデータと直接対話できる強力なツールです。ズーム、パン、フィルタリングなどの機能により、データの探索が直感的になります。

📦 環境のセットアップ

インタラクティブ可視化環境の準備
# インタラクティブ可視化エコシステムの読み込み library(tidyverse) library(plotly) # ダッシュボード作成 library(shiny) library(DT) # サンプルデータの作成 set.seed(123) # 売上データの生成 sales_data <- tibble( date = seq(as.Date("2023-01-01"), as.Date("2023-12-31"), by = "day"), sales = rnorm(365, 1000, 200), region = sample(c("東京", "大阪", "名古屋"), 365, replace = TRUE) ) glimpse(sales_data)

📊 plotlyの基本

plotlyは、R用の強力なインタラクティブ可視化ライブラリです。ggplot2オブジェクトを簡単にインタラクティブに変換できます。

基本的なplotlyグラフ
# 基本的な散布図 basic_plot <- sales_data %>% ggplot(aes(x = date, y = sales)) + geom_point() # インタラクティブ化 interactive_plot <- ggplotly(basic_plot) print(interactive_plot) # 直接plotly作成 direct_plot <- sales_data %>% plot_ly(x = ~date, y = ~sales, type = "scatter", mode = "markers") print(direct_plot)

🔍 ホバー情報とツールチップ

ホバー機能により、マウスオーバーで詳細情報を表示できます。これにより、データポイントの詳細を直感的に探索できます。

カスタムホバー情報
# ホバー情報付きプロット hover_plot <- sales_data %>% plot_ly( x = ~date, y = ~sales, color = ~region, type = "scatter", mode = "markers" ) print(hover_plot)

🌐 3D可視化

plotlyの3D機能を使用して、多次元データを立体的に表現します。回転やズームが可能な3Dグラフを作成できます。

3Dプロットの作成
# 3Dデータの準備 plot_3d_data <- sales_data %>% mutate( month = month(date), day_of_year = yday(date) ) # 3D散布図 plot_3d <- plot_3d_data %>% plot_ly( x = ~month, y = ~day_of_year, z = ~sales, type = "scatter3d", mode = "markers" ) print(plot_3d)

🎬 アニメーション

時系列データや変化するデータをアニメーションで表現することで、データの動的な変化を効果的に伝えることができます。

アニメーション作成
# 月別データ集計 monthly_data <- sales_data %>% mutate(month = month(date, label = TRUE)) %>% group_by(month, region) %>% summarise(avg_sales = mean(sales), .groups = 'drop') # アニメーションプロット animated_plot <- monthly_data %>% plot_ly( x = ~region, y = ~avg_sales, frame = ~month, type = "bar" ) print(animated_plot)

📋 インタラクティブダッシュボード

Shinyを使用して、ユーザーが操作可能な本格的なダッシュボードを作成します。リアルタイムでデータを探索できる環境を構築します。

Shinyダッシュボード
# UI定義 ui <- fluidPage( titlePanel("売上ダッシュボード"), sidebarLayout( sidebarPanel( selectInput("region", "地域選択", choices = unique(sales_data$region)) ), mainPanel(plotlyOutput("sales_plot")) ) ) # サーバー定義 server <- function(input, output) { output$sales_plot <- renderPlotly({ filtered_data <- sales_data %>% filter(region == input$region) p <- filtered_data %>% plot_ly(x = ~date, y = ~sales, type = "scatter", mode = "lines") return(p) }) } # アプリ起動(例) # shinyApp(ui = ui, server = server)

📊 インタラクティブテーブル

DTパッケージを使用して、フィルタリング、ソート、検索が可能なインタラクティブなデータテーブルを作成します。

動的データテーブル
# 基本的なデータテーブル basic_table <- sales_data %>% head(100) %>% datatable() print(basic_table) # カスタマイズテーブル custom_table <- sales_data %>% datatable( options = list( pageLength = 10, searching = TRUE ) ) print(custom_table)

🔗 Crosstalk連携

Crosstalkを使用して、複数のインタラクティブコンポーネント間でデータを連携させます。

コンポーネント連携
# Crosstalkデータ作成 library(crosstalk) shared_data <- sales_data %>% SharedData$new() # 連携プロット linked_plot <- shared_data %>% plot_ly(x = ~date, y = ~sales, color = ~region) print(linked_plot)

🚀 デプロイメント

作成したインタラクティブ可視化やダッシュボードを、様々なプラットフォームで公開・共有する方法を学びます。

公開と共有
# HTMLファイル出力 output_plot <- sales_data %>% plot_ly(x = ~date, y = ~sales, type = "scatter", mode = "lines") # ファイル保存 htmlwidgets::saveWidget(output_plot, "sales_chart.html") print("HTMLファイルが作成されました")

🎯 まとめ

本章では、plotlyとshinyを使用したインタラクティブ可視化の世界を探索しました。

これらの技術により、ユーザーが直感的に操作できる魅力的なデータ体験を提供できます。

前の章
第13章: 高度なggplot2とカスタム可視化
次の章
第15章: 高度なデータ可視化統合