t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【KNIME】遺伝子名からPDB IDをまとめて取得する

こんばんは,@PKです.

先日,複数のターゲット遺伝子に関連する構造情報をまとめて取得できないか,と同僚から相談されたので,KNIMEを使って遺伝子名からPDB IDを取得するKNIME Workflowを作成してみました.

このWorkflowでは,構造情報が欲しいヒト遺伝子のシンボルが含まれたリストを投げると,タンパク質のPDB ID,取得手法(X-ray, NMR, EM...),アミノ酸配列の長さ,登録年月等が出力されます.

また,他種の構造情報も見れるように,homologe IDを使って,他種のgene IDも取得します.

この構造情報を取得するKNIME Workflowの中身について,簡単にまとめました.

KNIME Workflowの概要

今回作成したKNIME Workflowは以下の通りです. f:id:t_kahi:20190601185116p:plain

このWorkflowでは,大きく以下に示すような処理を行っています.

  1. gene symbolデータの読み込み
  2. human gene symbol ⇒human gene IDを取得
  3. homologene IDを取得して7種のgene IDをそれぞれ取得
  4. gene IDからUniprot IDを取得
  5. Uniprot IDからPDB ID (+情報)を取得
  6. PDB IDから登録年月を取得

それぞれの処理を色囲いで示しました. f:id:t_kahi:20190601185556p:plain

human gene symbolからhuman gene IDへ変換

今回は,HDAC familyを例にしてデータを取得してみます. 「Table Creator」で以下のようにHDAC1からHDAC11までのhuman gene symbolを入力しました.

データの取得はNCBIのE-utilitiesを使用しました.
E-utilities Quick Start - Entrez Programming Utilities Help - NCBI Bookshelf

「string manipulation」で以下のようにquaryを作って,「GET request」でデータを取得します.1秒間に3回以上アクセスしないように,設定しておきます.
f:id:t_kahi:20190601191336p:plain

join("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=gene&retmode=xml&term=",$target$,"%5BPREF%5D%20AND%20Homo%20sapiens%5BORGN%5D")

f:id:t_kahi:20190601191658p:plain

最後に「X path」でgene IDの部分を抜き出したらこの部分は完了です.

X Path query

/eSearchResult/IdList/Id

Homologene IDを使って7種のgene IDを取得

今回は,種はある程度気にしないので,ターゲットとしている遺伝子の構造情報を取得することを考えました.そこで,以下に示すような有名どころの種のgene IDを取得します.

  • Homo sapiens
  • Mus musculus
  • Rattus norvegicus
  • Danio rerio
  • Caenorhabditis elegans
  • Drosophila
  • melanogaster
  • Rhesus macaque

ヒトのgene IDからこれらのgene IDの情報を紐付けるために,homologene IDを利用します.

homologene IDのデータは,Rの「homologene」パッケージを使用しました.

https://cran.r-project.org/web/packages/homologene/homologene.pdf

このパッケージを使うとhomologene IDのリスト取得や,別の種のgene IDが簡単に取得ができるようです…!

RをKNIME上で使用するやり方については,以下のブログで紹介しています.

www.t-kahi.com

やったことは単純で,「R source (Table)」で以下のように記述し,実行するだけで,homologene IDのリストが出力されます.

library(homologene)
knime.out <-  homologeneData2

このhomologe IDのリストを使って,human gene ID ⇒ homologene ID ⇒ homolog gene IDを取得します.
以下のように,HDAC1~11の8つの種のgene IDを取得することができました.

Gene IDからUniprot IDを取得

この部分も,NCBIのE-utilitiesを使用しました. 「string manipulation」と「X Path」は以下の通りです. X Pathの書き方慣れていきたいですね..

String Manipulation

join("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=gene&retmode=xml&retformat=text&id=",$Gene.ID$)

X Path query

//Dbtag[Dbtag_db='UniProtKB/Swiss-Prot']/Dbtag_tag/Object-id/Object-id_str

それぞれの遺伝子に対応したUniprot IDを取得することができました.
f:id:t_kahi:20190601195310p:plain

Uniprot IDからPDB IDを検索

続いて,Uniprot IDからPDB IDを取得していきます.
ここでは,UniprotのAPIを使用してデータの取得を行いました.

How can I access resources on this website programmatically?

「string manipulation」⇒「GET request」⇒「X path」で,必要な情報を取得していきます.

String Manipulation

join("https://www.uniprot.org/uniprot/",$UniProt ID$,".xml")

「X Path」では,PDB ID (id),測定手法(method),分解能(resolution),アミノ酸配列の情報(chains),タンパク質の全長(length)などのデータを取得しました. アミノ酸配列情報は,ほぼタンパク質の全長が解かれているのか,それとも部分構造のみなのか,を判断するために取得しました.
f:id:t_kahi:20190601195955p:plain

X path query

id = /dns:uniprot/dns:entry/dns:dbReference[@type="PDB"]/@id
method = /dns:uniprot/dns:entry/dns:dbReference[@type="PDB"]/dns:property[@type="method"]/@value
resolution = /dns:uniprot/dns:entry/dns:dbReference[@type="PDB"]/dns:property[@type="resolution"]/@value
chains = /dns:uniprot/dns:entry/dns:dbReference[@type="PDB"]/dns:property[@type="chains"]/@value
length = /dns:uniprot/dns:entry/dns:sequence/@length

得られた結果を以下に示します. 今回の結果はX線のデータばかりですが,他のタンパク質だとNMRやEM(クライオ電顕),ND(中性子)などがありました.

PDB IDから,登録年月の情報を取得

最後にほぼおまけのようですが,PDB APIを利用して,PDB IDから登録年月の情報を取得します.

RCSB PDB - REST Web Service

string manipulation

join("https://www.rcsb.org/pdb/rest/describePDB?structureId=",$id$)

X Path query

/dns:uniprot/dns:entry/@created

以下が最終的に出力された結果です.
HDACはヒトのデータばかりだったので,あまりhomologene IDの操作は意味がなかったかもしれませんね

f:id:t_kahi:20190601201657p:plain

PDBのサイトに行くことはほとんどなかったので,いい勉強になりました.
これを機に結晶構造とか勉強していきたい…

KNIME workflowに関する質問や,おかしい点(無駄が多い…)等ありましたら,ぜひご連絡いただけると嬉しいです.