Biopython - Mô-đun BioSQL

BioSQLlà một lược đồ cơ sở dữ liệu chung được thiết kế chủ yếu để lưu trữ trình tự và dữ liệu liên quan của nó cho tất cả công cụ RDBMS. Nó được thiết kế theo cách giữ dữ liệu từ tất cả các cơ sở dữ liệu tin sinh học phổ biến như GenBank, Swissport, v.v. Nó cũng có thể được sử dụng để lưu trữ dữ liệu nội bộ.

BioSQL hiện đang cung cấp lược đồ cụ thể cho các cơ sở dữ liệu bên dưới -

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

Nó cũng cung cấp hỗ trợ tối thiểu cho cơ sở dữ liệu HSQLDB và Derby dựa trên Java.

BioPython cung cấp khả năng ORM rất đơn giản, dễ dàng và nâng cao để làm việc với cơ sở dữ liệu dựa trên BioSQL. BioPython provides a module, BioSQL để thực hiện chức năng sau -

  • Tạo / xóa cơ sở dữ liệu BioSQL
  • Kết nối với cơ sở dữ liệu BioSQL
  • Phân tích cú pháp cơ sở dữ liệu trình tự như GenBank, Swisport, kết quả BLAST, kết quả Entrez, v.v. và tải trực tiếp nó vào cơ sở dữ liệu BioSQL
  • Tìm nạp dữ liệu trình tự từ cơ sở dữ liệu BioSQL
  • Tìm nạp dữ liệu phân loại từ NCBI BLAST và lưu trữ trong cơ sở dữ liệu BioSQL
  • Chạy bất kỳ truy vấn SQL nào đối với cơ sở dữ liệu BioSQL

Tổng quan về lược đồ cơ sở dữ liệu BioSQL

Trước khi đi sâu vào BioSQL, chúng ta hãy hiểu cơ bản về lược đồ BioSQL. Lược đồ BioSQL cung cấp hơn 25 bảng để chứa dữ liệu trình tự, tính năng trình tự, danh mục trình tự / bản thể học và thông tin phân loại. Một số bảng quan trọng như sau:

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

Tạo cơ sở dữ liệu BioSQL

Trong phần này, chúng ta hãy tạo một cơ sở dữ liệu BioSQL mẫu, biosql bằng cách sử dụng lược đồ do nhóm BioSQL cung cấp. Chúng tôi sẽ làm việc với cơ sở dữ liệu SQLite vì nó thực sự dễ bắt đầu và không cần thiết lập phức tạp.

Ở đây, chúng tôi sẽ tạo cơ sở dữ liệu BioSQL dựa trên SQLite bằng cách sử dụng các bước dưới đây.

Step 1 - Tải xuống công cụ dữ liệu SQLite và cài đặt nó.

Step 2 - Tải xuống dự án BioSQL từ URL GitHub. https://github.com/biosql/biosql

Step 3 - Mở bảng điều khiển và tạo một thư mục bằng mkdir và nhập vào đó.

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

Step 4 - Chạy lệnh dưới đây để tạo cơ sở dữ liệu SQLite mới.

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

