Entrez — это онлайновая поисковая система, предоставляемая NCBI. Он обеспечивает доступ почти ко всем известным базам данных молекулярной биологии с помощью встроенного глобального запроса, поддерживающего логические операторы и поиск по полю. Он возвращает результаты из всех баз данных с информацией, такой как количество обращений к каждой базе данных, записи со ссылками на исходную базу данных и т. Д.
Некоторые из популярных баз данных, к которым можно получить доступ через Entrez, перечислены ниже —
- Pubmed
- Изданный Центральный
- Нуклеотид (база данных последовательностей GenBank)
- Белок (база данных последовательностей)
- Геном (База данных всего генома)
- Структура (трехмерная макромолекулярная структура)
- Таксономия (Организмы в GenBank)
- SNP (однонуклеотидный полиморфизм)
- UniGene (Геноориентированные кластеры транскрипционных последовательностей)
- CDD (база данных по консервативным белковым доменам)
- 3D Домены (Домены от Entrez Structure)
В дополнение к вышеупомянутым базам данных Entrez предоставляет гораздо больше баз данных для выполнения поиска по полю.
Biopython предоставляет специальный модуль для Entrez Bio.Entrez для доступа к базе данных Entrez. Давайте узнаем, как получить доступ к Entrez с помощью Biopython в этой главе —
Шаги соединения с базой данных
Чтобы добавить функции Entrez, импортируйте следующий модуль —
>>> from Bio import Entrez
Затем установите свой адрес электронной почты, чтобы определить, кто связан с кодом, приведенным ниже —
>>> Entrez.email = '<youremail>'
Затем установите параметр инструмента Entrez и по умолчанию это Biopython.
>>> Entrez.tool = 'Demoscript'
Теперь вызовите функцию einfo, чтобы найти счетчик терминов индекса, последнее обновление и доступные ссылки для каждой базы данных, как определено ниже —
>>> info = Entrez.einfo()
Метод einfo возвращает объект, который обеспечивает доступ к информации через метод read, как показано ниже —
>>> 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>
Данные представлены в формате XML, и для получения данных в виде объекта python используйте метод Entrez.read, как только вызывается метод Entrez.einfo () —
>>> info = Entrez.einfo() >>> record = Entrez.read(info)
Здесь record — это словарь, который имеет один ключ, DbList, как показано ниже —
>>> record.keys() [u'DbList']
Доступ к ключу DbList возвращает список имен баз данных, показанный ниже —
>>> 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'] >>>
По сути, модуль Entrez анализирует XML, возвращаемый поисковой системой Entrez, и предоставляет его в виде словаря и списков Python.
База данных поиска
Для поиска в любой из баз данных Entrez мы можем использовать модуль Bio.Entrez.esearch (). Это определено ниже —
>>> 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 = {}) >>>
Если вы назначите неправильный БД, то он возвращает
>>> 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 = {})
Если вы хотите искать по базе данных, то вы можете использовать Entrez.egquery . Это похоже на Entrez.esearch за исключением того, что достаточно указать ключевое слово и пропустить параметр базы данных.
>>>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
Fetch Records
Enterz предоставляет специальный метод efetch для поиска и загрузки полной информации о записи из Entrez. Рассмотрим следующий простой пример —
>>> handle = Entrez.efetch( db = "nucleotide", id = "EU490707", rettype = "fasta")
Теперь мы можем просто читать записи, используя объект SeqIO