Skip to content

Instantly share code, notes, and snippets.

@kantale
Created February 1, 2017 10:06
Show Gist options
  • Save kantale/f147f52e455f465fdde8661ad1798064 to your computer and use it in GitHub Desktop.
Save kantale/f147f52e455f465fdde8661ad1798064 to your computer and use it in GitHub Desktop.
Εισαγωγή στον προγραμματισμό με τη γλώσσα python, Διάλεξη 10, πρόσβαση σε online βάσεις γενομικών δεδομένων
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Σημείωσεις για το μάθημα \"Προγραμματισμός σε python\"**"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Αλέξανδρος Καντεράκης [kantale@ics.forth.gr](mailto:kantale@ics.forth.gr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Διάλεξη 10η, 22 Δεκεμβρίου 2016"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Σκοπός αυτής της διάλεξης είναι η εισαγωγή σε μεθόδους για να προσπελαύνουμε υπάρχοντες online βάσεις δεδομένων οι οποίες περιέχουν γενετικές-βιολογικές πληροφορίες. \n",
"\n",
"Καταρχήν πρέπει να αναφέρουμε ότι υπάρχουν χιλιάδες τέτοιες βάσεις οι οποίες περιέχουν πληροφορίες για όλες τις μορφές των -omics data. Μία πολύ καλή λίστα βρίσκεται εδώ: https://www.oxfordjournals.org/nar/database/a/ (προφανώς και η λίστα δεν είναι πλήρης).\n",
"\n",
"Πως λοιπόν μπορούμε προγραμματιστικά να προσπελάσουμε αυτές τις βάσεις;\n",
"\n",
"### HTTP GET and POST requests\n",
"\n",
"Πριν απαντήσουμε σε αυτό πρέπει να πούμε κάποια βασικά στοιχεία για το [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) πρωτόκολλο. Το HTTP είναι ένα πρωτόκολλο που καθορίζει πως δύο υπολογιστές μπορούν να επικοινωνήσουν ώστε ο ένας να \"πάρει\" κάποια πληροφορία από τον άλλο. Αυτή η \"πληροφορία\" είναι συνήθως μία HTML σελίδα, αλλά μπορεί να είναι και οποιαδίποτε άλλη μορφή πληροφορίας. Μία πηγή πληροφορίας ορίζεται σύμφωνα με το HTTP ως ένα URL ή αλλιώς ένα link. π.χ: http://bioinfo-grad.gr/eclass/. \n",
"\n",
"Ένας υπολογιστής που \"ζητάει\" πληροφορία συνήθως αναφέρεται ως \"client\" ενώ ένας υπολογιστής που μπορεί να τη δώσει ονομάζεται ως server. Ένας client για να \"ζητήσει\" πληροφορία από τον \"server\" πρέπει να ξέρει το URL του server. Στη συνέχεια εκτελεί ένα \"request\" (υποθέτω \"αίτημα\" στα ελληνικά), προς τον server και του δηλώνει ποια είναι η μορφή της πληροφορίας που θέλει. Ο server αποφασίζει αν την έχει (και αν πρέπει να τη δώσει) την πληροφορία και ανάλογα την επιστρέφει στον client (κάτι σαν το ΚΕΠ..). Σε περίπτωση που κάτι δεν πάει καλά, ο server μπορεί να ενημερώσει τον client τι λάθος έγινε επιστρέφοντας έναν [κωδικό](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes). Αν ο κωδικός είναι το 200, τότε δεν συνέβει κανένα λάθος. Όταν ένας server \"απαντάει\" σε ένα request, τότε λέμε ότι έστειλε ένα responce. \n",
"\n",
"Όταν ο client επικοινωνεί με τον server του δηλώνει: Τι θέλει, και σε ποια μορφή το θέλει.\n",
"\n",
"Σχετικά με το \"τι θέλω\" υπάρχουν ΔΥΟ βασικοί τρόποι δήλωσης: οι [\"GET\" και \"POST\"](http://www.w3schools.com/tags/ref_httpmethods.asp).\n",
"\n",
"H GET είναι ένας τρόπος να δηλώσεις τι θέλεις από έναν server, κωδικοποιώντας το αίτημα σου πάνω στο link. Αν υποθέσουμε π.χ. ότι θέλεις πληροροφίες για το προιόν με id=123 και το οποίο ανοίκει στη κατηγορία category=678 τότε το link που εκτελεί ένα GET request θα έχει τη μορφή: http://www.example.com/index.html?id=123&category=678. Για παράδειγμα αν κοιτάξουμε αυτό το εντελώς τυχαίο link: http://news.in.gr/greece/article/?aid=1500029633 θα δούμε ότι είναι ένα GET request στη σελίδα news.in.gr/greece/article όπου ζητάει το \"resource\" το οποίο έχει aid=1500029633. Το GET request είναι ο κύριος τρόπος επικοινωνίας των browsers με τους web servers. \n",
"\n",
"Τα GET requests έχουν δύο μειονεκτήματα:\n",
"* Αυτό που ζητάει ο client \"φαίνεται\" πάνω στο link. Γενικότερα τα links δεν θεωρούνται \"ασφαλή\" πληροφορία και είναι προσβάσιμα από πολλούς \"ενδιάμεσους\". Αν για παράδειγμα ζητάμε κάποια δεδομένα με βάση προσωπικές μας πληροφορίες (π.χ. τηλέφωνο) δεν είναι καλή ιδέα να φαίνεται αυτό στο link. \n",
"* Δεδομένου ότι αυτό που ζητάμε βρίσκεται πάνω στο link. Αν αυτό που ζητάμε είναι πολύπλοκο, τότε το link μπορεί να γίνει τεράστιο και μη διαχειρίσιμο. Για παράδειγμα να ένα άσχημο link με πολλά GET πεδία: https://www.amazon.com/Data-Visualization-Python-JavaScript-Transform/dp/1491920513/ref=s9_cartx_gw_g14_i5_r?_encoding=UTF8&fpl=fresh&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=&pf_rd_r=WRMBPSF9K3H62TEWG5DW&pf_rd_t=36701&pf_rd_p=a6aaf593-1ba4-4f4e-bdcc-0febe090b8ed&pf_rd_i=desktop \n",
"\n",
"O δεύτερος τρόπος επικοινωνίας του client με τον server είναι μεσώ του POST request. Όταν κάνουμε POST βάζουμε μέσα σε ένα ειδικό πεδίο τα δεδομένα μας και το HTTP πρωτόκολο στέλνει αυτά τα δεδομένα στον server χωρίς να φαίνονται στο link. Π.χ. όταν κάνετε login στο site: http://bioinfo-grad.gr/eclass/ βάζετε το username και το password σας. Στη συνέχεια ο browser στέλνει αυτά τα δεδομένα στον server για επιβεβαίωση. Αυτά τα δεδομένα ΔΕΝ πρέπει προφανώς να φαίνονται στο link. Πως γίνεται αυτό; Αν κοιτάξετε τον κώδικα της σελίδας (π.χ. από Firefox μπορείτε να το δείτε επιλέγοντας Tools -> Web Developer -> Page Source). Θα δείτε σε ένα σημείο να γράφει:\n",
"\n",
"```html\n",
"<h2>Σύνδεση χρήστη</h2>\n",
"<div><form action='http://bioinfo-grad.gr/eclass/' method='post'>\n",
"```\n",
"\n",
"Δηλαδή λέει: τα δεδομένα που βάζουμε σε αυτή τη φόρμα (form) θέλω να στέλνονται στον server μέσω POST request.\n",
"\n",
"Ένα τελευταίο σημείο για το HTTP είναι οι [headers](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields). Τα headers (επικεφαλίδες;;) είναι πεδία με προ-καθορισμένα ονόματα στα οποία μπορούμε να βάλουμε πληροφορίες που διευκολύνουν τον server να διεκπεραιώσει το request μας. Π.χ. αν βάλουμε στο header με το όνομα \"Content-Type\" τη τιμή \"application/json\", τότε λέμε στον server ότι τα δεδομένα που του στέλνουμε μέσω POST είναι σε μορφή JSON. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### python requests package\n",
"\n",
"Ωραία όλα αυτά, αλλά πως τα κάνουμε μέσω python; Παρόλο που η python έχει βιβλιοθήκες για να κάνουμε GET και POST, θα χρησιμοποιήσουμε ένα εξωτερικό πακέτο το οποίο είναι εξαιρετικά εύχρηστο. Αυτό το πακέτο είναι το requests: http://docs.python-requests.org/en/master/ . Για να το εγκαταστίσετε τρέξτε:\n",
"\n",
"```bash\n",
"pip install requests\n",
"```\n",
"\n",
"**ΠΡΟΣΟΧΗ!** πρέπει να βεβαιωθείτε ότι το πρόγραμμα pip βρίσκεται στο ίδιο σημείο που είναι και η python που τρέχετε!.\n",
"Για παράδειγμα:\n",
"\n",
"```bash\n",
"$ which pip\n",
"/Users/alexandroskanterakis/anaconda3/bin/pip\n",
"$ which python\n",
"/Users/alexandroskanterakis/anaconda3/bin/python\n",
"```\n",
"\n",
"Βλέπουμε δηλαδή ότι το pip και η python που τρέχω είναι στο ίδιο σημείο. Διαφορετικά θα πρέπει να γράψετε κάτι σαν αυτό:\n",
"\n",
"```bash\n",
"/Directory/where/your/python/is/pip install requests \n",
"```\n",
"\n",
"Για να βεβαιωθείτε ότι έχει εγκατασταθεί σωστά θα πρέπει να μπορείτε να κάνετε import αυτό το πακέτο χωρίς πρόβλημα:\n",
"```bash\n",
"$ python\n",
"Python 3.5.2 |Anaconda 4.1.1 (x86_64)| (default, Jul 2 2016, 17:52:12) \n",
"[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin\n",
"Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n",
">>> import requests\n",
">>> \n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Προσπελαύνοντας την ENSEMBL\n",
"\n",
"Η [ENSEMBL](http://www.ensembl.org/index.html) είναι ένα από τα πιο σημαντικά portals με διάφορες γενομικές πληροφορίες για πολλούς οργανισμούς. Η ENSEMBL έχει ένα API ([Application programming interface](https://en.wikipedia.org/wiki/Application_programming_interface)) το οποίο είναι ένα σύνολο από οδηγίες προς προγραμματιστές για να προσπελαύνουν μία υπηρεσία. Το API της ENSEMBL περιγράφεται εδώ: http://rest.ensembl.org/ \n",
"\n",
"Παρατηρήστε ότι κάποιες υπηρεσίες είναι προσβάσιμες μέσω GET και κάποιες μέσω POST.\n",
"\n",
"Σαν παράδειγμα θα χρησιμοποιήσουμε το API της ENSEMBL το οποίο αναφέρεται στο [Variant Effect Predictor](http://www.ensembl.org/info/docs/tools/vep/index.html). Το Variant Effect Predictor μας δίνει διάφορες πληροφορίες σχετικά με το downstream effect και clinical significance ενώς variant. Αλλα πριν κάνουμε αυτό ας δούμε με ποιους τρόπους κωδικοποιούμε έναν variant. \n",
"\n",
"Γενικότερα υπάρχουν δύο τρόποι. \n",
"\n",
"Αν ο variant είναι γνωστός τότε κοιτάμε αν έχει καταχωρηθεί στη [dbSNP](https://www.ncbi.nlm.nih.gov/projects/SNP/). Σε αυτή τη περίπτωση ο variant θα έχει εναν κωδικό με το φορμάτ: rsXXXXXX. πχ: rs56116432. \n",
"\n",
"Αν ο variant δεν είναι γνωστός και δεν υπάρχει στη dbSNP τότε μπορούμε να τον περιγράψουμε μέσω του [HGVS](http://varnomen.hgvs.org/recommendations/general/) φορμάτ. Η περιγραφή αυτή είναι αρκετά πολύπλοκη και ξεφεύγει λίγο από τους σκοπούς αυτής της διάλεξης. Απλά θα πούμε ότι μία από τις πολλές HGVS μορφές ενώς variant είναι το:\n",
"\n",
"{ΧΡΩΜΟΣΩΜΑ}:g.{ΘΕΣΗ}{REFERENCE}>{ALTERNATIVE}\n",
"\n",
"π.χ.:\n",
"\n",
"9:g.22125504G>C \n",
"\n",
"Δηλαδή στο χρωμόσωμα 9 στη θέση 22125504 αντί για G που είναι το reference υπάρχει C.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### GET request για dbSNP variant\n",
"\n",
"Για να πάρουμε πληροφορίες από το Variant Effect Predictor για ένα dbSNP variant, η ENSEMBL δίνει αυτό το API: http://rest.ensembl.org/documentation/info/vep_id_get Μπορούμε να κάνουμε ένα request σε αυτό το API ως εξής:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import requests\n",
"\n",
"# Το URL που πρέπει να χρησιμοποιήσουμε \n",
"# υπάρχει στη σελίδα http://rest.ensembl.org/documentation/info/vep_id_get \n",
"# Επίσης Αφού είναι GET Request βάζουμε τη πληροφορία που θέλουμε στο URL:\n",
"url = 'http://rest.ensembl.org/vep/human/id/rs56116432?'\n",
"headers = { \"Content-Type\" : \"application/json\"}\n",
"\n",
"# Κάνουμε το GET request\n",
"r = requests.get(url, headers=headers)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Στη συνέχεια κοιτάμαι αν όλα πήγαν οκ:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n"
]
}
],
"source": [
"print (r.ok) # Στην ουσία εδώ κοιτάει αν το response έχει κωδικό 200"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Παίρνουμε τα JSON δεδομένα:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{'transcript_consequences': [{'biotype': 'processed_transcript', 'gene_id': 'ENSG00000175164', 'cdna_end': 700, 'hgnc_id': 'HGNC:79', 'gene_symbol_source': 'HGNC', 'cdna_start': 700, 'variant_allele': 'T', 'transcript_id': 'ENST00000453660', 'consequence_terms': ['non_coding_transcript_exon_variant', 'non_coding_transcript_variant'], 'impact': 'MODIFIER', 'strand': -1, 'gene_symbol': 'ABO'}, {'biotype': 'protein_coding', 'gene_id': 'ENSG00000175164', 'sift_score': 0, 'hgnc_id': 'HGNC:79', 'polyphen_score': 0.997, 'sift_prediction': 'deleterious', 'variant_allele': 'T', 'cds_start': 686, 'codons': 'gGc/gAc', 'transcript_id': 'ENST00000538324', 'cds_end': 686, 'polyphen_prediction': 'probably_damaging', 'impact': 'MODERATE', 'cdna_end': 711, 'gene_symbol_source': 'HGNC', 'cdna_start': 711, 'consequence_terms': ['missense_variant'], 'protein_end': 229, 'protein_start': 229, 'strand': -1, 'amino_acids': 'G/D', 'gene_symbol': 'ABO'}, {'biotype': 'protein_coding', 'gene_id': 'ENSG00000175164', 'sift_score': 0, 'hgnc_id': 'HGNC:79', 'polyphen_score': 0.997, 'sift_prediction': 'deleterious', 'variant_allele': 'T', 'cds_start': 686, 'codons': 'gGc/gAc', 'transcript_id': 'ENST00000611156', 'cds_end': 686, 'polyphen_prediction': 'probably_damaging', 'impact': 'MODERATE', 'cdna_end': 711, 'gene_symbol_source': 'HGNC', 'cdna_start': 711, 'consequence_terms': ['missense_variant'], 'protein_end': 229, 'protein_start': 229, 'strand': -1, 'amino_acids': 'G/D', 'gene_symbol': 'ABO'}], 'most_severe_consequence': 'missense_variant', 'input': 'rs56116432', 'seq_region_name': '9', 'allele_string': 'C/T', 'end': 133256042, 'assembly_name': 'GRCh38', 'colocated_variants': [{'exac_amr_maf': 0.004932, 'exac_sas_maf': 0.001639, 'exac_nfe_maf': 0.005339, 'end': 133256042, 'eas_maf': 0, 'exac_adj_allele': 'T', 'exac_eas_maf': 0, 'exac_fin_maf': 0.02601, 'exac_amr_allele': 'T', 'ea_maf': 0.003809, 'exac_oth_allele': 'T', 'minor_allele': 'T', 'sas_allele': 'T', 'amr_allele': 'T', 'exac_afr_allele': 'T', 'start': 133256042, 'ea_allele': 'T', 'allele_string': 'C/T', 'exac_eas_allele': 'T', 'afr_maf': 0, 'amr_maf': 0.0014, 'sas_maf': 0.001, 'eur_allele': 'T', 'exac_fin_allele': 'T', 'strand': 1, 'afr_allele': 'T', 'exac_maf': 0.003022, 'minor_allele_freq': 0.0026, 'seq_region_name': 9, 'exac_nfe_allele': 'T', 'exac_adj_maf': 0.004439, 'exac_afr_maf': 0.0005079, 'aa_maf': 0.0007102, 'exac_sas_allele': 'T', 'eur_maf': 0.0109, 'aa_allele': 'T', 'eas_allele': 'T', 'id': 'rs56116432', 'exac_allele': 'T', 'exac_oth_maf': 0.004926}], 'strand': 1, 'id': 'rs56116432', 'start': 133256042}, {'transcript_consequences': [{'biotype': 'protein_coding', 'gene_id': 'ENSG00000281879', 'sift_score': 0, 'hgnc_id': 'HGNC:79', 'polyphen_score': 0.997, 'sift_prediction': 'deleterious', 'variant_allele': 'T', 'cds_start': 689, 'codons': 'gGc/gAc', 'transcript_id': 'ENST00000626615', 'cds_end': 689, 'polyphen_prediction': 'probably_damaging', 'impact': 'MODERATE', 'cdna_end': 714, 'gene_symbol_source': 'HGNC', 'cdna_start': 714, 'consequence_terms': ['missense_variant'], 'protein_end': 230, 'protein_start': 230, 'strand': -1, 'amino_acids': 'G/D', 'gene_symbol': 'ABO'}], 'most_severe_consequence': 'missense_variant', 'input': 'rs56116432', 'seq_region_name': 'CHR_HG2030_PATCH', 'allele_string': 'C/T', 'end': 133256189, 'assembly_name': 'GRCh38', 'colocated_variants': [{'allele_string': 'C/T', 'seq_region_name': 'CHR_HG2030_PATCH', 'end': 133256189, 'minor_allele': 'T', 'strand': 1, 'id': 'rs56116432', 'minor_allele_freq': 0.0026, 'start': 133256189}], 'strand': 1, 'id': 'rs56116432', 'start': 133256189}]\n"
]
}
],
"source": [
"data = r.json()\n",
"print (data)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2\n"
]
}
],
"source": [
"print (len(data))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"επέστρεψε 2 εγγραφές. Ας πάρουμε την πρώτη:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'transcript_consequences': [{'biotype': 'processed_transcript', 'gene_id': 'ENSG00000175164', 'cdna_end': 700, 'hgnc_id': 'HGNC:79', 'gene_symbol_source': 'HGNC', 'cdna_start': 700, 'variant_allele': 'T', 'transcript_id': 'ENST00000453660', 'consequence_terms': ['non_coding_transcript_exon_variant', 'non_coding_transcript_variant'], 'impact': 'MODIFIER', 'strand': -1, 'gene_symbol': 'ABO'}, {'biotype': 'protein_coding', 'gene_id': 'ENSG00000175164', 'sift_score': 0, 'hgnc_id': 'HGNC:79', 'polyphen_score': 0.997, 'sift_prediction': 'deleterious', 'variant_allele': 'T', 'cds_start': 686, 'codons': 'gGc/gAc', 'transcript_id': 'ENST00000538324', 'cds_end': 686, 'polyphen_prediction': 'probably_damaging', 'impact': 'MODERATE', 'cdna_end': 711, 'gene_symbol_source': 'HGNC', 'cdna_start': 711, 'consequence_terms': ['missense_variant'], 'protein_end': 229, 'protein_start': 229, 'strand': -1, 'amino_acids': 'G/D', 'gene_symbol': 'ABO'}, {'biotype': 'protein_coding', 'gene_id': 'ENSG00000175164', 'sift_score': 0, 'hgnc_id': 'HGNC:79', 'polyphen_score': 0.997, 'sift_prediction': 'deleterious', 'variant_allele': 'T', 'cds_start': 686, 'codons': 'gGc/gAc', 'transcript_id': 'ENST00000611156', 'cds_end': 686, 'polyphen_prediction': 'probably_damaging', 'impact': 'MODERATE', 'cdna_end': 711, 'gene_symbol_source': 'HGNC', 'cdna_start': 711, 'consequence_terms': ['missense_variant'], 'protein_end': 229, 'protein_start': 229, 'strand': -1, 'amino_acids': 'G/D', 'gene_symbol': 'ABO'}], 'most_severe_consequence': 'missense_variant', 'input': 'rs56116432', 'seq_region_name': '9', 'allele_string': 'C/T', 'end': 133256042, 'assembly_name': 'GRCh38', 'colocated_variants': [{'exac_amr_maf': 0.004932, 'exac_sas_maf': 0.001639, 'exac_nfe_maf': 0.005339, 'end': 133256042, 'eas_maf': 0, 'exac_adj_allele': 'T', 'exac_eas_maf': 0, 'exac_fin_maf': 0.02601, 'exac_amr_allele': 'T', 'ea_maf': 0.003809, 'exac_oth_allele': 'T', 'minor_allele': 'T', 'sas_allele': 'T', 'amr_allele': 'T', 'exac_afr_allele': 'T', 'start': 133256042, 'ea_allele': 'T', 'allele_string': 'C/T', 'exac_eas_allele': 'T', 'afr_maf': 0, 'amr_maf': 0.0014, 'sas_maf': 0.001, 'eur_allele': 'T', 'exac_fin_allele': 'T', 'strand': 1, 'afr_allele': 'T', 'exac_maf': 0.003022, 'minor_allele_freq': 0.0026, 'seq_region_name': 9, 'exac_nfe_allele': 'T', 'exac_adj_maf': 0.004439, 'exac_afr_maf': 0.0005079, 'aa_maf': 0.0007102, 'exac_sas_allele': 'T', 'eur_maf': 0.0109, 'aa_allele': 'T', 'eas_allele': 'T', 'id': 'rs56116432', 'exac_allele': 'T', 'exac_oth_maf': 0.004926}], 'strand': 1, 'id': 'rs56116432', 'start': 133256042}\n"
]
}
],
"source": [
"print (data[0])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n"
]
}
],
"source": [
"print (len(data[0][\"transcript_consequences\"]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Η πρώτη εγγραφή έχει consequences σε 3 transcripts. Ας πάρουμε το 2ο:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'biotype': 'protein_coding', 'gene_id': 'ENSG00000175164', 'sift_score': 0, 'hgnc_id': 'HGNC:79', 'polyphen_score': 0.997, 'sift_prediction': 'deleterious', 'variant_allele': 'T', 'cds_start': 686, 'codons': 'gGc/gAc', 'transcript_id': 'ENST00000538324', 'cds_end': 686, 'polyphen_prediction': 'probably_damaging', 'impact': 'MODERATE', 'cdna_end': 711, 'gene_symbol_source': 'HGNC', 'cdna_start': 711, 'consequence_terms': ['missense_variant'], 'protein_end': 229, 'protein_start': 229, 'strand': -1, 'amino_acids': 'G/D', 'gene_symbol': 'ABO'}\n"
]
}
],
"source": [
"print (data[0][\"transcript_consequences\"][1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ας δούμε ποιο είναι το consequence αυτού του mutation σε αυτό το transcript σύμφωνα με το [polyphen](http://genetics.bwh.harvard.edu/pph2/):"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"probably_damaging\n"
]
}
],
"source": [
"print (data[0][\"transcript_consequences\"][1][\"polyphen_prediction\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### POST request για dbSNP variant\n",
"\n",
"Θα κάνουμε τώρα το ίδιο αλλά θα χρησιμοποιήσουμε το API για POST request: http://rest.ensembl.org/documentation/info/vep_id_post "
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"url = 'http://rest.ensembl.org/vep/human/id'\n",
"\n",
"# δηλώνουμε ότι το αποτέλεσμα θέλουμε να είναι σε JSON φορματ (Accept)\n",
"headers = { \"Content-Type\" : \"application/json\", \"Accept\" : \"application/json\"} \n",
"\n",
"# Αφού είναι POST βάζουμε τα data ξεχωριστά:\n",
"data = { \"ids\" : [\"rs56116432\", \"COSM476\" ] }\n",
"\n",
"# ΠΡΟΣΟΧΗ!!!\n",
"# Τα data είναι ένα dictionary το οποίο πρέπει να το μετατρέψουμε σε JSON!\n",
"import json\n",
"data_json = json.dumps(data)\n",
"\n",
"# Κάνουμε το POST request:\n",
"r = requests.post(url, headers=headers, data=data_json)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Τσεκάρουμε ότι όλα πήγαν οκ:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n"
]
}
],
"source": [
"print (r.ok)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"παίρνουμε τα data:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{'transcript_consequences': [{'biotype': 'processed_transcript', 'gene_id': 'ENSG00000175164', 'cdna_end': 700, 'hgnc_id': 'HGNC:79', 'gene_symbol_source': 'HGNC', 'cdna_start': 700, 'variant_allele': 'T', 'transcript_id': 'ENST00000453660', 'consequence_terms': ['non_coding_transcript_exon_variant', 'non_coding_transcript_variant'], 'impact': 'MODIFIER', 'strand': -1, 'gene_symbol': 'ABO'}, {'biotype': 'protein_coding', 'gene_id': 'ENSG00000175164', 'sift_score': 0, 'hgnc_id': 'HGNC:79', 'polyphen_score': 0.997, 'sift_prediction': 'deleterious', 'variant_allele': 'T', 'cds_start': 686, 'codons': 'gGc/gAc', 'transcript_id': 'ENST00000538324', 'cds_end': 686, 'polyphen_prediction': 'probably_damaging', 'impact': 'MODERATE', 'cdna_end': 711, 'gene_symbol_source': 'HGNC', 'cdna_start': 711, 'consequence_terms': ['missense_variant'], 'protein_end': 229, 'protein_start': 229, 'strand': -1, 'amino_acids': 'G/D', 'gene_symbol': 'ABO'}, {'biotype': 'protein_coding', 'gene_id': 'ENSG00000175164', 'sift_score': 0, 'hgnc_id': 'HGNC:79', 'polyphen_score': 0.997, 'sift_prediction': 'deleterious', 'variant_allele': 'T', 'cds_start': 686, 'codons': 'gGc/gAc', 'transcript_id': 'ENST00000611156', 'cds_end': 686, 'polyphen_prediction': 'probably_damaging', 'impact': 'MODERATE', 'cdna_end': 711, 'gene_symbol_source': 'HGNC', 'cdna_start': 711, 'consequence_terms': ['missense_variant'], 'protein_end': 229, 'protein_start': 229, 'strand': -1, 'amino_acids': 'G/D', 'gene_symbol': 'ABO'}], 'most_severe_consequence': 'missense_variant', 'input': 'rs56116432', 'seq_region_name': '9', 'allele_string': 'C/T', 'end': 133256042, 'assembly_name': 'GRCh38', 'colocated_variants': [{'exac_amr_maf': 0.004932, 'exac_sas_maf': 0.001639, 'exac_nfe_maf': 0.005339, 'end': 133256042, 'eas_maf': 0, 'exac_adj_allele': 'T', 'exac_eas_maf': 0, 'exac_fin_maf': 0.02601, 'exac_amr_allele': 'T', 'ea_maf': 0.003809, 'exac_oth_allele': 'T', 'minor_allele': 'T', 'sas_allele': 'T', 'amr_allele': 'T', 'exac_afr_allele': 'T', 'start': 133256042, 'ea_allele': 'T', 'allele_string': 'C/T', 'exac_eas_allele': 'T', 'afr_maf': 0, 'amr_maf': 0.0014, 'sas_maf': 0.001, 'eur_allele': 'T', 'exac_fin_allele': 'T', 'strand': 1, 'afr_allele': 'T', 'exac_maf': 0.003022, 'minor_allele_freq': 0.0026, 'seq_region_name': 9, 'exac_nfe_allele': 'T', 'exac_adj_maf': 0.004439, 'exac_afr_maf': 0.0005079, 'aa_maf': 0.0007102, 'exac_sas_allele': 'T', 'eur_maf': 0.0109, 'aa_allele': 'T', 'eas_allele': 'T', 'id': 'rs56116432', 'exac_allele': 'T', 'exac_oth_maf': 0.004926}], 'strand': 1, 'id': 'rs56116432', 'start': 133256042}, {'transcript_consequences': [{'biotype': 'protein_coding', 'gene_id': 'ENSG00000281879', 'sift_score': 0, 'hgnc_id': 'HGNC:79', 'polyphen_score': 0.997, 'sift_prediction': 'deleterious', 'variant_allele': 'T', 'cds_start': 689, 'codons': 'gGc/gAc', 'transcript_id': 'ENST00000626615', 'cds_end': 689, 'polyphen_prediction': 'probably_damaging', 'impact': 'MODERATE', 'cdna_end': 714, 'gene_symbol_source': 'HGNC', 'cdna_start': 714, 'consequence_terms': ['missense_variant'], 'protein_end': 230, 'protein_start': 230, 'strand': -1, 'amino_acids': 'G/D', 'gene_symbol': 'ABO'}], 'most_severe_consequence': 'missense_variant', 'input': 'rs56116432', 'seq_region_name': 'CHR_HG2030_PATCH', 'allele_string': 'C/T', 'end': 133256189, 'assembly_name': 'GRCh38', 'colocated_variants': [{'allele_string': 'C/T', 'seq_region_name': 'CHR_HG2030_PATCH', 'end': 133256189, 'minor_allele': 'T', 'strand': 1, 'id': 'rs56116432', 'minor_allele_freq': 0.0026, 'start': 133256189}], 'strand': 1, 'id': 'rs56116432', 'start': 133256189}, {'most_severe_consequence': '?', 'allele_string': 'COSMIC_MUTATION', 'input': 'COSM476', 'seq_region_name': '7', 'end': 140753336, 'assembly_name': 'GRCh38', 'colocated_variants': [{'allele_string': 'HGMD_MUTATION', 'seq_region_name': 7, 'phenotype_or_disease': 1, 'strand': 1, 'id': 'CM112509', 'end': 140753336, 'start': 140753336}, {'allele_string': 'COSMIC_MUTATION', 'seq_region_name': 7, 'phenotype_or_disease': 1, 'start': 140753336, 'strand': 1, 'id': 'COSM18443', 'end': 140753336, 'somatic': 1}, {'allele_string': 'COSMIC_MUTATION', 'seq_region_name': 7, 'phenotype_or_disease': 1, 'start': 140753336, 'strand': 1, 'id': 'COSM476', 'end': 140753336, 'somatic': 1}, {'allele_string': 'COSMIC_MUTATION', 'seq_region_name': 7, 'phenotype_or_disease': 1, 'start': 140753336, 'strand': 1, 'id': 'COSM6137', 'end': 140753336, 'somatic': 1}], 'strand': 1, 'id': 'COSM476', 'start': 140753336}]\n"
]
}
],
"source": [
"data = r.json()\n",
"print (data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Είναι τα ίδια με πριν:"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"probably_damaging\n"
]
}
],
"source": [
"print (data[0][\"transcript_consequences\"][1][\"polyphen_prediction\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### GET request για HGVS variant\n",
"\n",
"H ENSEMBL μας δίνει ένα API για να πάρουμε πληροφορίες από το Variant Effect Predictor για ένα HGVS variant μέσω GET request: http://rest.ensembl.org/documentation/info/vep_hgvs_get "
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"url = 'http://rest.ensembl.org/vep/human/hgvs/9:g.22125504G>C?'\n",
"headers={ \"Content-Type\" : \"application/json\"}\n",
"\n",
"r = requests.get(url, headers=headers)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n"
]
}
],
"source": [
"print (r.ok)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data = r.json()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{'transcript_consequences': [{'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4407, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000422420'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4409, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000428597'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000577551'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4858, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000580576'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000581051'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000582072'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000584020'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000584637'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000584816'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4960, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000585267'}], 'most_severe_consequence': 'downstream_gene_variant', 'input': '9:g.22125504G>C', 'seq_region_name': '9', 'allele_string': 'G/C', 'end': 22125504, 'assembly_name': 'GRCh38', 'colocated_variants': [{'allele_string': 'G/C', 'eur_maf': 0.4722, 'amr_maf': 0.4553, 'sas_maf': 0.4908, 'eur_allele': 'C', 'end': 22125504, 'eas_maf': 0.5367, 'afr_allele': 'C', 'minor_allele': 'C', 'seq_region_name': 9, 'minor_allele_freq': 0.4181, 'strand': 1, 'pubmed': '24262325,19501493,22042884,21860704,21149552,20159871,19474294,21894447,21971053,21804106,20502693,22199011,18224312,22400124,18533027,18852197,21297524,22403240,22856518,23963167,19343170,20386740,21400687,24728607,20017983,24573017,24607648,20549515,22144573,22623978,22029572,18362232,19173706,19214202,26252781,20435227,21606135,19924713,17554300,19955471,19956433,25717410,24098343,18780302,18675980,19475673,20231156,20858905,21152093,21698238,24906238,17634449,18979498,19164808,19207022,19750184,20098575,20981302,21242481,21369780,22295058,22848412,25617895,23729007,18469204,20605023,21372283,22429504,26483964,23870195,18704761,23587283,24926413,19463184,24676469,21424681,20175863,22505696,19559344,19578366,23142796,19171343,24246088,18987759,19819472,19926059,21375403,21385355,21705410,24777168,25105296,19888323,23454037,18264662,18599798,18652946,18654002,18925945,18957718,19135198,19319159,19329499,19548844,19664850,19709660,19885677,19956784,20031540,20031580,20031606,20230275,20335276,20395598,2040077', 'sas_allele': 'C', 'phenotype_or_disease': 1, 'amr_allele': 'C', 'afr_maf': 0.2133, 'eas_allele': 'C', 'id': 'rs1333049', 'start': 22125504}], 'strand': 1, 'id': '9:g.22125504G>C', 'start': 22125504}]\n"
]
}
],
"source": [
"print (data)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n"
]
}
],
"source": [
"print (len(data))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Επέστρεψε μόνο μία εγγρφή."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"dict_keys(['transcript_consequences', 'most_severe_consequence', 'input', 'seq_region_name', 'allele_string', 'end', 'assembly_name', 'colocated_variants', 'strand', 'id', 'start'])"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data[0].keys()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ας δούμε τα transcript consequences:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[{'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4407,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000422420',\n",
" 'variant_allele': 'C'},\n",
" {'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4409,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000428597',\n",
" 'variant_allele': 'C'},\n",
" {'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4932,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000577551',\n",
" 'variant_allele': 'C'},\n",
" {'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4858,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000580576',\n",
" 'variant_allele': 'C'},\n",
" {'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4932,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000581051',\n",
" 'variant_allele': 'C'},\n",
" {'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4932,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000582072',\n",
" 'variant_allele': 'C'},\n",
" {'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4932,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000584020',\n",
" 'variant_allele': 'C'},\n",
" {'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4932,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000584637',\n",
" 'variant_allele': 'C'},\n",
" {'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4932,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000584816',\n",
" 'variant_allele': 'C'},\n",
" {'biotype': 'antisense',\n",
" 'consequence_terms': ['downstream_gene_variant'],\n",
" 'distance': 4960,\n",
" 'gene_id': 'ENSG00000240498',\n",
" 'gene_symbol': 'CDKN2B-AS1',\n",
" 'gene_symbol_source': 'HGNC',\n",
" 'hgnc_id': 'HGNC:34341',\n",
" 'impact': 'MODIFIER',\n",
" 'strand': 1,\n",
" 'transcript_id': 'ENST00000585267',\n",
" 'variant_allele': 'C'}]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data[0][\"transcript_consequences\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### POST request για HGVS variant\n",
"\n",
"Μπορούμε να κάνουμε το ίδιο, κάνοντας ένα POST request: http://rest.ensembl.org/documentation/info/vep_hgvs_post"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"url = 'http://rest.ensembl.org/vep/human/hgvs'\n",
"headers = { \"Content-Type\" : \"application/json\", \"Accept\" : \"application/json\"}\n",
"data = { \"hgvs_notations\" : [\"9:g.22125504G>C\"] } # Παρατηρείστε ότι αυτό είναι μία λίστα. \n",
" # Μπορούμε να βάλουμε (σχεδόν) όσα HGVS variants θέλουμε\n",
" \n",
"data_json = json.dumps(data)\n",
"\n",
"r = requests.post(url, headers=headers, data=data_json)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n"
]
}
],
"source": [
"print (r.ok)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{'transcript_consequences': [{'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4407, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000422420'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4409, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000428597'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000577551'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4858, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000580576'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000581051'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000582072'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000584020'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000584637'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4932, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000584816'}, {'consequence_terms': ['downstream_gene_variant'], 'impact': 'MODIFIER', 'biotype': 'antisense', 'gene_id': 'ENSG00000240498', 'hgnc_id': 'HGNC:34341', 'distance': 4960, 'gene_symbol': 'CDKN2B-AS1', 'gene_symbol_source': 'HGNC', 'strand': 1, 'variant_allele': 'C', 'transcript_id': 'ENST00000585267'}], 'most_severe_consequence': 'downstream_gene_variant', 'input': '9:g.22125504G>C', 'seq_region_name': '9', 'allele_string': 'G/C', 'end': 22125504, 'assembly_name': 'GRCh38', 'colocated_variants': [{'allele_string': 'G/C', 'eur_maf': 0.4722, 'amr_maf': 0.4553, 'sas_maf': 0.4908, 'eur_allele': 'C', 'end': 22125504, 'eas_maf': 0.5367, 'afr_allele': 'C', 'minor_allele': 'C', 'seq_region_name': 9, 'minor_allele_freq': 0.4181, 'strand': 1, 'pubmed': '24262325,19501493,22042884,21860704,21149552,20159871,19474294,21894447,21971053,21804106,20502693,22199011,18224312,22400124,18533027,18852197,21297524,22403240,22856518,23963167,19343170,20386740,21400687,24728607,20017983,24573017,24607648,20549515,22144573,22623978,22029572,18362232,19173706,19214202,26252781,20435227,21606135,19924713,17554300,19955471,19956433,25717410,24098343,18780302,18675980,19475673,20231156,20858905,21152093,21698238,24906238,17634449,18979498,19164808,19207022,19750184,20098575,20981302,21242481,21369780,22295058,22848412,25617895,23729007,18469204,20605023,21372283,22429504,26483964,23870195,18704761,23587283,24926413,19463184,24676469,21424681,20175863,22505696,19559344,19578366,23142796,19171343,24246088,18987759,19819472,19926059,21375403,21385355,21705410,24777168,25105296,19888323,23454037,18264662,18599798,18652946,18654002,18925945,18957718,19135198,19319159,19329499,19548844,19664850,19709660,19885677,19956784,20031540,20031580,20031606,20230275,20335276,20395598,2040077', 'sas_allele': 'C', 'phenotype_or_disease': 1, 'amr_allele': 'C', 'afr_maf': 0.2133, 'eas_allele': 'C', 'id': 'rs1333049', 'start': 22125504}], 'strand': 1, 'id': '9:g.22125504G>C', 'start': 22125504}]\n"
]
}
],
"source": [
"returned_data = r.json()\n",
"print (returned_data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Άλλες βάσεις δεδομένων"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Γενικότερα το τοπίο με της online βάσεις γενομικών δεδομένων είναι αρκετά δυναμικό. Καινούργιες βάσεις προστίθονται, νέα APIs κτλ. Εκτός από την ENSEMBL άλλες υπάρχουσες βάσεις είναι:\n",
"\n",
"* [ENTREZ](https://www.ncbi.nlm.nih.gov/gquery/). Η ENTREZ είναι μία ομογενοποιημένη βάση δεδομένων από το NCBI (Το αμερικάνικο EMBL). Δυστυχώς το API της ENTREZ δεν είναι τόσο φιλικό όσο της ENSEMBL. Το [documentation](https://www.ncbi.nlm.nih.gov/books/NBK25501/) είναι διάσπαρτο και δεν υπάρχουν πολλά παραδείγματα ([Και για αυτά που υπάρχουν είναι σε perl](https://www.ncbi.nlm.nih.gov/books/NBK25498/) &#x1F631;). Ευτυχώς η biopython περιέχει μεθόδους για πρόσβαση σε αυτό το API: http://biopython.org/DIST/docs/tutorial/Tutorial.html#htoc110\n",
"* [MyGene](http://mygene.info/), [MyVariant](http://myvariant.info/) . Πολύ μοντέρνο API, φιλικό και καλή οργάνωση πληροφορίας. Δοκιμάστε το: http://myvariant.info/v1/api . Το αρνητικό του είναι ότι περιέχει ΜΟΝΟ πληροφορίες για variants (π.χ. δεν έχει transcripts, proteins, ...)\n"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [conda env:py3k]",
"language": "python",
"name": "conda-env-py3k-py"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment