本記事では化合物のIC50およびID50をChEMBLから取得する手順を説明します。
IC50は化合物の標的タンパクの半分が活性を阻害される化合物の濃度です。
ID50は細胞や生物の半分が化合物の毒性によって死ぬ化合物の濃度です。
1. ChEMBLについて
ChEMBLは欧州分子生物学研究所(EMBL)のバイオインフォマティクス研究所(EBI)が運営する医薬品などの化合物に関する薬物動態や活性のデータベースであり、化合物の標的タンパクやIC50・ID50に関する情報もあります。
ブラウザから検索をしたり、APIからデータを取得したり、あるいはデータベース自体をPostgreSQLのDBとしてダウンロードして利用できます。全て無料です。
ブラウザ:https://www.ebi.ac.uk/chembl
API:https://chembl.gitbook.io/chembl-interface-documentation/web-services/chembl-data-web-services
2. データベースのダウンロード
下記のFTPサイトからダウンロードできます。
上記のサイトからPostgreSQLの最新のデータベースを選択してダウンロードします。本記事執筆時点(2025/1/10)では以下のURLが最新でした。環境にもよりますがダウンロードには約1時間かかりました。
3. 環境構築
ダウンロードしたDBを解凍した後、PostgreSQLが使える環境をDockerで用意します。
Docker内でダウンロードしたDBに対してSQLを用いてIC50とID50を調べます。
3.1. 解凍
作業ディレクトリへchembl_35_postgresql.tar.gz
を移動させ、以下のようにして解凍します。
$ tar -xzvf chembl_34_postgresql.tar.gz
3.2. Docker のインストール
Dockerの公式サイトからDocker Desktopをダウンロードし、インストールします。
3.3. Dockerの起動
インストールしただけではコンソールからdocker
などのコマンドが使えないので、アプリケーションとして起動します。
3.4. docker-compose用のファイルを準備
続いてデータベースを解凍して作成されたディレクトリのうちchembl35/chembl_35_postgresql
に下記のdocker-compose.yaml
を設置します。
version: "3.6" services: db: image: postgres:14.2 ports: - 5432:5432 tty: true environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password volumes: - ./db:/var/lib/postgresql/data
3.5. docker-composeでコンテナ起動
chembl35/chembl_35_postgresql
に移動し、以下のコマンドでDockerのコンテナを起動します。
chembl34/chembl_34_postgresql $ docker-compose up
3.7. データベースのファイルを移動
データベースの本体であるdmpファイルを適切な場所へ移動させておきます。
chembl34/chembl_34_postgresql $ mv chembl_34_postgresql.dmp db/chembl_34_postgresql.dmp
3.8. コンテナに入る
上記でコンテナを起動した状態のまま、新しいコンソールのウィンドウを開きます。
まずは先ほど起動したコンテナIDを以下のように調べます。
chembl34/chembl_34_postgresql $ docker container ls
得られたIDを用いて、以下のようにしてコンテナに入ります。
chembl34/chembl_34_postgresql $ docker exec -it [docker container id] bash
3.9. PostgreSQLサーバの起動
コンテナに入った後は、以下のようにしてPostgreSQLサーバを立ち上げます。これには30分〜の時間がかかりました。
(Docker内) $ pg_restore -d postgres /var/lib/postgresql/data/chembl_34_postgresql.dmp -U postgres -O
3.10. データベースの確認
上手くサーバが立ち上がり、データベースが読み込まれていた場合、以下のコマンドでPostgreSQLを立ち上げてテーブル一覧を表示できます。
(Docker内) $ psql -d postgres -U postgres posgre: /dt;
4. 化合物のIC50・ID50の取得
ChEMBLのテーブル定義は下記URLのchembl_35 Schema Documentation
で確認できます。
https://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/latest/
例えば以下のようなテーブルがあります。
- assays: 文献で報告されていた測定のリスト
- activities: 活性値やエンドポイント値など測定の結果
- compound_structures: SMILES等の化合物の構造情報
- target_dictionary: 化合物の標的のリスト
ユースケースが下記のURLに掲載されているので、参考にします。
https://chembl.gitbook.io/chembl-interface-documentation/frequently-asked-questions/schema-questions-and-sql-examples
今回の場合、下記のSQLで一時的にIC50のリストをテーブルとして保存します。
CREATE TABLE TEMP_COMPOUND_IC50 AS SELECT m.chembl_id AS compound_chembl_id, s.canonical_smiles, s.standard_inchi_key AS inchi_key, r.compound_key, d.pubmed_id, d.doi, a.description AS assay_description, act.standard_type, act.standard_relation, act.standard_value, act.standard_units, act.activity_comment, t.chembl_id AS target_chembl_id, t.pref_name AS target_name, t.organism AS target_organism FROM compound_structures s RIGHT JOIN molecule_dictionary m ON s.molregno = m.molregno JOIN compound_records r ON m.molregno = r.molregno JOIN docs d ON r.doc_id = d.doc_id JOIN activities act ON r.record_id = act.record_id JOIN assays a ON act.assay_id = a.assay_id JOIN target_dictionary t ON a.tid = t.tid AND act.standard_type = 'IC50' AND act.standard_units = 'nM’;
続いて、下記のようにしてCSVファイルに結果を出力します。
COPY TEMP_COMPOUND_IC50 TO '/var/lib/postgresql/data/TEMP_COMPOUND_IC50.csv' DELIMITER ',' CSV HEADER;
次に下記のSQLで一時的にID50のリストをテーブルとして保存します。
CREATE TABLE TEMP_COMPOUND_ID50 AS SELECT m.chembl_id AS compound_chembl_id, s.canonical_smiles, s.standard_inchi_key AS inchi_key, r.compound_key, d.pubmed_id, d.doi, a.description AS assay_description, act.standard_type, act.standard_relation, act.standard_value, act.standard_units, act.activity_comment, t.chembl_id AS target_chembl_id, t.pref_name AS target_name, t.organism AS target_organism FROM compound_structures s RIGHT JOIN molecule_dictionary m ON s.molregno = m.molregno JOIN compound_records r ON m.molregno = r.molregno JOIN docs d ON r.doc_id = d.doc_id JOIN activities act ON r.record_id = act.record_id JOIN assays a ON act.assay_id = a.assay_id JOIN target_dictionary t ON a.tid = t.tid AND act.standard_type = 'ID50' AND act.standard_units = 'nM';
続いて、下記のようにしてCSVファイルに結果を出力します。
COPY TEMP_COMPOUND_ID50 TO '/var/lib/postgresql/data/TEMP_COMPOUND_ID50.csv' DELIMITER ',' CSV HEADER;
5. Pythonから読み込む
上記で出力したファイルは、例えば下記のようにPythonで読み込めます。
import pandas as pd df_ic50 = pd.read_csv('chembl_35/chembl_35_postgresql/db/TEMP_COMPOUND_IC50.csv') df_ic50_human = df_ic50[df_ic50['target_organism'] == 'Homo sapiens'] df_ic50_human = df_ic50_human[['inchi_key', 'standard_value', 'target_name']].drop_duplicates().dropna() df_ic50_human.head()
inchi_key | standard_value | target_name |
XUHZZDAPCLYTNF-SECBINFHSA-N | 8.2 | Tyrosine-protein kinase JAK3 |
DFZSTXDSQFCUKA-UHFFFAOYSA-N | 3410 | Phosphodiesterase 5A |
AYSKDUTXQCHQSE-UHFFFAOYSA-N | 22000 | A2780 |
FUQIUGJBENDTFK-UHFFFAOYSA-N | 18 | Kinesin-like protein KIF18A |
SOEFILJAGJAINE-XEGUGMAKSA-N | 10140 | A704 |
6. まとめ
本記事ではChEMBLのデータベースをダウンロードし、DockerにてPostgreSQLの環境を構築してIC50・ID50をSQLで検索・保存し、Pythonで読み込める状態にしました。
以上になります。
コメント