
【Python】化合物名からIUPAC名・InChIKey・CAS番号を取得【pubchempy】
目次
- 1. pubchempyのインストール
- 2. 慣用名からIUPAC名などの他の情報を取得: get_compounds()
- 3. 慣用名からIUPAC名などの他の情報を取得: get_properties()
- 3. CAS番号を取得
- 4. まとめ
1. pubchempyのインストール
化合物データベースであるPubChemをPythonから利用できるライブラリpubchempyをインストールします。
pip3 install pubchempy2. 慣用名からIUPAC名などの他の情報を取得: get_compounds()
get_compounds()の引数に検索したい名称(alanineやNIJJYAXOARWZEE-UHFFFAOYSA-N)と名称のフォーマット(nameやinchikey)などを指定することで、IUPAC名などの他の属性が一括で取得できます。
import pubchempy as pcpres = 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 | C1C@HC2=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 | C1C@HN | 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 | C1C@@HC2=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の検索方法を示しました。
以下の記事などで実際の使用例がありますので、参考にしてみて下さい。
以上になります。

