Python3〜requestsとJSONの基本と応用

スポンサーリンク

バイオインフォマティクス分野でPythonを活用する際、データの取得や処理において「requests」と「JSON」モジュールの活用が重要な役割を果たします。この記事では、これらのモジュールの基本的な使い方と、バイオインフォマティクスの応用例を分かりやすく解説します。


1. requestsとJSONとは?

requestsモジュールとは

requestsモジュールは、PythonでHTTPリクエストを簡単に行うためのライブラリです。外部のAPIやウェブサービスと通信する際に利用されます。特に、RESTful APIを使ってデータを取得・送信する場合に非常に便利です。

特徴:

  • HTTPリクエスト(GET, POST, PUT, DELETEなど)を簡潔に実装可能
  • レスポンスデータの処理が容易
  • 認証、タイムアウト設定、リダイレクト対応もサポート

JSONフォーマットとは

JSON(JavaScript Object Notation)は、データ交換フォーマットの一つで、軽量かつ人間が読みやすい形式です。Pythonでは、標準ライブラリのjsonモジュールで扱います。

特徴:

  • 辞書形式(キーと値のペア)に似た構造
  • APIからのレスポンスやデータベース間のデータ転送によく使われる

2. 基本の使い方

requestsの基本

以下は、requestsを使ってデータを取得する簡単な例です。

import requests

# APIエンドポイント
url = "https://api.example.com/data"

# GETリクエストを送信
response = requests.get(url)

# ステータスコード確認
if response.status_code == 200:
    print("データ取得成功!")
    print(response.text)  # レスポンス内容を文字列で表示
else:
    print(f"エラー発生: {response.status_code}")

JSONの基本

APIのレスポンスがJSON形式の場合、response.json()を使ってPythonの辞書型に変換できます。

# JSONデータを取得して辞書に変換
data = response.json()
print(data)  # 辞書として操作可能

また、ローカルのJSONファイルを読み書きする場合は以下のようにします。

import json

# JSONファイルの読み込み
with open("data.json", "r") as file:
    data = json.load(file)

# JSONファイルへの書き込み
with open("output.json", "w") as file:
    json.dump(data, file, indent=4)

3. バイオインフォマティクスへの応用

応用例1:NCBI APIで遺伝子情報を取得

NCBIのEntrez APIを利用して、遺伝子情報を取得する例を紹介します。

import requests

# NCBI Entrez APIのエンドポイント
url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi"

# パラメータ
params = {
    "db": "gene",        # データベース(例: 遺伝子情報)
    "id": "672",         # 遺伝子ID(例: BRCA1)
    "retmode": "json"    # レスポンス形式
}

# GETリクエストを送信
response = requests.get(url, params=params)

# JSON形式でデータを解析
if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print(f"エラー発生: {response.status_code}")

このコードは、BRCA1遺伝子に関するデータをJSON形式で取得し、辞書として処理できます。得られたデータを解析して、必要な情報(例えば、遺伝子名や位置)を抽出できます。

応用例2:PDBから分子構造データを取得

Protein Data Bank (PDB) APIを使って、特定のタンパク質構造を取得する例です。

# PDB APIを利用してタンパク質構造を取得
url = "https://data.rcsb.org/rest/v1/core/entry/1CAG"

# GETリクエストを送信
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    print("タンパク質名:", data["struct"]["title"])  # 構造名を抽出
else:
    print(f"エラー発生: {response.status_code}")

このコードを使うことで、タンパク質構造の情報(名前、分類、実験手法など)を簡単に取得できます。


4. 上級テクニック

エラー処理とリトライ機能

API通信中にエラーが発生する可能性を考慮し、適切なエラー処理を実装することが重要です。

import requests
from requests.exceptions import RequestException

url = "https://api.example.com/data"

try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()  # HTTPエラーを検出
    data = response.json()
    print("データ取得成功!")
except RequestException as e:
    print(f"通信エラー: {e}")

リトライ機能を追加するには、retryingモジュールやカスタム関数を利用します。

JSONPathで複雑なデータ解析

JSONレスポンスが複雑な場合、JSONPathを利用すると効率的にデータを抽出できます。

from jsonpath_ng import parse

# JSONデータ
data = {
    "results": [
        {"name": "BRCA1", "id": 672},
        {"name": "TP53", "id": 7157}
    ]
}

# JSONPathクエリ
jsonpath_expr = parse("$.results[*].name")

# データを抽出
genes = [match.value for match in jsonpath_expr.find(data)]
print(genes)  # ['BRCA1', 'TP53']

5. まとめ

requestsJSONは、バイオインフォマティクスにおけるデータ取得と処理の基盤となるツールです。本記事では、基本的な使い方から応用例、上級テクニックまでを紹介しました。APIからデータを取得し、それをJSON形式で解析することで、幅広いデータソースを活用できます。

例えば、NCBIやPDBなどの生命科学系データベースに直接アクセスし、効率的に必要なデータを取得することが可能です。これらの技術を駆使して、バイオインフォマティクスの研究や実務におけるデータ処理をさらに効率化しましょう。

タイトルとURLをコピーしました