Anteprima
Vedrai una selezione di 7 pagine su 26
Banche Dati Pag. 1 Banche Dati Pag. 2
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Banche Dati Pag. 6
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Banche Dati Pag. 11
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Banche Dati Pag. 16
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Banche Dati Pag. 21
Anteprima di 7 pagg. su 26.
Scarica il documento per vederlo tutto.
Banche Dati Pag. 26
1 su 26
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

‘AATT’

-“s.find(substring)”= cerca substring all’interno di “s” e restituisce

l’indice della prima occorrenza o -1 se non è presente

s1=’SpamSpamSpam’.

ESEMPIO:

i= s1.find(‘am’)i=2

tipi di dati composti:

• Sequences

• Str

• List

• Tuples

• []

-“list”= collezioni ordinate di elementi. Gli elementi possono essere di

tipi diversi all’interno della stessa lista. A ciascun elemento è associato

un indice (come nelle stringhe). Le liste sono modificabili. La stringa

rispetto alla lista non si può modificare. Con le liste si possono fare

delle strutture un po' più complicate.

Struttura list: L=[‘A’, ‘C’, ‘G’, ‘T’]

Modifica list: L[ind]= X modifica X

Metodi che agiscono sulle liste per modificarli: L.append(X) aggiunge X

alla fine della lista.

Ricerca in list: L.count(X) conta quante volte l’elemento X compare

nella lista.

Aliasing: se definisco NOME1 = NOME2 non vado a creare una copia

ma creo un sinonimo; perciò se modifico il contenuto di uno causo la

modifica del secondo. seqs

ESEMPIO 12_1: “La variabile contiene una lista di sequenze

proteiche. Scrivere un programma che calcola:

• La carica elettrica di ciascuna proteina.

• La carica media delle sequenze.

• La deviazione standard di questo valore.”

L=[…]

i= 0

while i< len(L):

S=S+L[i]

i= i+1

m= S/lun(L)

modifichiamolo utilizzando for:

L=[…]

S= 0

for X in L:

S= S+X

m= S/lun(L)

modifichiamolo ulteriormente utilizzando def:

def media (l):

s= 0

for X in L:

S= S+X

m= S/lun(X)

return m

L=[…]

S= 0

for X in L:

S= S + (X – media[L])**2

signe= (S/lun(L))**0.5

[questo programma è particolarmente lento da eseguire]

RISPOSTA ESERCIZIO 12_1: #noché: protein=[‘…’,’…’,’…’]

seqs=[‘…’,’…’,’…’] #anche: charges=[…]

chgs=[-1,+2,…]

for protein in proteins:

charge= get chg(protein)

charges_appeand(charge)

print(media(charges))

print(deviazione(charges))

ESEMPIO 12_2:”Scrivere un programma che a partire da una ricerca in

banca dati di sequenze proteiche calcola il valore medio e la

deviazione standard delle sequenze individuate:

• Scarica le sequenze dalla banca dati (Entrez Direct)

• Leggi i file

• Calcola le cariche (es12_1)”

RISPOSTA:

#!/bin/bash

esearch -db protein -quesry ‘…’ \ efetch -format fasta > proteins.fasta

.\calcola_carica.py

proteins= leggi(‘proteins.fasta’) Lezione 7

Alberi filogenetici: grafo che rappresenta le relazioni evolutive tra gli

elementi che lo compongono (organismi, sequenze nucleotidiche,

sequenze proteiche,…)

• Costituito da nodi e rami, ciacun ramo unisce due nodi [vedi

slide].

La domanda è: se ho n elementi e devo disporli su un albero, di quanti

alberi necessito? Formula: N = [(2N-5)!]/[2 (N-3)!]

N-3

alberi

Algoritmo UPGMA: calcoliamo una tabella che ci da la distanza tra gli

elementi più lontani e quelli più vicini.

Algoritmo Neighbor-Joining: iniziare la struttura dell’albero come

quella di un grafo a stella. Così provo a collegare ogni elemento

insieme provando tutte le possibili coppie creando un albero.

• Raggruppa gli elementi in coppia.

• Calcola la somma delle distanze lungo l’albero.

• Sceglie la coppia che minimizza la somma delle lunghezze di tutti

i rami dell’albero.

• Sostituisce i 2 nodi terminali selezionati con l’ancestore comune.

• [vedi slide].

Il metodo UPGMA tende a creare alberi (algoritmi) a scala. I metodi

UPGMA e Neighbor-Joining utilizzano come unica informazione la

distanza tra coppie di sequenze. Tutta la restante informazioni

contenute [vedi slide].

Metodo a massima parsimonia: calcola l’albero che richiede il minor

numero possibile di sostituzioni per spiegare la differenza tra le varie

sequenze.

Disposizione nodi: Metodo di Fitch: [vedi slide] se si conta le volte

che lungo gli alberi abbiamo una lettera mutata vuol dire che ha

seguito il metodo di massima parsimonia. Viene così scelta la

configurazione che minimizza le operazioni di unione.

Massima probabilità: dato un certo set di dati osservati si cercano i

parametri del modello che massimizzano la probabilità di osservare

[vedi slide].

Massima probabilità in alberi filogenetici: la probabilità degli

alberi è dettata dalla probabilità di avere i singoli amminoacidi. l’albero

con un prodotto di probabilità più alto sarà quello migliore.

Tree-puzzle: algoritmo a massima probabilità per il calcolo di alberi

filogenetici. La soluzione è ottenuta con una procedura di 3 fasi:

• Definizione di tutti i possibili alberi di 4 sequenze.

