SDFファイルを使ってpubchemから分子の情報を得る方法
- guan satai
- 2020年6月28日
- 読了時間: 3分
更新日:2021年9月27日
SDFファイルとは、分子の構造と名前が付けられたファイルのことで、化合物のデータベースなどにも用いられます。このファイルを用いて分子のデータを入手しましょう!
SDFファイルはpdfなどといった一般的なファイルとは違ってあまり流通していないので、入手できる場所が限られています。かつてはTCIでも入手できたようですが、その機能は現在見当たりません。唯一私が発見できたサイトは、海外のサプライヤーのfluorochem(http://www.fluorochem.co.uk/)です。このサイトのStructure Searchで適当な構造を書いてSearch Typeをsimilarityにしてから検索するとExport to Structure Fileというタブが出てくるのでそれをクリックしてダウンロードしましょう。これでSDFファイルの準備はできました!
さて、次に情報の入手先であるpubchemの使い方を紹介します。pubchemは様々な分子のデータを収録しているデータベースで、化学系の人は一度は見たことがあるのではないでしょうか?このサイトをpythonで扱うためにはpubchempy(pcp)というライブラリを使う必要があります。あらかじめインストールしてください。pcpの関数の一つであるget_propertiesでは、IUPAC名を初めとしてpubchemに収録されている様々なデータを、ファイルにある名前などをキーワードに検索してくれます。
SDFファイルはtxtファイルのように簡単に開くことはできません。なのでRDkitというまた別のライブラリを使って読み込みます。RDkitの中のPandasToolsを使います。このPandasToolsのPandasTools.LoadSDFという関数を使えばSDFファイルを読み込むことができます。また、同時に表として表示できるようになります。この表に書き加えていくという設計で進めます。
さて、まずは完成品と、そのコードを見てもらいましょう。

import pubchempy as pcp
import rdkit as Chem
from rdkit.Chem import PandasTools
df1 = PandasTools.LoadSDF('bce90c0c-60a2-44f6-8161-a5fb1405bbb9.sdf')
properties = ['IUPACName', 'MolecularFormula', 'MolecularWeight', 'XLogP', 'TPSA', 'CanonicalSMILES']
for i in properties:
x=[]
y=[]
for j in range(len(df1)):
a=pcp.get_properties(i, df1['Name'][j], 'name')
x.append(a)
for n in range(len(df1)):
try:
c=x[n]
y.append(c[0][i])
except(IndexError):
y.append('Not found in Pubchem')
df1[i]=y
print('{} was recorded'.format(i))
df1
図に示すように、IUPAC名、MolecularFormula、MolecularWeight、分配係数XlogP、極性表面積TPSA、構造式を最も簡単に表記したSMILESが出力されています。これはget_propertiesにとってくるべきデータとして与えたものです。コード内のpropertiesに相当します。そして左からi番目の列に入力するデータとして、get_propertiesでとってきたデータを入力しています。時折pubchemにない分子(NH3+H2Oなど、分子ともよべないものです)があるので、それに出会ってしまったらデータの代わりに'Not found in Pubchem'に入力するtry構文を組み合わせてあります。もう一つ工夫として、このプログラムは終了までに結構時間がかかりますので、進行度を示すため、例えばIUPAC名を表の中に記録し終えたら'IUPACName was recorded'の文字列が出力されるようにもしてあります。パソコンが壊れた、なんて心配をする必要が無くなります。
もし自分で用意したSDFファイルで実行してみたい人がいましたら、SDFファイル名を4行目のdf1 = PandasTools.LoadSDF('SDFファイル名')に入れて実行してみてください。
SDFファイルを使ってpubchemから分子の情報を得る方法のプログラムを実行するとこのようなエラーが生じてしまいました。
\untitled4.py", line 7
x=[]
^
SyntaxError: invalid non-printable character U+3000
トラブルシューティングお願いします。