Biopython-biosql-module

提供:Dev Guides
移動先:案内検索

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データベースエンジンをダウンロードしてインストールします。
  • ステップ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は分類の詳細であり、すべてのエントリはこのテーブルを参照して分類情報を指定します。

シンプルなER図

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

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