UniProtのWeb APIを使ってほしい遺伝子のタンパク質配列を取ってくる

はじめに

UniProtで検索した配列がほしくなることが度々あるのですが、数が多いとブラウザで検索して配列をコピペするというのが面倒になってきます。このため、UniProtのWeb APIを使ってまとめて取ってくる方法を調べたので、今回はそのまとめの記事になります。

今回はUniProtが提供しているWeb APIの中で、クエリを使ってほしいタンパク質の情報を持ってきてPythonで簡単に使えるようにpandasのDataFrameにするところまでを紹介します。

今回のコードはこちらにあります。

https://github.com/shu65/uniprot_web_api_python_example/blob/main/UniProt_Result_to_Pandas_DataFrame.ipynb

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検索
    1. https://www.uniprot.org/uniprot/?query=human%20antigen
    2. https://www.uniprot.org/uniprot/?query=human%20AND%20antigen
  • or検索例: human または mouseのor検索
    1. 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もしらべてみようかなと思います。

コメントを残す

メールアドレスが公開されることはありません。