Skip to content

Instantly share code, notes, and snippets.

@kantale
Last active March 5, 2019 10:10
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/93df74b2b69890b57677e43158994a1a to your computer and use it in GitHub Desktop.
Save kantale/93df74b2b69890b57677e43158994a1a to your computer and use it in GitHub Desktop.
4th assignment python

Άσκηση 1

Δίνεται η παρακάτω λίστα με 100 αριθμούς:

l = [0, -1, 3, 3, 2, -2, -4, 4, 2, -1, -2, 3, 2, -1, 0, 3, 5, -3, 5, -3, 
-4, -4, 5, -5, -4, 2, 1, 1, -1, 1, 5, 5, 2, 0, 0, 0, -3, 2, 1, 5, 3, 2, 
2, -5, -2, -3, 1, -5, -4, 3, 3, -5, 2, 0, -2, -1, -1, 1, 2, 3, -3, 4, -2, 
-4, 0, 0, 0, -4, -3, -1, -1, -2, -4, -3, 0, 4, 1, 4, -4, 3, 5, 5, -1, -2, 
0, 3, -1, -2, 3, 5, 2, -3, -2, 1, 1, 5, -4, -5, -5, -3]

Αν αθροίσουμε τα 2 πρώτα στοιχεία το αποτέλεσμα θα είναι 0 + -1= -1 αν αθροίσουμε τα 3 πρώτα το αποτέλεσμα θα είναι 0 + -1 + 3 = 2. Για ποιά τιμή Ν (από το 1 μέχρι το 100), αν αθροίσουμε τα πρώτα Ν στοιχειά του πίνακα, το αποτέλεσμα θα πάρει τη μέγιστη δυνατή τιμή;

Άσκηση 2

Ας υποθέσουμε την ίδια λίστα με την άσκηση 1. Ένα pacman ξεκινάει από την αρχή της λίστας με κατεύθυνση προς το τέλος και "τρώει" τους αριθμούς. Για κάθε αριθμό που τρώει "κερδίζει" και τόσους πόντους όσο και ο αριθμός που έφαγε. Οπως βλέπετε οι πόντοι μπορεί να είναι και αρνητικοί. Το σκορ του pacman είναι το άθροισμα των αριθμών που έχει φάει. Δηλαδή στην αρχή τρώει το "0" και το σκορ του γίνεται "0" μετά τρώει το "-1" και το σκορ του γίνεται "-1", μετά τρώει το "3" και το σκορ του γίνεται "2" (-1+3) μετά τρώει το "3" και το σκορ του γίνεται 5 (2+3), κτλ.. Όταν φτάσει στο τέλος της λίστας, υπάρχει μία μαγική πύλη (γνωστό από το pacman) που το πάει στην αρχή της λίστας και συνεχίζει να τρώει τους ίδιους αριθμούς. Πόσους αριθμούς θα έχει φάει το pacman όταν το σκορ του θα γίνει 100;

  • Προσοχή 1. Δεν πρέπει να σταματήσετε όταν το σκορ ξεπεράσει το 100. Αλλά όταν φτάσει το 100 ακριβώς. Δηλαδή, πόσα συνολικά νούμερα θα έχει φάει το pacman όταν το άθροισμα θα έχει φτάσει ακριβώς 100.

Άσκηση 3

Έχουμε την ίδια λίστα με την άσκηση 1 και το ίδιο pacman με την άσκηση 2. Τώρα όμως το pacman έχει τη συμπεριφορά πινγκ-πονγκ. Δηλαδή όταν φτάσει στο τέλος της λίστας, δεν.. τηλεμεταφέρεται στην αρχή όπως στην άσκηση 2, αλλά αλλάζει κατεύθυνση και τρώει από το τέλος προς την αρχή. Δηλαδή το pacman θα φάει το προτελευταίο (-5) μετά το τελευταίο (-3) και μετά αλλάζει κατέυθυνση και τρώει ξανά το προτελευταίο (-5) μετά το προ-προτελευταίο (-5) μέχρι να φτάσει στην αρχή (0) μετά πάλι αλλάζει κατεύθυνση και τρώει το δεύτερο (-1) μετά το τρίτο (3) κτλ. Το pacman συνεχώς αλλάζει κατεύθυνση όταν φτάνει στο τέλος ή στην αρχή της λίστας. Πόσους αριθμούς θα έχει φάει το pacman όταν το σκορ του θα γίνει 100;

