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()