xaringanthemerパッケージのライトな解説

たまたま最近NARUTOを読み返す機会があって、その流れでxaringanパッケージを使い始めてみたら気に入ったので、これからもたまに使っていこうかと思っています。

一応説明しておくと...xaringanとは、Yihui Xie氏により作られた、RMarkdownでHTMLスライドを生成するためのパッケージです。 詳しくは、氏の著書「R Markdown: The Definitive Guide」をご参照ください。

RMarkdownでHTMLスライドを生成するには、デフォルトのioslidesSlidyを使うという手もあるのですが、拡張性の高さやちょっとした小技が使えるのが、xaringanの魅力かと思います。

例えばこちらのスライドはxaringanで作成されていますが、このスライドを開きながら、キーボードの「m」を押すと、ちょっとした忍術が使えます。


さて、xaringanパッケージによりHTMLスライドが生成できるわけなので、見栄えを色々と変更するには、CSSをいじればいいということになります。xaringanにはデフォルトのテーマ(theme)が設定されていますが、このテーマを変更する、いくつかのテンプレートが用意されています。例えばmetropolisというテーマを選択すると、こちらのページのようにスライドの見栄えが変わります。詳しくは「R Markdown: The Definitive Guide」をご参照ください。


ところが! xaringanthemerというパッケージを見つけてしまいました。その名の通り、xaringanで作成するHTMLスライドのテーマ(theme)を、ユーザが任意に操作しやすくするためのパッケージです。CSSよくわかんないや...という人でも、手軽にスライドの見栄えを調整できるようになります。

あまりの便利さに驚いたんですが、僕が調べた限りでは、xaringanthemerパッケージに関する日本語の解説記事は見つからなかったので、備忘録がてら記事にまとめました。

と言っても使い方は簡単で、とりあえずパッケージをインストールしたあとで...

# install.packages("devtools")
devtools::install_github("gadenbuie/xaringanthemer")

新規.Rmdファイルを立ち上げる際に、Ninja Themed Presentationを選択するだけです。 f:id:das_Kino:20180905204020p:plain

詳しくはREADMEのところを読めばわかりますが、xaringanthemerも様々なテーマのテンプレートを用意しています。そしてそのテンプレート(これ自体が関数)は、様々な「見栄え」に関する引数を持っています。文字の色からフォントから見出しのサイズから...引数の多さにびっくりします。

例えばこちらの記事に埋め込んだスライドはmono_light()というテンプレートを使用しているため、緑を基調とした色合いになっていますが、下のように任意に設定を変更していました。必要なことは、.Rmdファイル冒頭で適当なRチャンクを作り、その中に以下を記述するだけです。

library(xaringanthemer)

mono_light(
  base_color = "#1c5253",
  text_font_size = "30px",
  code_font_size = "20px",
  padding = "1em 1em 1em 1em",#margin
  header_h1_font_size = "45px",
  header_h2_font_size = "40px",
  header_h3_font_size = "35px",
  header_color = "midnightblue",
  header_font_google = google_font("Song Myung"),
  text_font_google   = google_font("Song Myung", "400", "400i"),
  code_font_google   = google_font("Song Myung"),
  link_color = "chocolate"
)

また、任意のCSSextra_cssという引数に与え、カスタマイズすることもできます。例えば以下の例では、指定した文字の色を赤にしたり、フォントサイズをデフォルトの50%にしたりするための準備をしています。

extra_css <- list(
  ".red"   = list(color = "red"),
  ".small" = list("font-size" = "50%"),
  ".full-width" = list(
    display = "flex",
    width   = "100%",
    flex    = "1 1 auto"
  )
)

mono_light(
 extra_css = extra_css
)

あとはMarkdown記法でドキュメントを執筆する際に、

買い物しようと街まで出かけたら、.red[財布忘れちゃったよ!] あーあ、ツイてない。.small[トホホ...]

などと書いてレンダリングすれば、「財布忘れちゃったよ」の部分が赤く、「トホホ...」の部分のフォントサイズが半分になって表示されます。

f:id:das_Kino:20180905210331p:plain


僕自身、xaringanを使い始めたばかりで、まだよくわかっていない部分も多いのですが、お役に立てば幸いです。

Enjoy!!

「R Markdownによるドキュメント生成と バージョン管理入門」という発表をしてきました

