# この後使うデータの準備(Webサイトのある階層を一括取得し、展開する。)
$ wget http://kurodalab.bs.s.u-tokyo.ac.jp/class/Summer/2019/Day7/transomics_data.zip
$ unzip transomics_data.zip
$ mv transomics_data
! tree | grep -v *.ipynb
※ これに加えて、前日作成した「責任代謝酵素リスト( rme.txt
)」が必要になります。
import pandas as pd
1. トランスオミクスStep3:リン酸化された責任代謝酵素を同定する
phosphoproteome.txt
の1列目には、リン酸化された代謝酵素の EC number が含まれている。ここから、責任代謝酵素に関する行のみ抽出する。
df_phosphoproteome = pd.read_csv("phosphoproteome.txt", sep="\t")
# 1. phosphoproteome.txt をExcelで開き、データの特徴を捉える。
df_phosphoproteome.head(3)
# 2. リン酸化された代謝酵素の[EC number, IPI ID, リン酸化残基] の情報を抜き出し、phospho_ec_ipi_residue.txtを作成しなさい。先頭2行は見出し行なので、3行目から出力すること。重複の除去を忘れずに。
$ tail -n +3 phosphoproteome.txt | cut -f1,2,8 | sort | uniq > phospho_ec_ipi_residue.txt
# 3. 2の結果が正しいかを模範解答ファイルと比較することで確かめる。
$ diff phospho_ec_ipi_residue.txt Day7_AnswerFiles/Step_iii/phospho_ec_ipi_residue.txt
# 4. phospho_ec_ipi_residue.txt から責任代謝酵素リスト(rme.txt)にも含まれている代謝酵素のみを抜き出しphosphorme_ec_ipi_residue.txtを作成せよ。for文でrme.txtのそれぞれのEC番号をphospho_ec_ipi_residue.txtからgrepするとよい。ただしgrepは単語一致を指定するオプションwを用いる(ec:1.1.1.1とec:1.1.1.10を区別するため)。
$ for aEC in $(cat rme.txt) ; do grep -w $aEC phospho_ec_ipi_residue.txt ; done > phosphorme_ec_ipi_residue.txt
# 5. 4の結果が正しいかを模範解答ファイルと比較することで確かめる。
$ diff phosphorme_ec_ipi_residue.txt Day7_AnswerFiles/Step_iii/phosphorme_ec_ipi_residue.txt
# 6. phosphorme_ec_ipi_residue.txtからリン酸化された責任代謝酵素のIPI IDとEC番号を抜き出したファイルphosphorme_ipi_ec.txtを作成せよ。
$ awk -F"\t" '{ print $2"\t"$1 }' phosphorme_ec_ipi_residue.txt | sort | uniq > phosphorme_ipi_ec.txt
# 7. 6の結果が正しいかを模範解答ファイルと比較することで確かめる。
$ diff phosphorme_ipi_ec.txt Day7_AnswerFiles/Step_iii/phosphorme_ipi_ec.txt
2. トランスオミクスStep4:責任キナーゼの推定
キナーゼ推定ソフトウェアNetPhorestを用いて、責任代謝酵素をリン酸化したタンパク質キナーゼを推定する。
Q.1. まずはお試し用のタンパク質配列ipi_sample.fastaを使い、以下の手順に則ってNetPhorest の動作を体験してみよう。¶
- TextEditで
ipi_sample.fasta
の中身を確認する(TextEditにDrag & Drop)。タンパク質ID_IPI00197210とそのアミノ酸配列から構成されていることがわかる。このような形式をFASTA形式という。 less
などでresnum_sample.txt
の中身を確認する。タンパク質ID_IPI00197210とその490番目のアミノ酸であるSerineを表すS490が記されている。このファイルはタンパク質のどの位置がリン酸化されているかの情報を与えるために用いる。- NetPhorest のウェブサイトを開く
- FASTA形式のアミノ酸配列ファイル
ipi_sample.fasta
の内容をそのまま問合せフォームに貼り付けて、[Select Phosphosite] を押す。 - 配列相同度が最も高いタンパク質を選択し、[Next] を押す。
- "Load sites from file" にて、
resnum_sample.txt
を選択する。これにより、タンパク質のIDと当該タンパク質において実際にリン酸化が確認された残基の位置が与えられる。最後に [Start prediction] ボタンをクリックする。 - 今回はキナーゼによるリン酸化のみ使うので、8つあるチェックボックス “KIN”, “SH2”, “PTP”, “PTB”, “14-3-3”, “BRCT”, “WW” ,”WD40” のうち ”KIN” のみチェックする。
- [Save] → Full dataset を選択し、キナーゼの予測結果
networkin_predictions_sample.tsv
を保存し、Excelなどで中身を確認する。タンパク質IPI00197210の490番目のSerineのリン酸化の予測キナーゼやその予測スコアが記されている。(その他には、アミノ酸配列やキナーゼのタンパク質IDが記されている。)
sample_NetPhorest_path = "../NetPhorest/sample_networkin_predictions.tsv"
df_sample_NetPhorest = pd.read_csv(sample_NetPhorest_path, sep="\t")
df_sample_NetPhorest.head(3)
以上で見たように、NetPhorestへの入力として必要な情報は、以下の2つである。
- FASTA形式のアミノ酸配列 (例:
ipi_sample.fasta
) - リン酸化が実際に確認された残基の位置 (例:
resnum_sample.txt
)
そこで、実際に以下のQ2,Q3でそれぞれのデータファイルを作成する。
Q2. FASTA形式のアミノ酸配列データ作成¶
ipi.RAT.fasta
は、ラット全タンパク質のアミノ酸配列をFASTA形式で格納しているファイルである。FASTA形式とは、以下のようなファイル形式である。
fasta
[IPI]
[60文字ごとに改行したアミノ酸配列]
[60文字ごとに改行したアミノ酸配列]
(以下、配列の末尾まで同様)
※なお、IPIはタンパク質を識別するID体系のひとつ、International Protein Indexを指す。
# 1. ipi.RAT.fastaをless等で閲覧せよ。見出しとアミノ酸配列が繰り返されていることがわかる。
$ less ipi.RAT.fasta
# 2. fasta形式のファイルの操作にはいくつかのツールが開発されている。今回はそのうちのseqkitを使用する。以下のコマンドを実行し、その動作を確認せよ。
$ cp seqkit /usr/local/bin/ # パスの通っている場所に移動
$ seqkit grep ipi.RAT.fasta -p IPI00197210
$ seqkit grep ipi.RAT.fasta -p IPI00197241
# 3. phosphorme_ec_ipi_residue.txtに含まれるタンパク質の配列をipi.RAT.fastaから抜き出し、phosphorme_ipi.fastaを作成しなさい。IPI IDはphosphorme_ec_ipi_residue.txtの2列目から抜き出し、重複を除いた上でfor文に用いるとよい。
$ for aIPI in $(cut -f2 phosphorme_ec_ipi_residue.txt | sort | uniq) ; do seqkit grep ipi.RAT.fasta -p $aIPI; done > phosphorme_ipi.fasta
# 4. 3の結果が正しいかを模範解答ファイルと比較することで確かめる。
$ diff phosphorme_ipi.fasta Day7_AnswerFiles/Step_iv/phosphorme_ipi.fasta
Q3. リン酸化が実際に確認された残基の位置を示すデータ作成¶
責任代謝酵素についてこの情報を取り出し、resnum_sample.txt
と同様の
[IPI][tab][リン酸化部位]
という形式で保存したい。
# 1. phosphorme_ec_ipi_residue.txtからリン酸化された責任代謝酵素のリン酸化部位(残基番号)を抜き出したファイルphosphorme_ipi_residue.txtを作成せよ。(ヒント:cutで2列目と3列目を抜き出し、重複削除)
$ cut -f2,3 phosphorme_ec_ipi_residue.txt | sort | uniq > phosphorme_ipi_residue.txt
# 2. 1の結果が正しいかを模範解答ファイルと比較することで確かめる。
$ diff phosphorme_ipi_residue.txt Day7_AnswerFiles/Step_iv/phosphorme_ipi_residue.txt
# 3. リン酸化された責任代謝酵素のFASTA形式ファイルphosphorme_ipi.fasta (Q2で作成)およびリン酸化部位ファイルphosphorme_ipi_residue.txt (Q3で作成)をNetPhorestに入力し、キナーゼの予測結果をnetworkin_predictions.tsvに保存しなさい。(先きほどのサンプルデータと別に取り扱うことを明確化したかったので、../NetPhorest/networkin_predictions.tsvに保存した。)
# → [NetPhorest](http://netphorest.info) のウェブサイトを開く
NetPhorest_path = "../NetPhorest/networkin_predictions.tsv"
df_NetPhorest = pd.read_csv(sample_NetPhorest_path, sep="\t")
df_NetPhorest.head(3)
# 4. 3の結果が正しいかを模範解答ファイルと比較することで確かめる。
$ diff ../NetPhorest/networkin_predictions.tsv Day7_AnswerFiles/Step_iv/networkin_predictions.tsv
# 5. networkin_predictions.tsv は1,6列目にそれぞれ基質のIPI、責任キナーゼ名が含まれている。これらの列のみ抽出して重複を取り除き、phosphorme_ipi_kinase.txtに保存し、Excel等で中身を確認せよ。1行目は見出しなので、除いておくこと。sortコマンドにおいては、辞書順にするために-fオプションを用いること。
$ cut -f1,6 ../NetPhorest/networkin_predictions.tsv | tail -n +2 | sort -f | uniq > phosphorme_ipi_kinase.txt
# 6. 最後に、phosphorme_ipi_ec.txtとphosphorme_ipi_kinase.txtを統合し、代謝酵素とキナーゼの対応関係phosphorme_ec_kinase.txtを作成し、less等で確認せよ。join(後述)を用いて、IPI_ID, EC番号, キナーゼの表を作成後、2列目と3列目を抽出し(*)、重複を削除すれば良い。ただし、cutコマンドにおいては、区切り文字を” ”にする必要があるため(joinの仕様)、-d “ ”を付加すること。またsortコマンドにおいては、辞書順にするために-fオプションを用いること。
# *2列目と3列目の間は"\t"タブ文字ではなく、" "空白を用いてください(joinの仕様)。そのため、awkを用いる場合は$2と$3の間は" "を用いる必要がある。
$ join phosphorme_ipi_ec.txt phosphorme_ipi_kinase.txt | cut -d " " -f2,3 | sort -f | uniq > phosphorme_ec_kinase.txt
# 7. 6の結果が正しいかを模範解答ファイルと比較することで確かめる。
$ diff phosphorme_ec_kinase.txt Day7_AnswerFiles/Step_iv/phosphorme_ec_kinase.txt
まとめ:経路抜き出し¶
ここまでの操作で、以下の経路ファイルが作成された。
・metab_rme.txt: 変動代謝物 ~責任代謝酵素
cpd:C00021 ec:1.16.1.8
cpd:C00021 ec:2.1.1.1
cpd:C00021 ec:2.1.1.10
cpd:C00021 ec:2.1.1.100
… …
・phosphorme_ec_kinase.txt 代謝酵素 ~ キナーゼ
ec:1.1.1.95 AuroraA
ec:1.1.1.95 CLK_group
ec:1.1.1.95 DMPK_group
ec:1.1.1.95 PKC_group
ec:1.1.1.95 RCK_group
ec:1.1.1.95 RSK_group
… …
最後に、これらのデータを用いてネットワークの可視化を試みる。
3. トランスオミクスStep5:シグナル伝達経路と代謝経路を視覚化する
インスリンシグナル伝達経路と中心炭素代謝経路の間をつないで立体的に視覚化する。
Q1. まず、phosphorme_ec_kinase.txt
のうち、インスリンシグナル伝達経路と中心炭素代謝経路の間をつなぐリン酸化の情報のみを取り出す。¶
# 1. NetPhorestで推定したキナーゼのうち、KEGGのインスリンシグナル伝達経路に存在するキナーゼのIDはPKA_group, PKB_group, PKC_group, p70S6K_group, GSK3_group, MAPK3_MAPK1_MAPK7_NLK_groupの6つである。これら6つを含む行のみをphosphorme_ec_kinase.txtから抜き出し、phosphorme_ec_inskinase.txt という名前のファイルに保存しなさい。
# ヒント:「PKA_groupまたはPKB_group」を検索したいときは、 "PKA_group\|PKB_group" のように書く。検索に記号を含むので、""で囲む。
$ grep "PKA_group\|PKB_group\|PKC_group\|p70S6K_group\|GSK3_group\|MAPK3_MAPK1_MAPK7_NLK_group" phosphorme_ec_kinase.txt > phosphorme_ec_inskinase.txt
# 2. 1の結果が正しいかを模範解答ファイルと比較することで確かめる。
$ diff phosphorme_ec_inskinase.txt Day7_AnswerFiles/Step_v/phosphorme_ec_inskinase.txt
# 3. 中心炭素代謝の酵素リストをつくる。そのために再びKEGG API ”Link”を用いる。
# curl http://rest.kegg.jp/link/ec/[生化学パスウェイのID]
# と入力すると、当該生化学パスウェイに含まれる全酵素のEC numberが表示される。解糖系(map00010)、TCAサイクル(map00020)、ペントースリン酸経路(map00030)に含まれる全酵素のEC number一覧をそれぞれglycolysis_ec.txt、tca_ec.txt、ppp_ec.txtというファイル名で保存しなさい。1列目はmapIDであることに注意せよ。
$ curl http://rest.kegg.jp/link/ec/map00010 | cut -f2 > glycolysis_ec.txt
$ curl http://rest.kegg.jp/link/ec/map00020 | cut -f2 > tca_ec.txt
$ curl http://rest.kegg.jp/link/ec/map00030 | cut -f2 > ppp_ec.txt
# 4. glycolysis_ec.txt、tca_ec.txt、ppp_ec.txtに含まれる全EC numberを重複なく統合し、中心炭素代謝経路のEC number一覧ccm_ec.txt というファイル名で保存しなさい。(ヒント:ファイルの統合にはcatを用いる。ex. cat fileA fileB fileC > file ABC)
$ cat glycolysis_ec.txt tca_ec.txt ppp_ec.txt | sort | uniq > ccm_ec.txt
# 5. 4の結果が正しいかを模範解答ファイルと比較することで確かめる。
$ diff ccm_ec.txt Day7_AnswerFiles/Step_v/ccm_ec.txt
# 6. EC numberリストccm_ec.txtとphosphorme_ec_inskinase.txtを用いて、「インスリンシグナル伝達経路の6つのキナーゼにリン酸化された中心炭素代謝の責任代謝酵素」phosphorme_ccmec_inskinase.txtを作成せよ。
$ for aEC in $(cat ccm_ec.txt); do grep -w $aEC phosphorme_ec_inskinase.txt; done > phosphorme_ccmec_inskinase.txt
# 7. phosphorme_ccmec_inskinase.txtの中身を読み、最終的に得られた中心炭素代謝系酵素とその責任キナーゼが次のペアであることを確認しなさい。
責任キナーゼ | 酵素番号(酵素名) |
---|---|
GSK3_group | 2.3.3.8 (Acly), 5.4.2.2 (Pgm1) |
p70S6K_group | 1.2.1.3 (Aldh), 2.3.3.8 (Acly), 2.7.1.11 (Pfkl) |
PKA_group | 1.2.1.3 (Aldh), 2.3.3.8 (Acly), 2.7.1.11 (Pfkl) |
PKB_group | 1.2.1.3 (Aldh), 2.3.3.8 (Acly), 2.7.1.11 (Pfkl) |
PKC_group | 1.2.1.3 (Aldh), 2.3.3.8 (Acly), 2.7.1.11 (Pfkl) |
! cat phosphorme_ccmec_inskinase.txt | sort -k 2
Q2. VANTED with HIVEを使って、インスリンシグナル伝達経路と中心炭素代謝経路の間を立体的に視覚化する。¶
- ソフトウェアの準備のために、以下のコマンドを実行せよ。特に意味は考えないくて良い(JAVA 3D関連のライブラリを導入している。)
$ ./makeJava3Denv.sh
- HIVE with VANTEDをデスクトップにダウンロードし、解凍しなさい。(URL: https://immersive-analytics.infotech.monash.edu/hive/)
- デスクトップで解凍した HIVE_with_VANTED.jar をダブルクリックして HIVE with VANTED を起動しなさい。
- "File" → "Open" より、中心炭素代謝とインスリンシグナル経路を統合した `inssigpath_ccm_gml` を開き、全体を概観せよ。
- `insulin_trans_omic.gml` という名前で保存しなさい。
- `insulin_trans_omic.gml` の内、右側のインスリンシグナル伝達ネットワークを範囲選択し、"Cluster"→"Enter Cluster ID"→"Enter and set cluster ID"を選択し、Cluster IDに "signaling" と入力しなさい。同様に左側の中心炭素代謝ネットワークを範囲選択し、Cluster IDに "metabolism" と入力しなさい。
先ほど同定した責任キナーゼと代謝酵素の間のネットワーク(対応するペア)に基づき、
insulin_trans_omic.gml
の中の対応するノード同士をエッジで結びなさい。- 代謝酵素のうち、Aldh3a2はマップにないので無視してよい
- `insulin_trans_omic.gml` のネットワークにおいて、代謝酵素の名前は上図そのままであるが、キナーゼの名前は(~~)のようになっている。
`insulin_trans_omic.gml` を保存しなさい。
- "File" → "New View" → "3D Graph View" で3D表示ウィンドウが開きなさい。
- 2D表示ウィンドウにて、“Edit””Selection””Select Cluster”でmetabolismまたはsignalingを選ぶと、代謝層またはシグナル層を選択できる。一方の層を選択し、両者が上下にくるように位置を調整しなさい。2D表示ウィンドウで位置を調整してファイルを保存すると、3D表示ウィンドウに反映される。
- 代謝層とシグナル層の間隔を変えたいときは次のようにする。
- "Edit"→"Selection"→"Select Cluster" で metabolism または signaling を選択
- 右側の"Network"→"Node"→"Node Attributes"→"Position"の3つある欄のうち、一番右の欄がZ座標なので、ここに適当な値を入れる。Z座標の初期設定は、metabolismが-800、signalingが0である。
まとめ