RStudio Server + tidyverse + RMeCab で日本語もOKなDockerイメージをアップデートしました
はじめに
1年ほど前に作った日本語+Mecab+tidyverseなDockerイメージですが、時代に合わせてアップデートしました。
1年前の記事:
今回のDocker イメージ: https://hub.docker.com/r/ymattu/mecab-d/
アップデート内容は
あたりです。
入っている内容は相変わらず tidyverse パッケージ群、MeCab および RMeCabパッケージ、LaTeX環境(R Markdown PDF出力用) です。また、ggplot2 などでの日本語プロットも文字化けしないようにIPAexフォントを入れています。このフォントはR Markdownで日本語のPDFを出力する時にも必要です。
R 3.4.4 対応
つい先日 R 3.4.4 がリリースされました。それに合わせて本家 rocker/rstudio が3.4.4に更新されていてビルドも問題なさそうだったのでこちらも合わせて 3.4.4 にしました。
本家: https://hub.docker.com/r/rocker/tidyverse/
Tiny TeX に変更
これまでは重たい TeX Live をガツンといれて重たい Docker イメージにしていたのですが、よく考えれば R Markdown で PDF 出力するということを考えた場合、フルな TeX は必要ありません。そこで RStudio 社が考えたのが、「R で動かすのに必要最低限の TeX 環境を作ってしまおう」というものです。こうしてできたのが Tiny TeX です。これが結構すごくて、TeX Live のインストールだと数時間かかるのが Tiny TeX だと 10分くらいで終わります。
インストールとか
これは1年前と同じなので下記を参照してください。 Docker 環境は今は Mac であれば Docker for Mac が無料ですし簡単だと思います。
RStudio Server + tidyverse + RMeCab で日本語もOKなDockerイメージを作りました - ★データ解析備忘録★
日本語関連
ggplot2 での日本語
下記のようにフォントを指定(参考: ggplot2で日本語フォントを指定したい)
フォントは Docker 内に用意されています。
font_A <- "IPAMincho" font_B <- "IPAGothic" d <- data.frame(X=rep(1:5, 2), Y=c(1:5, 5:1), A=rep(c('a','b'), each=5)) ggplot(data=d, aes(x=X, y=Y, group=A, color=A)) + geom_line(size=2) + labs(x="えっくす", y="わい", color="えー", title="たいとる") + theme(text = element_text(family = font_A))
R Markdown での日本語 PDF 出力
YAML フロントマター(.Rmd の冒頭)に以下のように記述。 フォントは用意されているのでこれだけ。
参考:
TinyTeXを使って10分で(R向けの)LaTeX環境を整える - Qiita
--- title: "あいう" output: pdf_document: latex_engine: xelatex documentclass: bxjsarticle classoption: xelatex,ja=standard geometry: no ---
今後のアップデートについて
R のバージョンが上がった時はなるべく更新するようにします。
あと、他の形態素解析器(JUMAN++とか)についてはこれに入れるかどうかはちょっと迷ってます。イメージ名が mecab-d
だし。。。
とはいえあると便利そうなので他のイメージで作るかも?
Appendix1. インストールされているパッケージ
ip <- tibble::as_data_frame(installed.packages()[,c(1,3:4)]) ip <- ip[is.na(ip$Priority),1:2,drop=FALSE] print(ip, n = Inf) #> # A tibble: 171 x 2 #> Package Version #> <chr> <chr> #> 1 acepack 1.4.1 #> 2 assertthat 0.2.0 #> 3 backports 1.1.2 #> 4 base64enc 0.1-3 #> 5 BH 1.66.0-1 #> 6 bindr 0.1.1 #> 7 bindrcpp 0.2 #> 8 BiocInstaller 1.28.0 #> 9 bit 1.1-12 #> 10 bit64 0.9-7 #> 11 bitops 1.0-6 #> 12 blob 1.1.0 #> 13 bookdown 0.7 #> 14 brew 1.0-6 #> 15 broom 0.4.3 #> 16 callr 2.0.2 #> 17 caTools 1.17.1 #> 18 cellranger 1.1.0 #> 19 checkmate 1.8.5 #> 20 cli 1.0.0 #> 21 colorspace 1.3-2 #> 22 commonmark 1.4 #> 23 covr 3.0.1 #> 24 crayon 1.3.4 #> 25 crosstalk 1.0.0 #> 26 curl 3.1 #> 27 data.table 1.10.4-3 #> 28 DBI 0.8 #> 29 dbplyr 1.2.1 #> 30 debugme 1.1.0 #> 31 desc 1.1.1 #> 32 devtools 1.13.5 #> 33 dichromat 2.0-0 #> 34 digest 0.6.15 #> 35 docopt 0.4.5 #> 36 dplyr 0.7.4 #> 37 DT 0.4 #> 38 dtplyr 0.0.2 #> 39 evaluate 0.10.1 #> 40 feather 0.3.1 #> 41 forcats 0.3.0 #> 42 formatR 1.5 #> 43 Formula 1.2-2 #> 44 gdtools 0.1.7 #> 45 ggplot2 2.2.1 #> 46 ggplot2movies 0.0.1 #> 47 git2r 0.21.0 #> 48 githubinstall 0.2.2 #> 49 glue 1.2.0 #> 50 gmailr 0.7.1 #> 51 gridExtra 2.3 #> 52 gtable 0.2.0 #> 53 haven 1.1.1 #> 54 hexbin 1.27.2 #> 55 highr 0.6 #> 56 Hmisc 4.1-1 #> 57 hms 0.4.2 #> 58 htmlTable 1.11.2 #> 59 htmltools 0.3.6 #> 60 htmlwidgets 1.0 #> 61 httpuv 1.3.6.2 #> 62 httr 1.3.1 #> 63 hunspell 2.9 #> 64 igraph 1.2.1 #> 65 ISOcodes 2017.09.27 #> 66 janeaustenr 0.1.5 #> 67 jsonlite 1.5 #> 68 knitr 1.20 #> 69 labeling 0.3 #> 70 Lahman 6.0-0 #> 71 latticeExtra 0.6-28 #> 72 lazyeval 0.2.1 #> 73 lintr 1.0.2 #> 74 littler 0.3.3 #> 75 lubridate 1.7.3 #> 76 magrittr 1.5 #> 77 mapproj 1.2-5 #> 78 maps 3.2.0 #> 79 maptools 0.9-2 #> 80 markdown 0.8 #> 81 MatrixModels 0.4-1 #> 82 memoise 1.1.0 #> 83 microbenchmark 1.4-4 #> 84 mime 0.5 #> 85 miniUI 0.1.1 #> 86 mnormt 1.5-5 #> 87 mockery 0.4.1 #> 88 modelr 0.1.1 #> 89 multcomp 1.4-8 #> 90 munsell 0.4.3 #> 91 mvtnorm 1.0-7 #> 92 NLP 0.1-11 #> 93 nycflights13 0.2.2 #> 94 openssl 1.0.1 #> 95 packrat 0.4.9-1 #> 96 pillar 1.2.1 #> 97 pingr 1.1.2 #> 98 pkgconfig 2.0.1 #> 99 PKI 0.1-5.1 #> 100 plogr 0.1-1 #> 101 plyr 1.8.4 #> 102 praise 1.0.0 #> 103 processx 2.0.0.1 #> 104 psych 1.7.8 #> 105 purrr 0.2.4 #> 106 quantreg 5.35 #> 107 R6 2.2.2 #> 108 RColorBrewer 1.1-2 #> 109 Rcpp 0.12.16 #> 110 RCurl 1.95-4.10 #> 111 readr 1.1.1 #> 112 readxl 1.0.0 #> 113 rematch 1.0.1 #> 114 remotes 1.1.1 #> 115 reprex 0.1.2 #> 116 reshape2 1.4.3 #> 117 rex 1.1.2 #> 118 RJSONIO 1.3-0 #> 119 rlang 0.2.0 #> 120 rmarkdown 1.9 #> 121 rmdshower 2.1.1 #> 122 RMeCab 0.99999 #> 123 RMySQL 0.10.14 #> 124 roxygen2 6.0.1 #> 125 RPostgreSQL 0.6-2 #> 126 rprojroot 1.3-2 #> 127 rsconnect 0.8.8 #> 128 RSQLite 2.0 #> 129 rstudioapi 0.7 #> 130 rticles 0.4.1 #> 131 rversions 1.0.3 #> 132 rvest 0.3.2 #> 133 sandwich 2.4-0 #> 134 scales 0.5.0 #> 135 selectr 0.3-2 #> 136 servr 0.8 #> 137 shiny 1.0.5 #> 138 slam 0.1-42 #> 139 SnowballC 0.5.1 #> 140 sourcetools 0.1.6 #> 141 sp 1.2-7 #> 142 SparseM 1.77 #> 143 stopwords 0.9.0 #> 144 stringdist 0.9.4.7 #> 145 stringi 1.1.7 #> 146 stringr 1.3.0 #> 147 svglite 1.2.1 #> 148 testit 0.7 #> 149 testthat 2.0.0 #> 150 TH.data 1.0-8 #> 151 tibble 1.4.2 #> 152 tidyr 0.8.0 #> 153 tidyselect 0.2.4 #> 154 tidytext 0.1.7 #> 155 tidyverse 1.2.1 #> 156 tinytex 0.4.2 #> 157 tm 0.7-3 #> 158 tokenizers 0.1.4 #> 159 tufte 0.3 #> 160 utf8 1.1.3 #> 161 viridis 0.5.0 #> 162 viridisLite 0.3.0 #> 163 webshot 0.5.0 #> 164 whisker 0.3-2 #> 165 withr 2.1.2 #> 166 xfun 0.1 #> 167 XML 3.98-1.10 #> 168 xml2 1.2.0 #> 169 xtable 1.8-2 #> 170 yaml 2.1.18 #> 171 zoo 1.8-1
Appendix2. Dockerfile
FROM rocker/tidyverse:latest MAINTAINER "ymattu" ## Add LaTeX, rticles and bookdown support ## uses dummy texlive, see FAQ 8: https://yihui.name/tinytex/faq/ RUN wget "https://travis-bin.yihui.name/texlive-local.deb" \ && dpkg -i texlive-local.deb \ && rm texlive-local.deb \ && apt-get update \ && apt-get install -y --no-install-recommends \ ## for rJava default-jdk \ ## Nice Google fonts fonts-roboto \ ## used by some base R plots ghostscript \ ## used to build rJava and other packages libbz2-dev \ libicu-dev \ liblzma-dev \ ## system dependency of hunspell (devtools) libhunspell-dev \ ## system dependency of hadley/pkgdown libmagick++-dev \ ## rdf, for redland / linked data librdf0-dev \ ## for V8-based javascript wrappers libv8-dev \ ## for jq queries libjq-dev \ ## R CMD Check wants qpdf to check pdf sizes, or throws a Warning qpdf \ ## For building PDF manuals texinfo \ ## for git via ssh key ssh \ ## just because less \ vim \ && apt-get clean \ && rm -rf /var/lib/apt/lists/ \ ## Use tinytex for LaTeX installation && wget -qO- \ "https://github.com/yihui/tinytex/raw/master/tools/install-unx.sh" | \ sh -s - --admin --no-path \ && mv ~/.TinyTeX /opt/TinyTeX \ && /opt/TinyTeX/bin/*/tlmgr path add \ && tlmgr install metafont mfware inconsolata tex ae parskip listings \ && tlmgr path add \ && Rscript -e "source('https://install-github.me/yihui/tinytex'); tinytex::r_texmf()" \ && chown -R root:staff /opt/TinyTeX \ && chmod -R g+w /opt/TinyTeX \ && chmod -R g+wx /opt/TinyTeX/bin \ ## And some nice R packages for publishing-related stuff && install2.r --error --deps TRUE \ bookdown rticles rmdshower DT ## Mecab RUN wget -O mecab-0.996.tar.gz "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE" ;\ tar -xzf mecab-0.996.tar.gz ;\ cd mecab-0.996; ./configure --enable-utf8-only; make; make install; ldconfig ## Ipadic RUN wget -O mecab-ipadic-2.7.0-20070801.tar.gz "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM" ;\ tar -xzf mecab-ipadic-2.7.0-20070801.tar.gz ;\ cd mecab-ipadic-2.7.0-20070801; ./configure --with-charset=utf8; make; make install ;\ echo "dicdir = /usr/local/lib/mecab/dic/ipadic" > /usr/local/etc/mecabrc ## IPAex Fonts RUN apt-get clean ;\ cd /opt/TinyTeX/texmf-dist \ wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00301.zip ;\ unzip IPAexfont00301.zip \ echo "Map zi4.map" >> /opt/TinyTeX/texmf-dist/web2c/updmap.cfg ;\ mktexlsr ;\ updmap-sys ## Clean up RUN apt remove -y build-essential ;\ rm -rf rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/* ;\ rm -rf mecab-0.996.tar.gz* ;\ rm -rf mecab-ipadic-2.7.0-20070801* ## Change environment to Japanese(Character and DateTime) ENV LANG ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 RUN sed -i '$d' /etc/locale.gen \ && echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen \ && locale-gen ja_JP.UTF-8 \ && /usr/sbin/update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja" RUN /bin/bash -c "source /etc/default/locale" RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ## Install additional R packages RUN Rscript -e "install.packages(c('githubinstall','tm','slam', 'tidytext'))" RUN Rscript -e "install.packages('RMeCab',repos='http://rmecab.jp/R')" CMD ["/init"]