Rで解析:散布図と表データをインタラクティブに探索「crosstalk」パッケージ


散布図と表データをインタラクティブに探索するパッケージです。なお、本パッケージはインタラクティブな地図を作成する「leaflet」パッケージとも連携できるので大変興味深いです。

紹介の出力例は画像です。実際のインタラクティブな操作は公式サイトまたは実行コマンドを試してください。

・Crosstalk公式サイト
 https://rstudio.github.io/crosstalk/
 
なお、使用している参考パッケージは記事作成時点で最新バージョンを利用しています。
バージョンは「DT」パッケージ:0.2.10、「d3scatter」パッケージ:0.1.0です。

また、windowsで利用の方は「crosstalk」パッケージのインストール前に利用中のRのバージョンに合わせたRtoolsをインストールすることをお勧めします。

・Rtools公式サイト
 https://cran.r-project.org/bin/windows/Rtools/

パッケージバージョンは1.0.0。windows 10のR version 3.3.2で動作を確認しています。

パッケージのインストール

下記コマンドを実行してください。


#パッケージのインストール
install.packages("crosstalk")

#参考パッケージのインストール
##インタラクティブな表を作成「DT」パッケージ
install.packages("devtools")
devtools::install_github("rstudio/DT")
##インタラクティブな散布図を作成「d3scatter」パッケージ
devtools::install_github("jcheng5/d3scatter")


実行コマンドの紹介

詳細はコマンド、パッケージのヘルプを確認してください。便利な「DT」パッケージは本サイトでも紹介していますので検索してみてください。

#パッケージの読み込み
library("crosstalk")
#参考パッケージの読込
library("DT")
library("d3scatter")

###データ例の作成#####
n <- 30
TestData <- data.frame(Group = sample(paste0("Group", 1:3), n, replace = TRUE),
                       Data1 = rnorm(n),
                       Data2 = rnorm(n),
                       Data3 = rnorm(n))
########

###描写の準備#####
#SharedData,R6 Classの準備:SharedDataコマンド
#新規作成:$newメソッド
SharedTest <- SharedData$new(TestData)
#class確認
class(SharedTest)
[1] "SharedData" "R6"

#######################################
###crosstalkパッケージで作成された#####
###R6 Classの簡単な操作説明############
#######################################
#R6 classの本格的な利用は「R6」パッケージを参照
#構造確認:strコマンド
str(SharedTest)
#Publicは外部アクセスが可能?コマンドが収録されている?
#Privateは不可?データが収録されている?
Classes 'SharedData', 'R6' <SharedData>
Public:
 .updateSelection: function (value) 
 clearSelection: function (ownerId = "") 
 clone: function (deep = FALSE) 
 data: function (withSelection = FALSE, withFilter = TRUE, withKey = FALSE) 
 groupName: function () 
 initialize: function (data, key = NULL, group = createUniqueId(4, prefix = "SharedData")) 
 key: function () 
 origData: function () 
 selection: function (value, ownerId = "") 
Private:
 .data: data.frame
 .filterCV: ClientValue, R6
 .group: SharedDatad4baef32
 .key: NULL
 .rv: reactivevalues
 .selectionCV: ClientValue, R6 
#データの記述内容へアクセス
#例origDataの内容
SharedTest$origData
function ()
{
  if (shiny::is.reactive(private$.data)) {
    private$.data()
  }
  else {
    private$.data
  }
}
<environment: 0x000000001488e2b0>
#データ内容へアクセス,範囲は末尾に[]で指定する
head(SharedTest$origData())[, c(2, 4)]
   Data1      Data3
1 -0.67415867 -1.2636402
2  0.02804511 -2.4122620
3  1.55889236 -0.2058168
4 -0.28851056  1.0090118
5  0.33410263  1.0870080
6  0.95957028 -0.1273368
#データを修正する場合
#classを作成する前に整えたほうが楽かも
SharedTest$initialize(data.frame("Group" = SharedTest$origData()[, 1],
                                 round(SharedTest$origData()[, 2:4], 2)))
#確認
head(SharedTest$origData())[, c(2, 4)]
  Data1 Data3
1 -0.67 -1.26
2  0.03 -2.41
3  1.56 -0.21
4 -0.29  1.01
5  0.33  1.09
6  0.96 -0.13
################################

#単純にプロット:bscolsコマンド
#縦方向にグラフを並べる:listコマンドを使用
#datatable,d3scatterコマンド詳細は
#「DT」,「d3scatter」パッケージのヘルプを参照
bscols(
  datatable(data = SharedTest, rownames = FALSE,
            caption = "Table: テスト", width = "100%", height = 500),
  list(d3scatter(data = SharedTest, x = ~Data1, y = ~Data2,
                 width = "100%", height = 250),
       d3scatter(data = SharedTest, x = ~Data3, y = ~Data2,
                 color = ~Group, width = "100%", height = 250))
)

#プロットにチェックボックス,スライドバーを追加
#チェックボックスを追加:filter_checkboxコマンド
#ラベルデータを指定:groupオプション
#チェックボックを並びを設定:inlineオプション
#スライダーを追加:filter_sliderコマンド
#スライダーデータを指定:columnオプション
bscols(
  widths = c(3,NA,NA),
  list(filter_checkbox(id = "Group", label = "checkbox", group = ~Group,
                       sharedData = SharedTest, inline = TRUE),
       filter_slider(id = "Data2", label = "slider", column = ~Data2,
                     sharedData = SharedTest)),
  datatable(data = SharedTest, rownames = FALSE,
            caption = "Table: テスト", width = "100%", height = 500),
  list(d3scatter(data = SharedTest, x = ~Data1, y = ~Data2, color = "red",
                 width = "100%", height = 250),
       d3scatter(data = SharedTest, x = ~Data3, y = ~Data2,
                 color = ~Group, width = "100%", height = 250))
)

出力例

・単純にプロット:bscolsコマンド

・プロットにチェックボックス,スライドバーを追加


あなたの解析がとっても楽になりますように!!

スポンサードリンク

関連コンテンツ


スポンサードリンク