Άσκηση 4

Από όλες τις δυνατές υπο-ακολουθίες της λίστας της άσκησης 1, ποια έχει το μεγαλύτερο άθροισμα; Ως υπο-ακολουθία ορίζεται οποιοδίποτε υποσύνολο από συνεχόμενα στοιχεία (π.χ. [0, -1, 3, 3, 2] , [1, 5, -4, -5], [0, 0, 0].

Άσκηση 5

Έστω ότι έχουμε ένα χρωμόσωμα το οποίο έχει μέγεθος μόνο 100 νουκλεοτίδια. Μετά από ένα πείραμα αλληλούχισης πείραμε 20 reads δηλαδή 20 αναγνώσεις από διάφορες περιοχές του χρωμοσώματος. Τρέξαμε alignment και βρήκαμε που είναι η αρχή και που το τέλος κάθε read:

reads = [(27, 46),
 (19, 35),
 (12, 32),
 (38, 50),
 (88, 96),
 (17, 37),
 (80, 83),
 (85, 98),
 (29, 42),
 (25, 31),
 (12, 31),
 (16, 21),
 (4, 18),
 (36, 56),
 (47, 53),
 (37, 54),
 (83, 95),
 (64, 69),
 (12, 16),
 (59, 75)]

Αυτή η λίστα περιέχει 20 tuples. Το κάθε tuple περιέχει την αρχή και το τέλος κάθε read. Δηλαδή το πρώτο read έγινε aligned στη περιοχεή από 12 μέχρι ΚΑΙ 50 του χρωμοσώματος. Όλο το χρωμόσωμα είναι από το 1 μέχρι και το 100. Όπως μπορείτε να παρατηρήσετε κάποιες περιοχές του χρωμοσώματος δεν έχουν διαβαστεί από κανένα read. Ποιες είναι αυτές; Δηλαδή ποιες είναι οι θέσεις που δεν καλύπτονται από κανένα read;

Άσκηση 6

Έστω η λίστα με τα reads από την άσκηση 5. Το coverage μιας θέσης του γονιδιώματος ορίζεται ως το άθροισμα των reads που το περιέχουν (μερικές φορές αντί για coverage, αναφέρεται ως depth). Ποιες θέσεις του γονιδιώματος έχουν το μεγαλύτερο coverage;

Άσκηση 7

Έστω η λίστα με τα reads από την άσκηση 5. Ποιο είναι το average coverage για όλες τις θέσεις (1 μέχρι 100) του χρωμοσώματος; Δηλαδή έστω ότι η θέση 1 έχει coverage 4, η θέση 2 έχει coverage 0, η θέση 3 έχει coverage 6, ... , και η θέση 100 έχει coverage 20, τότε θα πρέπει να υπολογίσετε:

(4+0+6+.....20) / 100

Άσκηση 8

Δίνεται το DNA codon table σε python dictionary (κλεμμένο από εδώ)

table = { 
        'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M', 
        'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T', 
        'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K', 
        'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R',                  
        'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L', 
        'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P', 
        'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q', 
        'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R', 
        'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V', 
        'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A', 
        'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E', 
        'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G', 
        'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S', 
        'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L', 
        'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_', 
        'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W', 
    } 

Γράψτε μία συνάρτηση η οποία παίρνει μία ακολουθία DNA και επιστρέφει τη πρωτεϊνική της ακολουθία με βάση τον παραπάνω πίνακα. Η συνάρτηση θα πρέπει να πετάει exception αν:

  • Κάποιο από τα γράμματα της ακολουθίας δεν είναι ACGT
  • Το μήκος της ακολουθίας δεν διαιρείται με το 3

Άσκηση 9

Μετά από χρόνια ανάλυσης, ανακαλύπτετε μία ακολουθία DNA η οποία ευθύνεται για τη πλατυποδία, μία ασθένεια στην οποία έχετε αφιερώσει τη καριέρα σας. Η ακολουθία αυτή είναι: CCGGGAGCCTCCACCGAAC. Με χαρά και προσμονή βάζετε την ακολουθία αυτή στη συνάρτηση της άσκηση 8 για να βρείτε τη πρωτεϊνική της ακολουθία αλλα με τρόμο βλέπετε ότι πετάει exception επειδή το μέγεθός της είναι 19 το οποίο δεν διαιρείται με 3. Μετά από άλλους επιπλέον μήνες κοπιαστικής έρευνας ανακαλύπτετε ότι όντως λοίπουν 2 νουκλεοτίδια από τη πολύτιμη ακολουθία σας (οπότε θα πρέπει να έχει μέγεθος 21, το οποίο διαιρείται με 3). Δυστυχώς δεν μπορείτε να βρείτε ποια νουκλεοτίδια είναι αυτά. Ξέρετε όμως ότι αυτά θα πρέπει να βρίσκονται είτε και τα 2 στην αρχή, είτε και τα δύο στο τέλος, είτε το ένα στην αρχή και το άλλο στο τέλος. Επίσης ανακαλύπτετε ότι η πρωτεϊνική ακολουθία θα πρέπει να έχει τουλάχιστο ένα "Υ" (Tyrosine). Ποια είναι λοιπόν η σωστή και ολοκληρωμένη ακολουθία των 21 νουκλεοτιδίων;

Άσκηση 10

Αφού βρήκατε την ακολουθία της άσκησης 9 και θεωρείστε πλέον μια αυθεντία στη γενετική της πλατυποδίας, είπατε να επεκταθείτε και σε άλλους οργανισμούς. Εκεί ανακαλύπτετε την ακολουθία TGACGAGTCAATCTTCCAGGA η οποία έχει σημαντικό ρόλο στην εκδήλωση πλατυποδίας σε σκουλίκια (γιατί όχι;). Μετράτε την ακολουθία και έχει μέγεθος 21 όπως θα περιμένατε αλλά έχει ένα άλλο πρόβλημα: Η ακολουθία ανήκει σε ένα πλασμίδιο, ένα μόριο δηλαδή που έχει κυκλικό DNA. Άρα η ακολουθία σας είναι κυκλική. Εσείς δεν ξέρετε ποια είναι η αρχή του κύκλου όπου θα γίνει η μεταγραφή. Άρα δεν ξέρετε για παράδειγμα αν θα "ξετυλιχτεί" ως: TGACGAGTCAATCTTCCAGGA ή ως ΑTGACGAGTCAATCTTCCAGG (ξεκινάει από το δεύτερο νουκλεοτίδιο και τελειώνει στο πρώτο) ή με οποιοδήποτε άλλο κυκλικό τρόπο. Εσείς το μόνο που ξέρετε είναι ότι τα τελευταία 2 αμινοξέα της πρωτείνης που παράγεται είναι ίδια. Ποια είναι λοιπόν η πρωτεΐνη που παράγεται;

Άσκηση 11

Δίνεται το παρακάτω string το οποίο έχει λίστα με γονίδια, μία περιγραφή, καθώς και τη θέση τους στο γονιδίωμα:

genes = '''
ADTRP: encoding protein Androgen-dependent TFPI-regulating protein
APOM: encoding protein Apolipoprotein M (6p21.33)
C6orf10: encoding protein Uncharacterized protein C6orf10 (6p21.32)
C6orf62: chromosome 6 open reading frame 62 (6p22.3)
C6orf89: chromosome 6 open reading frame 89 (6p21.2)
CDKAL1: CDK5 regulatory subunit associated protein 1 like 1 (6p22.3)
COL11A2: collagen, type XI, alpha 2(6p21.3)
CYP21A2: cytochrome P450, family 21, subfamily A, polypeptide 2 (6p21.33)
DHX16: DEAH-box helicase 16 (6p21.33)
DOM3Z: Decapping exoribonuclease (6p21.33)
DSP: Desmoplakin gene linked to cardiomyopathy (6p24.3)
ELOVL5: ELOVL fatty acid elongase 5 (6p12.1)
FBXO9: F-box protein 9 (6p12.1)
G6B: Protein G6b (6p21.33)
GCNT2: N-acetyllactosaminide beta-1,6-N-acetylglucosaminyl-transferase (6p24.3)
GMDS: GDP-mannose 4,6-dehydratase (6p25.3)
HCG4P11: HLA complex group 4 pseudogene 11
HFE: hemochromatosis (6p22.2)
HIST1H2AH: histone cluster 1 H2A family member h (6p22.1)
'''
  • Χρησιμοποιώντας regular expressions εξάγεται μία λίστα με όλα τα γονίδια απο το παραπάνω string.
  • Χρησιμοποιώντας regular expressions εξάγεται τη θέση του κάθε γονιδίου (υπάρχει στο τέλος κάθε γραμμή: π.χ.: 6p22.3). Αν για κάποια γονίδια δεν υπάρχει αυτή η θέση απλά αγνοήστε τα.

Άσκηση 12

Το IUPAC έχει ορίσει τα γράμματα που συμβολίζουν τα διάφορα αμινοξέα:

IUPAC nucleotide code Base
A Adenine
C Cytosine
G Guanine
T (or U) Thymine (or Uracil)
R A or G
Y C or T
S G or C
W A or T
K G or T
M A or C
B C or G or T
D A or G or T
H A or C or T
V A or C or G
N any base
. or - gap

Όπως φαίνετε στον πίνακα υπάρχουν γράμματα που συμβολίζουν πολλά πιθανά αμινοξέα. Για παράδειγμα: Μία ακολουθία MTVA μπορεί να κάνει match την ακολουθία ATGA αλλά όχι την ακολουθία ATΤA (το τρίτο γράμμα πρέπει να είναι Α or C or G). Μία ακολουθία η οποία περιέχει γράμματα που αντιστοιχούν σε περισσότερα από 1 αμινοξέα, ονομάζεται μοτίφ. Φτιάξτε μία συνάρτηση η οποία θα δέχεται σαν ορίσματα ένα μοτίφ και μία ακολουθία που περιέχει μόνο τα γράμματα "A", "C", "G", "T" και "." (το "." σημαίνει άγνωστο, άρα θα μπορεί να κάνει match πάντοτε για αυτή τη θέση). Η συνάρτηση θα πρέπει να χρησιμοποιεί regular expressions και να επιστρέφει True/False ανάλογα με το αν κάνει match η ακολουθία το μοτίφ ή όχι. Δηλαδή θα πρέπει να φτιάξετε ένα regular expression το οποίο κάνει match κάθε ακολουθία που είναι συμβατή με το motif. Μετά απλά θα πρέπει να επιστερέψεται True/False ανάλογα με το αν το regular expression που φτιάξατε έκανε match την ακολουθία που δόθηκε.

Άσκηση 13

Κάντε το ίδιο με την άσκηση 12, αλλά η συνάρτηση θα δέχεται μόνο ένα όρισμα και αυτό θα είναι το μοτίφ. Η συνάρτηση θα πρέπει να επιστρέφει μία συνάρτηση η οποία θα δέχεται μία ακολουθία και θα επιστρέφει True/False ανάλογα με το αν η ακολουθία έκανε match το μοτίφ ή όχι. Για παράδειγμα θα μπορούμε να γράψουμε:

matcher = get_matcher('MTVA')
print (matcher('ATGA'))
True

print (matcher('ATΤA'))
False

Δίνεται ένα παράδειγμα μίας συνάρτησης που επιστρέφει μία συνάρτηση:

def f(x):
   def g(y):
      return x+y
   return g
   
a=f(3)
print (a(5))
>>> 8

Άσκηση 14

Ας υποθέσουμε ότι υπάρχει ένα mutation σε κάποια θέση του γονιδιώματος, το οποίο έχει δύο αλληλόμορφα: το A και το B. Ας ορίσουμε ως pB τη πιθανότητα, να εμφανιστεί το αλληλόμορφο Β σε ένα σετ από τα 2 σετ χρωμοσωμάτων που έχει ο άνθρωπος. Τότε η πιθανότητα να έχει δύο B (ομόζυγος) είναι pB**2. Επίσης η πιθανότητα να έχει ένα Α και ένα Β (ετερόζυγος) είναι (1-pB)*pB. Φτιάξτε μία συνάρτηση η οποία θα παίρνει δύο ορίσματα: το pB και το Ν. Η συνάρτηση θα επιστρέφει μία λίστα με τους γονότυπους από Ν "τυχαίους" ανθρώπους. Ο κάθε γονότυπος θα είναι είτε (Α,Α), είτε (Α,Β), είτε (Β,Β). Όπως είπαμε η πιθανότητα να "εμφανιστεί" ένα Β θα πρέπει να είναι pB. Η πιθανότητα να "εμφανιστεί" ένα Α είναι 1-pΒ.

Η παρακάτω εντολή παράγει ένα τυχαίο δεκαδικό (float) αριθμό από το 0 μέχρι το 1.

import random
random.random()

Η παρακάτω εντολή τυπώνει "κιθαρίστας" με πιθανότητα 80% και "ντράμερ" με πιθανότητα 20%.

if random.random() < 0.8:
   print ('κιθαρίστας')
else:
   print ('ντράμερ')

ΠΡΟΣΟΧΗ 1 Θεωρούμε ότι τα δύο χρωμοσώματα έχουν "ανεξάρτητες τιμές". Δηλαδή η πιθανότητα το ένα να είναι Β είναι ανεξάρτητη από τη πιθανότητα το άλλο να είναι Β.

ΠΡΟΣΟΧΗ 2 Κάποια βασικά: Το σύνολο όλου του γενετικού υλικού ενός οργανισμού ονομάζεται γονιδίωμα. Ο άνθρωπος έχει 2 σετ από autosome χρωμοσώματα στο γονιδίωμά του. Το κάθε σετ έχει 22 χρωμοσώματα. Το ένα σετ το έχουμε πάρει από τον πατέρα μας και το άλλο από τη μητέρα μας. Θεωρούμε ότι η μετάλλαξη για την οποία μιλάει αυτή η άσκηση εμφανίζεται σε μία και μόνο μία θέση σε όλο το γωνιδίωμα. Δεν έχει σημασία σε ποιο χρωμόσωμα εμφανίζεται. Το θέμα είναι ότι η μετάλλαξη αυτή μπορεί είτε να υπάρχει, είτε να μην υπάρχει σε έναν άνθρωπο. Αν υπάρχει τότε μπορεί να εμφανιστεί με δύο τρόπους: ως ετερόζυγη (Α/Β), είτε ως ομόζυγη (Β/Β). Αν δεν υπάρχει τότε έχουμε Α/Α. Α/Β σημαίνει ότι το ένα σετ από χρωμοσώματσα δεν έχει τη μετάλλαξη, ενώ το άλλο την έχει (ή αλλιώς έχουμε πάρει τη μετάλλαξη ή από τον πατέρα μας ή από τη μητέρα μας). Β/Β σημαίνει ότι η μετάλλαξη υπάρχει και στα δύο σετ από χρωμοσώματα (ή αλλιώς την μετάλλαξη την έχουμε κληρονομήσει και από τον πατέρα μας και από τη μητέρα μας). Α/Α σημαίνει ότι ΔΕΝ έχουμε κληρονομήσει τη μετάλλαξη. Τα Α/Α, Α/Β και Β/Β ονομάζονται γονότυπος. Τα Α και Β ονομάζονται αλληλόμορφα.

Ένας άλλος τρόπος να διατυπωθεί η άσκηση είναι:

Μία μπάλα μπορεί να είναι είτε άσπρη, είτε μαύρη. Η πιθανότητα να είναι μαύρη μία μπάλα είναι pB και η πιθανότητα να είναι άσπρη είναι 1-pB. Ένα κουτί έχει 2 μπάλες. Άρα ένα κουτί μπορεί να έχει είτε Άσπρη/Άσπρη, είτε Άσπρη/Μαύρη είτε Μαύρη/Μαύρη μπάλες. Η πιθανότητα η μία μπάλα να είναι μαύρη είναι ανεξάρτητη από τη πιθανότητητα η άλλη μπάλα να είναι μαύρη στο ίδιο κουτί. Φτιάξτε μία συνάρτηση που να παίρνει δύο παρπαμέτρους: pB και Ν. Η συνάρτηση επιστρέφει Ν κουτιά από ζευγάρια από μπάλες (ή αλλιώς μία λίστα μεγέθους Ν όπου το κάθε αντικείμενο της λίστας θα είναι ένα tuple με δύο strings). Η πιθανότητα κάθε μπάλα να είναι μαύρη είναι pB.

Άσκηση 15

Συνεχίζουμε από την εκφώνηση της άσκησης 14. Ας υποθέσουμε ότι αν ένας άνθρωπος έχει ένα (ή παραπάνω) 'B' τότε έχει αυξημένες πιθανότητες να έχει κάποια ασθένεια. Ορίζουμε τρεις πιθανότητες:

  • pAA = Η πιθανότητα ένας άνθρωπος να έχει (A,A) και να έχει την ασθένεια
  • pAB = Η πιθανότητα ένας άνθρωπος να έχει (Α,Β) και να έχει την ασθένεια
  • pBB = Η πιθανότητα ένας άνθρωπος να έχει (Β,Β) και να έχει την ασθένεια

ισχύει ότι: pΑΑ < pAB < pBB

Φτιάξτε μία συνάρτηση η οποία θα παίρνει 5 παραμέτρους: το Ν, το pB, το pAA, το pAB και το pBB. H συνάρτηση θα πρέπει να επιστρέφει μία λίστα με τον γονότυπο από Ν ανθρώπους (όπως ακριβώς στην άσκηση 14) μαζί με το αν έχουν την ασθένεια ή όχι. Δηλαδη θα πρέπει να επιστρέφει μία λίστα της μορφής:

a = [
   ('A', 'A', False), # είναι Α/Α και ΔΕΝ έχει την άσθένεια,
   ('A', 'B', True), # είναι A/B και Έχει την ασθένεια,
   ...
] 

Το αν έχουν την ασθένεια (ή όχι) καθορίζεται τυχαία, ανάλογα με τις παραμέτρους pAA, pAB, pBB. Δηλαδή παίρνουμε έναν άνθρωπο και ελέγχουμε τι γονότυπο έχει. Ας υποθέσουμε ότι έχει Α/Β. Άραγε έχει την ασθένεια; Για να το βρούμε αυτό παίρνουμε έναν καινούργιο τυχαίο αριθμό (random.random()) και ελέγχουμε αν αυτός ο αριθμός είναι μικρότερος από pAB. Αν είναι τότε αυτός ο άνθρωπος έχει την ασθένεια. Αν όχι τότε δεν έχει την ασθένεια. Ένα άλλο παράδειγμα: Παίρνουμε έναν άλλο άνθρωπο και ελέγχουμε τον γονότυπό του. Ας υποθέσουμε ότι είναι A/A, άραγε έχει την ασθένεια; Για να το βρούμε παίρνουμε έναν άλλο και καινούργιο τυχαίο αριθμό (random.random()) και κοιτάμε αν αυτός ο αριθμός είναι μικρότερος από το pAA. Αν είναι τότε ο άνθρωπος αυτός έχει την ασθένεια, αλλιώς δεν την έχει.

ΠΡΟΣΟΧΗ 1! το pAB ΔΕΝ είναι η πιθανότητα να έχει γονότυπο Α/Β αλλά η πιθανότητα ΑΝ έχει γονότυπο Α/Β τότε να έχει την ασθένεια.

Ένας άλλος τρόπος να το δούμε (με μπάλλες). Έχετε ένα κουτί με 100 ζευγάρια από μπάλες. Κάθε μπάλα του ζευγαριού μπορεί να είναι είτε άσπρη, είτε μαύρη. Η πιθανότητα μία μπάλα να είναι μαύρη είναι pB. Κάθε ζευγάρι μπορεί να είναι είτε Άσπρη/Άσπρη, είτε Άσπρη/Μαύρη, είτε Μαύρη/Μαύρη. Κάθε ζευγάρι μπορεί να είναι είτε Κινέζικης, είτε Ελληνικής κατασκευής. Οι πιθανότητες ένα ζευγάρι να είναι Ελληνικής κατασκευής εξαρτιώνται από το χρώμμα τους. Η πιθανότητα ένα ζευγάρι να είναι Άσπρη/Άσπρη και να είναι Ελληνικής κατασκευής είναι pAA, η πιθανότητα ένα ζευγάρι να είναι Ελληνικής κατασκευής και να είναι Άσπρη/Μαύρη είναι pAB και η πιθανότητα ένα ζευγάρι να είναι Ελληνικής κατασκευής και να είναι Μαύρη/Μαύρη είναι pBB.

Άσκηση 16

Συνεχίζουμε από την εκφώνηση της άσκησης 15 και κάνουμε τώρα την εξής υπόθεση: Αν μετρήσουμε τον μέσο όρο των "Β" σε αυτούς που έχουν την ασθένεια και το μέσο όρο των "Β" σε αυτούς που ΔΕΝ έχουν την ασθένεια, θα πρέπει αυτοί που έχουν την ασθένεια να έχουν μεγαλύτερο μέσο όρο. Θα πρέπει να φτιάξετε μία συνάρτηση η οποία θα παίρνει ως παράμετρο τη λίστα που επιστρέφει η συνάρτηση της άσκησης 15, και να επιστρέφει True ή False ανάλογα με το αν η παραπάνω υπόθεση είναι σωστή ή όχι.

Για παράδειγμα έστω ότι οι "υγιείς" είναι healthy = ['AA', 'AA', 'AB'] και οι "ασθενείς" είναι disease = ['AB', 'AA', 'BB'] Τότε: Ο μέσος όρος των Β στους healthy είναι: 1/6 και ο μέσος όρος των Β στους disease είναι: 3/6. Αφού 3/6>1/6 τότε η συνάρτηση επιστρέφει True. Διαφορετικά επιστρέφει False.

Άσκηση 17

Συνεχίζουμε από την εκφώνηση της άσκηση 16. Τώρα μπορούμε να κάνουμε το εξής πείραμα: Αν έχουμε τους 5 παραμέτρους της συνάρτησης της άσκησης 15, μπορούμε να δούμε με τη συνάρτηση της άσκησης 16 αν η υπόθεση της άσκησης 16 είναι σωστή. Φυσικά αυτό είναι μία μοναδική παρατήρηση. Θα ήταν ενδιαφέρον να επαναλάβουμε αυτή τη διαδικασία πολλές φορές και να μετρήσουμε το ποσοστό τους που η υπόθεση ΔΕΝ ήταν σωστή. Φτιάξτε μία συνάρτηση η οποία να παίρνει 6 ορίσματα: τα ορίσματα της άσκησης 15 και ένα όρισμα Τ το οποίο είναι πόσες φορές θέλουμε να επαναλάβουμε το πείραμα. Η συνάρτηση θα επιστρέφει έναν αριθμό από το 0 μέχρι 100 το οποίο θα είναι το ποσοστό των Τ επαναλήψεων για τις οποίες η υπόθεση της άσκησης 16 είναι Λάθος.

Αν έχετε υλοποιήσει τις 14,15,16,17 συγχαρητήρια μόλις υλοποιήσατε ένα False Discovery Rate, ή αλλιώς FDR

Άσκηση 18

Αφού έχουμε κάνει τις ασκήσεις 14,15,16,17, ήρθε η ώρα να απαντήσουμε σε ένα βιολογικό ερώτημα! Ας υποθέσουμε ότι οι πιθανότητες pAA, pAB και PBB είναι:

  • pAA = 0.1
  • pAB = 0.15
  • pBB = 0.2

Η ερώτηση είναι: ποια πρέπει να είναι η μικρότερη τιμή της πιθανότητας pB, ώστε να μπορώ να επιβεβαιώσω τη συσχέτιση με την ασθένεια με FDR<0.05, σε έναν πληθυσμό με Ν=1000 και Τ=2000; Για να απαντήσουμε στην ερώτηση αυτή, τρέχτε τη συνάρτηση της άσκησης 17 για διάφορες τιμές του pB. Ξεκινήστε από 0.01 και αυξήστε το με βήμα 0.005. Για κάθε τιμή του pB υπολογίστες το FDR. Όταν το FDR πάρει τιμή κάτω από 0.05 σταματήστε και τυπώστε τη τιμή του pB που βρήκατε.

Φτιάξτε μία συνάρτηση η οποία παίρνει τις παραμέτρους: N, T, pAA, pAB, pBB και επιστρέφει το μικρότερη τιμή του pB ώστε να μπορεί να επιβεβαιωθεί η συσχέτιση με την ασθένεια με FDR<0.05. Η συνάρτηση θα πρέπει να κάνει ό,τι και αυτό το βήμα. Δηλαδή ξεκινάει με pB=0.01, υπολογίζει το FDR και αν αυτό είναι μεγαλύτερο από 0.05 αυξάνει το pB με βήμα 0.005 και συνεχίζει. Όταν βρει FDR<0.05 σταματάει και επιστέφει το pB που βρήκε.

Άσκηση 19

Υλοποιήστε τις ασκήσεις 14,15,16,17,18 σε numpy. Στις υλοποιησεις σας σε numpy προσπαθήστε να χρησιμοποιήστε όσο το δυνατον λιγότερο for και while. Aν τις έχετε υλοποιήσει σε numpy, υλοποιήστες τις σε κλασσικές δομές python.

Άσκηση 20

Συγκρίνετε την απόδοση των ασκήσεων 14,15,16,17,18 μεταξύ numpy και σε κλασσικές δομές python. Αυτό μπορείτε να το κάνετε με τον εξής τρόπο: Φτιάξτε τη συνάρτηση classic_python() η οποία υλοποιεί τη άσκηση 18 με τις κλασσικές δομές python και τη συνάρτηση np_python() η οποία λύνει την άσκηση 18 με numpy.

Στη συνέχεια μπορείτε να μετρήσετε πόσο χρόνο έκανε κάθε συνάρτηση να τρέξει ως εξής:

from timeit import default_timer as timer

start = timer()
papades()
end = timer()
print (end-start) # Τυπώνει πόση ώρα έκανε να τρέξει η papades() σε δευτερόλεπτα.  

Τυπώστε πόσο χρόνο έκανε η classic_python() και πόσο χρόνο έκανε η np_python().

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