• Definizione di un albero completo combinando gli alberi di 4

sequenze.

• La fase 2 viene ripetuta N volte. L’albero finale viene definito

attraverso il confronto tra gli N alberi.

Una volta disposte le sequenze le disponiamo in ordine casuale.

Prendendo le prime 4 costituiamo un albero genetico; dopodiché

sovrapponiamo l’albero nuovo a quello dato inizialmente. Il

procedimento continua finché non si ottiene il risultato più alto; il

punteggio dipende da come vengono disposte le sequenze. Di tutti gli

alberi costruiti troveremo delle sequenze invariate.

Orologio molecolare: ipotesi che le mutazioni del DNA avvengano ad

una frequenza costante. Questo permette di calcolare la distanza

temporale tra due sequenze che derivano da un ancestore comune se

la frequenza di mutazione è nota.

Libro consigliato: “on the origins of species, Charles Darwin” &

“Evolution of increased complexity in a molecular machine” & “the

anchestor’s tale”.

PROGRAMMAZIONE:

f= open(NomeFile, Prop): crea un oggetto di tipo file di nome “f”

(“f” è il nome di una variabile, quindi segue le stesse regole). NomeFile

è una stringa che contiene il nome del file (se necessario con relativo

percorso nel file system). “prop” è una stringa che indica come il file

viene aperto (modalità e tipo).

È possibile specificare solo la probabilità e non il tipo. Nel caso il

default è “text”. Se si vuole specificare il tipo è necessario specificare

anche la modalità.

-“file.read([N])”: legge N caratteri, o fino la fine del file se N non è

specificato. Il fine riga, l’operazione di andare a capo, è un carattere e

si indica con “\n” (carattere speciale). E questo comando legge finchè

non legge questo carattere.

-“file.readline([N])”: legge una linea del file, e restituisce la linea,

incluso il carattere di fine linea. Se N è specificato legge al più N

caratteri. Readline sia read restituiscono una stringa vuota una volta

arrivati alla fine del file (quindi valore False).

-“file.readlines()”: legge le linee del file fino a fine file, e le restituisce

in una lista di stringhe.

-“strip()”: cancella gli spazzi della lista.

ESEMPIO:

il= 0

lines= fin.readlines()

while il< len(lines):

print(lines[il].strip())

il= il + 1

ALTRO ESEMPIO [con readline]:

line= fin.readline()

while line:

print(line.strip())

line= file.readline()

file.close()

scrittura di file di testo:

-“file.write(stringa)”: scrive la stringa nel file.

-“file.writelines(lista)”: scrive le stringhe presenti nella lista nel file

(si usa se si vogliono scrivere tante stringhe).

[write non si userà molto spesso]

ESEMPIO [con readlines]:

fin= file.open(nome,’rt’)

proteins= []

for L in fin.readlines():

L= l.strip()

If L: if L[0]== ‘>’:

proteins.append(protein)

protein= ‘…’

else: protein= protein + L

fin.close()

SET – INSIEME: insieme NON ordinato di elementi che NON contiene

ripetizioni. Gli elementi di un insieme possono contenere: int, float, str,

bool, tuples. Gli elementi di un insieme NON possono essere: lists, sets,

dictionares (in pratica non possono essere variabili modificabili). Gli

elementi non devono essere per forza dello stesso tipo.

L’insieme non contenendo le ripetizioni non è possibili aggiungere

caratteri o liste già presenti nell’insieme. Un insieme si definisce così:

S= {‘A’, ‘B’, ‘C’}

Non è possibile definire più insiemi (S1, S2, S3…). Si possono però

creare dei “set”:

-“SET1 | SET2”: definisce un nuovo SET con tutti gli elementi di SET1

e tutti gli elementi di SET2 (o qualsiasi altro [vedi slide].

L’operatore “in” “(not in)” e la funzione “len” viste per le variabili di

tipo str funzionano anche per variabili di tipo list e set (funzionano per

oggetti di tipo iterabile).

ES12_10:”dato un file contenente le varianti genomiche di 3 soggetti

(P1, P2, P3) con il seguente formato. [vedi tabella sulle slide] Scrivere

un programma che determini il numero di geni con varianti in tutti e 3 i

soggetti”.

SVOLGIMENTO:

f= open(‘…’, ‘rt’)

L= f.readline()

S1= {}

S2= {}

S3= {}

For L in f.readline():

l= l.strip()

if L: r= l.split(‘,’)

if r[0]== ‘P1’:

gene= r[-1]

S1.add(gene)

Print(S1&S2&S3) Lezione 8

-“D[key]”: Restituisce il valore associato a key. Errore se key non è

presente nel dizionario.

ESEMPIO: #il carattere “:” indicano un dizionario

D= {‘A’:’B’,’B:’b’}

D={}

D[‘A’]= ‘a’

D[‘B’]= ‘b’

Data la seguente variabile:

Z= {‘A’:{‘hb’:2,’pair’:’T’},’T’:{‘hb’:2,’pair’:’A’},

‘C’:{‘hb’:3,’pair’’G’},’G’:{‘hb’:3,’pair’:’C’}}

Indicare quali delle seguenti affermazioni è corretta:

- Z è una variabile di tipo dizionario

- Z[‘A’] è una variabile di tipo lista

- Z[‘T’][‘pair’] coincide con il carattere ‘A’

-Z[‘T’][

Dettagli
Publisher
A.A. 2018-2019
26 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher igor.miti di informazioni apprese con la frequenza delle lezioni di Banche dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Siena o del prof Furini Simone.