はじめての環境DNA
研究室から現場まで、実践で使える知識を!
バイオインフォマティックス

Biopythonを使ってDNA配列をダウンロード

やりたいこと

Entrezによるデータベース検索システムを使って配列情報を取得します。
Entrezの検索システムは皆さんがNCBIで配列を検索したりするときに使うこのページそのものだと思っていただいたらいいと思います。

image.png

注意点

情報を取得する際、サーバーに大きな負荷がかからないようにガイドラインに記載されているルールは守る。

簡単にまとめると以下の通りです。2と3についてはBiopythonが勝手にやってくれるそうです。

  1. 100以上のリクエストを送る場合は、週末かピークタイム以外の時間に行う
  2. 通常のアドレスではなく、http://eutils.ncbi.nlm.nih.gov/ を使用する
  3. リクエストの頻度を3リクエスト/1s 以下になるようにする
  4. e-mailとE-utilities APIの設定はしておく方がいい
    (APIを登録しておくとリクエスト制限が緩和される)

また、本記事はJupyter lab上でスクリプトを動かして、markdwon記法で記事を書いています。

Rstudioのような開発環境で、コードを実行すると結果がすぐわかるのはすごく使い勝手がよかったです。

image.png

参考

大変勉強になる記事ばかりでした。ここで御礼申し上げます。

動作環境

  • Ubuntu 20.04 LTS
  • python 3.8.5
  • biopython 1.78

事前準備

Setting textファイルを作成

ディレクトリにSetting.txtを作成します。毎回パラメーターを記入するのは面倒なので、setting.txtに以下の情報をまとめて記入して、都度必要になったら呼び出すという形にします。

setting.txtの記載内容

emailアドレスとAPI keyは自身のものを記載してください。

NCBIへの自己紹介

emailやAPI keyは人によって異なる部分です。

パラメーター

添付画像の情報を指定していると思っていただけたらいいと思います。

image.png

RetmodeとRettypeの適切な組み合わせについてはこのページを参照ください。

image.png
image.png
image.png

今回はアユ(Plecoglossus altivelis)のミトコンドリア遺伝子を指定します。

0. 全体の設定

0-1. import module

0-2. 結果をまとめるフォルダーのチェック

0-3. プログレスバーの色の設定

0-4. setting.txtの読み込み

0-5. NCBIへ自己紹介

reモジュールを使ってアドレスとAPI keyを取得します。

1. Genbank IDの取得

1-1. 使用する変数の設定

1-2. esearchを動かす

esearchはEntrezの検索機能の部分で、efetchはダウンロード機能の部分です。IDを検索して取得したいのでesearchを使います。

retmaxを20と指定したので、検索上位20本分の配列情報に付与されたGenbank IDを取得することが出来ました。count_in_queryの数値は1~100000まで指定できるので、もっと大量の情報が欲しい時はこの数値を調整してみてください。

1-3. IDをテキストファイルに書き出す

これで、2000年1月1日以降に登録されたアユのミトコンドリアDNA配列に付与されているGenbankIDが取得できました。

次は取得したGenbankIDをもとにそれぞれの領域情報と、配列を取得していきます。

ResultsフォルダのID.txtには先ほど取得した20本分のGenbank IDが記載されています。それらを使ってそれぞれのIDの登録配列のDNA領域の情報を取得してみましょう。

2-1. 対象IDの配列を遺伝子領域ごとにFastaファイルに出力する

対象種はアユ、対象ゲノムはミトコンドリアDNAで検索した時にヒットした20個分のデータのGenbank IDがID.txtに格納されています。

ミトコンドリアDNAはリボソームRNAやtransfer RNAなど数十種類の遺伝子を有しています。MiFishプライマーなどは12s rRNA遺伝子に設計されていたり、系統解析に使われるようなシトクロムb遺伝子はミトコンドリアDNAにコードされています。

以下のフォルダ構成になります。1本しかhitしてないのでmergefa.fasには1本しかないですが、対象種や対象feature、retmaxを変えたりしたら複数配列が取得できます。

  • Fasta
    • LC600708.1_12S ribosomal RNA_rRNA.fasta
    • mergefa.fas
  • ID.txt
  • list.txt

2-2.DNA領域に構わず、対象IDの配列を一括取得する

領域ごとに切り出すとかファイルを分けるとかせずに、IDに対応する配列を全部取得するんだ。という方はこちらを使用してみてください。2-1の部分をごっそり以下のコードに変更します。

以下がResultsフォルダ内の構成になります。mergefa.fasには20本分のfastaファイルが一つにまとめられています。

  • Fasta
    • Fastaファイル20本
    • mergefa.fas
  • ID.txt

場合に応じて使い分けてみてください。

番外編

2-2で取得した配列の特徴をmatplotlibで視覚化してみる。

200bp位と800bp付近の長さのアユの配列が得られているようです。

まとめのコードなど

いくつかのパターンを同時並行で解説していったので、流れが分かりにくくなっていたと思います。

パターンに分けてコードをまとめて記載するので、その通りやれば類似した結果が得られると思います。

Setting.txtの内容

2-1. 対象IDの配列を遺伝子領域ごとにFastaファイルに出力するスクリプト

2-2.DNA領域に構わず、対象IDの配列を一括取得する

使用用途は何なのかと言われると難しい所ですが、誰かの仕事や研究の手助けとなれば幸いです。

ABOUT ME
しばた
分析・データ解析なんでもします。環境DNA使って研究したい方、気軽に相談ください。