Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

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で使う方法

yuto_ohno
化学に関することを主に書いていきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした