こんばんは,@PKです.
先日,複数のターゲット遺伝子に関連する構造情報をまとめて取得できないか,と同僚から相談されたので,KNIMEを使って遺伝子名からPDB IDを取得するKNIME Workflowを作成してみました.
このWorkflowでは,構造情報が欲しいヒト遺伝子のシンボルが含まれたリストを投げると,タンパク質のPDB ID,取得手法(X-ray, NMR, EM...),アミノ酸配列の長さ,登録年月等が出力されます.
また,他種の構造情報も見れるように,homologe IDを使って,他種のgene IDも取得します.
この構造情報を取得するKNIME Workflowの中身について,簡単にまとめました.
- KNIME Workflowの概要
- human gene symbolからhuman gene IDへ変換
- Homologene IDを使って7種のgene IDを取得
- Gene IDからUniprot IDを取得
- Uniprot IDからPDB IDを検索
- PDB IDから,登録年月の情報を取得
KNIME Workflowの概要
今回作成したKNIME Workflowは以下の通りです.
このWorkflowでは,大きく以下に示すような処理を行っています.
- gene symbolデータの読み込み
- human gene symbol ⇒human gene IDを取得
- homologene IDを取得して7種のgene IDをそれぞれ取得
- gene IDからUniprot IDを取得
- Uniprot IDからPDB ID (+情報)を取得
- PDB IDから登録年月を取得
それぞれの処理を色囲いで示しました.
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回以上アクセスしないように,設定しておきます.
join("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=gene&retmode=xml&term=",$target$,"%5BPREF%5D%20AND%20Homo%20sapiens%5BORGN%5D")
最後に「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上で使用するやり方については,以下のブログで紹介しています.
やったことは単純で,「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を取得することができました.
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)などのデータを取得しました.
アミノ酸配列情報は,ほぼタンパク質の全長が解かれているのか,それとも部分構造のみなのか,を判断するために取得しました.
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から登録年月の情報を取得します.
string manipulation
join("https://www.rcsb.org/pdb/rest/describePDB?structureId=",$id$)
X Path query
/dns:uniprot/dns:entry/@created
以下が最終的に出力された結果です.
HDACはヒトのデータばかりだったので,あまりhomologene IDの操作は意味がなかったかもしれませんね
PDBのサイトに行くことはほとんどなかったので,いい勉強になりました.
これを機に結晶構造とか勉強していきたい…
KNIME workflowに関する質問や,おかしい点(無駄が多い…)等ありましたら,ぜひご連絡いただけると嬉しいです.