Atom と Hydrogen で Jupyter が Atom で動くよ!(インストール、準備、使い方まで)

この記事は公開されてから1年以上経過しており、最新の内容に追従できていない可能性があります。

一時期 Atom を使ってたけど、もっさり感がどうにもならないのと、簡易的なメモ(新規ファイル作って保存せずメモしておきたい、エディタ再起動しても残っていてほしい)が残せなかったっぽいのもあって、しばらくずっと PhpStorm か SublimeText を使っています。

最近になって、普段使いの PC を新しいものに変更してスペックも上がったし Atom もいろいろバージョンアップしているようだしどうだろうなあ、と思って Atom のプラグインを色々見てたら Jupyter を触れるとかなんとか書いてあるではありませんか! 謎技術だなあと思いつつもエディタ上で Jupyter のように振る舞ってくれるならそれはとっても素敵だなーと思ったので、試してみたの巻。

 

Atom + Jupyter をやるには?

Hydrogen というパッケージを使うと Atom 上で Jupyter かのように一行ずつ実行したり、結果をグラフィカルに表示したりが出来ます。

内部的にはインストールされている Python で Jupyter を起動。 Jupyter が用意しているメッセージプロトコルを利用して nodejs と通信し、その結果を Atom で見えるように整形している、というものです。

参照)nteract/hydrogen: Run code inline in Atom using Jupyter kernels ※ How it works のくだり。

この Hydrogen を Atom にインストールしてやります。 それでは、順番に環境を準備していきましょう。

Atom

とくに言うことはないです。公式サイトからどうぞ。

Atom

Python の準備

こちらも同様に公式サイトからどうぞ。バージョンは 3 系で良いです。執筆時時点なら 3.6 あたりで良いと思います。 もし Windows を使っているなら Windows 用インストーラを選ぶとよいでしょう。

Welcome to Python.org

Jupyter の準備

少々雑ですが、いろいろ pip install したら良いです。

pip install -U pip

pip install ipython
pip install jupyter
pip install matplotlib

// 試しに利用したい //
pip install numpy
pip install scipy
pip install pandas
pip install scikit-learn

※ Windowsの場合 主に numpy と scipy と scikit-learn あたり(多分)でコンパイルエラーになってしまうので、別途配布しているサイトから whl ファイルをダウンロードして、それを使って登録する必要があります。

Python Extension Packages for Windows - Christoph Gohlke

pip install <ダウンロードした whl ファイル>

Hydrogen を入れる

Atom 内のパッケージ管理からインストールできます。Hydrogen で検索すれば一発でしょう。

(既にインストール済みなのでアンインストールボタンですが、通常はインストールボタンになります)

Atom + Hydrogen を試してみる

これ以上の準備は不要です。 Atom 上で Python を書いて、おもむろに Ctrl + Alt + Enter を押すと、勝手に Jupyter が裏で起動し、ソースを実行してくれます(スゴイ) 一括実行やブロック実行もできるので Jupyter がそのまんま Atom 上で動いているようにも見えます。

試しに numpy でランダムなデータを作成し KMeans で 5 つに色分けしてみた結果です。

  キャプチャの通り Windows ですが scikit-learn も動きますし matplotlib の結果もちゃんと Atom 内で表示してくれます、スゴイ!!

え?Tensorflow?Chainer? 動くんじゃないですか? Atom で Python が動いている!!!ように見えるだけで、裏側は結局 Python + Jupyter でしかないので、それが動く環境なら動作するはずです。

Hydrogen の使い方

Jupyter ではそれぞれの Cell が明確に入力欄が別れていたり、なんとなく Ctrl + Enter を押したり、実行できそうなボタンを押すなどして動かしていましたが、 Hydrogen ではただの Atom エディタになるので明確に Cell の境界が見えることはありませんしどうなっているのでしょう。

公式ドキュメントにかかれていることとほぼおなじなので、そちらを見ている場合はこっちは見なくても良いです。 Getting Started · Hydrogen

コードの実行

デフォルトでは以下のようなキーバインドがされています。

キー コマンド 処理内容
ctrl-enter hydrogen:run 選択されているコードのみを実行する
ctrl-alt-enter hydrogen:run-cell 現在のセルを実行する
alt-shift-enter hydrogen:run-cell-and-move-down 今のセルを実行し、次のセルに移る
ctrl-alt-shift-enter hydrogen:run-all 全てのセルを実行する

セルを分けるには Jupyter と同じ記述の # In[ ]: という形を使うのが良さそうです。

# In[]:
x = 10
y = 10
(x, y)  # 10, 10

# In[]:
z = x * y
z  # 100

