PubMed repräsentiert über 28 Millionen Zitate (Abstracts und Titel) biomedizinischer Literatur aus Life-Science-Zeitschriften, Online-Büchern und MEDLINE. Das Zitieren kann auch den vollständigen Text von Artikeln enthalten. Typische Abfrage in Pubmed -
Typ 2 Diabetes natürliche VerbindungPubchem - eine Datenbank mit mehr als 100 Millionen chemischen Verbindungen und 236 Millionen Substanzen. Die Datenbank zeigt auch die Bioaktivität von 1,25 Millionen Verbindungen (zum Beispiel die Aktivität von Verbindungen gegen Krebs oder die Hemmung eines bestimmten Gens). Derzeit sind etwa 9 Millionen organische chemische Verbindungen (komplexe Substanzen) bekannt. Anorganische Chemikalien können eine große Menge sein - von 10 ** 18
In diesem Artikel werde ich Beispiele für die Zusammenstellung einer Liste von
Genen geben, die für eine schlechte Prognose für das Überleben von Krebs verantwortlich sind, sowie einen
Suchcode für organische Verbindungen und deren Anzahl unter allen chemischen Molekülen der PubChem-Base. In diesem Artikel wird kein maschinelles Lernen stattfinden (maschinelles Lernen wird im nächsten Artikel über Diabetes-Biomarker erforderlich sein, um das Alter einer Person durch RNA-Expression zu bestimmen und nach Krebs-Substanzen zu suchen).
Um fortzufahren, werden wir die erforderlichen Python-Pakete Biopython und Pubchempy installieren.
sudo conda install biopython pip install pubchempy
PubMed
Wir werden die Gene auf ihre Über- und Unterexpression in Kombination mit einer schlechten Krebsprognose untersuchen - so sieht ein typischer Titel aus, eine Anfrage nach Pubmed und das Zielgen:
('Hohe Expression von DEK sagt schlechte Prognose des Magenadenokarzinoms voraus.', 'DEK schlechte Prognose', 'DEK', 277, 15)
Warum dies notwendig ist - Die pharmakologische Wirkung von Molekülen und ihre Kombinationen auf Ziele, die mit einer schlechten Krebsprognose verbunden sind, können aus den Genen berechnet werden. (Zum Beispiel basierend auf Pubchem oder LINCS).
Wir laden Dateien mit Gennamen hoch (ca. 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')
Für eine Anfrage an die Pubmed müssen Sie Ihre E-Mail-Adresse angeben:
from Bio import Entrez from Bio import Medline MAX_COUNT = 100 Entrez.email = '*@yandex.ru' articles=[];genes_cancer_poor=[];genes_cancer_poor1=[];
Abfragen und Verarbeitung von Ergebnissen:
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);
Suchen von Schlüsselwörtern im Text des Titels:
for i in range(len(fer)): gene1=fer[i].find(gene) gene2=fer[i].find(genefullname)
die wir auf Reihenfolge im Titel und auf das Vorhandensein der häufigsten Sätze überprüfen.
if (gene1!=-1)or(gene2!=-1):
Als Ergebnis erhalten wir mehrere Listen: Gene mit niedriger und hoher Expression mit einer schlechten Krebsprognose.
Insgesamt gab es 913 Artikel mit der Eingabe von Schlüsselwörtern und Zielphrasen.
PubChem
Diese Datenbank bietet zwei Möglichkeiten, auf ihre Informationen zuzugreifen:
über die REST-API im JSON-Format, wobei die Anforderung folgendermaßen aussieht:
https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2516/description/jsonEs ist wichtig, dass Anforderungen über diesen Pfad nicht mehr als 5 pro Sekunde betragen dürfen, aber bisher habe ich die Grenzwerte nicht überprüft. Sie sollten die Proxys speichern.
Und durch die Pubchemie-Bibliothek:
import pubchempy as pcp c = pcp.Compound.from_cid(5090) c.canonical_smiles
Erforderliche PUG REST API-Pakete importieren:
import re import urllib, json, time import numpy as np
Funktion zum Löschen von Text aus HTML-Tags:
def cleanhtml(raw_html): cleanr = re.compile('<.*?>') cleantext = re.sub(cleanr, '', raw_html) return cleantext
Im folgenden Code werden wir eine englischsprachige Beschreibung von Molekülen mit 1 bis 100.000 Zahlen in der Pubchemie öffnen und nach Hinweisen suchen, dass dieses Molekül organischer Natur ist (aus einer tierischen Pflanze oder als Teil eines Getränks), während es weder toxisch noch krebserregend ist.
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='<')
Verwenden Sie .find ('plant'), um im Text der Anlage nach Referenzen zu suchen. Speichern Sie am Ende die Datei mit den resultierenden organischen Verbindungen und ihren Nummern in PubChem.
→
Github