All Articles
    Search by

    pysradbをpythonAPIで使う

    先日、NCBIやGEOのデータを効率的に扱う方法として注目されているPythonパッケージ「pysradb」を使い、GSE IDから対応するSRPを取得し、さらに各実験(SRX経由)からSRRを抜き出すという一連のデータ変換を試してみました。
    pysradbはこちらのGitHubレポジトリで公開されており、本来はコマンドラインツールとして設計されています。しかし、Python APIとして利用する例はあまり見かけなかったため、今回その実装方法を徹底的に調べ、実際にコードを書いて検証しました。

    ※ただし、動作は正直なところ結構遅いため、大規模なデータを高速に処理したい場合は、他のソフトウェアの利用も検討すると良いかもしれません。


    1. pysradbの概要

    pysradbは、NCBI Sequence Read Archive (SRA) やGEOなどの公開データベースからメタデータを取得・変換するためのパッケージです。
    コマンドラインツールとしても利用できますが、今回のようにPythonスクリプト内で直接APIとして呼び出すことも可能です。
    特に、GSE (GEO Series) からSRP (SRA Project) への変換、そしてSRP内の各実験からSRR (Run) を取得する場合、pysradbの提供する関数やクラスを組み合わせることで、一連の処理がシンプルに実装できます。


    2. GSEからSRP、SRPからSRRへの変換手順

    以下は、実際にデータ変換を行うコード例です。
    まずは、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()

    3. コード解説

    GSEからSRPの取得

    • gse_to_srp
      指定したGSE IDに対応するSRP情報を取得します。
      引数 detailed=Trueexpand_sample_attributes=True を指定することで、さらに詳細なサンプル属性情報も展開され、後続の解析に役立ちます。

    SRPからメタデータ取得

    • sra_metadata
      得られたSRP IDを元に、関連する実験(SRX)やラン(SRR)のメタデータを取得します。
      このデータフレームには、実験アクセッション、サンプルアクセッション、さらには詳細な属性情報が含まれています。

    SRXからSRRの取得

    • srx_to_srr
      各実験(SRX)のアクセッションをキーとして、対応するSRR情報を抽出します。
      これにより、実際にどのラン(SRR)が対象となるのかを把握できます。

    4. おわりに

    今回作ったツールはいずれgithubにて公開予定です。

    思ったよりも動作が遅かったので、Rのパッケージも試してみます。

    Published Mar 14, 2025

    © 2020-2024 Hiroyuki Odake