Step 5 - Sao chép tệp biosqldb-sqlite.sql từ dự án BioSQL (/ sql / biosqldb-sqlite.sql`) và lưu trữ trong thư mục hiện tại.

Step 6 - Chạy lệnh dưới đây để tạo tất cả các bảng.

sqlite> .read biosqldb-sqlite.sql

Bây giờ, tất cả các bảng được tạo trong cơ sở dữ liệu mới của chúng tôi.

Step 7 - Chạy lệnh dưới đây để xem tất cả các bảng mới trong cơ sở dữ liệu của chúng tôi.

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>

Ba lệnh đầu tiên là các lệnh cấu hình để cấu hình SQLite hiển thị kết quả theo cách đã định dạng.

Step 8 - Sao chép tệp GenBank mẫu, ls_orchid.gbk do nhóm BioPython cung cấp https://raw.githubusercontent.com/biopython/biopython/master/Doc/examples/ls_orchid.gbk vào thư mục hiện tại và lưu nó dưới dạng lan.gbk.

Step 9 - Tạo một tập lệnh python, load_orchid.py bằng cách sử dụng mã bên dưới và thực thi nó.

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

Đoạn mã trên phân tích cú pháp bản ghi trong tệp và chuyển đổi nó thành các đối tượng python và chèn nó vào cơ sở dữ liệu BioSQL. Chúng tôi sẽ phân tích mã trong phần sau.

Cuối cùng, chúng tôi đã tạo một cơ sở dữ liệu BioSQL mới và tải một số dữ liệu mẫu vào đó. Chúng ta sẽ thảo luận về các bảng quan trọng trong chương tiếp theo.

Sơ đồ ER đơn giản

biodatabase bảng nằm trên cùng của hệ thống phân cấp và mục đích chính của nó là tổ chức một tập hợp dữ liệu trình tự thành một nhóm / cơ sở dữ liệu ảo duy nhất. Every entry in the biodatabase refers to a separate database and it does not mingle with another database. Tất cả các bảng liên quan trong cơ sở dữ liệu BioSQL đều có tham chiếu đến mục nhập cơ sở dữ liệu sinh học.

bioentrybảng chứa tất cả các chi tiết về một chuỗi ngoại trừ dữ liệu chuỗi. dữ liệu trình tự của một cụ thểbioentry sẽ được lưu trữ trong biosequence bàn.

taxon và taxon_name là các chi tiết phân loại và mọi mục nhập đều tham chiếu đến bảng này để chỉ định thông tin về đơn vị phân loại của nó.

Sau khi hiểu lược đồ, chúng ta hãy xem xét một số truy vấn trong phần tiếp theo.

Truy vấn BioSQL

Chúng ta hãy đi sâu vào một số truy vấn SQL để hiểu rõ hơn cách dữ liệu được tổ chức và các bảng có liên quan với nhau. Trước khi tiếp tục, chúng ta hãy mở cơ sở dữ liệu bằng lệnh dưới đây và đặt một số lệnh định dạng -

> 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. Bạn cũng có thể sử dụng bất kỳ trình soạn thảo SQLite nào để chạy truy vấn.

Liệt kê cơ sở dữ liệu chuỗi ảo có sẵn trong hệ thống như dưới đây:

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

Ở đây, chúng tôi chỉ có một cơ sở dữ liệu, orchid.

Liệt kê các mục (đầu trang 3) có sẵn trong cơ sở dữ liệu orchid với mã cho sẵn dưới đây

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>

Liệt kê chi tiết trình tự được liên kết với mục nhập (gia nhập - Z78530, tên - gen C. fasciculatum 5.8S rRNA và DNA ITS1 và ITS2) với mã đã cho -

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>

Nhận trình tự hoàn chỉnh được liên kết với mục nhập (gia nhập - Z78530, tên - gen C. fasciculatum 5.8S rRNA và DNA ITS1 và ITS2) bằng cách sử dụng mã dưới đây -

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>

Liệt kê đơn vị phân loại liên kết với cơ sở dữ liệu sinh học, phong lan

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>

Tải dữ liệu vào cơ sở dữ liệu BioSQL

Hãy để chúng tôi tìm hiểu cách tải dữ liệu tuần tự vào cơ sở dữ liệu BioSQL trong chương này. Chúng tôi đã có mã để tải dữ liệu vào cơ sở dữ liệu trong phần trước và mã như sau:

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

Chúng ta sẽ có cái nhìn sâu hơn về từng dòng mã và mục đích của nó -

Line 1 - Tải mô-đun SeqIO.

Line 2- Tải mô-đun BioSeqDatabase. Mô-đun này cung cấp tất cả các chức năng để tương tác với cơ sở dữ liệu BioSQL.

Line 3 - Tải mô-đun os.

Line 5- open_database mở cơ sở dữ liệu được chỉ định (db) với trình điều khiển (trình điều khiển) được cấu hình và trả về một xử lý cho cơ sở dữ liệu BioSQL (máy chủ). Biopython hỗ trợ cơ sở dữ liệu sqlite, mysql, postgresql và oracle.

Line 6-10- Phương thức load_database_sql tải sql từ tệp bên ngoài và thực thi nó. phương thức cam kết thực hiện giao dịch. Chúng ta có thể bỏ qua bước này vì chúng ta đã tạo cơ sở dữ liệu bằng lược đồ.

Line 12 - Phương thức new_database tạo cơ sở dữ liệu ảo mới, lan và trả về một db xử lý để thực thi lệnh đối với cơ sở dữ liệu lan.

Line 13- load method tải các mục trình tự (SeqRecord có thể lặp lại) vào cơ sở dữ liệu lan. SqlIO.parse phân tích cú pháp cơ sở dữ liệu GenBank và trả về tất cả các chuỗi trong đó dưới dạng SeqRecord có thể lặp lại. Tham số thứ hai (True) của phương thức tải hướng dẫn nó tìm nạp các chi tiết phân loại của dữ liệu trình tự từ trang web nổ NCBI, nếu nó chưa có sẵn trong hệ thống.

Line 14 - cam kết cam kết giao dịch.

Line 15 - Close đóng kết nối cơ sở dữ liệu và hủy bỏ xử lý máy chủ.

Tìm nạp dữ liệu trình tự

Hãy để chúng tôi tìm nạp một chuỗi với số nhận dạng, 2765658 từ cơ sở dữ liệu phong lan như bên dưới -

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

Ở đây, máy chủ ["Orchid"] trả về xử lý để tìm nạp dữ liệu từ cơ sở dữ liệu ảo. lookup phương pháp cung cấp một tùy chọn để chọn trình tự dựa trên tiêu chí và chúng tôi đã chọn trình tự có số nhận dạng, 2765658. lookuptrả về thông tin trình tự dưới dạng SeqRecordobject. Vì chúng tôi đã biết cách làm việc với SeqRecord`, nên việc lấy dữ liệu từ nó rất dễ dàng.

Xóa cơ sở dữ liệu

Việc xóa cơ sở dữ liệu đơn giản như gọi phương thức remove_database với tên cơ sở dữ liệu thích hợp và sau đó cam kết nó như được chỉ định bên dưới:

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