2019年5月5日日曜日

IPythonのシェルコマンド実行が便利

あまり機能として使っていなかったが、コマンドラインで動作する全てのコマンドは、!のマークを前におくことでIPythonのコンソールから実行できる。
  # IPython
  !cd /Users/Me/wd/
  !ls -lh

これが地味に便利で感動している。これまでは、カーネルを変更してbashのコマンドを実行していたが、最近はpython3のカーネルのままで必要なコマンドを実行するようになった。インストールした解析用コマンドも、IPythonコンソールから動かずに実行することができるので楽だ。
シェルとの間で、値を受け渡す時は、代入演算子を利用する。
  # IPython
  !cd /current/data/dir/
  Values = !ls


逆に、python側で使っている変数をシェル側に渡す事もできて、その時は、{変数名}を使う。
  # IPython
  Val1 = 123549
  !echo {Val1}

  123549
注意点は、IPythonからシェルコマンドを使うときに、使用できないコマンドがある事。例えば、!cdとするとにホームディレクトリに移動することを期待するかもしれないが、実際にはディレクトリの移動はできていない。これを知らないと、例えば標準出力で保存したと思っていたファイルが、予期していたところとは別のディレクトリに保存されていたりする。最初わからなかったが、本を読むと、IPythonから実行されるシェルのコマンドは一時的なサブシェルで実行されることが原因らしい。こういったコマンドは、Magicコマンドとして実行する必要がある。マジックコマンドにするには、頭に%をつける。
  # IPython
  %cd /Path/To/My/data/
  
実際には、%をつけずに実行すると、automagic機能が働いて自動的にMagicコマンドに切り替えられるらしい。対象は、cat, cp, env, ls, mkdir, mv, pwd, rm, rmdirなど。

2019年5月2日木曜日

Jupyter notebookで、condaで作った環境を使えるようにする

Jupyter notebookを使って解析することで、一つ一つの解析の結果を見ながら次のコマンドを叩くことができる。また、標準出力などの結果を残すことができる。Markdownを使って解析についてのメモを残す事もできるため、解析の時の思考の流れも含めて記録を残すことができるのもとても便利だと思う。一つ一つのセルに分けて実行していくスタイルも、解析の1ステップを塊で捉えることができて分かりやすい。

こういった理由で、解析のときにJupyter notebookを多用するようになった。こちらの情報にもあるようにJupyterでbashやR、または異なるバージョンのpythonなど、複数のカーネルを使う事もできる。これをするとjupyterの中でRの統計検定や作図でデータを見てみることができるのでかなり便利だった。解析で複数のカーネルを使いたいときにも、ファイルを分けずに一つのnotebookにまとめることができる。

ただ、bashを使っているときに問題が起きた。anacondaでいくつか環境を作って、解析用のプログラムを導入していたが、condaの環境をJupyterでコマンドを打って変えようとしても上手く行かずに以下のようなエラーが出てしまう。
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run

    $ conda init 

Currently supported shells are:
  - bash
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell

See 'conda init --help' for more information and options.

IMPORTANT: You may need to close and restart your shell after running 'conda init'.
色々調べていくと、condaで作成した仮想環境をJupyter Notebookで使えるようにする方法があったので設定した。
設定の概要は、
[1] condaの新しい環境を作る(既存環境が存在する場合は不要)
conda create -n newenv python=3.7
# この環境に入る
conda activate newenv

# jupyterをインストールする
pip install jupyter

# jupyter_environment_kernelsをインストールする
pip install environment_kernels
[2] Jupyterの設定ファイルを生成する。
jupyter notebook --generate-config

"""
この作業により、ホームディレクトリの下の.jupyterの下に
jupyter_notebook_config.pyというファイルができる。

この作業は一回やれば良い。2回目、3回目の環境の設定の時には必要ない
"""
[3] 設定ファイルに、自動でconda環境を読み込む設定を追記する。
エディタでファイルを開き、以下を追記する。
c.NotebookApp.kernel_spec_manager_class = 'environment_kernels.EnvironmentKernelSpecManager' 
c.EnvironmentKernelSpecManager.env_dirs=['/Users/username/anaconda/envs/']

