Σήμερα υπάρχουν πάρα πολλές βάσεις δεδομένων που περιέχουν πολύτιμη πληροφορία για οποιαδήποτε έννοια της γενετικής. Κλασικά παραδείγματα είναι πληροφορίες για την ακολουθία ενός γονιδίου, τη θέση του στο γονιδιώματα, πόσα exons/introns έχει, κτλ. Η αναζήτηση σε μία τέτοια βάση δεδομένων γίνεται συνήθως με δύο τρόπους. Ο πρώτος είναι να πάμε σε κάποιο site (π.χ. http://www.ensembl.org) και μέσα από τη περιήγησή μας αλλά και τα πεδία που θα δώσουμε σε διάφορες φόρμες να βρούμε τη πληροφορία που θέλουμε. Ο δεύτερος τρόπος είναι να κάνουμε το ίδιο τρόπο προγραμματιστικά. Δηλαδή να φτιάξουμε ένα πρόγραμμα/script το οποίο θα "ρωτάει" μία βάση δεδομένων και θα τυπώνει το αποτέλεσμα.
Είναι προφανές ότι κάθε μέθοδος έχει τα θετικά και τα αρνητικά της. Το να αλληλεπιδρούμε με ένα site είναι αργό (και βαρετό) για επαναλαμβανόμενες ερωτήσεις ενώ ο προγραμματιστικός τρόπος απαιτεί τη γνώση κάποιας γλώσσας προγραμματισμού αλλά και τον τρόπο με τον οποία θα πρέπει να "μιλήσει" το πρόγραμμα με τη βάση. Ένας τρόπος να το διαπιστώσουμε αυτό είναι να ρωτήσουμε κάποιον έμπειρο βιολόγο κάτι απλό, π.χ: πόσα exons έχει το γονίδιο APOE; Μπορούμε στη συνέχεια να κάνουμε την ίδια ερώτηση σε έναν βιοπληροφορικό και να δούμε τον τρόπο που θα απαντήσουν στην ερώτηση. Με όποιον τρόπο επιλέξουν να απαντήσουν, θα διαπιστώσουμε (ίσως με έκπληξη) ότι μία τέτοια απλή ερώτηση απαιτεί αρκετή ώρα "ψαξίματος". Δεν θα ήταν ωραίο, λοιπόν, να υπήρχε κάποιο site το οποίο να μπορούσες να του θέσεις σε φυσική γλώσσα, απλές ερωτήσεις της γενετικής και αυτό να σου απαντούσε;
Αυτό λοιπόν είναι και το αντικείμενο του project! Θα πρέπει να φτιάξετε ένα πρόγραμμα το οποίο θα παίρνει ως είσοδο απλές ερωτήσεις γενετικής, να ψάχνει τις κατάλληλες βάσεις δεδομένων και να τυπώνει την απάντηση. Οι ερωτήσεις θα πρέπει να είναι στα Αγγλικά.
Το πρόγραμμά σας καταρχήν θα πρέπει να μπορεί να αναγνωρίζει τις παρακάτων οντότητες από το κείμενο της ερώτησης:
-
Γονίδιο
- Ένα από τα ονόματα που αναγνωρίζει επίσημα το HGNC. Μπορείτε να πάρετε τη λίστα όπως είχε περιγραφεί στην άσκηση 18, της 3ης σειράς. Το link είναι: ftp://ftp.ebi.ac.uk/pub/databases/genenames/new/tsv/locus_groups/protein-coding_gene.txt
-
Μετάγραφο (transcript)
- RefSeq μετάγραφα. π.χ:
NM_001350497.1
ήNM_001350497
. Λίστα με όλα τα μετάγραφα σε RefSeq, υπάρχει εδώ (RefSeq Reference Genome Annotation). Δεν είναι απαραίτητο να κατεβάσετε αυτό το αρχείο. - ENSEMBL μετάγραφα. Για παράδειγμα:
ENST00000003084
.
- RefSeq μετάγραφα. π.χ:
-
Μετάλλαξη: (σε αυτό το project θα ασχοληθούμε μόνο με Single Nucleotide Polymorphisms)
rs12345678
. dbSNP variantschr1:1234567A>G
. Δηλαδή στο χρωμόσωμα 1, στη θέση 1234567 το Α γίνεται G.1:1234567A>G
- <Γονίδιο>:c.100A>G . Δηλαδή στη 100η coding θέση του γονιδίου το Α, γίνεται G.
- <Μετάγραφο>:c.100A>G . Στη 100η coding θέση του μετάγραφου το Α, γίνεται G.
-
Θέση στο γονιδίωμα: (θα το αναφέρουμε απλά ως "Θέση")
1:1234567
(Χρωμόσωμα 1, θέση 1234567)chr1:1234567
chromosome 1, position 1234567
chromosome 1 and position 1234567
- <Μετάλλαξη> , η θέση της μετάλλαξης στο γονιδίωμα
H βιβλιοθήkη requests είναι ίσως η πιο δημοφιλής βιβλιοθήκη της python η οποία δεν είναι μέρος της "επίσημης" έκδοσης της python. Παρέχει πολύ απλούς μηχανισμούς για να έχετε πρόσβαση σε online πηγές δεδομένων. Για να την εγκαταστήσετε κάντε στο shell:
pip install requests
Στη συνέχεια μπορείτε να τη κάνετε import στη python:
import requests
Μέσω της requests
μπορείτε να χρησιμοποιείτε τους μηχανισμούς GET και POST που υποστηρίζει το HTTP πρωτόκολο για να ζητάτε και να παίρνετε δεδομένα από άλλα sites. Μπορείτε να δείτε και τις περσινές σημειώσεις για το πως μπορείτε να το κάνετε αυτό.
Πριν ξεκινήσετε θα πρέπει να μελετήσετε τις παρακάτω πολύ βασικές πηγές βιολογικής πληροφορίας.
Το mygene.info είναι μία από τις πιο δημοφιλής, γρήγορη και σύγχρονη πηγή (μετα)μεταπληροφορία για γονίδια. Περιέχει πληροφορία για τη θέση, λειτουργία, μονοπάτια κτλ για όλα τα γονίδια από πολλούς οργανισμούς.
Για παράδειγμα έστω ότι θέλουμε να βρούμε ποια είναι η θέση του γονιδίου TPMT. Μέσω της requests
:
import requests
parameters = {
'fields': 'genomic_pos',
'species': 'human',
'q' : 'symbol:tpmt',
}
url = 'http://mygene.info/v3/query'
response = requests.get(url, params=parameters)
Στη συνέχεια μπορούμε να δούμε αν όλα πήγαν καλά:
response.ok # Αυτό πρέπει να είναι True
Αφού επιβεβαιώσουμε ότι το response.ok
είναι True
, μπορούμε να πάρουμε το αποτέλεσμα σε μορφή json:
data = response.json()
print (data)
{'max_score': 88.12873,
'took': 4,
'total': 1,
'hits': [{'_id': '7172',
'_score': 88.12873,
'genomic_pos': {'chr': '6',
'end': 18155074,
'ensemblgene': 'ENSG00000137364',
'start': 18128311,
'strand': -1}}]}
Βλέπουμε ότι υπάρχει ένα start
και ένα end
. Μπορούμε να τα προσπελάσουμε:
chromosome = data['hits'][0]['genomic_pos']['chr']
start = data['hits'][0]['genomic_pos']['start']
end = data['hits'][0]['genomic_pos']['end']
print (chromosome, start, pos)
# Τυπώνει: ('6', 18128311, 18155074)
Παρόμοια με το mygene.info υπάρχει και το myvariant.info το οποίο παρέχει ένα API για πληροφορίες για μεταλλάξεις. Η πρόσβαση γίνεται μέσω GET requests. Για παράδειγμα ποια είναι η θέση της μετάλλαξης rs58991260;
url = 'http://myvariant.info/v1/query'
parameters = {
'q': 'rs58991260',
'fields': 'dbsnp',
}
data = requests.get(url, params=parameters)
data.ok # True
chromsome = d['hits'][0]['dbsnp']['chrom']
start = d['hits'][0]['dbsnp']['hg19']['start']
end = d['hits'][0]['dbsnp']['hg19']['end']
print (chromosome, start, end)
## Τυπώνει: 6 218631822 218631822
# To start με το end είναι το ίδιο αφού πρόκειται για SNP
Αν θέλετε μπορείτε να διαβάσετε και τη δημοσίευση:
Η GENCODE είναι μία προσπάθεια ώστε να καταγραφούν όλα τα "λειτουργικά" κομμάτια του ανθρώπινου γονιδιώματος. Χρησιμοποιώντας διάφορες μεθοδολογίες (αυτόματες και με ανθρώπινο curation), καταγράφει σε ποιες περιοχές υπάρχουν γονίδια και πως τα γoνίδια αυτά χωρίζονται σε υπο-περιοχές (introns, exons, CDS, stop codons, start codon, 5' UTR και 3'UTR).
Σε αυτό το ftp site: ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_29/
υπάρχουν όλα τα αρχεία με τη τελευταία έκδοση της GENCODE.
Ειδικά σε αυτό το αρχείο: ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_29/_README.TXT
περιγράφεται τι περιέχει το κάθε αρχείο. Εκεί διαβάζουμε:
1. gencode.vX.annotation.{gtf,gff3}.gz:
Main file, gene annotation on reference chromosomes in GTF and GFF3 file formats.
These are the main GENCODE gene annotation files. They contain annotation (genes,
transcripts, exons, start_codon, stop_codon, UTRs, CDS) on the reference chromosomes,
which are chr1-22, X, Y, M in human and chr1-19, X, Y, M in mouse.
Οπότε για αυτό το project θα χρησιμοποιήσουμε το gencode.v29.annotation.gff3.gz
το οποίο μπορούμε να κατεβάσουμε απο εδώ: ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_29/gencode.v29.annotation.gff3.gz
Επίσης μπορείτε να μελετήσετε το format gff3 το οποίο χρησιμοποιεί η GENCODE.
Η ίδια πληροφορία υπάρχει και σε ένα άλλο format το οποίο λέγεται GTF, αλλά το GFF3 θεωρείται λίγο πιο εξελιγμένο. Μπορείτε να διαβάσετε περισσότερα εδώ.
Ας κατεβάσουμε λοιπόν το αρχείο από το command line:
wget ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_29/gencode.v29.annotation.gff3.gz
Μέσα σε αυτό το αρχείο βρίσκουμε αυτές τις γραμμές: (Εχω κρατήσει μόνο ένα συγκεκριμμένο μήκος για κάθε γραμμή)
chr1 ENSEMBL transcript 2586750 2591467 . + . ID=ENST00000444521.6;Parent=ENSG00000157870.15;
chr1 ENSEMBL exon 2586750 2586948 . + . ID=exon:ENST00000444521.6:1;Parent=ENST00000444521.6;
chr1 ENSEMBL CDS 2586796 2586948 . + 0 ID=CDS:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL start_codon 2586796 2586798 . + 0 ID=start_codon:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL exon 2587091 2587295 . + . ID=exon:ENST00000444521.6:2;Parent=ENST00000444521.6;
chr1 ENSEMBL CDS 2587091 2587295 . + 0 ID=CDS:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL exon 2587741 2587792 . + . ID=exon:ENST00000444521.6:3;Parent=ENST00000444521.6;
chr1 ENSEMBL CDS 2587741 2587792 . + 2 ID=CDS:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL exon 2588336 2588453 . + . ID=exon:ENST00000444521.6:4;Parent=ENST00000444521.6;
chr1 ENSEMBL CDS 2588336 2588453 . + 1 ID=CDS:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL exon 2588550 2588625 . + . ID=exon:ENST00000444521.6:5;Parent=ENST00000444521.6;
chr1 ENSEMBL CDS 2588550 2588625 . + 0 ID=CDS:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL exon 2588922 2589040 . + . ID=exon:ENST00000444521.6:6;Parent=ENST00000444521.6;
chr1 ENSEMBL CDS 2588922 2589040 . + 2 ID=CDS:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL exon 2589410 2591467 . + . ID=exon:ENST00000444521.6:7;Parent=ENST00000444521.6;
chr1 ENSEMBL CDS 2589410 2589427 . + 0 ID=CDS:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL stop_codon 2589425 2589427 . + 0 ID=stop_codon:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL five_prime_UTR 2586750 2586795 . + . ID=UTR5:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL three_prime_UTR 2589428 2591467 . + . ID=UTR3:ENST00000444521.6;Parent=ENST00000444521.6;
chr1 ENSEMBL transcript 2586750 2591467 . + . ID=ENST00000378425.9;Parent=ENSG00000157870.15;
Τι σημαίνουν όλα αυτά; Αυτά είναι τα δομικά στοιχεία μίας μεταγραφής (ENST00000444521.6) ενός γονιδίου (PRXL2B). Ένα γονίδιο μπορεί να μεταγραφεί με πολλούς τρόπους, ή αλλιώς σε πολλά μετάγραφα (transcripts). Στο παράδειγμά μας βλέπουμε τα δομικά στοιχεία του μετάγραφου ENST00000444521.6 . Ένα μετάγραφο περιέχει exons και introns. Το πρώτο exon αποτελείται από τη περιοχή 5'UTR και τη περιοχή CDS (CoDing Sequence). H περιοχή CDS του πρώτου exon αρχίζει από το start codon. Στα exons που δεν είναι πρώτα ή τελευταία η περιοχή CDS ταυτίζεται με τη περιοχή του exon. Το τελευταίο exon αποτελείται από το CDS και 3'UTR. To CDS του τελευταίου exon τελειώνει με το stop codon.
Παρακάτω υπάρχει ένα διάγραμμα με τη παραπάνω πληροφορία (powerpoint version).
Άρα από το αρχείο gencode.v29.annotation.gff3.gz
μπορούμε να ξέρουμε τι ακριβώς μπορεί να βρούμε σε οποιαδήποτε περιοχή του γoνιδιώματος.
Αν παρατηρήσουμε το αρχείο θα δούμε ένα βασικό πρόβλημα: Για κάθε γονίδιο υπάρχουν πολλά transcripts. Αυτό είναι γνωστό από τη βιολογία, ότι ένα γονίδιο μπορεί να έχει πολλά μετάγραφα λόγω ενός φαινομένου που ονομάζεται alternative splicing. Πως μπορώ να ξέρω εγώ ποιο είναι το πιο "βασικό"; Δηλαδή για πιο transcript θα απαντάει το πρόγραμμά μου; Για να το λύσουμε αυτό υπάρχουν δύο τρόποι.
Ο πρώτος είναι να συμβουλευτούμε τη βάση δεδομένων appris, η οποία έχει τη πληροφορία "πόσο βασικό" είναι ένα transcript για όλα τα γονίδια. Η appris έχει φτιάξει ένα σύστημα ιεραρχικοποιήσης των transcripts. Ιεραρχικοποιεί τα transcripts με 8 tags: PRINCIPAL:1, PRINCIPAL:2, PRINCIPAL:3, PRINCIPAL:4, PRINCIPAL:5, ALTERNATIVE:1, ALTERNATIVE:2 και MINOR. Τα transcripts τα οποία είναι πιο "πάνω" στην ιεραρχία είναι και τα πιο βασικά. Μπορείτε να κατεβάσετε και όλη τη βάση appris από αυτό το link.
Ο δεύτερος τρόπος είναι να χρησιμοποιήσετε το πεδίo tag
, στο αρχείο από το GENCODE.
Εκεί θα δείτε να υπάρχει σε κάποια transcripts, η πληροφορία tag=basic,appris_principal_2,CCD
το οποίο αντιστιχεί και στη τιμή που έχει δόσει η appris.
Αν ένα entry δεν έχει αυτή τη πληροφορία μπορείτε να το αγνοείται.
Μπορείτε να υλοποιήσετε οποιαδήποτε από τις δύο μεθόδους για να βρίσκετε το primary transcript ενός γονιδίου.
H Ensembl δίνει το παρακάτω API: https://rest.ensembl.org/documentation/info/sequence_region με το οποίο μπορείτε να ζητήσετε το γονιδίωμα αναφοράς για οποιαδήποτε περιοχή. Στο site αυτό δίνονται παραδείγματα καθώς και python 3 κώδικας.
Επίσης η Ensembl δίνει το παρακάτω API: https://rest.ensembl.org/documentation/info/vep_hgvs_get . To API αυτό δίνει πληροφορίες για μεταλλάξεις. Όπως βλέπετε και από το documentation υποστηρίζει μεταλλάξεις όπως: <Γονίδιο>:c.100A>T
και <Ensembl Transcript>:c.100A>G
.
Αν έχετε βρει κάποιο άλλο API ή dataset το οποίο κάνει αυτές τις λειτουργίες εννοείται ότι μπορείτε να το χρησιμοποιήσετε.
Τώρα που ξέρουμε πως να πάρουμε πληροφορία από το mygene.info, myvariant.info, το GENCODE, Ensembl Sequence Region και VEP, μπορούμε επιτέλους να απαντάμε στις πιο συχνές ερωτήσεις που έχουν οι βιολόγοι και βιοπληροφορικοί σχετικά με το ανθρώπινο γονιδίωμα.
Σε αυτό το project λοιπόν, θα πρέπει να υλοποιήσετε ένα πρόγραμμα σε python το οποίο θα παίρνει σαν input μία ερώτηση στην Αγγλική γλώσσα και θα τυπώνει την απάντηση.
Το πρόγραμμά σας θα πρέπει να τρέχει από command line και θα πρέπει να δέχεται μία παράμετρο: -q <question>
ή --question <question>
.
Για παράδειγμα:
python project.py -q "What is the location of the gene TPMT?"
Στο οποίο θα τυπώνει κάτι σαν:
chr 6
18128311-18155074
6p22.3
Στη python μπορείτε να πάρετε ορίσματα από τη γραμμή εντολών χρησιμοποιώντας τη βιβλιοθήκη argparse.
Για παράδειγμα για να διαβάσετε το όρισμα που δίνεται είτε με -q
είτε με --question
, ένας τρόπος είναι:
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='The best python project ever')
parser.add_argument('-q', '--question', help='Your question in english')
args = parser.parse_args()
question = args.question
print ('The question asked is:', question)
Σε αυτό το post υπάρχει μία πολύ καλή εξήγηση του τι κάνει το if __name__ == '__main__':
.
Όλα τα ερωτήματα θα έχουν είτε ένα γονίδιο, είτε ένα μετάγραφο, είτε μία μετάλλαξη είτε μία θέση. Αν δεν υπάρχει τίποτα από τα παραπάνω θα πρέπει να βγάζει ένα μήνυμα λάθους.
Στη περίπτωση που υπάρχει θα πρέπει να βγάζει ένα γράφημα με τα intron/exon maps όπως κωδικοποιείται στο GENCODE. Αυτό θα είναι στην ουσία ένα visualization του μετάγραφου (transcript). Αν είναι γονίδιο, θα παίρνετε το primary transcript (σύμφωνα με το appris). Γενικότερα αν δεν δηλώνεται πουθενά το μετάγραφο τότε εσείς θα παίρνετε το primary transcript.
Το πρόγραμμά σας λοιπόν για κάθε valid ερώτηση θα πρέπει να βγάζει ένα γράφημα με το intron/exon map του μετάγραφου. Τι είναι αυτό όμως;
Ένα παράδειγμα αμφιβόλου αισθητικής, που έφτιαξα, είναι εδώ:
Μπορείτε να βρείτε πολλά παρόμοια στα Internets αν γκουγκλάρετε "exon/intron map" και ψάξετε για images. Υπάρχει και σχετική συζήτηση στο biostars Προσέξτε ότι αν στην ερώτηση υπάρχει και μετάλλαξη, θα πρέπει να φαίνεται στο γράφημα.
Αφου βγάλει το γράφημα, το πρόγραμμά σας θα πρέπει να απαντάει στις ερωτήσεις.
Παραθέτω τα ελάχιστα ερωτήματα που πρέπει να υποστηρίζει το πρόγραμμά σας (και στα οποία θα βαθμολογηθείτε).
Προφανώς και μπορείτε να τα επεκτείνετε όπως θέλετε εσείς.
Για κάθε ερώτημα παραθέτω τους βαθμούς που παίρνει (π.χ, 3/100), μερικές οδηγίες ή links για το πως μπορεί το πρόγραμμα σας να τις απαντήσει και κάποιες ενδεικτικές απαντήσεις.
Εσείς μπορείτε να ακολουθήσετε διαφορετικές προσεγγίσεις για να τις απαντήσετε και μπορούν οι απαντήσεις σας να έχουν διαφορετική μορφή (αρκεί φυσικά να υπάρχει η ζητούμενη πληροφορία).
- "Which gene is upstream to gene <Γονίδιο> ?". 3/100 Χρησιμοποιήστε το GENCODE.
NHLRC1
Επίσης: "Which gene is downstream?", "Which gene is closest?"
- "How many transcripts does the gene <Γονίδιο> have?" 3/100 Χρησιμοποιήστε το GENCODE ή το mygene.info link (ή και τα δύο..)
[Τυπώστε μία λίστα με όλα τα διαφορετικά μετάγραφα και αναφέρεται πιο είναι το primary]
Επίσης: "Which transcripts exist for gene <Γονίδιο> ?"
- "What is in <Θέση> ?" (Χρησιμοποιήστε το GENCODE) 3/100
Παράδειγμα απάντησης:
This the 100th nucleotide of the 2nd exon of gene PRXL2B for transcript ENST00000444521.6. The length of this exon is XXX . downstream element is an intron in XXX bases. upstream element is an intron in XXX bases.
[Συμπληρώστε κατάλληλες τιμές για τα XXX]
Προσθέστε την ακολουθία του γονιδιώματος αναφοράς για -50 και +50 θέσεις από τη <Θέση>
Για να βρείτε την ακολουθία μίας περιοχής του γονιδιώματος, μπορείτε να χρησιμοποιήσετε το sequence_region
service της Ensembl: https://rest.ensembl.org/documentation/info/sequence_region
Αν δεν υπάρχει γονίδιο σε αυτή τη θέση μπορείτε να τυπώσετε:
This is an intergenic region.
Upstream closest gene is TP73 upstream in XXX bases.
Downstream closest gene is YYY downstream in ZZZ bases
Αν είναι μετάλλαξη αναφέρεται και το reference, alternative, sequence change και protein change link
Π.χ: "What is the location of the mutations <Μετάλλαξη> ?" ή ""What is the location of <Μετάλλαξη> ?"
chromosome: 11
position: 66328095
reference: C
alternative: T
Type: SNP
Gene: ACTN3
Transcript NM_001104.3, sequence change: c.1729C>T, protein change: p.Ter577Ter
Transcript NM_003793.3, sequence change: c.*3309G>A, protein change: ---
Η πληροφορία για τα transcripts, sequence change και protein change, υπάρχει στη myvariant.info. Παράδειγμα screenshot output από το myvariant.info: https://imgur.com/GOUFskO
To myvariant.info μπορεί να επιστρέψει και πληροροφορίες για μια μετάλλαξη έχοντας μόνο της θέση της. Π.χ: http://myvariant.info/v1/query?q=chr3:8762685-8762685
Επίσης: "What is the reference and alternative of <Μετάλλαξη> ?", "What type of mutation is <Μετάλλαξη> ?"
Παράδειγμα για TPMT:
thiopurine methyltransferase
Other names:
S-adenosyl-L-methionine:thiopurine S-methyltransferase
thiopurine S-methyltransferase
Π.χ για γονίδιο:
chr 6
18128311-18155074
6p22.3
Επίσης: "What is the chromosome of <...> ?", "What is the size of <...> ?", "Where is the start of <...> ?", "Where is the end of <...> ?"
- "Which are the refseq transcripts of the gene <Γονίδιο> ?". 3/100 Μπορείτε να χρησιμoποιήσετε το ftp://ftp.ebi.ac.uk/pub/databases/gencode/Gencode_human/release_29/gencode.v29.metadata.RefSeq.gz όπου υπάρχει αντιστοιχία μεταξύ ENSEMBL και RefSeq transcripts. Εναλλακτικά μπορείτε να χρησιμοποιήστε το mygene.info link
Για παράδειγμα:
Which are the refseq transcripts of the gene TPMT?
[NM_000367, NM_001346817, NM_001346818]
[Also report which is the primary transcript. For example: NM_000367 is the primary]
- "How many exons does <Γονίδιο ή Μετάγραφο> have ?". 3/100 Μπορείτε να χρησιμοποιήσετε το GENCODE ή το mygene.info link. Αν είναι γονίδιο πάρτε το primary transcript.
[List the start/end positions for all exons]
Chromosome 9
[18128313, 18130780],
[18132132, 18132177],
[18133803, 18133889],
[18138962, 18139037],
[18139664, 18139717],
[18143595, 18143728],
[18147822, 18147915],
[18148987, 18149171],
[18155032, 18155169]
Επίσης: "What are the locations of the exons of the gene <Γονίδιο> ?"
- "Where is the location of the CDS of the <Γονίδιο ή Μετάγραφο> ?". 3/100 Επίσης GENCODE ή mygene.info (ίδιο link με πριν). Αν είναι <Γονίδιο> πάρτε το primary transcript
Chromosome 9
[18149127, 18130667]
Επίσης: "Where is the location of the start codon?", "Where is the location of end codon?", "Where is the location of 3' UTR?", "Where is the location of the 5' UTR?"
- "What is the primary transcript of the gene <Γονίδιο> ?" 3/100
Refseq: NM_000367
Ensembl: ENST00000419916
- "In which gene does <Μετάγραφο, Μετάλλαξη ή θέση> belong"? 3/100
- "In which pathways is the gene <Γονίδιο> involved ?" 2/100 link
According to KEGG:
Thiopurine Pathway, Pharmacokinetics/Pharmacodynamics
According to reactome:
Metabolism...
- "Which proteins are transcribed from the <Γονίδιο/Μετάγραφο> ?" 2/100 link
NM_000367.4 --> NP_000358.1 (primary transcript)
NM_001346817.1 --> NP_001333746.1
NM_001346818.1 --> NP_001333747.1
- "What is the function of the gene <Γονίδιο> ?" 2/100 link
This gene TPMT encodes the enzyme that metabolizes thiopurine drugs via S-adenosyl-L-methionine as...
Επίσης: "What is the function of <Γονίδιο> ?"
- "Which organisms have a homologous gene to <Γονίδιο> ?" 3/100 link
Mus musculus
Rattus norvegicus
...
Από τα ids που επιστρέφει, μπορείτε να αναφέρετε μόνο αυτούς τους οργανισμούς:
Common name | Taxonmy | tax_id |
---|---|---|
human | Homo sapiens | 9606 |
mouse | Mus musculus | 10090 |
rat | Rattus norvegicus | 10116 |
fruitfly | Drosophila melanogaster | 7227 |
nematode | Caenorhabditis elegans | 6239 |
zebrafish | Danio rerio | 7955 |
thale-cress | Arabidopsis thaliana | 3702 |
frog | Xenopus tropicalis | 8364 |
pig | Sus scrofa | 9823 |
- "What type is the gene <Γονίδιο> ?" 2/100 link
protein-coding
- "What is the sequence in chromosome X between 1000000 and 1000100;" 3/100 Χρησιμοποιήστε το Ensembl Sequence Region link
CTGTAGAAACATTAGCCTGGCTAACAAGGTGAAACCCCATCTCTACTAACAATACAAAATATTGGTTGGGCGTGGTGGCGGGTGCTTGTAATCCCAGCTAC
- "What is the allele frequency of <Μετάλλαξη> ?" 3/100
Frequencies in 1000 genome are:
1000g
af 0.02
afr 0.11
amr 0.003
eur 0.001
Frequency of G: 0.9784
Frequency of A: 0.02157
[Also report gnomAD frequencies]
- "With which conditions is the mutation <Μετάλλαξη> associated ? " 3/100 link
According to clinvar:
Tangier disease (TGD)
Familial High Density Lipoprotein Deficiency
- "What is the rs-id of <Μετάλλαξη> ?" 3/100 link
rs9282541
- "What is the effect of <Μετάλλαξη> ?" 3/100 link
According to:
snpeff: missense_variant
Polyphen: 0.01(benign)
SIFT: 0:0.135, 1:0.134
Ένα άλλο παράδειγμα "What is the effect of chr6:18149300T>A" link 1
According to:
snpeff: missense_variant
Polyphen: 0.144(benign)
SIFT: score: 0.017, pred: "D", converted_rankscore: 0.5116
Optional μπορείτε να πάρετε πληροφορία από το Variant Effect Predictor
sift_prediction: "deleterious"
sift_score: 0.01
polyphen_score: 0.448
Αυτά τα βήματα είναι προαιρετικά, αν θέλετε και έχετε όρεξη μπορείτε να τα κάνετε!
Προφανώς ο χρήστης μπορεί να κάνει ερωτήσεις που να μην είναι ακριβώς όπως αυτές που περιέγραψα αλλά να ζητάει όμως το ίδιο πράγμα.
Επίσης μπορεί να μην είναι καν ερώτηση. Για παράδειγμα αντί να λέει: What is the position of the mutation rs1234567 ?
να λέει:
rs1234567 location
.
Θα πρέπει να υλοποιήσετε (ή να κατεβάσετε) συναρτήσεις που υλοποιούν fuzzy string matching. Ένα παράδειγμα είναι η fuzzywuzzy.
Σε αυτή τη περίπτωση το πρόγραμμά σας θα πρέπει να βγάζει ένα μήνυμα όπως:
Your question did not match exactly any template.
Best guess question is...
[Απάντηση της best guess question]
Αντί για το γράφημα με το intron/exon map που σας ζητήθηκε, το πρόγραμμά σας θα πρέπει να βγάζει το ίδιο γράφημα αλλά σε text! Μπορείτε να "πάρετε" χαρακτήρες για τους πίνακες από της σελίδα της wikipedia για box drawing: Δηλαδή μία αναπαράσταση σε κείμενο του γραφήματος που έδωσα στο παράδειγμα είναι:
Gene: PRXL2B
Transcript: ENST00000444521.6
╔═════════════════════════════╗ ╱╲ ╔══════════════════════════════╗ ╱╲ ╔══════════════╗ ╱╲ ╔════════════════════════════╗
║ Exon 1 ║ ╱ ╲ ║ Exon 2 ║ ╱ ╲ ║ Exon 3 ║ ╱ ╲ ║ Exon 4 ║
╟──────────────┬──────────────╢ ╱ ╲ ╟──────────────┬───────────────╢ ╱ ╲ ╟──────────────╢ ╱ ╲ ╟──────────────┬─────────────╢
║ 5'UTR │ CDS ║ ╱ ╲ ║ █ ║ ╱ ╲ ║ ║ ╱ ╲ ║ CDS │ 3'UTR ║
╟──────────────┼──────────────╢ ╱ ╲ ║ █ ║ ╱ ╲ ║ ║ ╱ ╲ ╟──────────────┼─────────────╢
║ │ ║ ╱ ╲ ║ █ ║ ╱ ╲ ║ ║ ╱ ╲ ║ │ ║
║ │ ║╱ ╲║ █ ║╱ ╲║ ║╱ ╲║ │ ║
123,456,789 123,456,890 123,458,895 123,459,345 123,459,445 123,459,545 123,460,765 123,460,865 123,461,865 123,462,543 123,462,865
**A>G**
Σημείωση: στο τερματικό μου εμφανίζει κάτι σαν χριστουγεννιάτικα δέντρα, στις συνδέσεις των exons (γραμματοσειρά: Andale Mono), οπότε λόγω των ημερών, είπα να το αφήσω..
- Το project είναι το 60% του βαθμού.
- To project θα πρέπει να υλοποιηθεί από ομάδες των 2 ομάδων.
- Θα πρέπει να στείλετε την υλοποίησή σας μέχρι τις 28 Φεβρουαρίου 2019 στο kantale@ics.forth.gr.
- Όπως και με τις ασκήσεις, μπορείτε να στείλετε μέρος της υλοποιήσης πριν την τελική ημερομηνία για.. σχολιασμό και βοήθεια. Δεν θα βαθμολογηθούν όμως αυτά. Θα υπάρξει ένας τελικός βαθμός στο τέλος.
- Μαζί με τη παράδοση θα πρέπει να στείλετε και μία αναφορά (2-3 σελίδες), με τα βασικά στοιχεία της υλοποίησης, αρχιτεκτονική, παρατηρήσεις, αποτελέσματα, γραφήματα. 3/100
- Επίσης θα γίνει ένα μίνι "συνέδριο" όπου κάθε ομάδα θα έχει 15-20 λεπτά περίπου για να παρουσιάσει την υλοποίησή της. 2/100
- Όταν σταλθούν όλα τα projects θα στείλω και τη δική μου υλοποίηση.
- Ίσως το project να φαίνεται δύσκολο επειδή έχει μεγάλη εκφώνηση. Δεν είναι. Η εκφώνηση είναι σαφώς μεγαλύτερη από την υλοποίηση..
Απορίες 1
Μία θέση μόνο.
Στην αρχή που περιγράφω τις οντότητες λέω ακριβώς τι εννόω με το <Μετάλλαξη>
Μετάλλαξη: (σε αυτό το project θα ασχοληθούμε μόνο με Single Nucleotide Polymorphisms)
Παράδειγμα: "What is the location of the mutations <Μετάλλαξη> ?" ή ""What is the location of <Μετάλλαξη> ?"
δηλαδή: What is the location of the mutation rs12345678?
όχι (εκτός αν θες έξτρα βαθμό..)
Ναι, δεν είναι ανάγκη τα δύο αρχεία να έχουν το ίδιο σετ από γονίδια.
Μπορείς να πάρεις μόνο από τη λίστα με τα 7455 γονίδια και τα άλλα να τα αγνοείς.
Αν και εγώ τα μέτρησα 12058..
Χμμ..
Καλύτερα αυτό να είναι μέτρο έσχατης ανάγκης.
Αν και η python φημίζεται ως "gluing language" καλύτερα να το αποφύγουμε αυτό.
Σκοπός του project είναι να δούμε και τεχνικές να ανοίγουμε και επεξεργαζόμαστε τεράστια αρχεία χωρίς να "κρασάρει το λαπτοπ μας".
Δλδ αν κάνεις σωστό παρσάρισμα δεν θα έχει πρόβλημα το laptop σου..
Επίσης το os.system θέλει προσοχή.. Προτιμάμε καλύτερα τη subprocess https://docs.python.org/3/library/subprocess.html#module-subprocess
Προσπάθησε να το αποφύγεις, και αν δεν γίνεται κάνε os.system('gawk')...