يمثل
PubMed أكثر من 28 مليون استشهاد (ملخصات وعناوين) للأدب الطبي الحيوي من مجلات علوم الحياة والكتب عبر الإنترنت و MEDLINE. قد يتضمن الاقتباس أيضًا النص الكامل للمقالات. استعلام نموذجي في
مركب السكري الطبيعي من النوع 2 السكريPubchem - قاعدة بيانات لأكثر من 100 مليون مركب كيميائي و 236 مليون مادة. توضح قاعدة البيانات أيضًا النشاط الحيوي لـ 1.25 مليون مركب (على سبيل المثال ، نشاط المركبات ضد السرطان أو تثبيط جين معين). في الوقت الحالي ، يُعرف حوالي 9 ملايين مركب كيميائي عضوي (مواد معقدة). يمكن أن تكون المواد الكيميائية غير العضوية كمية كبيرة - من 10 ** 18
في هذه المقالة ، سأعطي أمثلة على تجميع قائمة
الجينات المسؤولة عن سوء التشخيص لسرطان السرطان وشفرة البحث عن المركبات العضوية وأعدادها بين جميع الجزيئات الكيميائية لقاعدة PubChem. لن يكون هناك تعلُم آلي في هذه المقالة (ستكون هناك حاجة إلى تعلُم الآلة في المقالة التالية عن المؤشرات الحيوية لمرض السكري ، وتحديد عمر الشخص من خلال التعبير عن الحمض النووي الريبوزي ، وفحص المواد المضادة للسرطان).
من أجل الاستمرار ، سنقوم بتثبيت حزم بايثون اللازمة Biopython و pubchempy.
sudo conda install biopython pip install pubchempy
PubMed
سنقوم بالتعدين في الجينات بسبب الإفراط في التعبير وقلة التعبير بالاشتراك مع سوء تشخيص السرطان - هذا هو ما يبدو عليه العنوان النموذجي ، وطلب الجين المستهدف:
("التعبير المرتفع عن DEK يتنبأ بسوء التشخيص لسرطان غدي معدي." ، "DEK سوء التشخيص" ، "DEK" ، 277 ، 15)
لماذا هذا ضروري - يمكن حساب التأثير الدوائي للجزيئات ومجموعاتها على الأهداف المرتبطة بسوء تشخيص السرطان من الجينات. (على سبيل المثال ، استنادًا إلى pubchem أو LINCS).
نقوم بتحميل الملفات بأسماء جينية (حوالي 12000):
جيثب 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')
بالنسبة إلى الطلب المنشور ، يجب أن تشير إلى بريدك الإلكتروني:
from Bio import Entrez from Bio import Medline MAX_COUNT = 100 Entrez.email = '*@yandex.ru' articles=[];genes_cancer_poor=[];genes_cancer_poor1=[];
الاستفسارات ومعالجة النتائج:
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);
البحث عن الكلمات الأساسية في نص العنوان:
for i in range(len(fer)): gene1=fer[i].find(gene) gene2=fer[i].find(genefullname)
الذي نتحقق من وجوده في العنوان ووجود العبارات الأكثر شيوعًا.
if (gene1!=-1)or(gene2!=-1):
ونتيجة لذلك ، نحصل على عدة قوائم: جينات ذات تعبير منخفض وعالي مع تشخيص سيئ للسرطان.
في المجموع ، كان هناك 913 مقالة مع إدخال كل من الكلمات الرئيسية والعبارات المستهدفة.
PubChem
توفر قاعدة البيانات هذه طريقتين للوصول إلى معلوماتها: من
خلال REST API بتنسيق json حيث يبدو الطلب كما يلي:
https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2516/description/jsonمن المهم أن الطلبات من خلال هذا المسار لا يمكن أن تكون أكثر من 5 في الثانية ، ولكن حتى الآن لم أتحقق من الحدود ، يجب عليهم حفظ البروكسيات.
ومن خلال مكتبة pubchempy:
import pubchempy as pcp c = pcp.Compound.from_cid(5090) c.canonical_smiles
استيراد حزم API PUG REST المطلوبة:
import re import urllib, json, time import numpy as np
الوظيفة التي تمسح النص من علامات HTML:
def cleanhtml(raw_html): cleanr = re.compile('<.*?>') cleantext = re.sub(cleanr, '', raw_html) return cleantext
في الكود التالي ، سنقوم بفتح وصف باللغة الإنجليزية للجزيئات من 1 إلى 100000 رقم في Pubchem ونبحث عن تلميحات بأن هذا الجزيء عضوي في الطبيعة (من نبات حيواني أو كجزء من مشروب) ، في حين أنه ليس سامًا ولا مسرطنًا.
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='<')
للبحث عن مراجع في نص النبات ، استخدم .find ('plant'). في النهاية ، احفظ الملف بالمركبات العضوية الناتجة وأرقامها في PubChem.
→
جيثب