これで、Jupyterを再起動すれば、カーネルとしてnewenvを選択することができるようになる。カーネルは、Kernel > Change kernelから選択できる。
注意点は、それぞれの環境を使えるようにしたければ、その環境でjupyterとjupyter_environment_kernelが入っていないといけないこと。それぞれの環境をactivateして、上の設定を行う。
こうすることで、解析や依存環境ごとに複数の環境を作っていても、それらをjupyterで使えるようになる。

参考:
https://kazusa-pg.com/jupyter-notebook-use-virtual-env-kernel/
https://qiita.com/yoppe/items/38005f415a5b8b884c7d


2019年4月26日金曜日

Leandro博士セミナー

先日、大学でフランスのCNRSのLeandro Quadrana博士のセミナーがあった。Leandroさんは植物のエピジェネティクスやトランスポゾンの研究で有名なVincent Colatのチームで研究していて、トランスポゾンのmobilomeなどですごい論文を書いている。発表している論文は数は少ないが、いわゆるトップジャーナルの論文が多くトランスポゾンの面白い研究ばかりだったりする。三島の遺伝研でセミナーをして、その後半分私用で京都に来たついでに、うちのボスに会いに来たらしい。最初ボスが不在だったため自分が出迎えたが、気さくでかなり話しやすい人だった。せっかくなのでということで、最近出した論文2本(NUPTsのDNAメチル化の話とBrassicaのインプリンティング)について話を聞いてもらった。どちらも割と興味を持ってもらいいろいろ話をした。インフォマティクスの手法など細かいことにも指摘をもらった。

セミナーは植物のトランスポゾンについてで、トランスポゾンの挿入によって起こる突然変異が、植物の適応的な変異にも強く関連しているという内容だった。TE accumulation lineを使ったデータ解析で、とにかくデータの量が多い。ヒストンバリアントと選択的なTE転移や、実際にそれが適応的変異につながっていそうなことが示されていたが、遺伝子の選択性が「適応に関与する遺伝子」に向いているのか、それらの遺伝子がopen chromatinになっているのかについては厳密に検討される必要があるだろう。でも、とにかくデータが多く面白い話だった。

セミナーの後は研究室でいろいろと話をしてから、だいぶ夕方になって帰った。京大の遺伝の部屋からも先生が来て、主にトランスポゾンについてずっと話をしていた。話していることがTEの話オンリーで難しく、ついていくのに苦労した。

研究の比重変化 ベンチからコンピュータへ

昼ごはんを食べながら雑談していた時に、研究環境の話だとか学生の就職の話だとかいろいろした。インフォマティクスの教育はどこも課題があり、苦労もあることがわかった。「今の学生はパソコンよりスマートフォンが好きなんだよ」と言ったら笑っていた。聞いていて面白かったのが、「昔は実験室のベンチが一人一つ与えられて、居室に共用コンピュータが一台という体制だったのが、今は一人に一台コンピュータで、実験ベンチが共用になってるよ」という趣旨の話だ。これは、自分の実感にもあっている。自分の学生の時の出身ラボはデータ解析の比重が高かったので、コンピュータも一人一台(以上)になっていたが、実験がメインの研究室の場合、ラボのPCを共用で使っているところもあった。もちろん分野にもよるが、今のオミクス系研究だと、コンピュータでデータを処理している時間がとても長いように感じるし、そこの部分の重要性が以前に比べてはるかに増している。バイオインフォマティクスやプログラミング等の技術に加えて、統計学の知識も重要だね、というような話を先生たちもしていた。生物系の学部でこれらを、従来からの遺伝学やゲノム科学的な講義と一緒にどういう風に教えていけば良いのかは、まだまだ課題が多いのではないかと思う。単純にコンピュータ科学系の人が教えればいいわけでもなく、生物系で需要が高い技術を教えたり、生物データに対応づけられて講義される方がいいみたいだ。数年前に出身校の先生と話していても、そういう風に学部向けの演習がシフトしていると聞いた。

データ解析のところが重要になっているのは間違いないが、データの取得元である生物を見る方の知見や実験も疎かにできない。どちらかに特化した専門的な人はこれまでもこれからも重要だが、そのほかの人でも自分の研究題材に合わせてどちらも分かるとか、インフォマティクスも必要なことは自分でできることが必要なのだと思う。生物がわかる人がちゃんと解析の技術を身につけていくこと、それを講義するノウハウを蓄積することが重要だと思う。