先日、NCBIやGEOのデータを効率的に扱う方法として注目されているPythonパッケージ「pysradb」を使い、GSE IDから対応するSRPを取得し、さらに各実験(SRX経由)からSRRを抜き出すという一連のデータ変換を試してみました。
pysradbはこちらのGitHubレポジトリで公開されており、本来はコマンドラインツールとして設計されています。しかし、Python APIとして利用する例はあまり見かけなかったため、今回その実装方法を徹底的に調べ、実際にコードを書いて検証しました。
※ただし、動作は正直なところ結構遅いため、大規模なデータを高速に処理したい場合は、他のソフトウェアの利用も検討すると良いかもしれません。
pysradbは、NCBI Sequence Read Archive (SRA) やGEOなどの公開データベースからメタデータを取得・変換するためのパッケージです。
コマンドラインツールとしても利用できますが、今回のようにPythonスクリプト内で直接APIとして呼び出すことも可能です。
特に、GSE (GEO Series) からSRP (SRA Project) への変換、そしてSRP内の各実験からSRR (Run) を取得する場合、pysradbの提供する関数やクラスを組み合わせることで、一連の処理がシンプルに実装できます。
以下は、実際にデータ変換を行うコード例です。
まずは、GSE ID(例:“GSEXXXXX”)を入力としてSRP情報を取得し、その後SRP内の各実験(SRX)を走査して、各実験に対してSRR情報を抽出するという流れです。
from pysradb.sraweb import SRAweb
# SRAwebオブジェクトを生成(APIキーがあれば引数に渡す)
sra = SRAweb()
# ① GSEからSRPへの変換
# gse_to_srpはDataFrame形式でSRP情報を返す(detailed=True, expand_sample_attributes=Trueで詳細情報が展開される)
srp_df = sra.gse_to_srp("GSEXXXXX", detailed=True, expand_sample_attributes=True)
print("【GSE -> SRP の結果】")
print(srp_df)
# ② SRPから各実験のメタデータを取得し、SRXごとにSRR情報を取得する
for idx, row in srp_df.iterrows():
srp_id = row["study_accession"]
print(f"\n【SRP: {srp_id}】のメタデータを取得中…")
# SRP IDから詳細な実験メタデータを取得
meta_df = sra.sra_metadata(srp_id, detailed=True, expand_sample_attributes=True)
if meta_df is None or meta_df.empty:
print("該当するメタデータが見つかりませんでした。")
continue
# 各実験(SRX)ごとに、SRXからSRR情報を取得
for exp in meta_df.to_dict("records"):
srx = exp.get("experiment_accession")
if not srx:
continue
srr_df = sra.srx_to_srr(srx, detailed=True, expand_sample_attributes=True)
print(f"\nExperiment {srx} の SRR 情報:")
print(srr_df)
# 最後に、リソース解放(SRAwebのclose()はダミーですが記述しておく)
sra.close()
detailed=True
や expand_sample_attributes=True
を指定することで、さらに詳細なサンプル属性情報も展開され、後続の解析に役立ちます。今回作ったツールはいずれgithubにて公開予定です。
思ったよりも動作が遅かったので、Rのパッケージも試してみます。