Σε αυτό το link: http://people.csail.mit.edu/jasonkb/raw_lexica/greek.raw βρίσκεται μία λίστα με όλες (σχεδόν) τις Eλληνικές λέξεις. Πηγαίνετε σε αυτό το link, περιμένετε να το φορτώσει o browser σας και μετά σώστε το με File --> Save as.. στο αρχείο "greek.raw".
Εναλλακτικά μπορείτε να τρέξετε από linux την παρακάτω εντολή:
wget http://people.csail.mit.edu/jasonkb/raw_lexica/greek.raw
αν δεν δουλέψει αυτό μπορείτε να κάνετε:
curl http://people.csail.mit.edu/jasonkb/raw_lexica/greek.raw > greek.raw
Οι παρακάτω ασκήσεις υποθέτουν ότι έχετε κάνει ένα από τα παραπάνω και το αρχείο greek.raw βρίσκεται στον υπολογιστή σας. Το αρχείο περιέχει μία ελληνική λέξη σε κάθε γραμμή.
Πόσες γραμμές περιέχει το αρχείο;
Ποια είναι η μεγαλύτερη λέξη;
Πόσες φορές υπάρχει το "Π" σε όλες τις λέξεις;
Ποιο είναι το γράμμα που εμφανίζεται τις δεύτερες λιγότερες φορές σε όλες τις ελληνικές λέξεις που τελειώνουν σε "ΕΣ";
Φτιάξτε το αρχείο "greek_len_sorted.txt" το οποίο θα έχει όλες τις λέξεις ταξινομημένες ανάλογα με το μήκος τους (από τη μικρότερη στη μεγαλύτερη). Κάθε γραμμή του αρχείου θα περιέχει και μία λέξη.
Βρείτε πόσες λέξεις υπάρχουν με 1 γράμμα, με 2 γράμματα, κτλ.. Φτιάξτε ένα dictionary (keys=μήκος, values=πλήθος λέξεων που έχουν αυτό το μήκος).
Ποιο είναι το πιο συχνό μήκος των λέξεων (δηλαδή το key με μεγαλύτερο value από την Άσκηση 6)
Φτιάξτε έναν generator ο οποίος θα δέχεται σαν όρισμα μία λέξη και θα παράγει ελληνικές λέξεις που είναι αναγραμματισμός τους. Δίνοναι κάποια παραδείγματα χρήσης (έστω anag
o ζητούμενος generator)
list(anag('ΜΙΚΡΟ'))
['ΚΟΡΜΙ', 'ΜΙΚΡΟ']
list(anag('ΚΑΝΤΕΡΑΚΗΣ'))
['ΑΡΚΕΣΤΗΚΑΝ']
g = anag('ΜΙΚΡΟ')
print (next(g)) # Τυπώνει 'ΚΟΡΜΙ΄
ΠΡΟΣΟΧΗ! ΜΗΝ παράξετε όλους τους δυνατούς ανασυνδυασμούς των γραμμάτων μίας λέξης. Δεν χρειάζεται πουθενά αυτό.
Υποθέτω ότι θα έχετε ακούσει για την αριθμοσοφία. Σε κάθε γράμμα δίνεται μία αξία. Η αξία μίας λέξης είναι το άθροισμα της αξίας των γραμμάτων. Αφού μάσησα λίγο δυόσμο και επικαλέστηκα τη βοήθεια του Απόλλωνα, μου αποκαλύφθηκε αυτή η αντιστοίχιση σε μορφή python dictionary (αν και υπάρχουν και στη wikipedia)!
{'Α': 1,
'Β': 2,
'Γ': 3,
'Δ': 4,
'Ε': 5,
'Ζ': 7,
'Η': 8,
'Θ': 9,
'Ι': 10,
'Κ': 20,
'Λ': 30,
'Μ': 40,
'Ν': 50,
'Ξ': 60,
'Ο': 70,
'Π': 80,
'Ρ': 100,
'Σ': 200,
'Τ': 300,
'Υ': 400,
'Φ': 500,
'Χ': 600,
'Ψ': 700,
'Ω': 800}
Φτιάξτε μία συνάρτηση που θα παίρνει μία ελληνική λέξη με κεφαλαία και θα επιστρέφει την "αξία" της. Π.χ "ΚΡΗΤΗ" = 20+100+8+300+8=436)
Ποια είναι η λέξη με τη μεγαλύτερη "αξία";
Φτιάξτε έναν generator ο οποίος θα παίρνει μία λέξη και θα κάνει generate λέξεις με την ίδια αξία. Αν υποθέσουμε ότι g είναι ο generator που έχετε φτιάξει τότε θα πρέπει:
list(g('ΓΛΩΣΣΑΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ'))
Θα πρέπει να τυπώνει:
['ΕΝΣΤΙΚΤΩΔΩΣ',
'ΠΥΡΕΤΩΔΩΣ',
'ΣΥΝΩΣΤΙΣΘΟΥΝ',
'ΦΩΤΟΓΡΑΦΙΣΕΣ',
'ΨΙΛΟΧΩΜΑΤΙΖΟΜΑΙ',
'ΨΥΧΟΤΑΡΑΖΕΣΤΕ']
g_comp_lang = g('ΓΛΩΣΣΑΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ')
print (next(g_comp_lang)) # Τυπώνει 'ΕΝΣΤΙΚΤΩΔΩΣ'
print (next(g_comp_lang)) # Τυπώνει 'ΠΥΡΕΤΩΔΩΣ'
print (next(g_comp_lang)) # Τυπώνει 'ΣΥΝΩΣΤΙΣΘΟΥΝ'
Φτιάξτε ένα dictionary. Τα keys θα είναι αξίες και τα values θα είναι λίστα με τις λέξεις που έχουν αυτές τις αξίες.
Σώστε το dictionary της άσκησης 12 σε ένα αρχείο "greek_world_values.json" κάνοντας χρήσης του json serialization.
Κάντε deserialize το αρχείο "greek_world_values.json" της άσκησης 13
Ποια είναι η πιο συχνή "αξία"; Δηλαδή ποια αξία έχει τις περισσότερες λέξεις;
Βρείτε συνδοιασμό δύο λέξεων που έχουν την ίδια αξία με το όνομα + επώνυμό σας. Θεωρήστε ότι το κενό έχει 0 αξία. Για παράδειγμα: η αξία του "ΑΛΕΞΑΝΔΡΟΣ ΚΑΝΤΕΡΑΚΗΣ" είναι 1226. Την ίδια αξία έχουν: "ΔΙΑΥΓΗΣ ΒΟΙΔΟΜΥΓΑ", "ΠΡΟΗΓΜΕΝΟΣ ΓΛΕΝΤΖΕΣ" και "ΓΡΑΝΙΤΕΝΙΟ ΛΕΒΕΝΤΟΠΑΙΔΟ". Ο σουρεαλισμός των αποτελεσμάτων θα εκτιμηθεί ιδιαίτερα. Δεν χρειάζετε να κάνετε κάποιον ειδικό αλγόριθμο για αυτή την άσκηση. Δηλαδή αν γράψετε απλά 2-3 ζευγάρια λέξεων που έχουν την ίδια αξία με το ονοματεπώνυμό σας, είναι αρκετό.
Φτιάξτε έναν generator ο οποίος θα παίρνει το όνομα + επώνυμό σας και θα παράγει συνδυασμούς 2 λέξεων ακριβώς όπως στην άσκηση 16.
- Hint 1: Μπορείτε να πάρετε την αξία του ονοματεπώνυμου, έστω Α, και να φτιάξετε δύο τυχαίους αριθμούς Β και Γ τέτοιους ώστε Β+Γ=Α. Στη συνέχεια παίρνετε μία τυχαία λέξη με αξία Β και μία τυχαία λέξη με αξία Γ. Εννώνετε τις δύο λέξεις με κενό και το κάνετε yield.
- Hint 2: Πως παίρνω ένα τυχαίο αντικείμενο από μία λίστα:
import random
random.choice(['κιθαρίστας', 'ντράμερ'])
Θα πρέπει να μπορώ να γράφω δηλαδή (τα παραδείγματα εδώ είναι τυχαία):
f = funny_random_generator('ΑΛΕΞΑΝΔΡΟΣ ΚΑΝΤΕΡΑΚΗΣ')
next(f)
"ΔΙΑΥΓΗΣ ΒΟΙΔΟΜΥΓΑ"
next(f)
"ΠΡΟΗΓΜΕΝΟΣ ΓΛΕΝΤΖΕΣ"
To HUGO Gene Nomenclature Committee ή αλλιώς HGNC, είναι μία επιτροπή και κομμάτι του HUGO το οποίο είναι υπεύθυνο στη τήρηση των ονομάτων των γονιδίων και άλλων γενετικών εννοιών έτσι ώστε να διευκολύνεται η συνεργασία των επιστημόνων αυτής της περιοχής.
Σε αυτό το site: https://www.genenames.org/download/statistics-and-files/ υπάρχει μία λίστα με όλα τα datasets που διατηρεί και συντηρεί το HGNC. Τα αρχεία αυτά όπως βλέπετε είναι διαθέσιμα σε TSV (Tab Separated Values) αλλά και σε JSON.
Στην άσκηση αυτή θα ασχοληθούμε με το πρώτο dataset της σελίδας: "protein-coding gene". Θα πρέπει να κατεβάσετε τα data αυτά σε TSV (link: ftp://ftp.ebi.ac.uk/pub/databases/genenames/new/tsv/locus_groups/protein-coding_gene.txt ) και σε JSON (link: ftp://ftp.ebi.ac.uk/pub/databases/genenames/new/json/locus_groups/protein-coding_gene.json ).
- Χρησιμοποιώντας το TSV αρχείο απαντήστε στην ερώτηση πόσα γονίδια υπάρχουν στο μεγάλο άκρο του 17 χρωμοσώματος (17q);
- Χρησιμοποιώντας το JSON αρχείο απαντήστε στο ίδιο ερώτημα.
Χρησιμοποιώντας τα TSV και JSON αρχεία της άσκησης 18. Βρείτε ποιο γονίδιο (το όνομα του γονιδίου είναι στήλη με τίτλο symbol
) έχει τα περισσότερα alias_symbol
. Οι τιμές του alias_symbol χωρίζονται με "|". π.χ: το γονίδιο "AACS"
έχει 3 alias_symbol: "FLJ12389|SUR-5|ACSF1"
.
Χρησιμοποιώντας τα TSV και JSON αρχεία της άσκησης 18. Βρείτε τα ονόματα (στήλη symbol
) των γονιδίων που έχουν το ίδιο refseq_accession
.