実際に試してる様子はこんな感じ。左からコード実行、セル実行、全実行。

カーネルの再起動

これはコマンドパレットから。なんか挙動がおかしいぞ?って時によく使いますよね。使わない…?

gif 見ての通り、再起動しても出力結果は消えないので、そこも消したいんだけど!!!という場合には Clear Result を別途実行する必要があります。

出力エリアのトグル

デフォルトでは、コードのすぐ下に出力されます。これはこれで便利ではあると思うのですが、コード量が増えてくるとうっとうしく感じることもあるかもしれません。 Hydrogen には出力エリアが準備されていて、それを開くことで、そちらに全て出るようになります。 しかもページ分けされて便利!

変数ウォッチ機能

これ Jupyter にありましたっけ…?あったら知らない私がごめんなさいなんですけど。。ともあれ、この機能めっちゃすごくないですか、変数を変えていくとリアルタイムで出力結果を確認できるんですよ…、どうなってんねん…。

クラス、関数のインスペクション

ライブラリだったり、自分で実装したクラスや関数について、説明を見ることが出来ます。公式ドキュメント片手にコードを書くことが多い私的には便利に使えそうです。

コード補完

ライブラリの中、変数の中に結局こういうメソッドってあったっけ?をドキュメントに見に行ったり私には非常に嬉しい機能です。 注意点としては、すぐ補完が効くわけではなく、その変数やクラスがカーネル側に認識されていないといけません。つまり、一度そのコードを実行して、認識させる必要があります。以下の gif では Ctrl+Enter を押して pred をカーネル側に認識させています。

おわりに

というわけで Atom + Hydrogen で Jupyter Notebook が使えるよ、って話でした。

Jupyter それ自体は非常に便利ですが、普段使うエディタを勝手が異なったりすると、それはそれで使いにくいですよね。。ショートカットキーだとか、テーマだとか…。。 Atom 自体がそこそこ重たいので、スペック高めのPCでないと難しいかもしれませんが、 Python 用のエディタとして Atom がかなり有力な選択肢になるんじゃないでしょうか?

ぜひお試しあれ!

サイト案内

運営してるひと: @sters9

最近は Go, Ruby, Rails, Kubernetes, GCP, Datadog あたりをしていますがもっといろいろやりたい!

サイト案内

開発環境の紹介

プライバシーポリシー

tools.gomiba.co

サイト内検索

アーカイブ

2024/09 (3) 2024/07 (1) 2024/06 (3) 2024/05 (1) 2024/04 (7) 2024/03 (4) 2024/01 (3)

2023/12 (1) 2023/11 (3) 2023/10 (1) 2023/09 (1) 2023/08 (2) 2023/05 (4) 2023/04 (4) 2023/03 (4) 2023/02 (2) 2023/01 (1)

2022/12 (2) 2022/11 (4) 2022/10 (3) 2022/09 (2) 2022/08 (4) 2022/07 (5) 2022/06 (4) 2022/05 (9) 2022/04 (8) 2022/03 (10) 2022/02 (21) 2022/01 (8)

2021/12 (11) 2021/11 (1) 2021/10 (4) 2021/09 (2) 2021/08 (1) 2021/07 (2) 2021/06 (5) 2021/05 (10) 2021/04 (1) 2021/03 (8) 2021/02 (12) 2021/01 (8)

2020/05 (2) 2020/04 (2) 2020/02 (2) 2020/01 (1)

2019/12 (3) 2019/11 (2) 2019/10 (5) 2019/09 (3) 2019/07 (6) 2019/06 (4) 2019/04 (3) 2019/01 (2)

2018/12 (6) 2018/10 (4) 2018/09 (6) 2018/08 (7) 2018/07 (16) 2018/06 (7) 2018/05 (7) 2018/04 (5) 2018/03 (3) 2018/02 (10) 2018/01 (6)

2017/12 (8) 2017/11 (6) 2017/10 (10) 2017/09 (12) 2017/08 (12) 2017/07 (3) 2017/06 (1) 2017/01 (4)

2016/12 (5) 2016/10 (3) 2016/09 (1) 2016/07 (2) 2016/06 (1) 2016/04 (1) 2016/02 (1) 2016/01 (2)

2015/12 (1) 2015/10 (1) 2015/09 (3) 2015/06 (1) 2015/01 (1)

2014/08 (2) 2014/07 (3) 2014/05 (1) 2014/01 (7)

2013/12 (2) 2013/11 (4) 2013/10 (1) 2013/09 (1) 2013/08 (3) 2013/07 (4) 2013/06 (5) 2013/05 (2) 2013/04 (7) 2013/03 (1)