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

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