2018年8月23日に関西学院大学のCAPS(応用心理科学研究センター)で行われたセミナーで、R Markdownによるドキュメント生成と バージョン管理入門という発表をさせていただきました。

 

 ※当日の配布資料から削った&修正したスライドがあります

 

 主に心理学を専門とする、研究者や大学院生を対象とした発表でした。まだR Markdownを使ったことがない方々を想定して、以下のような話をしました。

  • そもそもR Markdownとは
  • R Markdownを使うと、どういう利点があるのか
  • 実際にどのようにしてドキュメントを作成するのか

 また、ドキュメントを生成して終わりではなく、Gitによるバージョン管理も重要という話題提供も行いました。

これは本筋ではなく(ご依頼いただいた内容ではなく)、勝手に盛り込んでしまったものでしたが、なかには非常に関心を持っていただいた方もおられたようで、よかったです。

今回は入門編ということで、GitHub Desktopを用いた管理方法について紹介しました。

 

個人的な話になりますが、今回このセミナーのために初めてxaringanパッケージでスライドを作ってみました。まだ慣れていない部分もありますが、拡張性の高さにとても魅力を感じました。

自分自身の勉強にもなり、とてもいい機会になりました。関係者の皆様、ありがとうございました。

RユーザのためのRStudio[実践]入門という本が出ます。

はじめに

RユーザのためのRStudio[実践]入門−tidyverseによるモダンな分析フローの世界−という書籍の執筆に関わらせていただく機会をいただきました。

「データ分析ワークフローを一通り解説していきます。データの収集(2章)、データの整形(3章)、可視化(4章)、レポーティング(5章)など、データ分析に欠かせないこれらの要素の基礎を押さえることができます。」という触れ込みですが、私は4章:ggplot2によるデータ可視化というパートを担当しています。


書籍の概要の紹介

共著者の皆さんもすでに各ブログで紹介してくださっているので、重複した情報になりますが、構成は以下の通りです。

  1. RStudioの基礎 (担当: @y__mattuさん)
    • RStudio(version 1.1.423)のインストールや基本的操作、データ読み込み方法など
  2. スクレイピングによるデータ収集 (担当: @y__mattuさん)
    • Web上の様々なデータの取得方法
  3. dplyr/tidyrによるデータ前処理 (担当: @yutannihilation さん)
    • 後の分析や可視化の効率を高めるための、tidy(整然)なデータに整形する方法
  4. ggplot2によるデータ可視化 (担当: @kyn02666)
    • 可視化の文法の解説や、目的に応じたレイアウトの調整方法
  5. R Markdownによるレポート生成 (担当: @kazutan さん)
    • Rによる処理をシームレスにドキュメント・レポートへ出力する方法

本書のアピールポイント

tidyverseへの準拠

著者らは本書を「宇宙本」と呼んでいますが、それは本書がtidyverseパッケージを利用した分析フローを解説しているためです。本書カバーの宇宙や惑星のイラストは、tidyverseという宇宙に広がる、様々なパッケージ群を表しています。1~2章担当の@y__mattuさんの言葉を借りると、本書には以下のような特徴があるかと思います。

  • tidyverseを扱った書籍が少なく、特に入門書はほぼ皆無である
  • 本書はtidyverseの入門者でも読めるように作られている
  • データ取得、読み込み、前処理、可視化、レポーティングといったどんな分析をするにも必ず通るであろうプロセスを解説した本

tidyverseパッケージ群は、いまだ改良・開発が進んでいるので、賞味期限の早い内容になってしまうのではないかという懸念があるかもしれませんが、5章担当の@kazutanさんがこれは本書に限らず技術書全般で言える問題です。そこで本書は陳腐化しないようコアな機能を中心に、さらに知らないと損をするような機能を重点的に紹介しています。」とおっしゃるように、根っこの部分をしっかり紹介することを、著者一同、念頭においていました。

贅沢な内容

総ページ数が240ページ、ということは各章は40~50ページ程度ということになります。したがって、tidyverseに含まれるパッケージの中にも言及していないものもありますし(例えばpurrrパッケージやbroomパッケージ)、決してtidyverseを隅々まで徹底的に解説しているというわけではありません。それは、繰り返しになりますが本書が主眼に置いているのは、tidyverseパッケージに準拠した分析フローであり、tidyverseパッケージ群の解説そのものが目的ではないからです。本書の内容については、目次をご参照ください

それでも、各章は「おお!」と思わず息の漏れるような内容になっていると思います(というか私は、他の章を読んで、何度もそうなりました)。 1~2章担当の@y__mattuさんの言葉をお借りすると、それは「『この内容ならこの人しかいないよね』という人物が書いています。R勉強会やWeb上で多くの記事を発信し、時にはパッケージの開発動向まで追ってしまうような頼もしい方々です。」からだと思います。

