Skip to content

Instantly share code, notes, and snippets.

@kantale
Last active February 24, 2019 09:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kantale/ae81d885cc84ee03edb7d39513b7deaf to your computer and use it in GitHub Desktop.
Save kantale/ae81d885cc84ee03edb7d39513b7deaf to your computer and use it in GitHub Desktop.
3rd assignment python

Σε αυτό το 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 βρίσκεται στον υπολογιστή σας. Το αρχείο περιέχει μία ελληνική λέξη σε κάθε γραμμή.

Άσκηση 1

Πόσες γραμμές περιέχει το αρχείο;

Άσκηση 2

Ποια είναι η μεγαλύτερη λέξη;

Άσκηση 3

Πόσες φορές υπάρχει το "Π" σε όλες τις λέξεις;

Άσκηση 4

Ποιο είναι το γράμμα που εμφανίζεται τις δεύτερες λιγότερες φορές σε όλες τις ελληνικές λέξεις που τελειώνουν σε "ΕΣ";

Άσκηση 5

Φτιάξτε το αρχείο "greek_len_sorted.txt" το οποίο θα έχει όλες τις λέξεις ταξινομημένες ανάλογα με το μήκος τους (από τη μικρότερη στη μεγαλύτερη). Κάθε γραμμή του αρχείου θα περιέχει και μία λέξη.

Άσκηση 6

Βρείτε πόσες λέξεις υπάρχουν με 1 γράμμα, με 2 γράμματα, κτλ.. Φτιάξτε ένα dictionary (keys=μήκος, values=πλήθος λέξεων που έχουν αυτό το μήκος).

Άσκηση 7

Ποιο είναι το πιο συχνό μήκος των λέξεων (δηλαδή το key με μεγαλύτερο value από την Άσκηση 6)

Άσκηση 8

Φτιάξτε έναν generator ο οποίος θα δέχεται σαν όρισμα μία λέξη και θα παράγει ελληνικές λέξεις που είναι αναγραμματισμός τους. Δίνοναι κάποια παραδείγματα χρήσης (έστω anag o ζητούμενος generator)

list(anag('ΜΙΚΡΟ'))
['ΚΟΡΜΙ', 'ΜΙΚΡΟ']
list(anag('ΚΑΝΤΕΡΑΚΗΣ'))
['ΑΡΚΕΣΤΗΚΑΝ']
g = anag('ΜΙΚΡΟ')

print (next(g)) # Τυπώνει 'ΚΟΡΜΙ΄

ΠΡΟΣΟΧΗ! ΜΗΝ παράξετε όλους τους δυνατούς ανασυνδυασμούς των γραμμάτων μίας λέξης. Δεν χρειάζεται πουθενά αυτό.

Άσκηση 9

Υποθέτω ότι θα έχετε ακούσει για την αριθμοσοφία. Σε κάθε γράμμα δίνεται μία αξία. Η αξία μίας λέξης είναι το άθροισμα της αξίας των γραμμάτων. Αφού μάσησα λίγο δυόσμο και επικαλέστηκα τη βοήθεια του Απόλλωνα, μου αποκαλύφθηκε αυτή η αντιστοίχιση σε μορφή 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)

Άσκηση 10

Ποια είναι η λέξη με τη μεγαλύτερη "αξία";

Άσκηση 11

Φτιάξτε έναν 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)) # Τυπώνει 'ΣΥΝΩΣΤΙΣΘΟΥΝ'

Άσκηση 12

Φτιάξτε ένα dictionary. Τα keys θα είναι αξίες και τα values θα είναι λίστα με τις λέξεις που έχουν αυτές τις αξίες.

Άσκηση 13

Σώστε το dictionary της άσκησης 12 σε ένα αρχείο "greek_world_values.json" κάνοντας χρήσης του json serialization.

Άσκηση 14

Κάντε deserialize το αρχείο "greek_world_values.json" της άσκησης 13

Άσκηση 15

Ποια είναι η πιο συχνή "αξία"; Δηλαδή ποια αξία έχει τις περισσότερες λέξεις;

Άσκηση 16

Βρείτε συνδοιασμό δύο λέξεων που έχουν την ίδια αξία με το όνομα + επώνυμό σας. Θεωρήστε ότι το κενό έχει 0 αξία. Για παράδειγμα: η αξία του "ΑΛΕΞΑΝΔΡΟΣ ΚΑΝΤΕΡΑΚΗΣ" είναι 1226. Την ίδια αξία έχουν: "ΔΙΑΥΓΗΣ ΒΟΙΔΟΜΥΓΑ", "ΠΡΟΗΓΜΕΝΟΣ ΓΛΕΝΤΖΕΣ" και "ΓΡΑΝΙΤΕΝΙΟ ΛΕΒΕΝΤΟΠΑΙΔΟ". Ο σουρεαλισμός των αποτελεσμάτων θα εκτιμηθεί ιδιαίτερα. Δεν χρειάζετε να κάνετε κάποιον ειδικό αλγόριθμο για αυτή την άσκηση. Δηλαδή αν γράψετε απλά 2-3 ζευγάρια λέξεων που έχουν την ίδια αξία με το ονοματεπώνυμό σας, είναι αρκετό.

Άσκηση 17

Φτιάξτε έναν generator ο οποίος θα παίρνει το όνομα + επώνυμό σας και θα παράγει συνδυασμούς 2 λέξεων ακριβώς όπως στην άσκηση 16.

  • Hint 1: Μπορείτε να πάρετε την αξία του ονοματεπώνυμου, έστω Α, και να φτιάξετε δύο τυχαίους αριθμούς Β και Γ τέτοιους ώστε Β+Γ=Α. Στη συνέχεια παίρνετε μία τυχαία λέξη με αξία Β και μία τυχαία λέξη με αξία Γ. Εννώνετε τις δύο λέξεις με κενό και το κάνετε yield.
  • Hint 2: Πως παίρνω ένα τυχαίο αντικείμενο από μία λίστα:
import random
random.choice(['κιθαρίστας', 'ντράμερ'])

Θα πρέπει να μπορώ να γράφω δηλαδή (τα παραδείγματα εδώ είναι τυχαία):

f = funny_random_generator('ΑΛΕΞΑΝΔΡΟΣ ΚΑΝΤΕΡΑΚΗΣ')
next(f)
"ΔΙΑΥΓΗΣ ΒΟΙΔΟΜΥΓΑ"

next(f)
"ΠΡΟΗΓΜΕΝΟΣ ΓΛΕΝΤΖΕΣ"

Άσκηση 18

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 αρχείο απαντήστε στο ίδιο ερώτημα.

Άσκηση 19

Χρησιμοποιώντας τα TSV και JSON αρχεία της άσκησης 18. Βρείτε ποιο γονίδιο (το όνομα του γονιδίου είναι στήλη με τίτλο symbol) έχει τα περισσότερα alias_symbol. Οι τιμές του alias_symbol χωρίζονται με "|". π.χ: το γονίδιο "AACS" έχει 3 alias_symbol: "FLJ12389|SUR-5|ACSF1".

Άσκηση 20

Χρησιμοποιώντας τα TSV και JSON αρχεία της άσκησης 18. Βρείτε τα ονόματα (στήλη symbol) των γονιδίων που έχουν το ίδιο refseq_accession.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment