PubMed mewakili lebih dari 28 juta kutipan (abstrak dan judul) literatur biomedis dari jurnal sains kehidupan, buku online, dan MEDLINE. Kutipan juga dapat mencakup teks lengkap artikel. Permintaan khas pada
senyawa alami diabetes tipe 2 yang dipublikasikan
Pubchem - database lebih dari 100 juta senyawa kimia dan 236 juta zat. Juga dalam database adalah hasil bioaktivitas dari 1,25 juta senyawa (misalnya, aktivitas senyawa melawan kanker atau penghambatan gen tertentu). Saat ini, sekitar 9 juta senyawa kimia organik (zat kompleks) diketahui. Bahan kimia anorganik bisa sangat banyak - mulai dari 10 ** 18
Pada artikel ini, saya akan memberikan contoh penyusunan daftar
gen yang bertanggung jawab untuk prognosis buruk untuk kelangsungan hidup kanker dan
kode pencarian untuk senyawa organik dan jumlah mereka di antara semua molekul kimia dari basis PubChem. Tidak akan ada pembelajaran mesin dalam artikel ini (pembelajaran mesin akan diperlukan dalam artikel berikutnya tentang biomarker diabetes, menentukan usia seseorang dengan ekspresi RNA, skrining untuk zat anti-kanker).
Untuk melanjutkan, kami akan menginstal paket python Biopython dan pubchempy yang diperlukan.
sudo conda install biopython pip install pubchempy
PubMed
Kami akan menambang gen untuk ekspresi berlebih dan ekspresi kurang dalam kombinasi dengan prognosis kanker yang buruk - ini adalah seperti apa judul yang umum, permintaan untuk dipublikasikan dan gen target:
('Ekspresi DEK yang tinggi memprediksi prognosis adenokarsinoma lambung yang buruk.', 'Prognosis buruk DEK', 'DEK', 277, 15)
Mengapa ini diperlukan - efek farmakologis dari molekul dan kombinasinya pada target yang berhubungan dengan prognosis kanker yang buruk dapat dihitung dari gen. (Misalnya, berdasarkan pubchem atau LINCS).
Kami mengunggah file dengan nama gen (sekitar 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')
Untuk permintaan ke pubmed, Anda harus menunjukkan email Anda:
from Bio import Entrez from Bio import Medline MAX_COUNT = 100 Entrez.email = '*@yandex.ru' articles=[];genes_cancer_poor=[];genes_cancer_poor1=[];
Pertanyaan dan pemrosesan hasil:
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);
Menemukan kata kunci dalam teks judul:
for i in range(len(fer)): gene1=fer[i].find(gene) gene2=fer[i].find(genefullname)
yang kami periksa urutannya dalam judul dan untuk kehadiran frasa yang paling umum.
if (gene1!=-1)or(gene2!=-1):
Hasilnya, kami mendapatkan beberapa daftar: gen dengan ekspresi rendah dan tinggi dengan prognosis kanker yang buruk.
Secara total, ada 913 artikel dengan entri kata kunci dan frasa target.
PubChem
Basis data ini menyediakan dua cara untuk mengakses informasinya:
melalui REST API dalam format json di mana permintaannya terlihat seperti ini:
https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2516/description/jsonAdalah penting bahwa permintaan melalui jalur ini tidak boleh lebih dari 5 per detik, tetapi sejauh ini saya belum memeriksa batasnya, mereka harus menyimpan proxy.
Dan melalui perpustakaan pubchempy:
import pubchempy as pcp c = pcp.Compound.from_cid(5090) c.canonical_smiles
Paket API PUG REST yang diperlukan:
import re import urllib, json, time import numpy as np
Fungsi yang menghapus teks dari tag HTML:
def cleanhtml(raw_html): cleanr = re.compile('<.*?>') cleantext = re.sub(cleanr, '', raw_html) return cleantext
Dalam kode berikut, kami akan membuka deskripsi molekul dalam bahasa Inggris dari 1 hingga 100.000 angka di pubchem dan mencari petunjuk bahwa molekul ini bersifat organik (dari tanaman hewan atau sebagai bagian dari minuman), sementara itu tidak beracun atau karsinogenik.
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='<')
Untuk mencari referensi dalam teks instalasi, gunakan .find ('plant'). Pada akhirnya, simpan file dengan senyawa organik yang dihasilkan dan jumlahnya di PubChem.
β
Github