バイアスと戯れる

Rと言語処理と(Rによる言語処理100本ノック終了)

広がる宇宙の話

概要

 この記事はR Advent Calendar 2016の14日目の記事です。Rで言語処理する話ばかりしているので、今年は宇宙の話をします。
 急速に広がる宇宙。R界の「宇宙」といえば、tidyverseですね。ということで、CRAN巡りまたはRパッケージ探しが趣味である自分がtidyverseの流れを受けたと「勝手に」考えたライブラリをご紹介します。また、参考ページも併記するので、コードや詳細についてはそちらをご参照ください。
 なお、そもそもtidyverseが何かわからないという方はまず下記のサイトを一読ください。

地理空間データ

 空間統計を扱うクラスを提供する{sp}に「宇宙」を反映したパッケージに{spdplyr}があります。

 使い方は下記が参考になります。

木構造

 系統樹のような木構造の処理に「宇宙」を反映したパッケージに{treeplyr}があります。

 使い方は下記が参考になります。

JSON形式

 JSON形式のデータ処理に「宇宙」を反映したパッケージに{tidyjson}があります。

 使い方はREADMEに記載がありますが、vignetteも参考になります。

テキスト処理

 テキスト処理に「宇宙」を反映したパッケージに{tidytext}があります。

 使い方は下記が参考になりますが、自分が以前に書いた記事もありますので、よければご覧ください。

大規模データ

 メモリにのらない大規模データを処理する{ffbase}に「宇宙」を反映したパッケージに{ffbase2}があります。

 また、大規模データの処理にはRevolution Analytics謹製の{dplyrXdf}があります。

 使い方は下記のチートシートが参考になります。

 が、下記の通り、xdfファイルの利用にはMicrosoft R Serverが必要になります。Microsoft R Openではダメなので、お布施しましょう。

Note that dplyrXdf is a shell on top of the existing functions provided by Microsoft R Server, which is a commercial distribution of R. You must have MRS installed to make use of dplyrXdf. In particular, Microsoft R Open does not include support for xdf files.

 そして、Apache Sparkに「宇宙」を反映したパッケージに{SparkRext}があります。ホクソエム謹製です。また、RStudio社謹製の{sparklyr}もあり、RStudio 1系以降だと手軽でオススメです(EMRのBootstrap Actionで設定するとなかなか苦しみますが)。

まとめ

 「宇宙」であるtidyverseに薫陶を受けた思われるパッケージについて、いくつか紹介しました。紹介できなかったパッケージも多く、例えばグラフ処理で利用される{igraph}も1系からパイプ演算を取り入れられています。
 このように、宇宙は広がりを見せています。

 明日のR Advent Calendarの担当は@wonder_zoneさんです。とても期待です。


おまけ

 今回触れなかったパッケージをメモとして記載。


 また、宇宙関係なく、最近気になったパッケージ。異なる尺度データを手軽に扱え、クラスタ数の推定も楽そう(ただし、時間はかかる)。

library(dplyr)
library(BNPMIXcluster)

# ハイパーパラメータは特に指定せず
iris_clus <- iris %>% 
  dplyr::select(-Species) %>% 
  BNPMIXcluster::MIXclustering(
    x = ., var_type = c("c", "c", "c", "c"), 
    n.iter_out = 1000, n.burn = 200, n.thin = 2,
    alpha = 0.5
)

# クラスタリングなので教師あり学習に比べて分類精度はよろしくない
> table(iris_clus$cluster, iris$Species)
   
    setosa versicolor virginica
  1      0         13        39
  2      1         37        11
  3     49          0         0

# クラスタ数の推定
plot(iris_clus, type = "chain", chain.obj = "n.cluster")

f:id:yamano357:20161228210603p:plain

 3種類のアヤメのデータなので、妥当な結果でしょうか。