PubMed représente plus de 28 millions de citations (résumés et titres) de littérature biomédicale provenant de revues de sciences de la vie, de livres en ligne et de MEDLINE. La citation peut également inclure le texte intégral des articles. Requête typique chez pubmed -
composé naturel du diabète de type 2Pubchem - une base de données de plus de 100 millions de composés chimiques et 236 millions de substances. La base de données montre également la bioactivité de 1,25 million de composés (par exemple, l'activité des composés contre le cancer ou l'inhibition d'un gène spécifique). À l'heure actuelle, environ 9 millions de composés chimiques organiques (substances complexes) sont connus. Les produits chimiques inorganiques peuvent être énormes - de 10 ** 18
Dans cet article, je donnerai des exemples de compilation d'une liste de
gènes responsables d'un mauvais pronostic pour la survie au cancer et
le code de recherche des composés organiques et leur nombre parmi toutes les molécules chimiques de la base PubChem. Il n'y aura pas d'apprentissage automatique dans cet article (l'apprentissage automatique sera nécessaire dans le prochain article sur les biomarqueurs du diabète, la détermination de l'âge d'une personne par l'expression de l'ARN, le dépistage des substances anticancéreuses).
Pour continuer, installez les packages python nécessaires Biopython et pubchempy.
sudo conda install biopython pip install pubchempy
PubMed
Nous allons exploiter les gènes pour leur surexpression et sous-expression en combinaison avec un mauvais pronostic du cancer - voici à quoi ressemble un titre typique, une demande de publication et le gène cible:
('Une expression élevée de DEK prédit un mauvais pronostic d'adénocarcinome gastrique.', 'Mauvais pronostic DEK', 'DEK', 277, 15)
Pourquoi cela est nécessaire - l'effet pharmacologique des molécules et de leurs combinaisons sur des cibles associées à un mauvais pronostic du cancer peut être calculé à partir des gènes. (Par exemple, basé sur pubchem ou LINCS).
Nous téléchargeons des fichiers avec des noms de gènes (environ 12000):
Github import csv genes=[]; with open('/Users/andrejeremcuk/Downloads/genes.txt', 'r') as fp : reader = csv.reader(fp, delimiter='\t') for i in range(20000): genes.append(reader.next()) import time import numpy as np genesq=np.genfromtxt('/Users/andrejeremcuk/Downloads/genesq.txt',dtype='str')
Pour une demande au pubmed, vous devez indiquer votre email:
from Bio import Entrez from Bio import Medline MAX_COUNT = 100 Entrez.email = '*@yandex.ru' articles=[];genes_cancer_poor=[];genes_cancer_poor1=[];
Requêtes et traitement des résultats:
for u in range(0,len(genesq)): print u if u%100==0: np.savetxt('/Users/andrejeremcuk/Downloads/genes_cancer_poor.txt', genes_cancer_poor,fmt='%s'); np.savetxt('/Users/andrejeremcuk/Downloads/genes_cancer_poor1.txt', genes_cancer_poor1, fmt='%s') gene=genesq[u];genefullname=genes[u][2] TERM=gene+' '+'poor prognosis' try: h=Entrez.esearch(db='pubmed', retmax=MAX_COUNT, term=TERM) except: time.sleep(5);h=Entrez.esearch(db='pubmed', retmax=MAX_COUNT, term=TERM) result = Entrez.read(h) ids = result['IdList'] h = Entrez.efetch(db='pubmed', id=ids, rettype='medline', retmode='text') ret = Medline.parse(h) fer=[]; for re in ret: try: tr=re['TI']; except: tr='0'; fer.append(tr);
Recherche de mots clés dans le texte du titre:
for i in range(len(fer)): gene1=fer[i].find(gene) gene2=fer[i].find(genefullname)
dont nous vérifions l'ordre dans le titre et la présence des phrases les plus courantes.
if (gene1!=-1)or(gene2!=-1):
En conséquence, nous obtenons plusieurs listes: des gènes à expression faible et élevée avec un mauvais pronostic de cancer.
Au total, 913 articles comprenaient à la fois des mots clés et des phrases cibles.
PubChem
Cette base de données offre deux façons d'accéder à ses informations:
via l'API REST au format json où la requête ressemble à ceci:
https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2516/description/jsonIl est important que les demandes par ce chemin ne puissent pas dépasser 5 par seconde, mais pour l'instant je n'ai pas vérifié les limites, elles doivent enregistrer les proxys.
Et à travers la bibliothèque pubchempy:
import pubchempy as pcp c = pcp.Compound.from_cid(5090) c.canonical_smiles
Importez les packages API PUG REST requis:
import re import urllib, json, time import numpy as np
Fonction qui efface le texte des balises HTML:
def cleanhtml(raw_html): cleanr = re.compile('<.*?>') cleantext = re.sub(cleanr, '', raw_html) return cleantext
Dans le code suivant, nous allons ouvrir une description en anglais des molécules de 1 à 100 000 nombres dans pubchem et rechercher des indices que cette molécule est de nature organique (provenant d'une plante animale ou dans le cadre d'une boisson), alors qu'elle n'est ni toxique ni cancérigène.
natural=[]; for i in range(1,100000): url = "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/"+str(i)+"/description/json" time.sleep(0.2) try: response = urllib.urlopen(url) except: time.sleep(12);response = urllib.urlopen(url) data = json.loads(response.read()) op=0;ol=0;ot=0; try: for u in range(1,len(data['InformationList']['Information'])): soup=str(data['InformationList']['Information'][u]['Description']) soup1=cleanhtml(soup) if (soup1.find('carcinogen')!=-1)or(soup1.find('death')!=-1)or(soup1.find('damage')!=-1): break; if (soup1.find('toxic')!=-1): break; if (soup1.find(' plant')!=-1)and(op!=9)and(soup1.find('planting')==-1): natural.append((i,'plant',str(data['InformationList']['Information'][0]['Title'])));op=9; if (soup1.find(' beverages')!=-1)and(ot!=9): natural.append((i,'beverages',str(data['InformationList']['Information'][0]['Title'])));ot=9; if (soup1.find(' animal')!=-1)and(ol!=9): natural.append((i,'animal',str(data['InformationList']['Information'][0]['Title'])));ol=9; except: ii=0; if i%100==0: print i;np.savetxt('/Users/andrejeremcuk/Downloads/natural.txt', natural,fmt='%s', delimiter='<')
Pour rechercher des références dans le texte de la plante, utilisez .find ('plante'). À la fin, enregistrez le fichier avec les composés organiques résultants et leurs nombres dans PubChem.
→
Github