Biopython-BioSQLモジュール

BioSQLは、主にすべてのRDBMSエンジンのシーケンスとそれに関連するデータを格納するために設計された汎用データベーススキーマです。GenBank、Swissportなどの一般的なすべてのバイオインフォマティクスデータベースからのデータを保持するように設計されています。社内データの保存にも使用できます。

BioSQL 現在、以下のデータベースに特定のスキーマを提供しています-

  • MySQL(biosqldb-mysql.sql)
  • PostgreSQL(biosqldb-pg.sql)
  • Oracle(biosqldb-ora / *。sql)
  • SQLite(biosqldb-sqlite.sql)

また、JavaベースのHSQLDBおよびDerbyデータベースの最小限のサポートも提供します。

BioPythonは、BioSQLベースのデータベースと連携するための非常にシンプルで簡単かつ高度なORM機能を提供します。 BioPython provides a module, BioSQL 次の機能を実行するには-

  • BioSQLデータベースの作成/削除
  • BioSQLデータベースに接続します
  • GenBank、Swisport、BLAST結果、Entrez結果などのシーケンスデータベースを解析し、BioSQLデータベースに直接ロードします
  • BioSQLデータベースからシーケンスデータを取得します
  • NCBI BLASTから分類データを取得し、BioSQLデータベースに保存します
  • BioSQLデータベースに対してSQLクエリを実行します

BioSQLデータベーススキーマの概要

BioSQLに深く踏み込む前に、BioSQLスキーマの基本を理解しましょう。BioSQLスキーマは、シーケンスデータ、シーケンス機能、シーケンスカテゴリ/オントロジー、および分類法情報を保持するための25以上のテーブルを提供します。重要な表のいくつかは次のとおりです-

  • biodatabase
  • bioentry
  • biosequence
  • seqfeature
  • taxon
  • taxon_name
  • antology
  • term
  • dxref

BioSQLデータベースの作成

このセクションでは、BioSQLチームによって提供されたスキーマを使用してサンプルBioSQLデータベースbiosqlを作成しましょう。始めるのは本当に簡単で、複雑なセットアップがないので、SQLiteデータベースを使用します。

ここでは、以下の手順を使用してSQLiteベースのBioSQLデータベースを作成します。

Step 1 −SQLiteデータベースエンジンをダウンロードしてインストールします。

Step 2 − GitHubURLからBioSQLプロジェクトをダウンロードします。 https://github.com/biosql/biosql

Step 3 −コンソールを開き、mkdirを使用してディレクトリを作成し、そこに入力します。

cd /path/to/your/biopython/sample 
mkdir sqlite-biosql 
cd sqlite-biosql

Step 4 −以下のコマンドを実行して、新しいSQLiteデータベースを作成します。

> sqlite3.exe mybiosql.db 
SQLite version 3.25.2 2018-09-25 19:08:10 
Enter ".help" for usage hints. 
sqlite>

