おまえは万物をRSTUDIOで書ける/YOU CAN WRITE EVERYTHING ON RSTUDIO

A4d1023b1de7890c67a083d14573882d?s=47 S-Katagiri
September 19, 2020

おまえは万物をRSTUDIOで書ける/YOU CAN WRITE EVERYTHING ON RSTUDIO

本文中にハイパーリンクが張られているため, WEBブラウザではなくPDFファイルをダウンロードしてご覧になることを推奨します
Tokyo.R #88 発表資料です

https://github.com/Gedevan-Aleksizde/rmdja

2020/10/17: リンクを修正

A4d1023b1de7890c67a083d14573882d?s=128

S-Katagiri

September 19, 2020
Tweet

Transcript

  1. おまえは万物を RStudio で書ける Katagiri, Satoshi (ill-identified) Tokyo.R #88, 2020/9/19 (10/17

    更新) 1
  2. (10/17: 発表後追記) rmdja パッケージの場所 • 本スライドで紹介している rmdja はリポジトリとし て独立させました •

    使い方についてここでドキュメントを公開していま す • 縦書き文書, 論文, Python スクリプト埋め込み機能 を新たに補強しています 2
  3. Нужны новые формы. Новые формы нужны, а если их нет,

    то лучше ничего не нужно. 新しいフォーマットが必要なんですよ. 新しいフォー マットが. それがないというなら, いっそ何もないほう がいい. — A. チェーホフ『かもめ』 https://www.youtube.com/watch?v=SaRhIQB7_wo 3
  4. 目次 自己紹介 おまえは RStudio を使っているか? おまえはもう R Markdown をつかっているか? おまえは

    RStudio で Python を書いているか? おまえは bookdown でインターン用資料を作ったか? おまえは Jupyter{Book} を知っているか? まとめ 4
  5. 自己紹介

  6. よくきたな おれは毎日膨大な量のエラーを吐いている 5

  7. 自己紹介 • 新米機械学習エンジニア • Web 広告会社 • Twitter ID: ill_identified

    • ブログ: ill-identified diary • 勤務先の採用ページ 6
  8. 最近の活動 (1/2) • 主語の大きな発表 •『計量経済学と機械学習の関係 –AI はさだめ, さだめ は反事実 (転送用)』(Tokyo.R

    #80) • 今月中にもう 1 つ公開予定 • 主語の変な発表 •『三国志で学ぶデータ分析』(Japan.R 2019) •『飯野山 (讃岐富士) は正規分布らしいのでパラメー タを推定する』 7
  9. 最近の活動 (2/2) 社内外で発表 ぽきた w 魔材ンゴ!? ありえん良さみが深い w 二郎からのウォッカで優勝せえへん? そり!

    そりすぎてソリャンカになっ た w そりでわ、無限に練りをしまつ おやしみ~ Katagiri, Satoshi July 1, 2020 1 機械学習による確率推定とカリブレー ション 片桐智志 May 22, 2020 1 スーパーの特売品を買いすぎたの でを作って食べた話 July 31, 2020 HEMA: 中世ヨーロッパの武術復興 前編 August 31, 2020 8
  10. 最近の悪行 (1/2) • Tokyo.R いつも遅刻 • Tokyo.R 時間配分を考えない発表で爆死 • Tokyo.R

    おもいつきで発表して爆死 9
  11. 最近の悪行 (2/2) • 中途半端な発表を放置して完成させていない •『再考: お買い得物件を機械学習で見つける方法』 •『アクチュアリーの技術をマーケティング (離脱予測) に応用してみる』 •『人工知能とシュミレーション

    (と R) - ビギニング』 < NEW! > 10
  12. ワッザ?! 74 第 9 章 モデルの評価 表9.1 正例割合ごとの, NE が

    1 を切るのに必要な対数損失 正例の割合 対数損失 50% 0.693 30% 0.611 10% 0.325 5% 0.199 1% 0.056 NE = −−1 ∑ =1 [ ln( ) + (1 − ) ln(1 − )] −−1 ∑ =1 [ ln( ̄ ) + (1 − ) ln(1 − ̄ )] = LogLoss − [ ̄ ln( ̄ ) + (1 − ̄ ) ln(1 − ̄ )] (9.1) こ こ で, ̄ = −1 ∑ , つ ま り ̄ は 正 例 ラ ベ ル の 割 合 で す. NE は − [ ̄ ln( ̄ ) + (1 − ̄ ) ln(1 − ̄ )] と い う 要 素 で 対 数 損 失 を 「正 規 化」 し た 指 標 です. 式 (9.1) の分子と分母の違いに注目してください. これは正例への予測確率が全て ̄ , 負例に対しては全て 1 − ̄ を予測確率として返すようなモデルの対数損失とみなせま 11
  13. 的中率: 0.805 的中率: 0.75 的中率: 0.665 的中率: 0.665 的中率: 0.745

    的中率: 0.665 的中率: 0.745 的中率: 0.735 的中率: 0.82 Tree-6 Tree-7 Tree-8 Tree-3 Tree-4 Tree-5 RF Tree-1 Tree-2 0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 x1 x2 ラベル 1 2 予測 1 2 図10.8 ランダムフォレストの各木の決定領域とメタ学習器の結果 の重み平均となります. t 回目の学習で最小化する損失関数を (), 重みを , とすると, 以下のようになり ます. () ∶= ∑ , () ∑ , 12
  14. 94 第 10 章 統計的学習の一般理論 10.5 特徴量と前処理をどう選ぶべきか 前処理, 特徴量変換という言葉はだいぶ曖昧に使われて, コンセンサスのある定義も存在

    しません. しかし, 使用する目的によって分けることができます. ただし, 完全に分割でき るわけでなく, 複数の役割を同時に担っているものもあります. 1. データをアルゴリズムに適用できる形式に変換すること 2. 数値計算の安定化 3. モデルをデータへ近似させる補助 これまで TD や pandas で解説してきた範囲は (1) に対応します. 多くのアルゴリズム とその実装は, 入力データを数値の配列の形式で受け取ります. あちこちにセル結合のあ るエクセルファイルや, 自然言語で書かれた乱雑なテキストは受け付けません. これは機 械学習の理論からだいぶ離れた話になるため, ここではこれ以上触れません. 数値特徴量の正規化 (normalize, min-max 変換) や標準化 (standardize) は変数の スケールを統一することで数値計算の桁落ちを減らしたり, 最適化の計算の収束を早める 効果があります. 具体的な話は 10.2 章で言及したとおりです. これは (2) の観点です. 一方で, 正則化をする際には, 正規化や標準化で変数の平均とスケールを揃えておかない と, 正則化の強さが特徴量ごとにばらばらになり, 歪んだ結果を生み出します*9. 理論上は 特徴量ごとに異なる正則化を与えることも可能ですが, そのための実装や計算処理は非効 率です. また, これは回帰モデルの話になりますが, 最小二乗法は目的変数の分布が正規 分布, あるいはそれに近い対称分布になることを暗に仮定しています. そのため, 目的変 数のヒストグラムがべき分布に近い形状を示すならば, 目的変数を対数変換や Box-Cox 変換によってより対称な分布に変換すると当てはまりが改善される場合がよくあります. これらは, 実際のデータに含まれる特徴量や目的変数の分布を, 使用するモデルが想定し 13
  15. おまえは RStudio を使っている か?

  16. まだ RStudio を使っていないやつへ • 初心者セッションがお前に教 えてくれる 14

  17. おまえはもう R Markdown を つかっているか?

  18. おまえは資料づくりでなやんだことはないか? • PNG を貼り付けるとぼやける 15

  19. おまえには R Markdown がある • グラフをきれいに描けない • エクセルのグラフをコピペするのがめんどい • 図をうまく描けない

    • エクセルの表が気に入らない R Markdown は R を使う真の男のための銃 (GUN) である 16
  20. RStudio 上で R Markdown を使え. • おまえはじぶんで調べることができる • https: //kazutan.github.io/kazutanR/Rmd_intro.html

    17
  21. おまえはベクタ画像で表示できる • 拡大してもボヤけない オブジェクト 'meatadata' がありません -0.050 -0.025 0.000 0.025

    0.050 -0.050 -0.025 0.000 0.025 0.050 オブジェクト 'meatadata' がありません オブジェクト 'meatadata' がありません 18
  22. おまえは ggplot2 を直接出力できる ggplot(tibble( meat = " オブジェクト 'meatadata' がありません"

    ), aes(x = 0, y = 0, label = meat)) + geom_text(color = "red") + labs(x = " オブジェクト 'meatadata' がありません", y = " オブジェクト 'meatadata' がありません") 19
  23. おまえは tikz で書くことができる • 本来は L A TEX 用のパッケージ •

    {r} の代わりに {tikz} で直接書く • PDF, HTML いずれも自動変換してくれる A INNER JOIN B A OUTER JOIN B A LEFT JOIN B A RIGHT JOIN B 図 1: tikz を利用した図の表示 20
  24. tikz の記述 \def\firstcenter{(135:1.75cm)} \def\secondcenter{(45:1.75cm)} \def\firstcircle{\firstcenter circle (2.0cm)} \def\secondcircle{\secondcenter circle (2.0cm)}

    \def\wholerect{(-4.0, -1.1) rectangle(4.0, 3.35 \begin{tabular}{cc} % A cap B \begin{tikzpicture} \begin{scope} \clip \secondcircle; \fill[cyan] \firstcircle; \end{scope} \draw \wholerect; 21
  25. おまえは Asymptote でグラフを描ける • {asy} で asymptote を直接書ける. • おれは描けない

    図 2: Asymptote による画像 22
  26. Asymptote の中身 import graph3; import grid3; import palette; settings.prc =

    false; currentprojection=orthographic(0.8,1,2); size(500,400,IgnoreAspect); real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z. surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Sp surface S=planeproject(unitsquare3)*s; S.colors(palette(s.map(zpart),Rainbow())); draw(S,nolight); draw(s,lightgray+opacity(0.7)); grid3(XYZgrid); 23
  27. おまえは他の言語/パッケージでも描ける • DiagrammeR でグラフィカルモデル作成 • 内部で DOT 言語 or ggplot2

    を使ったパッケージ • 他にも選択肢はあるが未検証 24
  28. おまえは表も出力できる • データフレームをそのまま表示 • knitr と kableExtra を使用 • シンプルで見やすい

    head(mtcars) %>% kable(booktabs = T) mpg cyl disp hp drat w Mazda RX4 21.0 6 160 110 3.90 2.620 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 Datsun 710 22.8 4 108 93 3.85 2.320 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 Hornet Sportabout 18.7 8 360 175 3.15 3.440 Valiant 18.1 6 225 105 2.76 3.460 25
  29. おまえは表をリサイズできる head(mtcars) %>% kable(booktabs = T) %>% kable_styling(latex_options = "scale_down")

    mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 26
  30. おまえは表の書式設定ができる • kableExtra の vignetteより • beamer だと classoption: xcolor=table

    と か必要 mpg cyl disp hp drat wt qsec vs Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 27
  31. おれは R に膨大なエラーを吐かせているがその全てをみ せるつもりはない that_cell <- c(rep(F, 7), T) mtcars[1:8,

    1:8] %>% kable(booktabs = T, linesep = "") %>% kable_styling(latex_options="scale_down") %>% # kable_paper(full_width = F) %>% column_spec(2, color = spec_color(mtcars$mpg[1: link = "https://haozhu233.github.io/kableExtra" column_spec(6, color = "white", background = spec_color(mtcars$drat[1:8], end = popover = paste("am:", mtcars$am[1:8])) %>% column_spec(9, strikeout = that_cell, bold = th color = c(rep("black", 7), "red")) 28
  32. おまえは他の表出力パッケージも使える • stargazer 等 TeX 形式を出力するもの • results='asis' でだいたいなんとかなる •

    HTML ではどうなるか不確定 • gt も対応してるらしい 29
  33. R Markdown の 闇 • 細かい調整にこだわると 闇 • 闇 の一端の解説:

    先週書いた話 • R, knitr, Markdown, Pandoc, L A TEX, HTML それ ぞれの知識が必要 • 怖くないよ • 有用な日本語資料はそれなりにある • PDF の方は 微闇 30
  34. おまえはもう rmdja を使っているか? • ここにある • R Markdown の日本語用フォーマット •

    日本語表示の面倒な部分を自動調整 • 現在はプレゼン用フォーマットが安定しつつある • L A TEX の beamer を利用し PDF で出力 • このスライドも全て rmdja で作成 • かっこいいエピグラフを入れ放題 • 作例も豊富 31
  35. おまえは RStudio で Python を書いているか?

  36. Python イクォール RStudio • 昔はかなりしんどかった • 今は reticulate がある •

    R Markdown でも Python 実行可能 • 補完機能もある • もはや Python は RStudio も同然. Python イクォール RStudio 32
  37. HOW MANY PYTHONS CAN DANCE ON THE HEAD OF RSTUDIO?

    import numpy as np from sklearn.datasets import make_classificatio from sklearn.linear_model import LogisticRegres from sklearn.metrics import log_loss from ml_shared.evaluation import normalized_ent X, y = make_classification(n_samples=100, weigh logis = LogisticRegression(random_state=42).fit print(f"""LL: {log_loss(y, logis.predict_proba( NE: {normalized_entropy(y, logis.predict_proba( > LL: 0.046 > NE: 0.093 33
  38. THULSA DOOM’S CONSPIRACY • いくつか 罠 が存在 • よくキャッシュが悪さをする •

    グラフ関係 • どちらかというと Python モジュールの 闇 34
  39. おまえは Python でもグラフを描ける • Python には matplotlib がある • おまえは日本語表示もできる

    35
  40. from matplotlib_japreset import mplj_cairo import matplotlib.pyplot as plt plt.text(0, .5,

    'rmdja で広がる python の世界', siz 0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 rmdjaで広がるpythonの世界 図 3: matplotlib で描画 36
  41. Python ハマりポイント: グラフの日本語表示問題 • Python には matplotlib がある • 日本語表示問題

    • R グラフよりも一層 闇 • 日本語情報は錯綜しまくってて不明瞭 • 公式ドキュメントとソースコードだけが信頼できる 状況 • 近いうちに詳細な解説を公開 37
  42. Python の 闇 , グラフ保存への対処術 • japanize-matplotlib • IPA フォントを同梱して強引に適用

    • pip とかで簡単インストール • import japanize_matplotlib だけで機能 • 問題点 • あくまで画面表示まで, 保存は想定していない • おれは IPA フォントが好きではない • なんかバランス悪いし・ ・ ・ • フォントは揃えたい 38
  43. 闇 のグラフィックデバイスを克服する道のり • フォント指定だけなら大きな問題ではない • rcParams['font.family'] でフォント名指定 • OpenType や

    ttc をなるべく避ける • 画像の保存で難易度 うなぎのぼり • PDF にフォントが埋め込まれない • 埋め込んでもサブセット化されない • OS ごとに挙動が違いすぎる 39
  44. matplotlib-japreset (WIP) • おれがプリセットを用意した • matplotlib-japreset • from matplotlib_japreset import

    mplj_*** • mplj_pdf: PDF モード • mplj_pgf: L A TEX 数式モード • しかし OS ごとに挙動が違いすぎる • ぶっちゃけ自分の Linux でしか動作してない 闇 40
  45. 表示例 • cairo_pdf は使えないので dev='png'/'pdf' •「青柳隷書しも」で表示 0.4 0.6 0.8 1.0

    rmdjaで広がるpythonの世界 matplotlib-japresetで表示される日本語 41
  46. Python グラフハマりポイント 2 • そもそも, matplotlib がつかいにくい • ちょっと複雑なグラフを描くにはあまりにも複雑 •

    あきらかに労力に見合わない • 前世紀の構文は現代の実情に合わない 42
  47. おまえは plotnine を使える • 公式 • 構文が ggplot2 そっくり •

    バックエンドで matplotlib 動いている • GRAMMAR オブ GRAPHICS に基づいていることが 照明されている • 以前は ggplot2 のクローンではないと言い張ってい たが隠さなくなった • そっくりでない部分もある • デフォルトの色が目に優しくない • 本家のいくつかの関数は再現されていない • そのうちブログにまとめる 43
  48. plotnine でグラフを描く • pandas データフレームで与える • R の NSE はさすがに使えない

    • numpy 式は評価される from plotnine import * theme_set(theme_classic(base_family=None)) ggplot(d, aes(x='x + 1', y='np.exp(y)', color=' −1 0 1 2 3 0 5 10 15 np.exp(y) z い は ろ 44
  49. plotnine: 主なハマりポイント • 日本語が表示できないとき • なんか rcParams をオーバーライドするやつがいる • base_family=None

    で • PR 上げたけどまだ反応がない • カテゴリカル変数の順序 • pandas.Categorical を使う 45
  50. おまえは pandas の掲載ができる • pandas の出力は R データフレームと同じではない • .to_markdown(),

    .to_latex() を使うべきか • Python の tabulate が必要 print(d.head(n=5).to_latex()) x y z 0 0.496714 -1.415371 ろ 1 -0.138264 -0.420645 ろ 2 0.647689 -0.342715 い 3 1.523030 -0.802277 い 4 -0.234153 -0.161286 い 46
  51. おまえは bookdown でインター ン用資料を作ったか?

  52. おれがなぜこんなことをしているのか • 勤務先のインターン向けに資料を作成 • 機械学習とかやるやつ • 市販の書籍にちょうどいいレベルのがない • リモートなので本を共有できない •

    L A TEX で書いていた • 編集が大変 • プログラムと出力のコピペがめんどくさい 47
  53. おまえは JUPYTER を知っているか • Python 用のレポート作成ツール • Jupyter notebook/Jupyterlab •

    今は notebook は開発沈静化 • しかし lab はまだ機能が乏しい… 48
  54. SAYONARA   JUPYTER・ ・ ・ • R Markdown と比べると文書作成機能が弱い •

    脚注とか参考文献リストとか相互参照とか.. • PDF の変換機能が乏しい • スライドにコード載せる余白はない • プログラムコード部分が丸出し 不満をつのらせたおれは…… 49
  55. R で Python の資料を書く ことにした 50

  56. おまえには bookdown がある • リポジトリ • R Markdown を利用した製本パッケージ •

    HTML, PDF, 電子書籍 (epub, mobi) などを一度に 生成可 • R Markdown とほぼ同じ構文 • 全媒体を同時にうまく出力する道のりは・ ・ ・ 大闇 51
  57. 何が沼か • PDF の和文組版 • デフォルトでは xeCJK • 実質中国語用 •

    スライドではあまり気にならない • 画像の埋め込み • PDF は PDF, HTML は PNG で埋め込みたい • HTML と PDF との違い • PDF は L A TEX コマンドで書ける • HTML は対応しない • (R Markdown 同様) 日本語情報が少ない • 開発者の三部作読めばだいたいわかるが英語 52
  58. rmdja 0.3.1 の新機能 • bookdown にも対応 • オトクな支援機能追加 • rmdja

    で作った rmdja のドキュメント (作りかけ) 53
  59. (実際にページを開いてみる) • HTML • PDF • PDF (製本仕様) • 電子書籍

    • 機械学習テキストは近日公開予定 • 社内レビューがまだ 54
  60. おまえは相互参照から解放される • 手動で図表番号を書く必要なし • 引用文献も .bib や .json から自動生成 •

    citr パッケージと併用 図 5: ‘citr‘ パッケージによる RStudio プラグイン 55
  61. rmdja の追加機能: CC ロゴ表示 • あったら便利だけど bookdown とかにはないもの • CC

    のロゴ表示 (beamer では追加設定が必要) rmdja::get_CC(adapt = "yes", commercial = F, size = "normal") 56
  62. rmdja の追加機能: ルビを付ける • ルビを付けるインライン関数 rmdja::ruby() • (この資料は Beamer なのでルビが上の行と重なる

    ことがある) • 混植との併用は不可 き れ 喜連 うりわり 瓜破駅 とある科学の レ ー ル ガ ン 超電磁砲 シュワルツ・ランツェンレイター 黒 色 槍 騎 兵 (失敗例) 57
  63. おまえは技術書を出版できる (?) •『Bookdown による技術系同人誌執筆』 • 技術同人誌を bookdown で作成した人のブログ記事 • トンボ付きで

    PDF 作成 • rmdja でもオプションを用意 • 実際にやったことないので動作保証外 • 経験者は要件おしえて 58
  64. main (2020-09-19 04:47) 20 第 1 章 準備 01 bookdown::render_book("index.Rmd",

    "rmdja::gitbook_ja") 02 bookdown::render_book("index.Rmd", "rmdja::pdf_book_ja") 03 bookdown::render_book("index.Rmd", "bookdown::epub_book") コピーしたディレクトリ bookdown-minimal を設定する (図 1.1, 1.2). 図1.1 Build ペーンの手動設定 図1.2 Build ペーンの手動設定 これで _book フォルダに出力がされる. 59
  65. おまえは Jupyter{Book} を知 っているか?

  66. Jupyter vs R Markdown • フォーマットが少ない • セルが表示される, 出力ファイル形式でまったく 崩れる

    60
  67. Jupyter{Book} の登場 Jupyter 開発チームのブログで言及 • R Markdown の対等に危機感を覚えたのか? • Sphinx

    + Jupyter • bookdown のように複数形式への出力はフィーチャ ーされてない? 61
  68. まとめ

  69. まとめ • おれは rmdja を作った • おまえは GUN を手にいれた •

    面倒な設定を省いて Beamer プレゼン資料を作れる • 外部ソフトの出力をいちいちコピペ市内で住む • おれは R で Python の技術文書を作った. • Python の日本語表示問題をなんとかしようとし ている • おれは rmdja で文書も作れるようにした • おまえは rmdja でどんどん怪文書を作成してばらま ける 62
  70. お前は万物を RSTUDIO で書け る 63