Rとウェブの融合(5)ーslidify、R Presentationー

先月号ではRStudioでrmarkdownパッケージによりHTML形式やDOCX形式のレポートを作成する方法を紹介しました。 今月は統計解析の結果や可視化したグラフなどを使って、R上でスライド形式のプレゼンテーションを作成する方法を紹介します。 現在ではウェブスライドというブラウザ上でスライド形式のプレゼンテーションを表示するためのJavaScriptライブラリが数多く開発されています。 Rではslidifyパッケージ、RStudio上でのR Presentation、rmarkdownパッケージなどによって、マークダウンファイルから簡単にスライドを作成することができます。 このような手法は、デザインなどの見た目にこだわったいわゆる「凝った」プレゼンの作成には向きませんが、日次、週次の業務報告など、ルーチンワーク的なスライド作成では十分な威力を発揮するでしょう。

slidifyパッケージ

slidifyパッケージはrChartsパッケージの開発者でもあるMcGill大学のRamnath Vaidyanathan博士が開発したプレゼン作成ツールです。 内部ではknitrパッケージを用いてマークダウンファイルからスライドを生成するので、マークダウン記法やknitrのオプションについては 本誌2013年10月号、『シリーズUseful R ドキュメント・プレゼンテーション生成』(共立出版)等を参考にして下さい。

パッケージはdevtools::install_github()によってgithubからインストールしてロードします。

> install.packages("devtools") # 必要なら
> devtools::install_github('ramnathv/slidify')
> devtools::install_github('ramnathv/slidifyLibraries')

最初にauthor()によりスライド用の作業フォルダを作成します。テンプレートファイル(index.Rmd)が自動的に作成されるので、このファイルを編集します。

> library(slidify)
> author("sample")

ここではサンプルとして次のようなマークダウンファイルを作成しました。

---
title       : Slidifyによるプレゼン作成
author      : "@kohske"
framework   : io2012
highlighter : highlight.js
hitheme     : tomorrow
widgets     : [mathjax]
mode        : selfcontained
knit        : slidify::knit2slides
---

## irisデータ
irisデータの先頭です。

```{r results="asis", echo=FALSE}
knitr::kable(head(iris, 10))
```

--- 

## irisデータの可視化
簡単にプロットしてみましょう。

```{r, echo=FALSE, fig.width=12}
plot(iris)
```

編集を終えたら、slidify()によりHTMLスライドを作成します。

> slidify("index.Rmd")
> browseURL("index.html") # ブラウザで開く

なお、Windowsの場合は日本語の問題で文字化けする可能性があるので、以下のように回避します。

> # 開発バージョンをインストールします。
> devtools::install_github("ramnathv/slidify@fix-encode")
> library(slidify)
> slidify('index.Rmd', encoding='CP932') # SJISの場合
> slidify('index.Rmd', encoding='UTF8') # UTF8の場合

たったこれだけで、図1のようなスライドが作成できます。ブラウザ上では左右の矢印キーでスライドを遷移できます。

図1: 作成されたウェブスライド

slidify用のファイル記述法

slidifyパッケージではコードチャンクやオプションはknitrと同じように処理されます。 またドキュメント部分はマークダウンとして処理されるので、- item形式のリストや、### heading形式の小見出しなども利用できます。

その他、スライド作成に特有の記述法がいくつかあります。まずスライドのページ区切りには---を挿入します。---の前後には必ず1行以上の空白行を入れて下さい。 マークダウンファイルの先頭ではスライドに関する様々な属性を設定できます。2つの---行の間に、属性名 : 値という書式で記述します。 title属性やauthor属性ではタイトルや作成者、framework属性では、利用するプレゼンテーションライブラリの種類を指定します。 widgets属性ではスライドのための追加機能を指定します。例えばwidgets : [mathjax]とすることで、スライド中で数式を使えるようになります。

以上がslidifyの簡単な利用法です。これだけでも十分に実用的なスライドを作成できますが、さらに細かいカスタマイズも可能です。 誌面の都合でここでは詳細を解説することができませんが、 http://ramnathv.github.io/slidifyExamples/にはslidifyパッケージの利用例が多数、掲載されているので、Download Zip Fileからマークダウンファイルをダウンロードして参考にして下さい。 また『シリーズUseful R ドキュメント・プレゼンテーション生成』(共立出版)ではカスタマイズ方法について更に詳細に解説しています。

R Presentaiton

RStudioはR用に統合開発環境です。前号でも紹介したとおり、最近ではドキュメント生成のための支援機能が大幅に向上しています。RStudioのインストールについては前号を参考にして下さい。 2013年から通常のレポート作成に加え、R Presentationというプレゼンテーション作成の支援機能が追加されました。 RStudioをインストールするだけで利用できる、リアルタイムプレビューが可能になっている、などの利点があります。

RStudioでR Presentationを作成するには、ウィンドウ左上の新規作成アイコンから[R Presentation]を選択します(図2)。 編集用パネルにテンプレートが開くので、これを編集します。 編集パネルで保存するたびにプレビューパネルが更新されて、編集中のスライドページの内容が表示されるので、 見た目を確認しながらプレゼンを作成することができます。

