RDKit環境構築を行いjupyter-notebookでベンゼンを表示させる


概要

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を選べるようになっています。

スクリーンショット 2019-01-28 21.27.02.png


ベンゼンを描く

さあ、ついにjupyter-notebookでベンゼンを描くところまできました!

以下のコードでbenzeneができます。

from rdkit import Chem

from rdkit.Chem import Draw
benzene = Chem.MolFromSmiles('C1=CC=CC=C1')
Draw.MolToImage(benzene)

benzene.png

ただ、少し表示が汚いですね...

本来は複数分子を表示するmethodですが、MolsToGridImageを使えば綺麗に表示できます。

Draw.MolsToGridImage([benzene])

benzene2.png

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])

benzene2.png

この方法を用いれば、化合物名があれば、smiles記法で指定しなくとも様々な分子を表示できます。

tmp = pcp.get_compounds('anthracene', 'name')[0]

anthracene = Chem.MolFromSmiles(tmp.isomeric_smiles)
Draw.MolsToGridImage([anthracene])

anthracene.png

さらに、pngファイル保存もできます。

ただ、少しダサい表示の方(Chem.Draw.NolTOImage)ですね...

jupiter-notebook上の画像を保存した方が良いかもしれません。

Draw.MolToFile(benzene, 'benzene.png')

benzene.png


参考

RDKit公式ドキュメント

PubChemPy公式ドキュメント

Anacondaで作った仮想環境をjupiter notebookで使う方法