Informática biomédica - vis.usal.esvis.usal.es/rodrigo/documentos/bioinfo/muii/sesiones/1... ·...

49
Informática biomédica Introducción Rodrigo Santamaría

Transcript of Informática biomédica - vis.usal.esvis.usal.es/rodrigo/documentos/bioinfo/muii/sesiones/1... ·...

InformáticabiomédicaIntroducción

RodrigoSantamaría

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

http://blog.fejes.ca/?p=2418

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

https://xkcd.com/435/

https://xkcd.com/1520/

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

• LaDNApolimerasasólopuedeañadirnucleótidosenelsentido3’à 5’

39

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

Vibriocholerae Escherichia coli

Thermotoga petrophila

http://xkcd.com/353/