こんにちは!ぼりたそです!今回は化合物のオープンソースDBであるPubChemから化合物データを抽出してみました。
PythonにpubchempyというPubChemにアクセスできるライブラリがありますので、今回はPythonから化合物データを抽出してみました。
この記事は以下のポイントでまとめています。
抽出したデータはデータ分析や機械学習に応用することができるので、データ収集の手段として覚えておいて損はないと思います!
PubChemとは?
PubChemとはなんぞや?という方もいらっしゃるかと思いますので、簡単に説明します。
PubChemとは化合物情報のデータベースであり、化合物の性質、構造、文献情報などが集約されており、機械学習を用いて反応予測、性能予測など様々な場面で使用されています。
以下に簡単にPubChemの特徴を記載します。
データの種類
PubChemには化合物データが集約されていると説明しましたが、その数は数億個にものぼるとのことです。とんでもない数ですよね…
また、化合物データと言ってもどのようなデータなのか気になりますよね?
以下に具体的なデータについて一部をリストとしています。
- 識別子(CAS No.、PubChem CID)
- 化学式
- 分子量
- 構造情報(SMILES、InChI)
- 物性情報(融点、沸点、水溶解度など)
構造情報や物性情報を得られるのは便利ですね。物性予測など色々できそうな気がします。
引用の参照
PubChemには大量のデータが集約されていますが、そのデータは誰が取得したデータなのか?信用できるのか?など気になりますよね。
ご安心ください!PubChemでは化合物データの引用文献も参照することができます。具体的には学術論文や特許文献がソースとなっています。
信頼性がわからないデータで解析するなんて抵抗ありますからね…データの出どころは非常に大事です!
APIの提供
PubChemを使用する際ですが、webサイトから使用することができます。参考URLを貼っておきますね。
PubChemの検索サイト↓↓↓↓↓
https://pubchem.ncbi.nlm.nih.gov/
そのほかに実はAPI(アプリケーションプログラミングインターフェース)の提供もされているのです!APIの説明は省きますが、要するにプログラムからアクセスしてデータを取得できるということですね。
今回はpubchempyというPythonライブラリを使用してPythonからPubChemにアクセスしたいと思います!
ちなみにpubchempyは公開されているライブラリです。以下にpubchempyのドキュメントURLを記載しておきますので、気になる方は参照していただきたく思います。
pubchempy公式ドキュメント↓↓↓↓↓
https://pubchempy.readthedocs.io/en/latest/index.html
pubchempyを使って化合物データ取得
それでは実際にpubchempyを使用してPubChemから化合物データを取得してみましょう!
pubchempyをインストールしていない方は以下のコードを実行してインストールしましょう!
pip install pubchempy
化合物の検索
まずは化合物の検索方法です。以下にベンゼンを検索するコードを記載しました。
import pubchempy as pcp
# 化合物の検索
results = pcp.get_compounds('benzene', 'name')
#結果の表示
print(results)
#結果
#[Compound(241)]
pcp.get_compoundsメソッドを用いて検索クエリを作成しています。第一引数は化合物の名前を設定し、第二引数で検索形式を設定します。今回であれば、第一引数にベンゼンと化合物の名前を入れているので第二引数には名前検索を意味するnameを引数としています。
第二引数である検索形式はいくつか種類があり、主に以下に示すキーを設定することができます。
- name→化合物名
- smiles→SMILES式
- sdf→sdf(structure data file)
- inche→InChI式
- formula→化学式
今回の結果は[Compound(241)]とリスト形式で出力されました。これはCID No.241の化合物がヒットしたことを意味します。CID No.とはPubChem内で付けられている番号のことですね。
化合物の情報取得
それでは先ほど検索したベンゼンの情報を取得してみましょう。以下にベンゼンのSMILES、分子式、分子量を取得するコードを記載しました。
import pubchempy as pcp
# 化合物の検索
results = pcp.get_compounds('benzene', 'name')
# 化合物の情報取得
compound = results[0]
print('SMILES:', compound.canonical_smiles)
print('分子式:', compound.molecular_formula)
print('分子量:', compound.molecular_weight)
# 出力結果
#SMILES: C1=CC=CC=C1
#分子式: C6H6
#分子量: 78.11
ベンゼンの情報がきちんと取得できていますね。繰返し構文などを使用すれば一度に複数の化合物データを取得できるので、データ分析や機械学習などに使用する場合はそちらの方が効率的だと思います。
終わりに
いかがでしたでしょうか?プログラムで簡単に化合物データを取って来れるのは非常に楽ですよね。次はPubChemから取得したデータを使用して機械学習などをやってみようかなと思っています!