本記事では、alanineのような化合物名からIUPAC名などの他の情報を取得する方法を説明します。
具体的には以下の内容の取得について取り扱います。
- synonyms:別名
- CID
- InChI
- InChIKey
- canonical SMILES
- isomeric SMILES
- IUPAC名
- 分子式
- 分子量
- CAS番号
1. pubchempyのインストール
化合物データベースであるPubChemをPythonから利用できるライブラリpubchempy
をインストールします。
pip3 install pubchempy
2. 慣用名からIUPAC名などの他の情報を取得: get_compounds()
get_compounds()
の引数に検索したい名称(alanineやNIJJYAXOARWZEE-UHFFFAOYSA-N)と名称のフォーマット(name
やinchikey
)などを指定することで、IUPAC名などの他の属性が一括で取得できます。
import pubchempy as pcp res = pcp.get_compounds('ValproicAcid', 'name')
get_compounds()
による検索結果は複数になることがあるため、返り値はリストになっています。
リストの要素について、以下のように各種属性に対応したメソッドを用いて情報を取得します。
print(f''' {res[0].synonyms[:3]}, {res[0].cid}, {res[0].inchi}, {res[0].inchikey}, {res[0].isomeric_smiles}, {res[0].iupac_name}, {res[0].molecular_formula}, {res[0].molecular_weight}, {res[0].iupac_name}, ''')
['VALPROIC ACID', '2-Propylpentanoic acid', '99-66-1'],
3121,
InChI=1S/C8H16O2/c1-3-5-7(6-4-2)8(9)10/h7H,3-6H2,1-2H3,(H,9,10),
NIJJYAXOARWZEE-UHFFFAOYSA-N,
CCCC(CCC)C(=O)O,
2-propylpentanoic acid,
C8H16O2,
144.21,
2-propylpentanoic acid,
3. 慣用名からIUPAC名などの他の情報を取得: get_properties()
前節のget_compounds()
は全ての属性を取得するため、少々時間がかかります。
取得した属性が決まっている場合はget_proparties()
を利用した方がかかる時間が少なくなります。
大量の化合物を処理する際などはget_proparties()
の利用を勧めます。
get_propaties()
を使い方は以下です。
properties = [ 'MolecularFormula', 'MolecularWeight', 'CanonicalSMILES', 'IsomericSMILES', 'InChI', 'InChIKey', 'IUPACName', 'XLogP' ] pcp.get_properties(properties, 'Tranylcypromine', 'name')
[{'CID': 19493,
'MolecularFormula': 'C9H11N',
'MolecularWeight': '133.19',
'CanonicalSMILES': 'C1C(C1N)C2=CC=CC=C2',
'IsomericSMILES': 'C1[C@H]([C@@H]1N)C2=CC=CC=C2',
'InChI': 'InChI=1S/C9H11N/c10-9-6-8(9)7-4-2-1-3-5-7/h1-5,8-9H,6,10H2/t8-,9+/m0/s1',
'InChIKey': 'AELCINSCMGFISI-DTWKUNHWSA-N',
'IUPACName': '(1R,2S)-2-phenylcyclopropan-1-amine',
'XLogP': 1.5},
{'CID': 5530,
'MolecularFormula': 'C9H11N',
'MolecularWeight': '133.19',
'CanonicalSMILES': 'C1C(C1N)C2=CC=CC=C2',
'IsomericSMILES': 'C1C(C1N)C2=CC=CC=C2',
'InChI': 'InChI=1S/C9H11N/c10-9-6-8(9)7-4-2-1-3-5-7/h1-5,8-9H,6,10H2',
'InChIKey': 'AELCINSCMGFISI-UHFFFAOYSA-N',
'IUPACName': '2-phenylcyclopropan-1-amine',
'XLogP': 1.5},
{'CID': 441233,
'MolecularFormula': 'C9H11N',
'MolecularWeight': '133.19',
'CanonicalSMILES': 'C1C(C1N)C2=CC=CC=C2',
'IsomericSMILES': 'C1[C@H](C1C2=CC=CC=C2)N',
'InChI': 'InChI=1S/C9H11N/c10-9-6-8(9)7-4-2-1-3-5-7/h1-5,8-9H,6,10H2/t8?,9-/m1/s1',
'InChIKey': 'AELCINSCMGFISI-YGPZHTELSA-N',
'IUPACName': '(1R)-2-phenylcyclopropan-1-amine',
'XLogP': 1.5},
{'CID': 26070,
'MolecularFormula': 'C9H11N',
'MolecularWeight': '133.19',
'CanonicalSMILES': 'C1C(C1N)C2=CC=CC=C2',
'IsomericSMILES': 'C1[C@@H]([C@H]1N)C2=CC=CC=C2',
'InChI': 'InChI=1S/C9H11N/c10-9-6-8(9)7-4-2-1-3-5-7/h1-5,8-9H,6,10H2/t8-,9+/m1/s1',
'InChIKey': 'AELCINSCMGFISI-BDAKNGLRSA-N',
'IUPACName': '(1S,2R)-2-phenylcyclopropan-1-amine',
'XLogP': 1.5}]
出力をpandasのdataframeにすることも可能です。
pcp.get_properties(properties, 'Tranylcypromine', 'name', as_dataframe=True)
CID | MolecularFormula | MolecularWeight | CanonicalSMILES | IsomericSMILES | InChI | InChIKey | IUPACName | XLogP |
19493 | C9H11N | 133.19 | C1C(C1N)C2=CC=CC=C2 | C1[C@H]([C@@H]1N)C2=CC=CC=C2 | InChI=1S/C9H11N/c10-9-6-8(9)7-4-2-1-3-5-7/h1-5… | AELCINSCMGFISI-DTWKUNHWSA-N | (1R,2S)-2-phenylcyclopropan-1-amine | 1.5 |
5530 | C9H11N | 133.19 | C1C(C1N)C2=CC=CC=C2 | C1C(C1N)C2=CC=CC=C2 | InChI=1S/C9H11N/c10-9-6-8(9)7-4-2-1-3-5-7/h1-5… | AELCINSCMGFISI-UHFFFAOYSA-N | 2-phenylcyclopropan-1-amine | 1.5 |
441233 | C9H11N | 133.19 | C1C(C1N)C2=CC=CC=C2 | C1[C@H](C1C2=CC=CC=C2)N | InChI=1S/C9H11N/c10-9-6-8(9)7-4-2-1-3-5-7/h1-5… | AELCINSCMGFISI-YGPZHTELSA-N | (1R)-2-phenylcyclopropan-1-amine | 1.5 |
26070 | C9H11N | 133.19 | C1C(C1N)C2=CC=CC=C2 | C1[C@@H]([C@H]1N)C2=CC=CC=C2 | InChI=1S/C9H11N/c10-9-6-8(9)7-4-2-1-3-5-7/h1-5… | AELCINSCMGFISI-BDAKNGLRSA-N | (1S,2R)-2-phenylcyclopropan-1-amine | 1.5 |
3. CAS番号を取得
get_compounds()
やget_proparties()
ではCAS番号を直接取得できません。
CAS番号は他のデータベースでの検索に利用することもあるため、CAS番号を取得できるようにしておきます。
具体的にはget_synonyms()
の中に含まれるCAS番号を正規表現によるマッチで取得します。
以下のように関数を定義します。
import re # CIDへ変換 def to_cids(value, namespace='inchikey'): _ = pcp.get_compounds(value, namespace=namespace) cids = [c.cid for c in _] return cids # CIDからCAS番号を調べる def cid_to_casno(cid): raws, casnos = [], [] _ = pcp.get_synonyms(cid, namespace="cid") for r in _: syno = r.get("Synonym", []) for s in syno: m = re.match("(\d{2,7}-\d\d-\d)", s) if m: casnos.append(m.group(1)) raws.append(r) break return {"raw": raws, "casno": casnos} # 上記2つの関数を組み合わせる def to_casnos(value, namespace='inchikey'): cids = to_cids(value, namespace=namespace) casnos = {} for cid in cids: cas = cid_to_casno(cid)['casno'] casnos[cid] = cas return casnos
実行例は以下の通りです。
(A) InChIKeyからCAS番号
to_casnos('AELCINSCMGFISI-DTWKUNHWSA-N')
{19493: ['155-09-9']}
(B) 名称からCAS番号
to_casnos('Tranylcypromine', namespace='name')
{19493: ['155-09-9'], 5530: ['54-97-7'], 441233: [], 26070: ['3721-28-6']}
4. まとめ
本記事では、pubchempy
というライブラリを用いて、化合物のデータベースであるPubChemの検索方法を示しました。
以下の記事などで実際の使用例がありますので、参考にしてみて下さい。
以上になります。
コメント