Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

(10/17: 発表後追記) rmdja パッケージの場所 • 本スライドで紹介している rmdja はリポジトリとし て独立させました • 使い方についてここでドキュメントを公開していま す • 縦書き文書, 論文, Python スクリプト埋め込み機能 を新たに補強しています 2

Slide 3

Slide 3 text

Нужны новые формы. Новые формы нужны, а если их нет, то лучше ничего не нужно. 新しいフォーマットが必要なんですよ. 新しいフォー マットが. それがないというなら, いっそ何もないほう がいい. — A. チェーホフ『かもめ』 https://www.youtube.com/watch?v=SaRhIQB7_wo 3

Slide 4

Slide 4 text

目次 自己紹介 おまえは RStudio を使っているか? おまえはもう R Markdown をつかっているか? おまえは RStudio で Python を書いているか? おまえは bookdown でインターン用資料を作ったか? おまえは Jupyter{Book} を知っているか? まとめ 4

Slide 5

Slide 5 text

自己紹介

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

自己紹介 • 新米機械学習エンジニア • Web 広告会社 • Twitter ID: ill_identified • ブログ: ill-identified diary • 勤務先の採用ページ 6

Slide 8

Slide 8 text

最近の活動 (1/2) • 主語の大きな発表 •『計量経済学と機械学習の関係 –AI はさだめ, さだめ は反事実 (転送用)』(Tokyo.R #80) • 今月中にもう 1 つ公開予定 • 主語の変な発表 •『三国志で学ぶデータ分析』(Japan.R 2019) •『飯野山 (讃岐富士) は正規分布らしいのでパラメー タを推定する』 7

Slide 9

Slide 9 text

最近の活動 (2/2) 社内外で発表 ぽきた w 魔材ンゴ!? ありえん良さみが深い w 二郎からのウォッカで優勝せえへん? そり! そりすぎてソリャンカになっ た w そりでわ、無限に練りをしまつ おやしみ~ Katagiri, Satoshi July 1, 2020 1 機械学習による確率推定とカリブレー ション 片桐智志 May 22, 2020 1 スーパーの特売品を買いすぎたの でを作って食べた話 July 31, 2020 HEMA: 中世ヨーロッパの武術復興 前編 August 31, 2020 8

Slide 10

Slide 10 text

最近の悪行 (1/2) • Tokyo.R いつも遅刻 • Tokyo.R 時間配分を考えない発表で爆死 • Tokyo.R おもいつきで発表して爆死 9

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

ワッザ?! 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

Slide 13

Slide 13 text

的中率: 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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

おまえは RStudio を使っている か?

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

おまえには R Markdown がある • グラフをきれいに描けない • エクセルのグラフをコピペするのがめんどい • 図をうまく描けない • エクセルの表が気に入らない R Markdown は R を使う真の男のための銃 (GUN) である 16

Slide 20

Slide 20 text

RStudio 上で R Markdown を使え. • おまえはじぶんで調べることができる • https: //kazutan.github.io/kazutanR/Rmd_intro.html 17

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

おまえは ggplot2 を直接出力できる ggplot(tibble( meat = " オブジェクト 'meatadata' がありません" ), aes(x = 0, y = 0, label = meat)) + geom_text(color = "red") + labs(x = " オブジェクト 'meatadata' がありません", y = " オブジェクト 'meatadata' がありません") 19

Slide 23

Slide 23 text

おまえは 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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

おまえは Asymptote でグラフを描ける • {asy} で asymptote を直接書ける. • おれは描けない 図 2: Asymptote による画像 22

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

おまえは他の言語/パッケージでも描ける • DiagrammeR でグラフィカルモデル作成 • 内部で DOT 言語 or ggplot2 を使ったパッケージ • 他にも選択肢はあるが未検証 24

Slide 28

Slide 28 text

おまえは表も出力できる • データフレームをそのまま表示 • 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

Slide 29

Slide 29 text

おまえは表をリサイズできる 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

Slide 30

Slide 30 text

おまえは表の書式設定ができる • 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

Slide 31

Slide 31 text

おれは 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

Slide 32

Slide 32 text

おまえは他の表出力パッケージも使える • stargazer 等 TeX 形式を出力するもの • results='asis' でだいたいなんとかなる • HTML ではどうなるか不確定 • gt も対応してるらしい 29

Slide 33

Slide 33 text

R Markdown の 闇 • 細かい調整にこだわると 闇 • 闇 の一端の解説: 先週書いた話 • R, knitr, Markdown, Pandoc, L A TEX, HTML それ ぞれの知識が必要 • 怖くないよ • 有用な日本語資料はそれなりにある • PDF の方は 微闇 30

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

おまえは RStudio で Python を書いているか?

Slide 36

Slide 36 text

Python イクォール RStudio • 昔はかなりしんどかった • 今は reticulate がある • R Markdown でも Python 実行可能 • 補完機能もある • もはや Python は RStudio も同然. Python イクォール RStudio 32

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

THULSA DOOM’S CONSPIRACY • いくつか 罠 が存在 • よくキャッシュが悪さをする • グラフ関係 • どちらかというと Python モジュールの 闇 34

Slide 39

Slide 39 text

おまえは Python でもグラフを描ける • Python には matplotlib がある • おまえは日本語表示もできる 35

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Python ハマりポイント: グラフの日本語表示問題 • Python には matplotlib がある • 日本語表示問題 • R グラフよりも一層 闇 • 日本語情報は錯綜しまくってて不明瞭 • 公式ドキュメントとソースコードだけが信頼できる 状況 • 近いうちに詳細な解説を公開 37

Slide 42

Slide 42 text

Python の 闇 , グラフ保存への対処術 • japanize-matplotlib • IPA フォントを同梱して強引に適用 • pip とかで簡単インストール • import japanize_matplotlib だけで機能 • 問題点 • あくまで画面表示まで, 保存は想定していない • おれは IPA フォントが好きではない • なんかバランス悪いし・ ・ ・ • フォントは揃えたい 38

Slide 43

Slide 43 text

闇 のグラフィックデバイスを克服する道のり • フォント指定だけなら大きな問題ではない • rcParams['font.family'] でフォント名指定 • OpenType や ttc をなるべく避ける • 画像の保存で難易度 うなぎのぼり • PDF にフォントが埋め込まれない • 埋め込んでもサブセット化されない • OS ごとに挙動が違いすぎる 39

Slide 44

Slide 44 text

matplotlib-japreset (WIP) • おれがプリセットを用意した • matplotlib-japreset • from matplotlib_japreset import mplj_*** • mplj_pdf: PDF モード • mplj_pgf: L A TEX 数式モード • しかし OS ごとに挙動が違いすぎる • ぶっちゃけ自分の Linux でしか動作してない 闇 40

Slide 45

Slide 45 text

表示例 • cairo_pdf は使えないので dev='png'/'pdf' •「青柳隷書しも」で表示 0.4 0.6 0.8 1.0 rmdjaで広がるpythonの世界 matplotlib-japresetで表示される日本語 41

Slide 46

Slide 46 text

Python グラフハマりポイント 2 • そもそも, matplotlib がつかいにくい • ちょっと複雑なグラフを描くにはあまりにも複雑 • あきらかに労力に見合わない • 前世紀の構文は現代の実情に合わない 42

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

plotnine: 主なハマりポイント • 日本語が表示できないとき • なんか rcParams をオーバーライドするやつがいる • base_family=None で • PR 上げたけどまだ反応がない • カテゴリカル変数の順序 • pandas.Categorical を使う 45

Slide 50

Slide 50 text

おまえは 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

Slide 51

Slide 51 text

おまえは bookdown でインター ン用資料を作ったか?

Slide 52

Slide 52 text

おれがなぜこんなことをしているのか • 勤務先のインターン向けに資料を作成 • 機械学習とかやるやつ • 市販の書籍にちょうどいいレベルのがない • リモートなので本を共有できない • L A TEX で書いていた • 編集が大変 • プログラムと出力のコピペがめんどくさい 47

Slide 53

Slide 53 text

おまえは JUPYTER を知っているか • Python 用のレポート作成ツール • Jupyter notebook/Jupyterlab • 今は notebook は開発沈静化 • しかし lab はまだ機能が乏しい… 48

Slide 54

Slide 54 text

SAYONARA   JUPYTER・ ・ ・ • R Markdown と比べると文書作成機能が弱い • 脚注とか参考文献リストとか相互参照とか.. • PDF の変換機能が乏しい • スライドにコード載せる余白はない • プログラムコード部分が丸出し 不満をつのらせたおれは…… 49

Slide 55

Slide 55 text

R で Python の資料を書く ことにした 50

Slide 56

Slide 56 text

おまえには bookdown がある • リポジトリ • R Markdown を利用した製本パッケージ • HTML, PDF, 電子書籍 (epub, mobi) などを一度に 生成可 • R Markdown とほぼ同じ構文 • 全媒体を同時にうまく出力する道のりは・ ・ ・ 大闇 51

Slide 57

Slide 57 text

何が沼か • PDF の和文組版 • デフォルトでは xeCJK • 実質中国語用 • スライドではあまり気にならない • 画像の埋め込み • PDF は PDF, HTML は PNG で埋め込みたい • HTML と PDF との違い • PDF は L A TEX コマンドで書ける • HTML は対応しない • (R Markdown 同様) 日本語情報が少ない • 開発者の三部作読めばだいたいわかるが英語 52

Slide 58

Slide 58 text

rmdja 0.3.1 の新機能 • bookdown にも対応 • オトクな支援機能追加 • rmdja で作った rmdja のドキュメント (作りかけ) 53

Slide 59

Slide 59 text

(実際にページを開いてみる) • HTML • PDF • PDF (製本仕様) • 電子書籍 • 機械学習テキストは近日公開予定 • 社内レビューがまだ 54

Slide 60

Slide 60 text

おまえは相互参照から解放される • 手動で図表番号を書く必要なし • 引用文献も .bib や .json から自動生成 • citr パッケージと併用 図 5: ‘citr‘ パッケージによる RStudio プラグイン 55

Slide 61

Slide 61 text

rmdja の追加機能: CC ロゴ表示 • あったら便利だけど bookdown とかにはないもの • CC のロゴ表示 (beamer では追加設定が必要) rmdja::get_CC(adapt = "yes", commercial = F, size = "normal") 56

Slide 62

Slide 62 text

rmdja の追加機能: ルビを付ける • ルビを付けるインライン関数 rmdja::ruby() • (この資料は Beamer なのでルビが上の行と重なる ことがある) • 混植との併用は不可 き れ 喜連 うりわり 瓜破駅 とある科学の レ ー ル ガ ン 超電磁砲 シュワルツ・ランツェンレイター 黒 色 槍 騎 兵 (失敗例) 57

Slide 63

Slide 63 text

おまえは技術書を出版できる (?) •『Bookdown による技術系同人誌執筆』 • 技術同人誌を bookdown で作成した人のブログ記事 • トンボ付きで PDF 作成 • rmdja でもオプションを用意 • 実際にやったことないので動作保証外 • 経験者は要件おしえて 58

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

おまえは Jupyter{Book} を知 っているか?

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

Jupyter{Book} の登場 Jupyter 開発チームのブログで言及 • R Markdown の対等に危機感を覚えたのか? • Sphinx + Jupyter • bookdown のように複数形式への出力はフィーチャ ーされてない? 61

Slide 68

Slide 68 text

まとめ

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

お前は万物を RSTUDIO で書け る 63