★データ解析備忘録★

ゆる〜い技術メモ

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に委ねられない自分がいます。。。