Biopython - Cơ sở dữ liệu Entrez
Entrezlà một hệ thống tìm kiếm trực tuyến do NCBI cung cấp. Nó cung cấp quyền truy cập vào gần như tất cả các cơ sở dữ liệu sinh học phân tử đã biết với một truy vấn toàn cầu tích hợp hỗ trợ các toán tử Boolean và tìm kiếm thực địa. Nó trả về kết quả từ tất cả các cơ sở dữ liệu với thông tin như số lần truy cập từ mỗi cơ sở dữ liệu, các bản ghi có liên kết đến cơ sở dữ liệu gốc, v.v.
Một số cơ sở dữ liệu phổ biến có thể được truy cập thông qua Entrez được liệt kê dưới đây:
- Pubmed
- Pubmed Central
- Nucleotide (Cơ sở dữ liệu trình tự GenBank)
- Protein (Cơ sở dữ liệu trình tự)
- Bộ gen (Toàn bộ cơ sở dữ liệu bộ gen)
- Cấu trúc (Cấu trúc cao phân tử ba chiều)
- Phân loại học (Sinh vật trong Ngân hàng gen)
- SNP (Đa hình Nucleotide Đơn)
- UniGene (Cụm chuỗi phiên mã được định hướng chung)
- CDD (Cơ sở dữ liệu tên miền protein được bảo tồn)
- Miền 3D (Miền từ Cấu trúc Entrez)
Ngoài các cơ sở dữ liệu trên, Entrez cung cấp nhiều cơ sở dữ liệu khác để thực hiện việc tìm kiếm thực địa.
Biopython cung cấp một mô-đun cụ thể của Entrez, Bio.Entrez để truy cập cơ sở dữ liệu Entrez. Hãy để chúng tôi tìm hiểu cách truy cập Entrez bằng Biopython trong chương này -
Các bước kết nối cơ sở dữ liệu
Để thêm các tính năng của Entrez, hãy nhập mô-đun sau:
>>> from Bio import Entrez
Tiếp theo, đặt email của bạn để xác định ai được kết nối với mã được cung cấp bên dưới -
>>> Entrez.email = '<youremail>'
Sau đó, đặt tham số công cụ Entrez và theo mặc định, nó là Biopython.
>>> Entrez.tool = 'Demoscript'
Hiện nay, call einfo function to find index term counts, last update, and available links for each database như được định nghĩa bên dưới -
>>> info = Entrez.einfo()
Phương thức einfo trả về một đối tượng, đối tượng này cung cấp quyền truy cập vào thông tin thông qua phương thức đọc của nó như được hiển thị bên dưới:
>>> data = info.read()
>>> print(data)
<?xml version = "1.0" encoding = "UTF-8" ?>
<!DOCTYPE eInfoResult PUBLIC "-//NLM//DTD einfo 20130322//EN"
"https://eutils.ncbi.nlm.nih.gov/eutils/dtd/20130322/einfo.dtd">
<eInfoResult>
<DbList>
<DbName>pubmed</DbName>
<DbName>protein</DbName>
<DbName>nuccore</DbName>
<DbName>ipg</DbName>
<DbName>nucleotide</DbName>
<DbName>nucgss</DbName>
<DbName>nucest</DbName>
<DbName>structure</DbName>
<DbName>sparcle</DbName>
<DbName>genome</DbName>
<DbName>annotinfo</DbName>
<DbName>assembly</DbName>
<DbName>bioproject</DbName>
<DbName>biosample</DbName>
<DbName>blastdbinfo</DbName>
<DbName>books</DbName>
<DbName>cdd</DbName>
<DbName>clinvar</DbName>
<DbName>clone</DbName>
<DbName>gap</DbName>
<DbName>gapplus</DbName>
<DbName>grasp</DbName>
<DbName>dbvar</DbName>
<DbName>gene</DbName>
<DbName>gds</DbName>
<DbName>geoprofiles</DbName>
<DbName>homologene</DbName>
<DbName>medgen</DbName>
<DbName>mesh</DbName>
<DbName>ncbisearch</DbName>
<DbName>nlmcatalog</DbName>
<DbName>omim</DbName>
<DbName>orgtrack</DbName>
<DbName>pmc</DbName>
<DbName>popset</DbName>
<DbName>probe</DbName>
<DbName>proteinclusters</DbName>
<DbName>pcassay</DbName>
<DbName>biosystems</DbName>
<DbName>pccompound</DbName>
<DbName>pcsubstance</DbName>
<DbName>pubmedhealth</DbName>
<DbName>seqannot</DbName>
<DbName>snp</DbName>
<DbName>sra</DbName>
<DbName>taxonomy</DbName>
<DbName>biocollections</DbName>
<DbName>unigene</DbName>
<DbName>gencoll</DbName>
<DbName>gtr</DbName>
</DbList>
</eInfoResult>
Dữ liệu ở định dạng XML và để lấy dữ liệu dưới dạng đối tượng python, hãy sử dụng Entrez.read phương pháp càng sớm càng tốt Entrez.einfo() phương thức được gọi -
>>> info = Entrez.einfo()
>>> record = Entrez.read(info)
Ở đây, bản ghi là một từ điển có một khóa, DbList như hình dưới đây -
>>> record.keys()
[u'DbList']
Truy cập vào khóa DbList trả về danh sách các tên cơ sở dữ liệu được hiển thị bên dưới:
>>> record[u'DbList']
['pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', 'nucgss',
'nucest', 'structure', 'sparcle', 'genome', 'annotinfo', 'assembly',
'bioproject', 'biosample', 'blastdbinfo', 'books', 'cdd', 'clinvar',
'clone', 'gap', 'gapplus', 'grasp', 'dbvar', 'gene', 'gds', 'geoprofiles',
'homologene', 'medgen', 'mesh', 'ncbisearch', 'nlmcatalog', 'omim',
'orgtrack', 'pmc', 'popset', 'probe', 'proteinclusters', 'pcassay',
'biosystems', 'pccompound', 'pcsubstance', 'pubmedhealth', 'seqannot',
'snp', 'sra', 'taxonomy', 'biocollections', 'unigene', 'gencoll', 'gtr']
>>>
Về cơ bản, mô-đun Entrez phân tích cú pháp XML do hệ thống tìm kiếm Entrez trả về và cung cấp nó dưới dạng danh sách và từ điển python.
Cơ sở dữ liệu tìm kiếm
Để tìm kiếm bất kỳ trong số các cơ sở dữ liệu Entrez, chúng ta có thể sử dụng mô-đun Bio.Entrez.esearch (). Nó được định nghĩa dưới đây -
>>> info = Entrez.einfo()
>>> info = Entrez.esearch(db = "pubmed",term = "genome")
>>> record = Entrez.read(info)
>>>print(record)
DictElement({u'Count': '1146113', u'RetMax': '20', u'IdList':
['30347444', '30347404', '30347317', '30347292',
'30347286', '30347249', '30347194', '30347187',
'30347172', '30347088', '30347075', '30346992',
'30346990', '30346982', '30346980', '30346969',
'30346962', '30346954', '30346941', '30346939'],
u'TranslationStack': [DictElement({u'Count':
'927819', u'Field': 'MeSH Terms', u'Term': '"genome"[MeSH Terms]',
u'Explode': 'Y'}, attributes = {})
, DictElement({u'Count': '422712', u'Field':
'All Fields', u'Term': '"genome"[All Fields]', u'Explode': 'N'}, attributes = {}),
'OR', 'GROUP'], u'TranslationSet': [DictElement({u'To': '"genome"[MeSH Terms]
OR "genome"[All Fields]', u'From': 'genome'}, attributes = {})], u'RetStart': '0',
u'QueryTranslation': '"genome"[MeSH Terms] OR "genome"[All Fields]'},
attributes = {})
>>>
Nếu bạn gán db không chính xác thì nó sẽ trả về
>>> info = Entrez.esearch(db = "blastdbinfo",term = "books")
>>> record = Entrez.read(info)
>>> print(record)
DictElement({u'Count': '0', u'RetMax': '0', u'IdList': [],
u'WarningList': DictElement({u'OutputMessage': ['No items found.'],
u'PhraseIgnored': [], u'QuotedPhraseNotFound': []}, attributes = {}),
u'ErrorList': DictElement({u'FieldNotFound': [], u'PhraseNotFound':
['books']}, attributes = {}), u'TranslationSet': [], u'RetStart': '0',
u'QueryTranslation': '(books[All Fields])'}, attributes = {})
Nếu bạn muốn tìm kiếm trên cơ sở dữ liệu, thì bạn có thể sử dụng Entrez.egquery. Điều này tương tự nhưEntrez.esearch ngoại trừ nó là đủ để chỉ định từ khóa và bỏ qua tham số cơ sở dữ liệu.
>>>info = Entrez.egquery(term = "entrez")
>>> record = Entrez.read(info)
>>> for row in record["eGQueryResult"]:
... print(row["DbName"], row["Count"])
...
pubmed 458
pmc 12779 mesh 1
...
...
...
biosample 7
biocollections 0
Tìm nạp bản ghi
Enterz cung cấp một phương pháp đặc biệt, efetch để tìm kiếm và tải xuống toàn bộ chi tiết của một bản ghi từ Entrez. Hãy xem xét ví dụ đơn giản sau:
>>> handle = Entrez.efetch(
db = "nucleotide", id = "EU490707", rettype = "fasta")
Bây giờ, chúng ta có thể chỉ cần đọc các bản ghi bằng cách sử dụng đối tượng SeqIO
>>> record = SeqIO.read( handle, "fasta" )
>>> record
SeqRecord(seq = Seq('ATTTTTTACGAACCTGTGGAAATTTTTGGTTATGACAATAAATCTAGTTTAGTA...GAA',
SingleLetterAlphabet()), id = 'EU490707.1', name = 'EU490707.1',
description = 'EU490707.1
Selenipedium aequinoctiale maturase K (matK) gene, partial cds; chloroplast',
dbxrefs = [])