Rのこれだけはインストールしておくと便利というパッケージ2019年版


Rのパッケージでこれだけはインストールしておくと便利(中にはマストというものもある)というものをアップデートしてまとめた。

ミドルウェア的なレイヤーのライブラリ(must)

curl

ファイルをwebからダウンロードするときに使う。
データファイルやパッケージのダウンロードが発生する処理で内部的に使われるライブラリで、他のパッケージのインストールの際に同時にインストールされることが多く、意識されることは少ないパッケージ。たまに依存関係の問題でも解決されずに未インストールの場合があるので、明示的にインストールする必要がある。

read.csv('https://...')

などのために必要。

devtools

GitHubからのインストールなど。ほとんどがGitHubからのインストールで使う

ほとんどがこの使い方

devtools::install_github('アカウント名/リポジトリ名')

doParallel

簡単な並列処理のためのラッパー。並列処理にはこのライブラリの関数群を使っておけばいい。

使い方の例

registerDoParallel(detectCores()-1)
foreach(
  i = 1:nrow(tune_params),
  .verbose = T, .multicombine = T, .packages='data.table'
) %dopar% {
  output <- some_function(tune_params[i,alpha])
  fwrite(cbind(i=i, output), file='out.csv', append=T)
}

基本的なデータ処理

data.table

データフレームの高速化

reshape2