図2: RStudioによるプレゼン作成

R Presentationでも、マークダウンによりドキュメントとコードを記述します。内部ではドキュメント生成にknitrが用いられているので、チャンクオプションなどは通常のレポート作成時と変わりません。 R Presentaitonではページ区切りには3つ以上の===を用いて、

ページタイトル
============

とします。ページタイトルは空白でも構いません。 ドキュメントの先頭に

スライドタイトル
============
author: @kohske
date: 2014/10/31

と入れることでタイトルページを作成します。 タイトルページではその他のスライド属性も指定できます。 フォントを指定するにはfont-family: 'Helvetica'など、独自のスタイルシート(CSS)を指定するにはcss: custom.cssなどとします。 スライドのページ遷移のカスタマイズも可能で、transition: rotateなどとします。但しプレビュー画面ではページ遷移のカスタマイズは反映されないので、ブラウザ上で確認してみてください(プレビューパネルの右上の歯車アイコンから[View in Browser])。 より細かいカスタマイズ方法についてはRStudioのサポートサイト https://support.rstudio.com/hc/en-us からR PRESENTATIONSの項目を確認して下さい(英語です)。

スライドを単体のHTMLファイルとして保存するには、プレビューパネルの右上の歯車アイコンから[Save as Web Page]としてファイル名を付けて保存します。 画像などもHTMLファイルに埋め込まれているので、HTMLファイルをブラウザで開くだけでスライドを表示できます。 なお、R Presentationではknitrのキャッシュ機能が有効になっています。キャッシュに不整合が生じるとプレゼンが正しく作成されない場合があるので、このような場合はプレビューパネルの右上の歯車アイコンから[Clear Knitr Cache]としてキャッシュを削除します。

rmarkdownによるスライド作成

先月号ではRStudioでrmarkdownパッケージによりレポートを作成する方法を紹介しました。同様の方法でプレゼンを作成することもできます。 プレゼンを作成するには、RStudioのウィンドウ左上の新規作成アイコンで[R Markdown…]を選択します。 そして[New R Markdown]ダイアログの左側タブで[Presentation]を選んで、タイトルと著者を入力します。 プレゼンの種類としてウェブスライド(ioslides/Slidy)またはPDFスライドを選択して、[OK]をクリックします。 なおPDFスライドの作成にはLaTeX環境のインストールが別途必要です。今回はウェブスライドの作成例を紹介しますが、スライドの形式は後から変更することも可能です。

編集用パネルにテンプレートが作成されるので、これを編集します。今回は次のようなマークダウンファイルを作成しました。

---
title: "rmarkdownによるウェブスライド"
author: '@kohske'
output:
ioslides_presentation:
incremental: yes
---

## irisの詳細
- irisの列名は`r names(iris)`です。
- irisの行数は`r nrow(iris)`です。
- irisの列数は`r ncol(iris)`です。

# 可視化

## irisのプロット
種による違いを可視化します。

```{r}
plot(Sepal.Length ~ Species, data = iris)
```

ファイル先頭はYAMLヘッダで、タイトル、著者の他、スライド作成のためのメタ情報を設定できます。 YAML中のoutput: ioslides_presentationによりioslides形式のウェブスライドを作成するように指定しています。指定できるオプションは?rmarkdown::ioslides_presentationとして確認できます。 上の例ではincremental: trueとしてリストの要素ごとに順番に表示するように指定しています。

スライドの区切りは、ioslidesの場合は第1レベルまたは第2レベルの見出し(#または##)です。第一レベルの見出しはプレゼン中のサブタイトルページに使います。 Slidyの場合は第1レベルの見出し(#)がページ区切りとなります。このようにスライド形式によって多少記法が異なるので、最初に形式を決めておきましょう。 その他のドキュメント部分やコードチャンクはknitrと同じように処理されます。

編集パネル上部の[Knit HTML]をクリックするとプレビュー画面にプレゼンが表示されます。この時に作業フォルダにHTMLファイルが作成されています。 また[Knit HTML]の横の三角形のボタンからスライド形式を変更できます。

今回はRによるウェブスライドの作成について、3通りの方法を紹介しました。R Presentationやrmarkdownを用いた方法はRStudioをインストールするだけで導入できます。 一方、slidifyでは多くのスライドフォーマットが利用できます。それぞれ記法が多少異なっているので、自分に合った方法を採用してください。

レポートの作成はデータ解析に関わる全ての人にとって頭を悩ませる問題です。 前回はRによるドキュメント形式のレポート作成、今回はRによるプレゼン作成の手法について紹介しました。レポートやプレゼンのデザインにこだわる場合には物足りない部分もあるかもしれませんが、 簡単に導入できること、動的ドキュメント生成の手法で実現されていること、などを考えれば、デザインには多少目をつぶってでもでも導入してみる価値はあります。 まずは前回と今回のサンプルをとにかく動かしてみて下さい。 その手軽さと便利さに驚かされること、そして日々のレポート作成の効率が大幅に向上することは間違いありません。

次回はrglパッケージを用いたOpenGLベースの3次元可視化の作成とウェブ上での利用について紹介します。