【ChEMBL】化合物のIC50/ID50を調べる

ケモインフォマティクス

本記事では化合物の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_keystandard_valuetarget_name
XUHZZDAPCLYTNF-SECBINFHSA-N8.2Tyrosine-protein kinase JAK3
DFZSTXDSQFCUKA-UHFFFAOYSA-N3410Phosphodiesterase 5A
AYSKDUTXQCHQSE-UHFFFAOYSA-N22000A2780
FUQIUGJBENDTFK-UHFFFAOYSA-N18Kinesin-like protein KIF18A
SOEFILJAGJAINE-XEGUGMAKSA-N10140A704

6. まとめ

本記事ではChEMBLのデータベースをダウンロードし、DockerにてPostgreSQLの環境を構築してIC50・ID50をSQLで検索・保存し、Pythonで読み込める状態にしました。

以上になります。

コメント