縦横変換(melt()dcast()

横→縦

USArrests$state <- rownames(USArrests)
melt(data=USArrests, id.vars='state', measure.vars=c('Murder', 'Assault', 'Rape'))

縦→横

dcast(data=CO2, formula=Type + Treatment + conc ~ Plant, fill=NA, value.var='uptake')
# 集計(ピボット)もできる
dcast(data=CO2, Type ~ Plant, fun.aggregate = sum, value.var='uptake')

dplyr

データ加工を直感的かつ簡単に行う関数群。パイプを使って処理を連結しながら全体の処理を書く

tidyr

縦横変換(gather()spread())。dplyrのパイプの中で使う

横→縦

USArrests %>% rownames_to_column %>% gather(key=type, value=occurrence, c(Murder, Assault, Rape))

縦→横

CO2 %>% data.frame %>% spread(key=Plant, value=uptake)

stringr

文字列操作の便利な関数群

ggplot2

言わずと知れたリッチな可視化

Matrix

疎行列(初期インストール済み)

qlcMatrix

疎行列の便利なメソッド

bit64

integerを64bitに拡張。大きな整数を扱う際には必須

データ読み込み

bigrquery

変数加工

proxy

さまざまな種類の距離・類似度を算出する関数群。クラスター分析で必須。

mice

さまざまな方法での欠損値補完をする関数群

moment

任意の次数のモーメント統計量を算出

greybox

細かい便利な関数群(mcor(): カテゴリ変数と数値型変数の相関係数を一発で出せるなど)

FeatureHashing

Feature Hashing

libFMexe

Factorization Machines

CRANにないのでインストールは

devtools::install_github('andland/libFMexe')

手法

一般化線形モデルとその拡張

  • glmnet: GLMで正則化回帰
  • MASS: 主にglm.nbで使う(初期インストール済み)
  • pscl: ゼロ切断/過剰モデル
  • AER: dispersiontest
  • mlogit: 多項ロジット
  • mgcv: GAM(初期インストール済み)
  • glmmML: 一般化線形混合分布モデル
  • pls: PLS回帰

イベントヒストリー分析

  • survival: イベントヒストリー分析の基本(初期インストール済み)
  • ggfortify: survfitの可視化(ggplot)
  • muhaz: イベントデータからhazardを推定する
  • survrec: 繰り返しイベントヒストリー分析。終了したのでアーカイブからインストールする
install.packages('https://cran.r-project.org/src/contrib/Archive/survrec/survrec_1.2-2.tar.gz')

時系列

  • xts: 時系列のデータ形式
  • forecast: 時系列
  • bsts: 状態空間モデル。使いやすい
  • CausalImpact: キャンペーン効果の推定などに使う
  • TSstudio: bstsにも対応した時系列分析を簡単にやりやすくしてくれるパッケージ

ツリーモデル

  • rpart: 決定木(初期インストール済み)
  • rpart.plot: rpartの可視化
  • ranger: ランダムフォレスト
  • xgboost: XGBoost

アソシエーションルール

  • arules: アソシエーションルール
  • arulesViz: arulesの可視化(いろいろ余計なものをインストールする)
  • recommenderlab: アソシエーションルール

テキストマイニング

  • tm: テキスト処理
  • SnowballC: テキスト処理
  • text2vec: テキストマイニング

その他

  • e1071: fuzzy c-means
  • kernlab: SVM
  • nnet: Neural network(初期インストール済み)

モデルの評価

ROCR

OCR曲線、AUCなどの指標も計算できる

bounceR

変数選択

CRANにないのでインストールは

devtools::install_github('STATWORX/bounceR')

モデルの解釈

DALEX

機械学習手法で変数の重要度を知る。汎用的に使えそう

iml

汎用的。Shapley valueも出せる。

pdp

数多くのモデルに対応した部分従属プロットを描く。edarfより多数のモデルに対応している

ShapleyR

Shapley valueを算出。mlrオブジェクトにのみ対応

CRANにないのでインストールは

devtools::install_github('redichh/ShapleyR')

inTrees

ランダムフォレスト系のアルゴリズムで重要なルールを抽出。xgboostにも対応

lares

機械学習のいい感じオールインワンプロット

CRANにないのでインストールは

install.packages(c('fracdiff', 'uroot'))
devtools::install_github('laresbernardo/lares', dependencies=T)
lares::mplot_full(tag = label, score = predicted, splits = 8, subtitle = NA, model_name = NA, save = FALSE, file_name = "viz_full.png", subdir = NA)

GUI/可視化

Deducer

GUI

GrapheR

GUIでグラフ作成(レガシープロット)

使い方

require(GrapheR)
run.GrapheR()

レガシーな画面ではあるが、GUIでチャートの種類やパラメータを指定できる。

gra​phe​Rでプロットパラメータの指定

「DRAW」をクリックするとこのようなチャートが現れる。

gra​phe​Rで散布図

esquisse

ggplot2をGUIで操作。
数あるggplotをGUIで操作することを試みたパッケージの中で、必要なすべての機能を持った完成版のパッケージと言っていいだろう。BIツールのチャート生成画面のようなわかりやすいUIである。
ggplot2のコードはすぐ忘れてしまうため大変ありがたく、これ一つインストールしておけばggplot2はOK。使い方は以下の通り

# install.packages()でなければ
devtools::install_github("dreamRs/esquisse")
esquisse::esquisser(iris)

こんな画面で変数をドラッグすると
esquisseで表示する変数をドラッグ

件数の形式に合わせたチャートが表示される(この例では連続量なのでヒストグラム)
esquisseでヒストグラム

XY軸で変数を掛け合わせると
esquisseのXとYを指定

散布図になる
esquisseの散布図

GUIでドットを大きくすることもできる
esquisseでパラメータ指定

Colorに因子型変数をドラッグすると色分けできる
esquisseでColor指定

チャートを生成するコードも出力できる
esquisseでggplotのコード出力

  • plotly: JSのチャートを出力。ggplot2のプロットオブジェクトからも直接生成できる

楽にデータ操作するパッケージ

rpivotTable

データフレームをPivotTable.jsに出力。HTML+JSのピボットテーブルに出力できるので納品時などに大変便利。

rpivotTable::rpivotTable(iris)

DataExplorer

データ確認用のプロットをHTMLに一括出力

DataExplorer::create_report(iris)

skimr

データ確認をCUIで行う
https://cran.r-project.org/web/packages/skimr/vignettes/Using_skimr.html

XLConnect

データの編集を直接Excelで行う
詳細はデータをExcel上で編集するを参照。

openxlsx

xlsxファイル入出力
詳細はRとExcel(ファイルの読み書き)を参照。

officer

MS PowerPointやWordのファイル出力
https://cran.r-project.org/web/packages/officer/vignettes/powerpoint.html

使い方の例

require(officer)
read_pptx('template.pptx') %>% 
  add_slide(layout="Title and Content", master = "Office Theme") %>% 
  ph_with_text(type = "title", str='') %>%
  ph_add_text(type = "title", str = 'モデル1\n', style = fp_text(font.size = 20)) %>%
  ph_add_text(type = "title", str = '説明文説明文説明文', style = fp_text(font.size = 16)) %>%
  ph_with_vg_at(code={plot(predicted_model1); abline(h=0)}, height=6, width=8, top=1, left=1.4) %>%
  add_slide(layout="Title and Content", master = "Office Theme") %>% 
  ph_with_text(type = "title", str='') %>%
  ph_add_text(type = "title", str = 'モデル2\n', style = fp_text(font.size = 20)) %>%
  ph_add_text(type = "title", str = '説明文説明文説明文', style = fp_text(font.size = 16)) %>%
  ph_with_vg_at(code={plot(predicted_model2); abline(h=0)}, height=6, width=8, top=1, left=1.4) -> ppt
print(ppt, target = "model_performances.pptx")

mlr

機械学習の手続きを簡略化・統一化。caretと同じだが機能が豊富そう。何よりもshinyを使ったGUIラッパーがあるのが便利。

shinyMlr

mlrのshinyラッパー

# install.packages()でなければ
devtools::install_github("mlr-org/shinyMlr")
shinyMlr::runShinyMlr()

パッケージインストール時の便利なオプション

CRANのレポジトリのURLを指定

CRANのレポジトリのURLを指定する。MS R Openではデフォルトであらかじめ設定された日付のレポジトリのスナップショットからしか取得できないので、最新のパッケージをインストールできない。それをこの方法で回避する。

options(repos = c(CRAN = "https://mran.revolutionanalytics.com/snapshot/YYYY-MM-DD"))

これをinstall.packages()の前に実行しておく。

インストールされていない場合にのみインストール

パッケージがインストールされていない場合にのみインストールする。
スクリプトを汎用的に使いたい場合などはこのように記述しておくといい。

if (!require("devtools")){install.packages("devtools")}

依存関係でインストールするパッケージを拡張

必須ではないが推奨の依存パッケージをインストールする。install.packages()はデフォルトでは基本的に必須の依存パッケージしかインストールしないが、この方法ではそれを拡張する。

caretやmlrなどの汎用的な機械学習ライブラリのインストール時には、その機械学習ライブラリが対応しているすべてのアルゴリズムのパッケージをインストールするので便利なことがある。

install.packages("mlr", dependencies = c("Depends", "Suggests"))

コンパイル時に使用するコア数を指定

コンパイル時に使用するコア数を指定する。make -j4と同じ。

install.packages("xgboost", Ncpus = getOption("Ncpus", 4L))