UniProtのWeb APIを使ってほしい遺伝子のタンパク質配列を取ってくる
目次
はじめに
UniProtで検索した配列がほしくなることが度々あるのですが、数が多いとブラウザで検索して配列をコピペするというのが面倒になってきます。このため、UniProtのWeb APIを使ってまとめて取ってくる方法を調べたので、今回はそのまとめの記事になります。
今回はUniProtが提供しているWeb APIの中で、クエリを使ってほしいタンパク質の情報を持ってきてPythonで簡単に使えるようにpandasのDataFrameにするところまでを紹介します。
今回のコードはこちらにあります。
UniProt Web APIについて
UniProtはタンパク質配列や機能に関するデータを集めた有名なデータベースです。このUniProtではブラウザで検索するのはもちろん、Web APIも提供されています。詳細はここに書かれています。
https://www.uniprot.org/help/api
クエリを使った方法はここにまとめられています。詳しくは次で紹介します。
https://www.uniprot.org/help/api_queries
UniProt Web APIの簡単な使い方
説明がわかりやすくなるようにまず具体的な例を示します。ここではヒトのTP53をUniProtKB/Swiss-Protから検索してタブ区切りのフォーマットでidとgeneの名前、アミノ酸配列を受け取ってみます。これを実行するURLとしては以下のようになります。
https://www.uniprot.org/uniprot/?query=reviewed:yes+AND+organism:%22Homo%20sapiens%22+AND+gene_exact:TP53&format=tab&columns=id,genes(PREFERRED),sequence
順番に与えているパラメータを見ていきます。
query
検索するqueryを文字列にして与えます。使えるフィールドは以下に一覧が載っています。
https://www.uniprot.org/help/query-fields
普通は複数のフィールドを使ってand検索かor検索を使いたくなるかと思います。and検索、or検索をする場合は以下のようにします。
- and検索例: human かつ antigenのand検索
- https://www.uniprot.org/uniprot/?query=human%20antigen
- https://www.uniprot.org/uniprot/?query=human%20AND%20antigen
- or検索例: human または mouseのor検索
- https://www.uniprot.org/uniprot/?query=human%20OR%20mouse
それ以外のandやor以外についてもいろいろ使えます。詳細はこちらに書かれています。
https://www.uniprot.org/help/text-search
format
結果のフォーマットを指定するパラメータです。今回示したタブ区切りの場合はtab
を指定します。それ以外のフォーマットは以下のページの[Parameter]→[format]に書かれています。
https://www.uniprot.org/help/api_queries
columns
デフォルトではUniProtで取得できる一部のデータしか取得できませんが、columnsを指定するとほしいデータを取得できます。上の例ではidとgeneの名前、アミノ酸配列を指定するために以下のようにしていました。
columns=id,genes(PREFERRED),sequence
カンマでほしいカラム名を区切ることで複数のカラムの情報を得ることができます。他に使えるカラムに関しては以下のページをご覧ください。
https://www.uniprot.org/help/uniprotkb_column_names
このページの[Column names as displayed in URL]側を指定するようにします。
それ以外のパラメータ
それ以外に圧縮をするかどうかなどがパラメータとして指定できます。詳しくはこのページの[Parameter]をご覧ください
https://www.uniprot.org/help/api_queries
UniProtのWeb APIを使って検索した結果をPandasのデータフレームにする
ここまでわかっていれば簡単にできてしまいますが、UniProtのWeb APIを使って上で示した結果をPandasのDataFrame
にするところまでのコードを示します。
requestsを使ってUniProtから検索結果をタブ形式で取得します。
import requests
url="https://www.uniprot.org/uniprot/"
params={
"query":"reviewed:yes AND organism:\"Homo sapiens\" AND gene_exact:TP53",
"format":"tab",
"columns":"id,genes(PREFERRED),sequence",
}
response = requests.get(url=url, params=params)
response.raise_for_status()
これを以下のようにpandasで読み込むだけで、pandasのDataFrame
形式の結果を取得できます。
import io
import pandas as pd
df = pd.read_csv(io.StringIO(response.text), sep="\t")
できたpandasのDataFrame
をprintした結果は以下の通りです。
Entry Gene names (primary ) \ 0 P04637 TP53 Sequence 0 MEEPQSDPSVEPPLSQETFSDLWKLLPENNVLSPLPSQAMDDLMLS...
Python以外でweb apiの結果を取得するまでの例はこちらにも書かれています。
https://www.uniprot.org/help/api_idmapping
他の言語でやりたい方は参考にしてみてください。
終わりに
今回はUniProtのWeb APIを使って検索結果をpandasのDataFrameにするところまでの例を紹介しました。当初はほしいアミノ酸配列を取得するのにfastaファイルをがんばってパースしようかな?とおも思ったのですが、調べてみると簡単にWeb APIが使えそうなことがわかったので、試してみました。
機会があれば他の有名データベースのWeb APIもしらべてみようかなと思います。