R Markdown&RStudioの個人的tips

[NTTコミュニケーションズ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/nttcom) 16日目の記事です。

# はじめに
こんにちは、@flatyです。普段はNTTコミュニケーションズでデータ分析まわりのお仕事をしてます。
自分が所属するチームではPython(Jupyter)やTableauなど様々な環境で分析できるのですが、個人的にはRを使って分析することが多いです。R Markdownによるレポート作成が便利であるのと、IDE(統合開発環境)であるRStudioが使いやすいという2点が大きい理由です。(tidyverseによるデータハンドリングや可視化に慣れているというのもあります)
本記事では、Rを使って分析する方の参考になるよう、R MarkdownとRStudioの個人的なtipsをまとめようと思います。

ざっくり言うと以下です

* R Markdown: `code_folding: hide`と`.tabset`が便利
* RStudio: Markdownの見出し表示が便利、Excelっぽくデータを眺められるのも便利

#### 余談
本当は入門tip的な感じで書こうとしてたのですが、ちょうど先週@Ringa_hyjさんが[「2021年からRを始める人へ「R&R studio」初期tips」](https://qiita.com/Ringa_hyj/items/4e6687f7556bac7e8577)という素晴らしい記事を書かれていたので、個人的tipに方向修正しました。R&R studio使ったことないという方はそちらに目を通してから本記事を見るとわかりやすいかもです。

# R Markdown
R Markdownは名前の通りRとMardownを合わせた形式で、Markdownによる簡単なドキュメント作成とRによるデータ分析を同時に行うことができます。Jupyterを使ってる方はnotebook形式をイメージしてもらえばわかりやすいと思います。
Jupyterだとcellを追加し、cellのタイプをcodeかmarkdownか選択してcodeとmarkdownを区別していますが、R Markdownでは基本がMarkdownで、そこにcode block(chunk)を追加する形となります。(この違いは慣れの問題だと思います)

## html document
R Markdownのメリットは簡単にドキュメントを生成できることにあります。pdfファイル等も生成できますが、html形式で生成するのがオススメです。
特にcode_foldingを設定することによってcodeを必要な時にだけ見られるようにできたり、tabsetをすることによって縦長になってしまうレポートをすっきりまとめることができるのがお気に入りです。
以下のR Markdownのsampleを元に解説していきます。

```
---
title: "NTT Communications Advent Calender 2020"
author: "flaty"
date: '`r format(Sys.time(), "%y/%m/%d %H:%M")`'
output:
  html_document:
    md_extensions: -ascii_identifiers
    #number_sections: true
    #fig_caption: true
    toc: true
    #toc_float: true
    code_folding: hide
    theme: lumen
    highlight: pygments
---

# H1 {.tabset .tabset-fade .tabset-pills}
test

## H2
``{r, message=FALSE}
library(tidyverse)
``
```
### yamlヘッダ
上のsampleでいうとtitleからhighlightまでの`---`で囲まれている箇所です。
こちらに全体的な設定を記述してあげます。詳しくはこちらの[公式ドキュメント](https://bookdown.org/yihui/rmarkdown/html-document.html)を参考にしてもらえればと思います。(自分はtitle以外の箇所をコピペして使い回してます。)

tipsとしては、

* dateの箇所を上のように書くことで自動でdocument作成日時が反映される
* 使ったり使わなかったりする設定はコメントアウトで対応できる
* `code_folding: hide`とすることでhtml documentのcode blockを折りたためる
    * 詳しい人にはcodeを見せながら説明
    * そうじゃない人にはcodeを隠して説明みたいな使い分けができる
    * 見た目もすっきりする
* `theme`で全体のテーマを、`highlight`でcode blockの色を設定できる

といった感じです。

### chunk(code block)
上のsampleでいうと最後の\`\`\`{r} ~ \`\`\`となっている箇所です。(Qiita自体がMarkdownでおかしくなってしまったのでsampleは \` を2つにしてます。)
オプションも色々指定できます。詳しくは[公式ドキュメント](https://bookdown.org/yihui/rmarkdown/r-code.html)をご覧ください。

### Markdown
yamlヘッダとchunk以外の箇所はMarkdownです。tipsとしては、`# H1 {.tabset .tabset-fade .tabset-pills}`のようにtabsetオプションを入れることによって、1つ下のHeadersをtabで階層化することができます。sampleだと`#`にtabsetがついているので、`##`のHeadersが階層化されることにます。
この後紹介する[Heads or Tails](https://www.kaggle.com/headsortails)さんのR Markdown documentを見ると効果を実感できると思います。

### 応用例
個人的にはkaggle Notebooks Grandmasterの[Heads or Tails](https://www.kaggle.com/headsortails)さんのR Markdown documentを参考にしています。
一番投票数(votes)の多い[こちらのR Markdown document](https://www.kaggle.com/headsortails/back-to-predict-the-future-interactive-m5-eda)などは、kaggleやってなくても一見の価値ありです！

# RStudio
RStudioはRのIDE(統合開発環境)です。最近はPythonも使えるようになってきています。
UIは以下のように、左上のエディタ部分でR MarkdownやRのコードを編集し、左下のコンソールでコード実行する感じになってます。個人的に便利だと感じる点は、R Markdownを編集する際に見出し(Headers)一覧を表示できることと、Environment部分でデータを簡単に把握できることです。

![Screen Shot 2020-12-16 at 10.19.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308804/06dd7ee7-e0d4-803e-5b5c-52dc91b17a58.png)

### R Markdownの見出し表示
下の図の黄色い丸の箇所を押すと赤枠のように見出し(Headers)一覧を表示できます。どこでなにをしてるのかぱっと見でわかるので、長めのR Markdownを編集する際は地味ですが重宝してる機能です。

![Screen Shot 2020-12-16 at 11.59.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308804/eb958f6c-2038-46f0-0b3f-5b81ef03bc11.png)

### Environment部分でのデータ確認

(RStudio使ってる方はかなりの割合で知ってると思いますが、)
右上のEnvironment部分でオブジェクト一覧を確認できます。Dataframeだと、わざわざ`dim()`などしなくてもサイズを確認することができ便利です。
さらに、Dataframeのオブジェクトをクリックすることで、Excelのようにデータを眺めることが可能です。
個人的にデータ全体を可能な範囲で眺めるのはデータを理解していく上で非常に重要だと感じてます。実際、機械的な処理だと気づけない問題に気づけたりした経験は数え切れないです。
![Screen Shot 2020-12-16 at 19.24.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308804/b0d64ffc-d39d-b3cb-527b-509e6758c8ee.png)


# おわりに
今回はR MarkdownとRStudioの個人的なtipsをまとめました。R MarkdownやRStudioを使ったことない方にも興味を持ってもらえると幸いです。

Enjoy!

# 参考

* [2021年からRを始める人へ「R&R studio」初期tips(Ringa hyjさん)](https://qiita.com/Ringa_hyj/items/4e6687f7556bac7e8577)
* [R Markdown: The Definitive Guide](https://bookdown.org/yihui/rmarkdown/)
* [R Markdown入門(Kazutanさん)
](https://kazutan.github.io/kazutanR/Rmd_intro.html)
* [Back to (predict) the future - Interactive M5 EDA(Heads or Tailsさん)](https://www.kaggle.com/headsortails/back-to-predict-the-future-interactive-m5-eda)
* [RStudio Cheatsheets - RStudio IDE Cheatsheet](https://rstudio.com/resources/cheatsheets/)
* [R/RStudio入門(Kazutanさん)](https://kazutan.github.io/JSSP2018_spring/intro_rstudio.html)