あ、いえ、私は違うんですけどね。「奴は四天王の中でも最弱」っていうか。いやそもそも四天王ですらなくて、ただのggplot2が好きな人っていうか。

とはいえ、日本社会心理学会 第5回春の方法論セミナー(R/RStudio入門 データ可視化)など、ggplot2によるデータ可視化について、聴衆の反応をリアルタイムに感じながら解説を行ってきた経験はそこそこあると思います。今回の私の担当章では、それらの経験を踏まえて、どのような解説が分かりやすいのか、どのような喩えが分かりやすいのか、どの点を重点的に解説したほうがいいのか、など、色々と工夫したつもりです。特に、図4.1はかなり頑張って作りました。

では私が担当させていただいた4章では、いったいどのような内容を紹介したのか、以下に簡潔にまとめたいと思います。


4章:ggplot2によるデータ可視化

紹介したこと

意識したことは、

  1. ggplot2の背後にある「可視化の文法」を紹介すること
  2. 可視化から図の共有までの手順を時系列的に解説すること
  3. 用例集を兼ねること

ということでした。可視化の文法が存在することの利点は、それを理解することで、様々なグラフを似たような記法で作成できるという、効率の良さです。したがって、その文法を伝えることを重視しました。また、種々の機能や文法を散発的に解説するのではなく、料理レシピのように手順が明確になるように意識しました。

それと同時に、各コードが用例集としても利用可能なように、事例を工夫しました(もちろん、分野によってよく用いられるグラフは異なると思われるので、一般化はできないかもしれませんが)。

紹介していないこと

第一に、かなり重要なことなのですが、最新バージョンのggplot2 version 2.3.0には準拠していませんversion 2.3.0における変更点は、こちらの@yutannihilationさんの解説記事をご参照ください。本書の発売が2018年6月29日、ggplot2 version 2.3.0のリリースが6月25日なので、仕方なかったんです...。というわけで、本章では、本書の執筆時点における最新バージョンである、ggplot2 version 2.2.1に基づき解説しました。もっとも、これらの変更による影響が出ないように配慮して本章を執筆しましたので、ご安心ください。

第二に、本書のメインタイトルはRユーザのためのRStudio[実践]入門という名前ですが、4章に関しては、あまりRStudioならではの機能は解説していません。具体的には、Addinです。

ggplot2では非常に手軽に・効率的にデータを可視化することが出来ますが、「見栄えを細かく調整する」ことは結構大変です。例えば以下のようなグラフを描いたとして...

g <- ggplot(data = iris, mapping = aes(x = Species, y = Sepal.Width, fill = Species)) +
    geom_boxplot()

print(g)

f:id:das_Kino:20180615172623p:plain

凡例の位置を上に、各水準を水平方向に並べようとしたら、以下のようにtheme()を追記する必要があります。

g <- ggplot(data = iris, mapping = aes(x = Species, y = Sepal.Width, fill = Species)) +
    geom_boxplot() +
    theme(legend.position = "top", legend.direction = "horizontal")

print(g)

f:id:das_Kino:20180615172748p:plain

ただ、このような「見栄えの調整」のためのコードは、決して頻繁に書くというわけではないと思うので、思い出すのが大変です。いえ、私の話なんですけど。

このような場合に、見栄えの調整をGUIで操作できる、ggThemeAssistというAddinが重宝します。使用方法はこちらをご参照ください。他にも、カラーピッカーのAddinであるcolourpickerなど(使用方法はこちらをご参照ください)、便利なAddinがたくさんあります。

Addinを紹介するかどうか悩んだのですが、あくまで分析フローの紹介が本書の主眼であることから、割愛することにしました。


おわりに

長くなりましたが、まだまだ語り切れない制作秘話がたくさんあります。著者一同、熱い思いを込めて執筆した本なので、ぜひ本書を手に取っていただければ幸いです。そして、勉強会などでお目にかかった際には、ぜひご感想をお聞かせいただければ幸いです。

私自身、本書を執筆する中で新たに発見したことも多々あり、このような機会をいただけたことに、心から感謝しています。

そして何より、たびたびの校正にも丁寧に応じてくださり、執筆の舵を取ってくださった編集者T氏や、共同執筆者の皆様に、厚く御礼申し上げます。

Enjoy!!