Biopython-biosql-module
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は、次の機能を実行するモジュールBioSQL *を提供します-
- BioSQLデータベースを作成/削除する
- BioSQLデータベースに接続する
- GenBank、Swisport、BLAST結果、Entrez結果などのシーケンスデータベースを解析し、BioSQLデータベースに直接ロードします
- BioSQLデータベースからシーケンスデータを取得する
- NCBI BLASTから分類データを取得し、BioSQLデータベースに保存します
- BioSQLデータベースに対してSQLクエリを実行する
BioSQLデータベーススキーマの概要
BioSQLの詳細を説明する前に、BioSQLスキーマの基本を理解しましょう。 BioSQLスキーマは、シーケンスデータ、シーケンス機能、シーケンスカテゴリ/オントロジー、および分類情報を保持する25以上のテーブルを提供します。 重要なテーブルのいくつかは次のとおりです-
- バイオデータベース
- バイオエントリー
- バイオシーケンス
- seqfeature
- 分類群
- taxon_name
- アントロジー
- term
- dxref
BioSQLデータベースの作成
このセクションでは、BioSQLチームが提供するスキーマを使用して、サンプルのBioSQLデータベースbiosqlを作成します。 始めるのは本当に簡単で、複雑な設定がないので、SQLiteデータベースを使用します。
ここでは、以下の手順を使用して、SQLiteベースのBioSQLデータベースを作成します。
- ステップ1 *-SQLiteデータベースエンジンをダウンロードしてインストールします。
- ステップ2 *-GitHub URLからBioSQLプロジェクトをダウンロードします。 https://github.com/biosql/biosql
- ステップ3 *-コンソールを開き、mkdirを使用してディレクトリを作成し、入力します。
cd/path/to/your/biopython/sample
mkdir sqlite-biosql
cd sqlite-biosql
- ステップ4 *-以下のコマンドを実行して、新しいSQLiteデータベースを作成します。
> sqlite3.exe mybiosql.db
SQLite version 3.25.2 2018-09-25 19:08:10
Enter ".help" for usage hints.
sqlite>
- ステップ5 *-BioSQLプロジェクト(/sql/biosqldb-sqlite.sql`)からbiosqldb-sqlite.sqlファイルをコピーし、現在のディレクトリに保存します。
- ステップ6 *-以下のコマンドを実行して、すべてのテーブルを作成します。
sqlite> .read biosqldb-sqlite.sql
これで、すべてのテーブルが新しいデータベースに作成されました。
- ステップ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を構成する構成コマンドです。
- ステップ8 *-BioGenチームhttps://raw.githubusercontent.com/biopython/biopython/master/Doc/examples/ls_orchid.gbkが提供するサンプルGenBankファイルls_orchid.gbkを現在のディレクトリにコピーし、orchidとして保存します。 .gbk。
- ステップ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* テーブルは階層の最上位にあり、その主な目的は、一連のシーケンスデータを単一のグループ/仮想データベースに整理することです。 *バイオデータベース内のすべてのエントリは別のデータベースを参照し、別のデータベースとは混ざりません。* 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と.modeは、データを視覚化するためのフォーマットオプションです*。 また、SQLiteエディターを使用してクエリを実行することもできます。
以下に示すように、システムで使用可能な仮想シーケンスデータベースをリストします-
select
*
from
biodatabase;
** *Result* **
sqlite> .width 15 15 15 15
sqlite> select * from biodatabase;
biodatabase_id name authority description
--------------- --------------- --------------- ---------------
1 orchid
sqlite>
ここでは、 _ orchid_ という1つのデータベースのみがあります。
以下のコードを使用して、データベース orchid で使用可能なエントリ(上位3)を一覧表示します
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。 fasciculatum 5.8S rRNA遺伝子とITS1およびITS2 DNA)指定されたコード-
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()
私たちはコードのすべての行とその目的をより深く見ていきます-
- 行1 *-SeqIOモジュールをロードします。
- 行2 *-BioSeqDatabaseモジュールをロードします。 このモジュールは、BioSQLデータベースと対話するためのすべての機能を提供します。
- 行3 *-osモジュールをロードします。
- 行5 *-open_databaseは、構成されたドライバー(ドライバー)で指定されたデータベース(db)を開き、BioSQLデータベース(サーバー)にハンドルを返します。 Biopythonは、sqlite、mysql、postgresql、oracleデータベースをサポートしています。
- 行6-10 *-load_database_sqlメソッドは、外部ファイルからsqlをロードして実行します。 commitメソッドはトランザクションをコミットします。 すでにスキーマを使用してデータベースを作成しているため、この手順をスキップできます。
- 行12 *-new_databaseメソッドは、新しい仮想データベースorchidを作成し、蘭データベースに対してコマンドを実行するためのハンドルdbを返します。
- 13行目-loadメソッドは、シーケンスエントリ(反復可能なSeqRecord)をランデータベースにロードします。 SqlIO.parseはGenBankデータベースを解析し、その中のすべてのシーケンスを反復可能なSeqRecordとして返します。 loadメソッドの2番目のパラメーター(True)は、NCBIブラストWebサイトからシーケンスデータの分類の詳細を取得するように指示します(システムでまだ利用できない場合)。
- 行14 *-commitはトランザクションをコミットします。
- 行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"]は、仮想databaseorchidからデータを取得するためのハンドルを返します。 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()