7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【RDKit】Pythonを使って分子を描く(基本編)

Last updated at Posted at 2021-02-16

はじめに

RDKitで分子を描く方法を紹介いたします。

  • 初めてRDKitを使う方
  • Pythonで分子を描いてみたいけど方法がよく分からないという方

の参考になれば幸いです。

※マテリアルズインフォマティクス関係の内容を他にも投稿していますので、よろしければこちらの一覧から他の投稿も見て頂けますと幸いです。

RDKitとは

RDKitは化合物をPythonで扱うためのライブラリです。有志の方によるドキュメントの日本語訳のページもあります。こちらのサイトにもRDKitの概要が書かれておりますので、是非ご参考にして下さい。

環境

  • windows10
  • conda 4.9.2
  • python 3.7.1
  • rdkit 2020.03.2.0

分子の描画

1分子の描画

「実践マテリアルズインフォマティクス」の第1章を参考にしていきます。データはサポートページから読み込みました。文献はCoLab環境で実行していますが、JupyterNotebook上では上手くデータの読み込みができなかったので、こちらのサイトを参考にcsvファイルの読み込みを行いました。

# データの読み込みを行い、読み込んだデータをデータフレームとして表示
import requests
import io
import pandas as pd

url = 'https://raw.githubusercontent.com/funatsu-lab/support-page/master/data/delaney-solubility/delaney-processed.csv'
res = requests.get(url).content
df = pd.read_csv(io.StringIO(res.decode('utf-8')), header=0, index_col=0)
df.head()

データフレームの先頭行のAmigdalin(アミグダリン)を描画していきます。

from rdkit import Chem
smiles = df.iloc[0,-1]
m = Chem.MolFromSmiles(smiles)
m

Amigdalinを表示することができました。Amigdalinのsmiles表記は'OCC3OC(OCC2OC(OC(C#N)c1ccccc1)C(O)C(O)C2O)C(O)C(O)C3O 'であり、smiles表記を直接コードに打ち込んで描画することも可能です。

m = Chem.MolFromSmiles('OCC3OC(OCC2OC(OC(C#N)c1ccccc1)C(O)C(O)C2O)C(O)C(O)C3O ')
m

描画した分子の画像は以下のコードで保存ができます。

from rdkit.Chem import Draw
Draw.MolToFile(m, 'Amigdalin.png')

複数分子の描画

RDKitのGitHubページから取得した"'5ht3ligs.sdf'"のデータを読み込んで、描画していきます。

#複数データの読み込み(全4分子が含まれている)
suppl = Chem.SDMolSupplier('5ht3ligs.sdf')
#構造を可視化
Draw.MolsToGridImage(suppl, molsPerRow=len(suppl)) 

描画した分子の画像は以下のコードで保存ができます。

img = Draw.MolsToGridImage(suppl,molsPerRow=len(suppl),subImgSize=(200,200))
img.save("5ht3ligs.png")

なお、以下のコードで読み込んだ分子の原子数やsmilesを表示することが可能です。読み込んだデータの中身を詳しく知りたいときに活用できるかと思います。

#複数データの読み込み(全4分子が含まれている)
suppl = Chem.SDMolSupplier('5ht3ligs.sdf')
# smilesを格納するための空のリストを作成
smiles = []

for mol in suppl:
    #各分子の原子数の表示
    print(mol.GetNumAtoms())
    #mol→smilesへ変換してデータとして格納
    smiles.append(Chem.MolToSmiles(mol))
    print(Chem.MolToSmiles(mol))
出力結果
20
CN1CCCCC1COC(=O)c1c[nH]c2ccccc12
24
COCCOc1cc(N)c(Cl)cc1C(=O)NC1CN2CCC1CC2
24
C#CCn1c2c(c3ccccc31)C(=O)C(Cc1nc[nH]c1C)CC2
26
Cc1csc2c1-n1cccc1/C2=N/OC(CCN(C)C)c1ccccc1

まとめ

RDKitを用いて、以下の2つの方法についてご紹介いたしました。

  • 1分子を読み込み、描画する
  • 複数分子を読み込み、描画する

参考

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?