概要
chemoinfomaticsで使われるpythonのmoduleのRDKitをjupyter-notebookで使う際、環境構築にてこづったのでここに書き記します。
環境
macOS Mojave version 10.12.2
RDKitを使う仮想環境を構築
RDKitの公式ドキュメントに沿って、RDKitを使える仮想環境をconda
コマンドで作成。
conda create -c rdkit -n my-rdkit-env rdkit # my-rdkit-env は任意の環境名
しばらくすると
Proceed ([y]/n)?
と聞かれるのでy
で続行。各種moduleのinstallが始まります。install終了後
conda activate my-rdkit-env
と入力。terminalの行の左に(my-rdkit-env)
と出ているはずです。これはmy-rdkit_env
といい仮想環境に入っていることを表します。conda deactivate
で仮想環境から出られます。
ここでこの仮想環境に必要なmoduleをinstallします。
ここではrdkitと一緒によく使われるpubchempy
をinstallします。
pip install pubchempy
python3
と入力し、python consoleに入ります。
>>> from rdkit import Chem
>>> Chem.MolFromSmiles('C1=CC=CC=C1') # 'C1=CC=CC=C1'はbenzeneのsmiles表記
<rdkit.Chem.rdchem.Mol object at 0x109bc6030>
となればとりあえず仮想環境構築完了です。
jupyter-notebookで仮想環境を使用
こちらの記事が非常にわかりやすくまとめてくださっているので参考にします。
python cosoleから出て、
$ pip install environment_kernels
と入力し、Jupyter上でカーネルを切り替えるパッケージをインストール。次に、
jupyter notebook --generate-config
でjupyterの設定ファイルを作成。
~/.jupyter/jupyter_notebook_config.py
の最終行に以下のcodeを追記。
c.NotebookApp.kernel_spec_manager_class = 'environment_kernels.EnvironmentKernelSpecManager'
c.EnvironmentKernelSpecManager.env_dirs=['C:/Program Files/Anaconda3/envs/']
pip install jupyter
でjupyterをinstallして、
jupyter notebook
でjupyter-notebookを起動させる。
するとmy-rdkit-env
を選べるようになっています。
ベンゼンを描く
さあ、ついにjupyter-notebookでベンゼンを描くところまできました!
以下のコードでbenzeneができます。
from rdkit import Chem
from rdkit.Chem import Draw
benzene = Chem.MolFromSmiles('C1=CC=CC=C1')
Draw.MolToImage(benzene)
ただ、少し表示が汚いですね...
本来は複数分子を表示するmethodですが、MolsToGridImage
を使えば綺麗に表示できます。
Draw.MolsToGridImage([benzene])
pubchempy
から取得した情報でも構造式を描くことができます。
ただし、pcp.get_compounds
で取得したものはpubchempy.Compound
型のlistでありrdkit.Chem.rdchem.Mol
とは異なります。そのため要素を取り出し、smiles記法を介してrdkit.Chem.rdchem.Mol
に変換します。
import pubchempy as pcp
tmp = pcp.get_compounds('benzene', 'name')[0]
benzene = Chem.MolFromSmiles(tmp.isomeric_smiles)
Draw.MolsToGridImage([benzene])
この方法を用いれば、化合物名があれば、smiles記法で指定しなくとも様々な分子を表示できます。
tmp = pcp.get_compounds('anthracene', 'name')[0]
anthracene = Chem.MolFromSmiles(tmp.isomeric_smiles)
Draw.MolsToGridImage([anthracene])
さらに、pngファイル保存もできます。
ただ、少しダサい表示の方(Chem.Draw.NolTOImage)ですね...
jupiter-notebook上の画像を保存した方が良いかもしれません。
Draw.MolToFile(benzene, 'benzene.png')
参考
RDKit公式ドキュメント
PubChemPy公式ドキュメント
Anacondaで作った仮想環境をjupiter notebookで使う方法