Informática biomédica Introducción
Transcripción
Informática biomédica Introducción
Informáticabiomédica Introducción RodrigoSantamaría Introducción • Bioinformática:¿quées? • Actores • Biologíabásica • Genomas • Genes Bioinformática:¿quées? Actores Bioinformática • Desarrollodealgoritmosinformáticospara analizardatosbiológicos – Términodifuso • Uso dealgoritmos • Implementación dealgoritmos • Diseño dealgoritmos – Áreainterdisciplinar: • Biología • Cienciasdelacomputación • Estadística http://blog.fejes.ca/?p=2418 Introducción • Bioinformática:¿quées? • Actores • Biologíabásica • Genomas • Genes Biologíabásica: Genomas estructuradelDNA cadenas,archivos,funcionesylistas Biologíabásica • Paradiseñaralgoritmosútilesdebemosser capacesdeentenderlosproblemasbiológicos – Almenosdeunmodobásico • Labiologíabásicanoesdifícil – Haymuchaterminología – Peroesfundamentalmentedescriptiva • Nohayteoremasodemostracionescomplicadas https://xkcd.com/435/ https://xkcd.com/1520/ Genoma • Materialgenéticodeunorganismo • Cadenadobledenucleótidos (A,T,C,G) – 3’a5’(antisentido oupstream) – 5’a3’(sentidoodownstream) Sobre losextremos 3’y5’delDNA https://www.youtube.com/watch?v=p835L4HWH68 – CodificadocomoDNA Python • Veremosacontinuaciónalgunosaspectosde lasintaxisdePython: – Tratamientodecadenas,archivosylistas – Estructuraciónenfuncionesybloques – Controldeflujo • Chuleta:http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/pythonCheatsheet.pdf Cadenas(str) oric="atcaatgatcaacgtaagcttctaagcatgatcaaggtgctcacacagtttatccacaacctgagtggatg acatcaagataggtcgttgtatctccttcctctcgtactctcatgaccacggaaagatgatcaagagaggatgattt cttggccatatcgcaatgaatacttgtgacttgtgcttccaattgacatcttcagcgccatattgcgctggccaagg tgacggagcgggattacgaaagcatgatcatggctgttgttctgtttatcttgttttgactgagacttgttaggata gacggtttttcatcactgactagccaaagccttactctgcctgacatcgaccgtaaattgataatgaatttacatgc ttccgcgacgatttacctcttgatcatcgatccgattgaagatcttcaattgttaattctcttgcctcgactcatag ccatgatgagctcttgatcatgtttccttaaccctctattttttacggaagaatgatcaagctgctgctcttgatca tcgtttc" oric #valor type(oric) #tipo len(oric) #longitud oric[3] #acceso oric[0] #ojo con el comienzo y fin oric[len(oric)] oric[3:7] #acceso a intervalo oric contiene lasecuencia denucleótidos que indica unorigen dereplicación enVibriocholerae,labacteria patógena que causa elcólera Curiosamente,iremos viendo cómo losorígenes de replicación sepueden descubrir mediante un ordenador,sinnecesidad dellaboratorio! Archivos • Comoosimaginaréis,noesoperativocopiary pegartodalasecuenciadeungenoma*enel programa – Recurrimosalalecturadearchivos f=open("/Users/rodri/genomas/Vibrio_cholerae.txt", "r") vc=f.readlines() #lee las líneas del archivo a una lista vc=vc[0] #el fichero de genoma sólo tiene una línea len(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 *Podéisencontrarvariassecuenciasdegenomas completosaquí: http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas 12 Archivos(II) • Podemostambiénleerdirectamentedelared import urllib2 f=urllib2.urlopen("http://vis.usal.es/rodrigo/documentos/bioinf o/avanzada/genomas/Vibrio_cholerae.txt", "r") vc=f.readlines() #lo tratamos como un fichero normal vc=vc[0] #el fichero de genoma sólo tiene una línea print len(vc) #(muy larga, claro) f.close() 13 ArchivosFASTA • Formatocomúnparaalmacenarsecuenciasde nucleótidos – Cadasecuenciacorrespondeadoslíneas >orf19.2163 orf19.2163 CGDID:CAL0005388 ATGCTGGAAGAAGAAGTTCACGACACGTCATCAGAAGCAAGTGAGGTTTTCACCAACCAG – Ejemplo: • http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/datos/oric.txt 14 Funciones • Sintaxis #Conviene añadir una descripción def nombreFuncion(argumentos): linea1 … linea n return valor #añade el IVA ‘normal’ def aplicarIVA(factura): factura *=1.21 print factura return factura – OJO:enPythonnotenemosllaves,seusael sangradoparadeterminarqueelcódigoestádentro delafunción • Seráigualparalosbloquesif,for,while,etc. Funciones(II) • Llamadaafunciones factura=aplicarIVA(35.50) print factura factura=aplicarIVA() #dará un error ya que ‘espera’ un argumento • Podemosdefiniryusarvariosargumentos, separadosporcomas,onoponerninguno • Podemosañadirvalorpordefectoaun argumento Bloquesdecódigo • Paraorganizarvuestrocódigodelaasignatura recomiendo: 1. Crearunarchivo.py porsesión 2. Delimitarcadaejercicioporbloquescon#%% • Python esinterpretado,deestamanerapodemos ejecutartodaslaslíneasdecódigodeunbloquesin ejecutarelarchivoentero #%% Este es el bloque 1 blablabla tralaraliri ... #%% 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 final len(wild_animals) Listas(II) wild_animals.index(“tigre”) wild_animals.insert(3, “gorila”) #inserta en posición 3 wild_animals oric.index(“atcg”) #también funciona con cadenas! wild_animals[1:2] #tomamos el intervalo [1:2) bonoLoto[2:5] wild_animals[:3] #si no ponemos nada, hasta inicio o fin oric[500:] #funciona con cadenas! #recorremos la lista elevando al cuadrado cada elemento x for x in bonoLoto: #aprenderemos más sobre for pronto! print x*x for base in oric: print base #también funciona con cadenas! 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ón complementaria – Entrada: • seq:secuencia denucleótidos – Retorno:cadena complementaria aseq • • Ejemplo: ACGTTCGT à ACGAACGT Prueba: – seq: • • Tomarcomoseq los20nucleótidosqueestánenelcentrodelgenomadeVcholerae http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas/Vibrio_cholerae.txt LacadenadeADNesdoble, demaneraquedos secuenciasdenucleótidos se entrelazanenbaseaenlacesquímicos. LosparesdebasesAyTporun lado,yGyCpor otro,sonlosqueformanlos enlaces,demodo quetenemos unasecuenciadeADNcomo: 5’…ACGTTCGT…3’ |||||||| 3’…TGCAAGCA…5’ Esevidentequedadaunadelasdossecuenciasenlazadas,podemos inferirla cadenacomplementaria.Estaestructuraendoblehélicees,enúltimainstancia,la responsable dequelascélulasdetucuerposemultipliquen! Introducción • Bioinformática:¿quées? • Actores • Biologíabásica • Genomas • Genes Biologíabásica: Genes replicación,orígenesyoriC conjuntos,diccionarios,bucles temporizaciónygráficas GenesySecuenciasnocodificantes • Elgenomacontienegenes ysecuenciasno codificantes www.genestack.org Untrozodelcromosoma IdeScerevisiae (lalevaduradelpan), enparticularlos nucleótidos delaposición 11000ala13000. Debajo,losgenesconocidos enlacadena5’a3’(sentido) yenla3’a5’(anti-sentido). Elespacioenambascadenassingenesessecuencianocodificante. Lasecuencianocodificantehasidoignoradahastahacepoco (avecesselanombraba comoDNAbasurao‘junk DNA’), peroseestándescubriendo muchasinteracciones importantesenella,dandolugaralcampodelaepigenética Orígenesdereplicación • Unejemplodesecuencianocodificanteclave sonlosorígenesdereplicación(oriC) • LasaproximacionesexperimentalesparaencontraroriC enuna determinadaespecieconsumenmuchotiempo,implicaríair probandoa‘quitar’trozosdelgenomaalbichoencuestiónhasta quedejedereplicarse(asíescomolosbiólogospruebancasitodo: !mutilandobichos!).Estohaceque,anivelexperimental,oriC sólo estédescritoparaunaspocasespecies. • SidiseñamosunbuenmétodocomputacionalparaencontraroriC, !losbiólogospuedendedicarsutiempoaotrastareasmás interesantesquecortarbichos! Replicación • Esunodelosprocesosmásimportantesdela célula – Necesarioantesdedividirse,paradarunacopia genéticaalacélulahija BuscandooriC • EnalgunasbacteriascomoEcoli oriC se encuentraenzonas‘ricasenAT’ – Estascaracterizacionessegúnlafrecuenciade aparicióndelosnucleótidosesfrecuente. ElcontenidoenGC(guanina-citosina) eselporcentajedebasesG+ Crespectoal totalenunasecuenciadeADN LosenlacesGCson másfuertesquelosAT(tresenlacesdehidrógeno envezdedos) ypor tantomásresistentes,porejemplo, aladesnaturalizaciónportemperatura. Elcontenido enGCvaríaentreorganismos, desdeun20%enelPlasmodium falciparum hastael70%enalgunasbacterias.Dehecho,enestasúltimas,avecesse utilizaparaclasificarlas(bacteriasconaltovsbajoGC) Conjuntos • Unconjuntoescomounalista,perono permiterepeticionesdeelementos conjunto=set() conjunto.add(“bola8”) conjunto.add(“bola8”) conjunto lista=[1,2,4,4] conjunto.update(lista) #un conjunto vacío #añadir un elemento #añadir un elemento #añadir desde lista Diccionarios • Soncomolistas,peroalosvaloresseaccede porunaclave envezdeporposición(~hash) • Asignaciónyacceso dicVacio={} #animales en riesgo de extinción: el nombre del animal #es la clave y el número de individuos el valor wild_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 wild_animals[“sumatran elephant”]=2600 wild_animals[“amur leopard”]=23 del wild_animals[“amur leopard”] #borrado por clave • Listas,diccionariosytiposbásicossepueden combinar comoqueramos #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: for i in range(10): print i “Paracadanúmeroi delaseriede0a9,imprimei” • Recuerdaquefor sepuedeusarsobre cadenas,listasydiccionarios! for i in coleccion: print i “Paracadaletra/elemento/clavei dela cadena/lista/diccionariocolección,imprimei” range • Sintaxis range([start=0], stop, [step=1]) – Retornaunalistadenúmerosdesdestart hasta stop-1,consaltosbasadosenstep – P.ej.,pararecorrerlasposiciones deunalista: • range(len(lista)); buclewhile • Recordadque,comopasabaconif: – Nohayllaves(seusaindentación) – Lasentenciaterminaen: – for ywhile nousanparéntesisparala comparación recuento = 0 while recuento < 5: print “Hola, soy un bucle while y el recuento es “, recuento recuento+=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:porcentajeconelcontenidoenGC promediodetodaslassecuenciasenfile • Ejemplo: – Candida_albicans_SC5314.fasta1,2 à 34.924400897% 1Recordadquetenemos losarchivosdegenomasaquí: http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas 2 NOTA:Podéis observar queenlasecuencia hayalgunos nucleótidos ‘raros’talescomo R,YoN.Nadaquever conA,T,C,G.Paraeste ejercicio losobviaremos, pero serefieren apuntos donde lasecuencia noestá clara yse duda entredosomásnucleótidos (ver http://www.bioinformatics.org/sms/iupac.html) Ejercicio3 • Prueba – ElcontenidoenGCdealgunasbacteriasesmuyalto. Sinembargo,elparásitodelamalariatieneun contenidoenGCmuybajo • https://en.wikipedia.org/wiki/GC-content#Application_in_systematics – ComprobadquelosdatosdelaWikipediarespectoa estosporcentajessoncorrectos • Prueba: – ruta:rutaalarchivofastadePfalciparum* • Otraprueba(no paraeltest): – ruta:rutaalarchivofastadeScoelicolor* *Lostenéisenlamismaurl queCalbicans,perounabúsquedawebpor‘Pfalciparum FASTA’retornacomoprimeraocurrencia lapáginaEnsembl Genomes, encargadadehacerpúblicastodaslassecuencias genómicasdedistintosorganismos Cronometrando import time t0=time.clock() [...] #órdene(s) a cronometrar print(time.clock()-t0) #resultado en segundos Losproblemas bioinformáticos suelensercosafina.Requieren muchamemoria y capacidaddecálculo.Poresoesmuy importantemonitorizar nuestrocódigo, para detectarlaszonasmáslentasyoptimizarlas. Estovaaserespecialmenteimportante sitratamoscongenomas completoso muchassecuencias,osiutilizamos procedimientos algorítmicos complejos. ¿Cuántotardaenejecutartucódigo elejercicioanterior? ¿Haydiferenciasrespecto acadaorganismo? 36 BuscandooriC (II) • Todoestoesmuybonito,perolociertoesque elconocimientodequeoriC esricoenAT(en algunasbacterias)esalgoquesabemosahora – Parallegaraeso,¡primerotenemosqueubicar oriC enelgenoma! • Vamosanecesitaruncursillorápidodecómo funcionalareplicación Aperturadelgenoma • DNApolimerasa: enzimaqueva'añadiendo nucleótidos'complementariosaunacadena simpledeADN 38 Asimetríaenlareplicación • LaDNApolimerasasólopuedeañadir nucleótidosenelsentido3’à 5’ 39 Asimetríaenlareplicación(II) • Elsentido5’à3’sereplica‘haciaatrás’ cuandolacadenasehaabiertounpoco – Trocitoatrocito(fragmentosdeOkazaki) 40 Deaminación • Lacadena'inversa'tienequeesperarunpoco hastaquepuedereplicarse – Esdecir,pasamástiempocomocadena'simple’ – Esmásfácilquesuframutaciones • Enparticular,unprocesollamadodeaminación (mutación deCenT)es100vecesmásprobableencadenassimples queendobles • Unamitaddenuestrassecuenciasehabrá replicadodemaneranormalylaotramediante fragmentosdeOkazaki – Esdecir,unamitaddelasecuenciatendrámuchas másposibilidadesdesufrirdeaminación BuscandooriC conladeaminación Efectivamente,tenemosmenos Cenlasecuenciaque se mantienesimpleduranteun tiempo ¿Pero,nodeberíamos tener másTenlugardemásG? 42 Arreglandoladeaminación deaminación C-G T-C T-A esteemparejamientoesincorrecto una2ªrondadelaDNApolimerasalo arregla -1C -1G 43 Ejercicio • Implementarlafunciónskew: – entrada:seq (cadenadeADN) – salida:listanuméricaquecomienzaen0yva variandoen+1cuandoencontremosunaGyen-1 cuandoencontremosunaC CATGGGCATCGGCCATACGCC à 0 -1 -1 -1 0 1 2 1 1 1 0 1 2 1 0 0 0 0 -1 0 -1 -2 44 Ejercicio4 • ImplementarlafunciónminSkew: – entrada:seq (cadenadeADN) – salida:posicionesdeseq dondeelskew tieneun valormínimo • Ejemplo: – entrada: • TAAAGACTGCCGAGAGGCCAACACGAGTGCTAGAACGAGGGGCGTAAACGCGGGTCCGAT – salida:11,24 • Prueba:Ecoli * *Recordadquetenemos losarchivosdegenomas aquí: http://vis.usal.es/rodrigo/documentos/bioinfo/avanzada/genomas 45 Dibujando import matplotlib.pyplot as plt plt.plot(lista, “titulo”) #datos a dibujar y título plt.xlabel(“etiquetaX”) #etiquetas en los ejes X e Y plt.ylabel(“etiquetaY”) plt.show() #hasta este punto no se dibuja Podemos dibujar lafunción delskewpara distintos organismos yvisualizar este fenómeno deladeaminación ylaposición delosOriC enlosmínimos que aparezcan. Dibújalos para Vcholerae,Ecoli yTpetrophila… ¡aver qué ocurre! 46 Vibriocholerae Escherichia coli Thermotoga petrophila http://xkcd.com/353/
Documentos relacionados
Computación y Ciencia La pareja perfecta
La cadena 'inversa' tiene que esperar un poco hasta que puede replicarse Es decir, pasa más tiempo como cadena 'simple' → es más fácil que sufra mutaciones
Más detalles