Step 5 − bioSQLプロジェクト(/ sql / biosqldb-sqlite.sql`)からbiosqldb-sqlite.sqlファイルをコピーし、現在のディレクトリに保存します。

Step 6 −以下のコマンドを実行して、すべてのテーブルを作成します。

sqlite> .read biosqldb-sqlite.sql

これで、すべてのテーブルが新しいデータベースに作成されました。

Step 7 −以下のコマンドを実行して、データベース内のすべての新しいテーブルを表示します。

sqlite> .headers on 
sqlite> .mode column 
sqlite> .separator ROW "\n" 
sqlite> SELECT name FROM sqlite_master WHERE type = 'table'; 
biodatabase 
taxon 
taxon_name 
ontology 
term 
term_synonym 
term_dbxref 
term_relationship 
term_relationship_term 
term_path
bioentry 
bioentry_relationship 
bioentry_path 
biosequence 
dbxref 
dbxref_qualifier_value 
bioentry_dbxref 
reference 
bioentry_reference 
comment 
bioentry_qualifier_value 
seqfeature 
seqfeature_relationship 
seqfeature_path 
seqfeature_qualifier_value 
seqfeature_dbxref 
location 
location_qualifier_value 
sqlite>

最初の3つのコマンドは、フォーマットされた方法で結果を表示するようにSQLiteを構成するための構成コマンドです。

Step 8 −BioPythonチームから提供されたサンプルGenBankファイルls_orchid.gbkをコピーします https://raw.githubusercontent.com/biopython/biopython/master/Doc/examples/ls_orchid.gbk 現在のディレクトリに保存し、orchid.gbkとして保存します。

Step 9 −以下のコードを使用してPythonスクリプトload_orchid.pyを作成し、実行します。

from Bio import SeqIO 
from BioSQL import BioSeqDatabase 
import os 

server = BioSeqDatabase.open_database(driver = 'sqlite3', db = "orchid.db") 

db = server.new_database("orchid") 
count = db.load(SeqIO.parse("orchid.gbk", "gb"), True) server.commit() 
server.close()

上記のコードは、ファイル内のレコードを解析してPythonオブジェクトに変換し、BioSQLデータベースに挿入します。コードは後のセクションで分析します。

最後に、新しいBioSQLデータベースを作成し、それにいくつかのサンプルデータをロードしました。次の章で重要な表について説明します。

単純なER図

biodatabase テーブルは階層の最上位にあり、その主な目的は、シーケンスデータのセットを単一のグループ/仮想データベースに編成することです。 Every entry in the biodatabase refers to a separate database and it does not mingle with another database. BioSQLデータベース内のすべての関連テーブルには、バイオデータベースエントリへの参照があります。

bioentryテーブルには、シーケンスデータを除くシーケンスに関するすべての詳細が保持されます。特定のシーケンスデータbioentry に保存されます biosequence テーブル。

taxonとtaxon_nameは分類の詳細であり、すべてのエントリはこのテーブルを参照して分類群情報を指定します。

スキーマを理解したら、次のセクションでいくつかのクエリを調べてみましょう。

BioSQLクエリ

データがどのように編成され、テーブルが相互に関連しているかをよりよく理解するために、いくつかのSQLクエリを詳しく調べてみましょう。先に進む前に、以下のコマンドを使用してデータベースを開き、いくつかのフォーマットコマンドを設定しましょう-

> sqlite3 orchid.db 
SQLite version 3.25.2 2018-09-25 19:08:10 
Enter ".help" for usage hints. 
sqlite> .header on 
sqlite> .mode columns

.header and .mode are formatting options to better visualize the data。SQLiteエディターを使用してクエリを実行することもできます。

以下に示すように、システムで利用可能な仮想シーケンスデータベースを一覧表示します-

select 
   * 
from 
   biodatabase;
*** Result ***
sqlite> .width 15 15 15 15 
sqlite> select * from biodatabase; 
biodatabase_id       name        authority       description    
---------------  --------------- --------------- --------------- 
1                   orchid 
sqlite>

ここでは、データベースは1つだけです。 orchid

データベースで利用可能なエントリ(上位3つ)を一覧表示します orchid 以下のコードで

select 
   be.*, 
   bd.name 
from 
   bioentry be 
   inner join 
      biodatabase bd 
      on bd.biodatabase_id = be.biodatabase_id 
where 
   bd.name = 'orchid' Limit 1, 
   3;
*** Result ***
sqlite> .width 15 15 10 10 10 10 10 50 10 10 
sqlite> select be.*, bd.name from bioentry be inner join biodatabase bd on 
bd.biodatabase_id = be.biodatabase_id where bd.name = 'orchid' Limit 1,3; 
bioentry_id biodatabase_id taxon_id name accession identifier division description version name 
--------------- --------------- ---------- ---------- ---------- ---------- ---------- 
---------- ---------- ----------- ---------- --------- ---------- ---------- 
2                   1               19       Z78532     Z78532    2765657     PLN 
C.californicum  5.8S rRNA  gene    and      ITS1    and   ITS2 DN  1 
orchid 
3         1         20          Z78531          Z78531         2765656        PLN
C.fasciculatum  5.8S rRNA  gene    and      ITS1    and   ITS2 DN  1 
orchid 
4         1         21          Z78530          Z78530         2765655        PLN 
C.margaritaceum 5.8S rRNA  gene    and      ITS1    and   ITS2  D  1 
orchid 
sqlite>

エントリ(アクセッション-Z78530、名前-C。fasciculatum5.8SrRNA遺伝子およびITS1およびITS2DNA)に関連付けられたシーケンスの詳細を指定されたコードでリストします-

select 
   substr(cast(bs.seq as varchar), 0, 10) || '...' as seq, 
   bs.length, 
   be.accession, 
   be.description, 
   bd.name 
from 
   biosequence bs 
   inner join 
      bioentry be 
      on be.bioentry_id = bs.bioentry_id 
   inner join 
      biodatabase bd 
      on bd.biodatabase_id = be.biodatabase_id 
where 
   bd.name = 'orchid' 
   and be.accession = 'Z78532';
*** Result ***

sqlite> .width 15 5 10 50 10 
sqlite> select substr(cast(bs.seq as varchar), 0, 10) || '...' as seq, 
bs.length, be.accession, be.description, bd.name from biosequence bs inner 
join bioentry be on be.bioentry_id = bs.bioentry_id inner join biodatabase bd 
on bd.biodatabase_id = be.biodatabase_id where bd.name = 'orchid' and 
be.accession = 'Z78532'; 
seq           length    accession   description  name 
------------ ---------- ---------- ------------ ------------ ---------- ---------- ----------------- 
CGTAACAAG...    753    Z78532    C.californicum 5.8S rRNA gene and ITS1 and ITS2 DNA orchid 
sqlite>

( - Z78530、名前- C.アクセッションエントリに関連付けられた完全な配列得るfasciculatum 5.8S rRNA遺伝子、およびITS1およびITS2 DNA)以下のコードを使用して-

select 
   bs.seq 
from 
   biosequence bs 
   inner join 
      bioentry be 
      on be.bioentry_id = bs.bioentry_id 
   inner join 
      biodatabase bd 
      on bd.biodatabase_id = be.biodatabase_id 
where 
   bd.name = 'orchid' 
   and be.accession = 'Z78532';
*** Result ***

sqlite> .width 1000 
sqlite> select bs.seq from biosequence bs inner join bioentry be on 
be.bioentry_id = bs.bioentry_id inner join biodatabase bd on bd.biodatabase_id = 
be.biodatabase_id where bd.name = 'orchid' and be.accession = 'Z78532'; 
seq 
----------------------------------------------------------------------------------------
----------------------------
CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGTTGAGACAACAGAATATATGATCGAGTGAATCT
GGAGGACCTGTGGTAACTCAGCTCGTCGTGGCACTGCTTTTGTCGTGACCCTGCTTTGTTGTTGGGCCTCC
TCAAGAGCTTTCATGGCAGGTTTGAACTTTAGTACGGTGCAGTTTGCGCCAAGTCATATAAAGCATCACTGATGAATGACATTATTGT
CAGAAAAAATCAGAGGGGCAGTATGCTACTGAGCATGCCAGTGAATTTTTATGACTCTCGCAACGGATATCTTGGCTC
TAACATCGATGAAGAACGCAG 
sqlite>

バイオデータベース、ランに関連付けられている分類群を一覧表示します

select distinct 
   tn.name 
from 
   biodatabase d 
   inner join 
      bioentry e 
      on e.biodatabase_id = d.biodatabase_id 
   inner join 
      taxon t 
      on t.taxon_id = e.taxon_id 
   inner join 
      taxon_name tn 
      on tn.taxon_id = t.taxon_id 
where 
   d.name = 'orchid' limit 10;
*** Result ***

sqlite> select distinct tn.name from biodatabase d inner join bioentry e on 
e.biodatabase_id = d.biodatabase_id inner join taxon t on t.taxon_id = 
e.taxon_id inner join taxon_name tn on tn.taxon_id = t.taxon_id where d.name = 
'orchid' limit 10; 
name 
------------------------------ 
Cypripedium irapeanum 
Cypripedium californicum 
Cypripedium fasciculatum 
Cypripedium margaritaceum 
Cypripedium lichiangense 
Cypripedium yatabeanum 
Cypripedium guttatum 
Cypripedium acaule 
pink lady's slipper 
Cypripedium formosanum 
sqlite>

BioSQLデータベースにデータをロードする

この章では、シーケンスデータをBioSQLデータベースにロードする方法を学びましょう。前のセクションでデータベースにデータをロードするためのコードはすでにあり、コードは次のとおりです。

from Bio import SeqIO 
from BioSQL import BioSeqDatabase 
import os 

server = BioSeqDatabase.open_database(driver = 'sqlite3', db = "orchid.db") 
DBSCHEMA = "biosqldb-sqlite.sql" 
SQL_FILE = os.path.join(os.getcwd(), DBSCHEMA) 

server.load_database_sql(SQL_FILE) 
server.commit() 

db = server.new_database("orchid") 
count = db.load(SeqIO.parse("orchid.gbk", "gb"), True) server.commit() 
server.close()

コードのすべての行とその目的を詳しく見ていきます-

Line 1 −SeqIOモジュールをロードします。

Line 2−BioSeqDatabaseモジュールをロードします。このモジュールは、BioSQLデータベースと対話するためのすべての機能を提供します。

Line 3 −osモジュールをロードします。

Line 5− open_databaseは、構成されたドライバー(ドライバー)を使用して指定されたデータベース(db)を開き、BioSQLデータベース(サーバー)へのハンドルを返します。Biopythonは、sqlite、mysql、postgresql、およびoracleデータベースをサポートしています。

Line 6-10− load_database_sqlメソッドは、外部ファイルからSQLをロードして実行します。commitメソッドはトランザクションをコミットします。スキーマを使用してデータベースをすでに作成しているため、この手順はスキップできます。

Line 12 − new_databaseメソッドは、新しい仮想データベースorchidを作成し、ハンドルdbを返し、orchidデータベースに対してコマンドを実行します。

Line 13− loadメソッドは、シーケンスエントリ(反復可能なSeqRecord)をorchidデータベースにロードします。SqlIO.parseは、GenBankデータベースを解析し、その中のすべてのシーケンスを反復可能なSeqRecordとして返します。loadメソッドの2番目のパラメーター(True)は、NCBI blast Webサイトからシーケンスデータの分類の詳細をフェッチするように指示します(システムでまだ使用できない場合)。

Line 14 −commitはトランザクションをコミットします。

Line 15 − closeはデータベース接続を閉じ、サーバーハンドルを破棄します。

シーケンスデータを取得する

以下のように、蘭データベースから識別子2765658のシーケンスをフェッチしましょう-

from BioSQL import BioSeqDatabase 

server = BioSeqDatabase.open_database(driver = 'sqlite3', db = "orchid.db") 

db = server["orchid"] 
seq_record = db.lookup(gi = 2765658) 
print(seq_record.id, seq_record.description[:50] + "...") 
print("Sequence length %i," % len(seq_record.seq))

ここで、server ["orchid"]は、仮想データベースorchidからデータをフェッチするためのハンドルを返します。 lookup メソッドは、基準に基づいてシーケンスを選択するオプションを提供し、識別子2765658のシーケンスを選択しました。 lookupシーケンス情報をSeqRecordobjectとして返します。SeqRecord`の操作方法はすでに知っているので、そこからデータを取得するのは簡単です。

データベースを削除する

データベースの削除は、適切なデータベース名を使用してremove_databaseメソッドを呼び出し、以下に指定されているようにコミットするだけです。

from BioSQL import BioSeqDatabase 
server = BioSeqDatabase.open_database(driver = 'sqlite3', db = "orchid.db") 
server.remove_database("orchids") 
server.commit()