R Markdownで楽々レポートづくり

第5回 レポートを彩るデータ可視化 ~グラフとテーブルとダイアグラム~

この記事を読むのに必要な時間:およそ 4 分

ダイアグラムを極める

グラフとテーブル以外に,レポートで用いる可視化手法としてダイアグラム(フローチャート)があります。Rでダイアグラムを作成するには{Rgraphiz}{diagram}(こちらは第1回で利用しました)などを使うことができます。

最近になって,{DiagrammeR}パッケージというJavaScriptライブラリを使ったダイアグラム作成パッケージの開発が進められています。ちなみに開発者はイケメンです。

{DiagrammeR}を使えば,HTMLレポートに簡単な記述でダイアグラムを埋め込むことができます。日本語を扱う場合は,grViz()関数でgraphvizベースのダイアグラムを書くのがよいでしょう。記法は基本的にgraphvizの書式に従っています。

```{r echo=FALSE}
library(DiagrammeR)
grViz('
digraph {
  rankdir=LR
  node [shape = box,
        style = rounded,
        fontname = Helvetica]

  太る [shape = egg]
  食べる -> 飲む
  飲む -> 飲む
  飲む -> 酔う
  飲む -> 寝る
  酔う -> 太る
  寝る -> 太る
}
')
```

サンプル出力はこちらです。

この手のフローチャートであれば「パワポでおk」という意見もあるでしょうし,それは否定しません。ですが,データからダイアグラムを作成するような場合は,コピペ汚染を避けるためにも,やはりオートメーション化を検討するべきでしょう。{DiagrammeR}では,エッジとノードをdata.frameで定義してダイアグラムを作成することもできます。データドリブンのダイアグラムの場合はこちらの方がよいでしょう。以下に一例を示します。

```{r}
library(DiagrammeR)
set.seed(23)

library(rvest)
h = html("https://twitter.com/teramonagi/lists/list/members")
L = h %>% html_nodes(xpath="//*/div/div/div/a/strong") %>% html_text()

n = create_nodes(nodes = L)
e = create_edges(from = sample(L, replace = TRUE),
               to = sample(L, replace = TRUE))
g =
  create_graph(nodes_df = n,
               edges_df = e,
               graph_attrs = "layout = twopi",
               node_attrs = c("fontname = Helvetica"))

render_graph(g)
```

サンプル出力はこちらです。

このように,ノードとエッジからなるグラフオブジェクトを可視化することもできます。この例では,⁠匿名知的集団ホクソエム」という謎のTwitterリストのユーザをrvestを使って取得して,ダイアグラムを作成しています。今回はエッジはランダムに割り当てていますが,実際の解析ジョブでは例えばタイムラインからメンションを取得して,ユーザ同士の関係を可視化するといったことなどがありそうです。この場合,⁠パワポでおk」とはいきませんよね。

{DiagrammeR}ではこれ以外にもガントチャートシーケンス図の作成も可能です。{DiagrammeR}は現在アクティブに開発が進められている最中で,新しい機能がどんどん追加されていて,開発者はイケメンです。今後にさらに期待です。

ダイアグラム作成のオートメーション化,是非試してみてください。

まとめ

今回はレポートで使える可視化手法としてグラフ,テーブル,ダイアグラムを紹介しました。読者の方々はもちろんこれまでもグラフやテーブルを使っていたことでしょう。ですが,今回紹介した手法は従来のレポートの常識を覆す,一味違った可視化だったのではないでしょうか。しかもコピペ不要,オートメーション化されたレポートづくりです。今回の記事を参考に,あなたのレポートに彩りを添えましょう。

また,今回も入稿したオリジナルの原稿である,自動変換処理などを行う前のR Markdownファイルやサンプルなどをまとめて公開しておきます。

余談ですが,前回の記事を入稿した直後,1週間ほどイタリアに行っていました(仕事ですが……⁠⁠。イタリア国内の移動でライアンエアーに初めて乗ったんですが,着陸時に本当にファンファーレが鳴るんですね。びっくりしました。みなさんもヨーロッパ内を飛行機移動するときは試してみてください。

R Markdownとは全く関係のない余談でした。チャオ!!

次回は

これまで,HTMLレポートの作成を中心に紹介してきましたが,R Markdownでは同じ.RmdファイルからHTML形式以外のレポートを作成することも可能です。次回はPDFレポートやWord形式のレポートを作成する方法を紹介する予定です。

著者プロフィール

高橋康介(たかはしこうすけ)

東京大学先端科学技術研究センター特任助教。専門は認知科学,認知心理学,認知神経科学。どうやったら人が幸せな気持ちになれるのか研究中。著書に「R言語上級ハンドブック」(分担執筆・C&R研究所),「ドキュメント・プレゼンテーション生成」(共立出版)。趣味はラテ・アート。