====== Python モジュール: Biopython ======
===== 概要 =====
* アメリカの国立生物工学情報センターのデータベースにアクセスできる API モジュール (http://biopython.org/)。
* ウェブ (https://www.ncbi.nlm.nih.gov/) からでも簡単にアクセスできるが、大量のデータをダウンロードや検索する場合にはプログラムを作っちゃったほうが早かったりするので重宝する。
* データは Entrez オブジェクト (実体は xml) で返されるが、''read()'' メソッドによってディクショナリ形式にパースされる。
* クックブックも公開され、比較的とっつきやすい。
* [[http://biopython.org/DIST/docs/tutorial/Tutorial.html | Biopython Tutorial and Cookbook]]
* [[https://qiita.com/joemphilips/items/767c67524e4b7e328834 | Biopython を利用したNCBIのEntrez データベースへのアクセス - Qiita]]
===== 使い方 =====
==== インストール ====
* pip からインストール\\ $ sudo pip install biopython
==== モジュールの読み込みと初期化 ====
from Bio import Entrez
Entrez.email = "メールアドレス"
Entrez.tool = "ツール名"
* ''Entrez.email'': サーバに負荷をかけている場合に、指定したメールアドレス宛に連絡が届く (これを指定しない場合は利用できない)
* ''Entrez.tool'': アプリを作成した場合にここで指定したツール名が作用する (必須ではない)
==== データベース一覧の取得 ====
dblist = Entrez.einfo()
dblist_parsed = Entrez.read(dblist)
print(dblist_parsed["Dblist"])
* ''read()'' によって、キーが ''Dblist'' のみのディクショナリに変換される。
* ''Dblist'': ''[DbName1, DbName2, ...]''
==== データベース取得 ====
db = Entrez.einfo(db = "データベース名")
print(Entrez.read(db))
* ''einfo()'' にデータベース名を与えると、特定のデータベース情報を取得できる。
* ''DbInfo'': ''[Count, DbName, ..., FieldList, ...]''
* よく使うデータベースは、''nucleotide''、''nuccore''
==== データベースの検索 ====
result = Entrez.esearch(db = "データベース名", term = "検索条件", retmax = 100)
print(Entrez.read(result))
* 指定データベースから、指定した条件で検索する。
* ヒトの特定の遺伝子名の配列を検出するための条件: ''遺伝子名[Gene] AND 遺伝子名[Title] AND Homo sapiens[Organism] AND Genomic DNA[Filter] AND RefSeq[Filter]"''
* 参考サイト: [[https://stackoverflow.com/questions/13557981/getting-a-gene-sequence-from-entrez-using-biopython | python - getting a gene sequence from entrez using biopython - Stack Overflow]]
* ''retmax'' で表示する最大数を指定する。デフォルトは 20。
* マッチしたデータ数は、''result["Counter"]'' に格納されている。
* 詳細の ID は ''result["IdList"]'' にリスト形式で格納されているが、''retmax'' の分しか格納されない。
==== 配列ファイル (Genbank, Fasta) の取得&保存 ====
obj_gb = Entrez.efetch(db = "データベース名", id = 配列ID, rettype = "gb", retmode = "text")
obj_output = open(OUTPUT_PATH, "w")
obj_output.write(obj_gb.read())
* ''efetch()'' メソッドでデータの実体を取得する。
* ''配列ID'' は ''esearch()'' の結果の `IdList` キーにリスト形式で格納されているのでそれを指定する。
* ''OUTPUT_PATH'' は出力先のファイルパス
* ''rettype'' と ''retmode'' で出力するファイルタイプを指定する。詳しくは [[https://www.ncbi.nlm.nih.gov/books/NBK25499/table/chapter4.T._valid_values_of__retmode_and/?report=objectonly | Table 1, \[– Valid values of &retmode and &rettype for EFetch (null = empty string)\]. - Entrez Programming Utilities Help - NCBI Bookshelf]] を参照。
* 今回は、GenBank 形式で出力するため、''rettype = "gb", retmode = "text"'' とした。
{{tag>プログラミング}}