★データ解析備忘録★

ゆる〜い技術メモ

EmacsでつくるオレオレRStudioから1年、自分の分析環境の変化について

はじめに

遅れてすいません。RStudio アドベントカレンダー2日目です。 一年前のアドベントカレンダーで、こんな記事を書いたら意外と反響がありました。

y-mattu.hatenablog.com

これを書いたら周りから過激派だの何だの言われましたが、まあ自分の中では楽しくやっていました。 しかし、それから1年たち、自分の分析環境にもいろいろ変化が出てきました。

変化1 使う言語の割合の変化

当時は専らRしか使っていなかったんですが、PythonSASも同じくらいの割合で使うようになりました。 そのことで、ますますおなじ環境(Emacs)でやりたい欲は強くなりました。

変化2 Rで使うパッケージの変化

当時はせいぜい画像を出力するくらいしかなかったのですが、最近はJSベースのパッケージ(dygraphs, leafletなど)を使う機会も増えました。 しかし、Emacs上ではこれがうまく表示できません。

どうなったか

R

Rに関しては、RStudioの使用機会が増えました。パッケージの補完もでるし、何よりViewerタブに「動かせる図」が出せるのはいいことです。

ただし、やはり自分の思い通りに編集したいという欲もあり、どうしようかなあと考えているところです。Emacs にRStudio のViewer実装するかなあ...

Python

こちらはかなり過激派っぽくなりました。EmacsでJupyte Notebookをやるようになったからです。

Emacsには、Jupyter Notebookを普通に使えるようにする ein パッケージがあります。

github.com

ブラウザではなくEmacsでやるメリットの一つとして、 jedi の補完が使えることがあります。デメリットは、Rと同じくpandas データフレームやleaflet系の動くやつがうまく動かないところです。こういうのがほしいときはブラウザでやってます。

ちなみにEmacsでは以下のように設定するとJupyter Notebookが幸せに使えるようになります。

;; ---------------------------------------------------------
;; Ein(Jupyter Notebook) の設定
;; ---------------------------------------------------------
(require 'ein)


(eval-after-load 'ein-notebook
  '(progn
     (define-key ein:notebook-mode-map (kbd "M-n")
       'ein:worksheet-goto-next-input)
     (define-key ein:notebook-mode-map (kbd "M-p")
       'ein:worksheet-goto-prev-input)
     (define-key ein:notebook-mode-map (kbd "C-c C-n")
       'ein:worksheet-next-input-history)
     (define-key ein:notebook-mode-map (kbd "C-c C-p")
       'ein:worksheet-prev-input-history)
     (define-key ein:notebook-mode-map "\C-c\C-d"
            'ein:worksheet-delete-cell)))

(defun ein-mode-hooks ()
  ;; 行番号非表示
  (nlinum-mode -1))
(add-hook 'ein:notebook-mode-hook 'ein-mode-hooks)

;; jedi を起動
(add-hook 'ein:notebook-mode-hook 'jedi:setup)

結局

RStudioは便利です。これは紛れもない事実です。ただ、Rを書くすべてをRStudioに委ねられない自分がいます。。。

R Markdown で作ったスライドに R で音声を吹き込む

はじめに

R Markdown ではスライドを作ることができます。

https://kazutan.github.io/SappoRoR6/rmd_slide.html#/

とくに、reveal.js ベースの {revealjs} パッケージや remark.js ベースの {xaringan}パッケージは簡単にRの出力を含めたシンプルなスライドを作成できることから私の周りでは使っている人が多いです。

そんなスライドもプレゼンをするときは自分で喋らなければなりません。自分で喋ることの利点はたくさんあるのですが、声の調子が悪かったり、どうしてもプレゼン会場に行けない、自分で音声を録音してビデオを作ってる暇もない、という場面もあるかと思いまます。

今回は、そんなときにRでスライドに音声を吹き込んでしまおうというお話です。これでRだけでスライド作りが完結しますね!!

ただし、吹き込まれるのは自分の声ではありません。

完成品

こんな感じになります。

youtu.be

続きを読む

CRANは闇なのか

はじめに

こんな話があります。

www.slideshare.net

RのパッケージをCRANに登録するのは闇であるという内容です。一方で、そんなに闇ではないという意見もあります。

estatapiパッケージがCRANで公開されました。 - Technically, technophobic.

ThankYouStarsで感謝の気持ちをスターで伝えよう

闇なのか?

先日私も {MlBayesOpt} パッケージで晴れてCRANデビューしたのですが、アクセプトされるまで4回リジェクトされたのでかなり闇でした。個人的には、闇かどうかは

  • どういうパッケージか
  • パッケージの規模(関数の数・ドキュメントの量)

によるのかなあと思います。当たり前といえば当たり前ですが。

以下では、ありがちな「直してね」の内容を紹介しながら思いを綴りたいと思います。

続きを読む

「機械学習のパラメータをベイズ最適化でチューニング」をRで超簡単に書けるパッケージを作った

0. 要約

機械学習のハイパーパラメータをベイズ最適化でチューニングするのは既存パッケージの組み合わせで頑張ればできたのですが、頑張らなくても簡単に書けるパッケージを作りました。

github.com

これにより、例えば iris データをXGboostの3-foldクロスバリデーション、エラー率評価でフィッティングさせたければ以下のように書くことでハイパーパラメーターである eta, max_depth, nround, subsample, bytree をベイズ最適化でチューニングしてくれます。

res0 <- xgb_cv_opt(data = iris,
                   label = Species,
                   objectfun = "multi:softmax",
                   evalmetric = "merror",
                   classes = 3,
                   n_folds = 3)

データセット名、ラベルの列名、XGboostのモデルを組むのに必要なこと、何回クロスバリデーションするかを書けば勝手にやってくれます。

ベイズ最適化そのものについては、hoxo_mさんの資料が分かりやすいと思います。

www.slideshare.net

続きを読む

Pythonでshapefileから逆ジオコーディング

はじめに

緯度経度から住所(市区町村・番地)を求める逆ジオコーディングですが、Rを使ったバージョンは以前書きました。

y-mattu.hatenablog.com

また、上記は市までわかっているバージョンだたのですが、そもそもの県や市を求めたいときは以下も参考になります。

qiita.com

今回は市までわかってるverをPythonでやってみます。

続きを読む