Informática biomédica - vis.usal.esvis.usal.es/rodrigo/documentos/bioinfo/muii/sesiones/1... ·...
Transcript of Informática biomédica - vis.usal.esvis.usal.es/rodrigo/documentos/bioinfo/muii/sesiones/1... ·...
Introducción
Bioinformática:¿quées?Actores
• Bioinformática:¿quées?• Actores
• Biologíabásica• Genomas• Genes
Bioinformática
• Desarrollodealgoritmosinformáticosparaanalizardatosbiológicos– Términodifuso• Uso dealgoritmos• Implementacióndealgoritmos• Diseño dealgoritmos
– Áreainterdisciplinar:• Biología• Cienciadelacomputación• Estadística
Introducción
Biologíabásica:Genomas
estructuradelDNAcadenas,archivos,funcionesylistas
• Bioinformática:¿quées?• Actores
• Biologíabásica• Genomas• Genes
Biologíabásica
• Paradiseñaralgoritmosútilesdebemossercapacesdeentenderlosproblemasbiológicos– Almenosdeunmodobásico
• Labiologíabásicanoesdifícil– Haymuchaterminología– Peroesfundamentalmentedescriptiva• Nohayteoremasodemostracionescomplicadas
Genoma
• Materialgenéticodeunorganismo– CodificadocomoDNA• Cadenadobledenucleótidos (A,T,C,G)
– 3’a5’(antisentidooupstream)– 5’a3’(sentidoodownstream)
Sobrelose
xtremos
3’y5’delDNA
https://w
ww.youtube.com/w
atch?v=p835L4H
WH6
8
Python
• VeremosacontinuaciónalgunosaspectosdelasintaxisdePython:– Tratamientodecadenas,archivosylistas– Estructuraciónenfuncionesybloques– Controldeflujo
• Chuleta:http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/pythonCheatsheet.pdf
Cadenas(str)oric="atcaatgatcaacgtaagcttctaagcatgatcaaggtgctcacacagtttatccacaacctgagtggatgacatcaagataggtcgttgtatctccttcctctcgtactctcatgaccacggaaagatgatcaagagaggatgatttcttggccatatcgcaatgaatacttgtgacttgtgcttccaattgacatcttcagcgccatattgcgctggccaaggtgacggagcgggattacgaaagcatgatcatggctgttgttctgtttatcttgttttgactgagacttgttaggatagacggtttttcatcactgactagccaaagccttactctgcctgacatcgaccgtaaattgataatgaatttacatgcttccgcgacgatttacctcttgatcatcgatccgattgaagatcttcaattgttaattctcttgcctcgactcatagccatgatgagctcttgatcatgtttccttaaccctctattttttacggaagaatgatcaagctgctgctcttgatcatcgtttc"
oric #valortype(oric) #tipolen(oric) #longitudoric[3] #accesooric[0] #ojo con el comienzo y finoric[len(oric)]
oric[3:7] #acceso a intervalooric contiene lasecuencia denucleótidos que indicaunorigen dereplicación enVibriocholerae,labacteriapatógena que causa elcólera
Curiosamente,iremos viendo cómo losorígenes dereplicación sepueden descubrir mediante unordenador,sinnecesidad dellaboratorio!
Archivos
• Comoosimaginaréis,noesoperativocopiarypegartodalasecuenciadeungenoma*enelprograma– Recurrimosalalecturadearchivos
f=open("/Users/rodri/genomas/Vibrio_cholerae.txt", "r")vc=f.readlines() #lee las líneas del archivo a una listavc=vc[0] #el fichero de genoma sólo tiene una línealen(vc[0]) #(muy larga, claro)#vc #No se os ocurra mostrarla por pantalla, es enooorme!f.close() #Cuando salís de casa, cerrad con llave
12
*Podéisencontrarvariassecuenciasdegenomascompletosaquí:http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas
Archivos(II)
• Podemostambiénleerdirectamentedelared
import urllib2f=urllib2.urlopen("http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas/Vibrio_cholerae.txt", "r")vc=f.readlines() #lo tratamos como un fichero normalvc=vc[0] #el fichero de genoma sólo tiene una línea print len(vc) #(muy larga, claro)f.close()
13
ArchivosFASTA
• Formatocomúnparaalmacenarsecuenciasdenucleótidos– Cadasecuenciacorrespondeadoslíneas
– Ejemplo:• http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/datos/oric.txt
14
>orf19.2163 orf19.2163 CGDID:CAL0005388 ATGCTGGAAGAAGAAGTTCACGACACGTCATCAGAAGCAAGTGAGGTTTTCACCAACCAG
Funciones
• Sintaxis
– OJO:enPythonnotenemosllaves,seusaelsangradoparadeterminarqueelcódigoestádentrodelafunción• Seráigualparalosbloquesif,for,while,etc.
#Conviene añadir una descripcióndef nombreFuncion(argumentos):
linea1…linea nreturn valor
#añade el IVA ‘normal’def aplicarIVA(factura):
factura *=1.21print facturareturn factura
Funciones(II)
• Llamadaafunciones
• Podemosdefiniryusarvariosargumentos,separadosporcomas,onoponerninguno
• Podemosañadirvalorpordefectoaunargumento
factura=aplicarIVA(35.50)print factura
factura=aplicarIVA() #dará un error ya que ‘espera’ un argumento
Bloquesdecódigo
• Paraorganizarvuestrocódigodelaasignaturarecomiendo:1. Crearunarchivo.py porsesión2. Delimitarcadaejercicioporbloquescon#%%• Python esinterpretado,deestamanerapodemos
ejecutartodaslaslíneasdecódigodeunbloquesinejecutarelarchivoentero
#%% Este es el bloque 1blablablatralaraliri...#%% Este es el bloque 2...
17
Listas
listaVacia=[]wild_animals=[“perezoso”, “ornitorrinco”, “lemur”]bonoLoto=[3,0,8,1,4,99]
wild_animals[2]bonoLoto[3] + bonoLoto[0]print “animal {}, número {}”.format(wild_animals[1],
bonoLoto[1])wild_animals[2]=“tigre”
del bonoLoto[4] #elimina el elemento en la posición 4
len(wild_animals)wild_animals.append(“elefante”) #adición al finallen(wild_animals)
Listas(II)
wild_animals[1:2] #tomamos el intervalo [1:2)bonoLoto[2:5]wild_animals[:3] #si no ponemos nada, hasta inicio o finoric[500:] #funciona con cadenas!
wild_animals.index(“tigre”)wild_animals.insert(3, “gorila”) #inserta en posición 3wild_animals
oric.index(“atcg”) #también funciona con cadenas!
#recorremos la lista elevando al cuadrado cada elemento xfor x in bonoLoto: #aprenderemos más sobre for pronto!
print x*x
for base in oric: #también funciona con cadenas!print base
Controldeflujo
• SimilaraC/Java– Mismascomparaciones(>,<,<=,>=,==, !=)– Operadoresbooleanos:and,or,not– Sinparéntesisà con: alfinal– Sinllavesà consangrado– else...if secontraeaelif
if 8 < 9:print “¡Ocho es menor que nueve!”
elif flipando==True:print “OMG: ocho es MAYOR que nueve!”
else:print “Falsa alarma, estábamos flipando”
Ejercicio1• Implementarunafuncióncomplementaria
– Entrada:• seq:secuencia denucleótidos
– Retorno:cadenacomplementariaaseq• Ejemplo:ACGTTCGT à ACGAACGT• Prueba:
– seq:• Tomarcomoseq los20nucleótidosqueestánenelcentrodelgenomadeVcholerae• http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas/Vibrio_cholerae.txt
LacadenadeADNesdoble,demaneraquedossecuenciasdenucleótidos seentrelazanenbaseaenlacesquímicos.LosparesdebasesAyTporun lado,yGyCporotro,sonlosqueformanlosenlaces,demodoquetenemosunasecuenciadeADNcomo:
5’…ACGTTCGT…3’||||||||
3’…TGCAAGCA…5’Esevidentequedadaunadelasdossecuenciasenlazadas,podemos inferirlacadenacomplementaria.Estaestructuraendoblehélicees,enúltimainstancia,laresponsabledequelascélulasdetucuerposemultipliquen!
Introducción
Biologíabásica:Genes
replicación,orígenesyoriCconjuntos,diccionarios,bucles
temporizaciónygráficas
• Bioinformática:¿quées?• Actores
• Biologíabásica• Genomas• Genes
GenesySecuenciasnocodificantes
• Elgenomacontienegenes ysecuenciasnocodificantes
Untrozodelcromosoma IdeScerevisiae (lalevaduradelpan),enparticularlosnucleótidos delaposición11000ala13000.Debajo,losgenesconocidosenlacadena5’a3’(sentido) yenla3’a5’(anti-sentido).
Elespacioenambascadenassingenesessecuencianocodificante.Lasecuencianocodificantehasidoignoradahastahacepoco (avecesselanombrabacomoDNAbasurao‘junk DNA’),peroseestándescubriendomuchasinteraccionesimportantesenella,dandolugaralcampodelaepigenética
www.genestack.org
Orígenesdereplicación
• Unejemplodesecuencianocodificanteclavesonlosorígenesdereplicación(oriC)
• LasaproximacionesexperimentalesparaencontraroriC enunadeterminadaespecieconsumenmuchotiempo,implicaríairprobandoa‘quitar’trozosdelgenomaalbichoencuestiónhastaquedejedereplicarse(asíescomolosbiólogospruebancasitodo:!mutilandobichos!).Estohaceque,anivelexperimental,oriC sóloestédescritoparaunaspocasespecies.
• SidiseñamosunbuenmétodocomputacionalparaencontraroriC,!losbiólogospuedendedicarsutiempoaotrastareasmásinteresantesquecortarbichos!
Replicación
• Esunodelosprocesosmásimportantesdelacélula– Necesarioantesdedividirse,paradarunacopiagenéticaalacélulahija
BuscandooriC
• EnalgunasbacteriascomoEcoli, oriC seencuentraenzonas‘ricasenAT’– Estascaracterizacionessegúnlafrecuenciadeaparicióndelosnucleótidosesfrecuente.
ElcontenidoenGC(guanina-citosina)eselporcentajedebasesG+ CrespectoaltotalenunasecuenciadeADN
LosenlacesGCsonmásfuertesquelosAT(tresenlacesdehidrógeno envezdedos)ypor tantomásresistentes,porejemplo,aladesnaturalizaciónportemperatura.
ElcontenidoenGCvaríaentreorganismos,desdeun20%enelPlasmodiumfalciparum hastael70%enalgunasbacterias.Dehecho,enestasúltimas,avecesseutilizaparaclasificarlas(bacteriasconaltovsbajoGC)
Conjuntos
• Unconjuntoescomounalista,peronopermiterepeticionesdeelementos
conjunto=set() #un conjunto vacíoconjunto.add(“bola8”) #añadir un elementoconjunto.add(“bola8”) #añadir un elementoconjunto
lista=[1,2,4,4]conjunto.update(lista) #añadir desde lista
Diccionarios
• Soncomolistas,peroalosvaloresseaccedeporunaclave envezdeporposición(~hash)
• AsignaciónyaccesodicVacio={}
#animales en riesgo de extinción: el nombre del animal #es la clave y el número de individuos el valorwild_animals={“amur leopard”: 37, “black rhino” : 4848,
“cross-river gorilla” : 250}wild_animals[“black rhino”]
https://worldwildlife.org/species/directory?direction=desc&sort=extinction_status
Diccionarios• Inserción,modificaciónyborrado
• Listas,diccionariosytiposbásicossepuedencombinar comoqueramos
wild_animals[“sumatran elephant”]=2600wild_animals[“amur leopard”]=23del wild_animals[“amur leopard”] #borrado por clave
#Llévate todo esto cuando salgas de viaje!inventario={“oro” : 500,“zurrón” : [“piedra”, “cuerda”, “manzana”],“morral” : [“daga”, “flauta”, “manta” , “queso”]}
inventario[“bolsillo”]=[“gema”, “pelusa”]
buclefor
• Sintaxis:
“Paracadanúmeroi delaseriede0a9,imprimei”
• Recuerdaquefor sepuedeusarsobrecadenas,listasydiccionarios!
for i in range(10):print i
for i in coleccion:print i
“Paracadaletra/elemento/clavei delacadena/lista/diccionariocolección,imprimei”
range
• Sintaxis
– Retornaunalistadenúmerosdesdestart hastastop-1,consaltosbasadosenstep
– P.ej.,pararecorrerlasposiciones deunalista:• range(len(lista));
range([start=0], stop, [step=1])
buclewhile
• Recordadque,comopasabaconif:– Nohayllaves(seusaindentación)– Lasentenciaterminaen:– for ywhile nousanparéntesisparalacomparación
recuento = 0while recuento < 5:
print “Hola, soy un bucle while y el recuento es “, recuentorecuento+=1
Ejercicio2
• Implementarunafunciónfrecuencia– Entrada:• seq:secuenciadenucleótidos
– Retorno:diccionarioconpares(k,v)=(nucleótido,frecuenciadeaparición)
• Ejemplo:ACGTTCGT à{‘A’:0.125,’C’:0.25,’G’:0.25,’T’:0.375}
• Prueba:– seq:GenomadeVibriocholerae
• http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas/Vibrio_cholerae.txt
Ejercicio3
• ImplementarunafunciónGCcontent– Entrada:• path:rutaaunficheroenformatoFASTA
– Retorno:porcentajeconelcontenidoenGCpromediodetodaslassecuenciasenfile
• Ejemplo:– Candida_albicans_SC5314.fasta1,2 à 0.350689487893
1Recordadquetenemos losarchivosdegenomasaquí:http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas
2NOTA:Podéis observar queenlasecuencia hayalgunos nucleótidos ‘raros’talescomo R,YoN.NadaqueverconA,T,C,G.Paraeste ejercicio losobviaremos, pero serefieren apuntos donde lasecuencia noestá clara yseduda entredosomásnucleótidos (ver http://www.bioinformatics.org/sms/iupac.html)
Ejercicio3• Prueba– ElcontenidoenGCdealgunasbacteriasesmuyalto.Sinembargo,elparásitodelamalariatieneuncontenidoenGCmuybajo• https://en.wikipedia.org/wiki/GC-content#Application_in_systematics
– ComprobadquelosdatosdelaWikipediarespectoaestosporcentajessoncorrectos• Prueba:
– ruta: rutaalarchivofastadePfalciparum*• Otraprueba(no paraeltest):
– ruta: rutaalarchivofastadeScoelicolor*
*Lostenéisenlamismaurl queCalbicans,perounabúsquedawebpor‘Pfalciparum FASTA’retornacomoprimeraocurrencialapáginaEnsembl Genomes, encargadadehacerpúblicastodaslassecuencias genómicasdedistintosorganismos
Cronometrandoimport timet0=time.clock()[...] #órdenes a cronometrarprint(time.clock()-t0) #resultado en segundos
Losproblemasbioinformáticos suelensercosafina.Requierenmuchamemoriaycapacidaddecálculo.Poresoesmuy importantemonitorizarnuestrocódigo,paradetectarlaszonasmáslentasyoptimizarlas.
Estovaaserespecialmenteimportantesitratamoscongenomascompletosomuchassecuencias,osiutilizamosprocedimientosalgorítmicoscomplejos.¿Cuántotardaenejecutartucódigoelejercicioanterior?¿Haydiferenciasrespectoacadaorganismo?
36
BuscandooriC (II)
• Todoestoesmuybonito,perolociertoesqueelconocimientodequeoriC esricoenAT(enalgunasbacterias)esalgoquesabemosahora– Parallegaraeso,¡primerotenemosqueubicaroriC enelgenoma!
• Vamosanecesitaruncursillorápidodecómofuncionalareplicación
Aperturadelgenoma
• DNApolimerasa: enzimaqueva'añadiendonucleótidos'complementariosaunacadenasimpledeADN
38
Asimetríaenlareplicación(II)
• Elsentido5’à3’sereplica‘haciaatrás’cuandolacadenasehaabiertounpoco– Trocitoatrocito(fragmentosdeOkazaki)
40
Deaminación
• Lacadena'inversa'tienequeesperarunpocohastaquepuedereplicarse– Esdecir,pasamástiempocomocadena'simple’– Esmásfácilquesuframutaciones
• Enparticular,unprocesollamadodeaminación (mutacióndeCenT)es100vecesmásprobableencadenassimplesqueendobles
• UnamitaddenuestrassecuenciasehabráreplicadodemaneranormalylaotramediantefragmentosdeOkazaki– Esdecir,unamitaddelasecuenciatendrámuchasmásposibilidadesdesufrirdeaminación
BuscandooriC conladeaminación
Efectivamente,tenemosmenosCenlasecuenciaquese
mantienesimpleduranteuntiempo
¿Pero,nodeberíamos tenermenosTenlugardemenosG?
42
Arreglandoladeaminación
43
C-GT-CT-A
deaminación esteemparejamientoesincorrectouna2ªrondadelaDNApolimerasaloarregla
-1C -1G
Ejercicio
• Implementarlafunciónskew:– entrada:seq (cadenadeADN)– salida:listanuméricaquecomienzaen0yvavariandoen+1cuandoencontremosunaGyen-1cuandoencontremosunaC
44CATGGGCATCGGCCATACGCC à 0 -1 -1 -1 0 1 2 1 1 1 0 1 2 1 0 0 0 0 -1 0 -1 -2
Ejercicio4
• ImplementarlafunciónminSkew:– entrada:seq (cadenadeADN)– salida:posicionesdeseq dondeelskew tieneunvalormínimo
• Ejemplo:– entrada:
• TAAAGACTGCCGAGAGGCCAACACGAGTGCTAGAACGAGGGGCGTAAACGCGGGTCCGAT
– salida:11,24
• Prueba:Ecoli *45
*Recordadquetenemos losarchivosdegenomasaquí:http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas
Dibujandoimport matplotlib.pyplot as plt
plt.plot(lista, “titulo”) #datos a dibujar y títuloplt.xlabel(“etiquetaX”) #etiquetas en los ejes X e Yplt.ylabel(“etiquetaY”)plt.show() #hasta este punto no se dibuja
46
Podemos dibujar lafunciónskew para distintos organismos yvisualizar estefenómeno deladeaminación ylaposición delosOriC enlosmínimos queaparezcan.
Dibújalos para Vcholerae,Ecoli yTpetrophila…¡aver qué ocurre!
ParaquefuncionenenSpyder hayqueactivarelsoporteenHerramientas/Preferencias/TerminaldeIPython/GráficasMás informaciónsobregráficasenhttp://matplotlib.org/api/pyplot_api.html