If you can't read please download the document
Upload
giovanni-dallolio
View
1.666
Download
0
Embed Size (px)
Citation preview
Pycon.it 2009
Python e bioinformatica
Giovanni Marco Dall'Olio
Universit Pompeu Fabra, Biologia Evolutiva, Barcelona
Bioinformatica
E' la scienza che si occupa di analizzare e trattare tutti i dati prodotti dalla ricerca scientifica, tramite metodi computazionali
Nata negli anni '70, con lo sviluppo di un metodo per confrontare due sequenze di proteine (Matrici PAM)
Non molto corretto dire che le matrici PAM siano state sviluppate come metodo per confrontare due sequenze di proteine.Sono un modello? ...
Esplosione di dati scientifici
Al giorno d'oggi si producono pi dati scientifici di quanto si riesca ad analizzare
Costi e tempi diminuiti rapidamente
n. sequenze (GenBank)20091996
Tipico esempio di bioinformatica
Il sequenziamento del genoma umano nel 2001:CCGACGGTTTAACCGCGGGACCGACCTTTGAGAATATCGGTACTCGCGAGACGGATTATCTGTAGAGTGATCGTTGGAATTTGCTCGATAATCCCCCTCTGCTGGTGAACATGGGAAATAACGAGAACCCAAAATGCGTACCAGCTTCGCTCCAATATATAGTGGAGGCGCATCATACAATCCAGATCCTAACGCCCTAAGAGAAGATTGTCAGCCTCGAGTGCAACGATTGAGCGAGAGAGAAGATAGGGCGGTGAAGACTTTCTCTCAGATAATTCTAACTCTTCCGACTCAAAACGGCCTGTCAATGGCCTATGCGGAAGAGTATTGAGTATTGAACCTACGCGATCCTCAGTGTGGCGTGCGACGTCCTCACCAATGTTACGTAAGAGTTCTAACCGTTTTCTGGACCCCTAGCCAGGTGGTCAGGGGTACGAACTTTTAATCACCAATGTTACGTAAGAGTTCTAACCGTTTTCTGGACCCCTAGCCAGGTGGTCAGGGGTACGAACTTTTAAAGTGTTCGGCGAATCCCGAACGCCGTTAGTGGCGCACTCAAATTCCCCATCTAGGAGGTTTTCGTGATGTTAATATTTGCGCGAGGATACTTCACCAAGC.......
Una enorme sequenza di 3*10^9 caratteri
Genoma umano
Immaginate una sequenza come quella del genoma umano
Non molto utile finch non la integriamo con altri dati
Che strumenti utilizzare per analizzarla?
Che approcci, che tecniche?
Esempio di annotazione
CCGACGGTTTAACCGCGGGACCGACCTTTGAGAATATCGGTACTCGCGAGACGGATTATCTGTAGAGTGATCGTTGGAATTTGCTCGATAATCCCCCTCTGCTGGTGAACATGGGAAATAACGAGAACCCAAAATGCGTACCAGCTTCGCTCCAATATATAGTGGAGGCGCATCATACAATCCAGATCCTAACGCCCTAAGAGAAGATTGTCAGCCTCGAGTGCAACGATTGAGCGAGAGAGAAGATAGGGCGGTGAAGACTTTCTCTCAGATAATTCTAACTCTTCCGACTCAAAACGGCCTGTCAATGGCCTATGCGGAAGAGTATTGAGTATTGAACCTACGCGATCCTCAGTGTGGCGTGCGACGTCCTCACCAATGTTACGTAAGAGTTCTAACCGTTTTCTGGACCCCTAGCCAGGTGGTCAGGGGTACGAACTTTTAAAGTGTTCGGCGAATCCCGAACGCCGTTAGTGGCGCACTCAAATTCCCCATCTAGGAGGTTTTCGTGATGTTAATATTTGCGCGAGGATACTTCACCAAGC.......
Coding
SNP
????
Bioinfo altri casi d'uso
Biologia strutturale: studiare strutture di proteine, predirle
Docking molecolare: simulare l'efficacia di una molecola come farmaco
Bioinfo altri casi d'uso
Data integration ovvero riunire informazioni da piu' fonti
La maggior parte del lavoro di un bioinformatico consiste in questoScaricare una lista di geni da un sito, le loro sequenze da un altro, ...
Unire i risultati di pi esperimenti indipendenti
Altri esempi presentare i dati
La comunicazione via web molto importante
Senza, sarebbe impossibile coordinare qualsiasi progetto di ricerca
Alcuni portali (ncbi, uniprot, ) mettono a disposizione dati e tool pubblici
Ncbi (sequenze, geni, genomi, ....)
Uniprot (proteine)
Pubmed (articoli)
....
Bioinformatica e programmazione
La maggior parte delle persone che lavorano come bioinformatici ha un background in biologia Non molti programmatori professionisti
Per molte operazioni mostrate nelle slide precedenti, non necessario utilizzare linguaggi a basso livello
in bioinformatica sono molto diffusi linguaggi di scripting (perl, python, R, ...)
Python e bioinformatica
Python uno dei linguaggi pi utilizzati in bioinformatica
www.bioinformatics.org survey
Java
Perl
Python
Vantaggi di Python in bioinfo
Sintassi chiara, documentazione
Facile da imparare
Ottimo per scripting
Librerie per database, testing, documentazione, calcolo scientifico
Orientato ad oggetti, ma multi-paradigma
Python e bioinformatica
Curva d'apprendimentoFacile da imparare ma potente
LeggibilitTestingDoctest, unittest, nose
Comunit open sourceBioPerl e BioConductor sono piu' ampi
Paradigmi di programmazioneMulti paradigma, OO
Velocit di esecuzioneInterpretato;
DatabaseOttimi ORM (sqlalchemy), supporto ad altri tipi di db
Other voices:- community?
Bioinformatica e programmazione
Bioinformatica un approccio diverso rispetto alla programmazione di un softwareUso estensivo di scripts e moduli
Makefiles e simili per creare pipelines
Tests utilizzati anche per comunicare con non-programmatori
Continua necessit di riadattare scripts
Bioinformatica, caratteristiche:Uso estensivo di scripts
Makefiles e simili per creare pipelines
Tests utilizzati per comunicare con non-programmatori
Continua necessit di riadattare uno script a funzionalit diverse (feature creep)
Cose che preoccupano di meno:Sicurezza del codice (a meno che non si lavori su wwb)
Portabilit
Bioinformatica e scripts
Piu' che scrivere programmi completi, spesso si scrivono piccoli scripts e libreriePi facili da scrivere
Piu' facili da riadattare
Makefiles e simili posso essere utilizzati per creare pipelines
Esempio di pipeline (Makefile)
all: get_sequences result1 result2
get_sequences:
python download_sequence.py -gene 'XYZ' -database 'ncbi' -...
python ....
result1:
python calculate_result.py --input data1.txt
result2: data2.txt
cut -f 1, 3 data2.txt > result2.txt
Esempio pi complicato di pipeline
mask(S)
flat: S.masked
run: RepeatMasker -lib $(RMLIB) S
mask_then_blast(S,D)
flat: S-results/S.D.blast.raw
req: mask(S) blastindex(D)
srun: blastall -p blastx -i
.......
BioMake
(http://skam.sourceforge.net/skam-intro.html )
Testing usato per comunicare
Immaginate che questo grafico sia il risultato di una vostra analisi
Come dimostrare che sia corretto?
Testing - esempio
La parte piu' difficile di un esperimento scegliere i controlli e i background corretti
In bioinformatica la stessa cosa, solo che molto si fa al computer
Testing - esempio
Abbiamo scritto un programma per leggere il formato Fasta e convertirlo al formato GenBank
Abbiamo scritto un programma per leggere il formato Fasta e convertirlo al formato GenBank, e testato il suo funzionamento corretto su un file con una sola sequenza, su un file con sequenze multiple, su un file corrotto.....
Python e testing
Python ha delle buone librerie per il testingDoctest esempi inclusi nella documentazione
Unittest unit test classico con fixtures
Nosetest individua tutte le funzioni che assomigliano a tests e le esegue
doctest
>>> help(say_hello)
Help on function say_hello in module __main__:
say_hello(name) print hello to the screen example: >>> say_hello('Albert Einstein') hello Albert Einstein!!!
Doctest esempio 2
Le doctest sono comode per comunicare con un non-programmatore
unittest
From unittest import *
class SimpleFastaSeqCase(unittest.TestCase):
@classmethod
def setUpClass(cls):.....
@classmethoddef tearDownClass(cls):.....def setUp(self):.....def
tearDown(self):.....def testCondition1(self):.....def
testCondition2(self):
.....
Istruzioni da eseguire
prima/dopo tutti i test
Istruzioni da eseguire prima/dopo ogni test
Tests
Python a oggetti
Un genoma composto da diversi cromosomi
Su ogni cromosoma possiamo individuare diversi elementi, come geni, fattori di regolazione, etc..
Ogni gene codifica per pi trascritti, che a loro volta possono dare origine a pi proteine
> la programmazione a oggetti si presta molto bene a rappresentare dati di tipo biologico\
Programmazione a oggetti - esempio
genes = {'gene1': { 'position': 10000, 'chromosome': 11,
'sequence': 'GTAGCCTGATGAACGGGCTAGCATGC....', 'transcripts':
{'transcript1': [......],'transcript2': [......],},},'gene1':{
'position': ...........},.....}
def get_subseq(genes, geneid, start, end):''' get a subsequence of a gene, given a dictionary of gene annotations, a gene id, and start/end position '''pass
Programmazione a oggetti - esempio
genes = {'gene1': { 'position': 10000, 'chromosome': 11,
'sequence': 'GTAGCCTGATGAACGGGCTAGCATGC....', 'transcripts':
{'transcript1': [......],'transcript2': [......],},},'gene1':{
'position': ...........},.....}
def get_subseq(genes, geneid, start, end):''' get a subsequence of a gene, given a dictionary of gene annotations, a gene id, and start/end position '''pass
The previous code (where each 'gene' was a dictionary of dictionaries with lists) can be better structured as an object
Un oggetto in python
class gene:
def __init__(self):
position = None
sequence = ''
transcripts = []
def get_subseq(self, start, end):
pass
La sintassi di Python per gli oggetti chiara e semplice
Pi concisa di Java, inoltre non obbligatorio usare OO
OO piuttosto complicato in perl
Python and Java classes
public class Gene {
public int position;
public str chromosome;
public str transcripts[];
public Gene(int pos){
position = pos
}
public void getSubseq(int start, int end) {
pass
}
class gene:
def __init__(self,pos):
self.position = pos
self.sequence = ''
self.transcripts = []
def get_subseq(self,
start, end):
pass
(Una classe in python)
(Una classe in Java)
(non sono un programmatore Java!)
Lavorare con dati scientifici
Un problema serio quello di immagazzinare i dati e accedervi
diffusione di vari formati di testo
disputa tra flat files, database, e altri sistemi
Python e database
Python ha ottimi moduli per gestire database relazionaliSqlalchemy, elixir.....
sqlalchemy example
Python e database
Python ha ottimi moduli per gestire database relazionaliSqlalchemy, elixir.....
I db relazionali non vanno sempre bene per gestire dati scientificiRappresentare grafi?
Strutture gerarchiche?
Merging di insiemi di dati?
Grafi e database relazionali
E' facile rappresentare un grafo in un db relazionale, ma difficile navigarlo (query ricorsive)
Problema comune in bioinformatica
http://phenomics.cs.ucla.edu/
SELECT * FROM exons t1, exons t2, exons t3, splices t4, splices t5, splices t6 WHERE t1.cluster_id=t4.cluster_id AND t1.gen_end=t4.gen_start AND t4.cluster_id=t2.cluster_id AND t4.gen_end=t2.gen_start AND t2.cluster_id=t5.cluster_id AND t2.gen_end=t5.gen_start AND t5.cluster_id=t3.cluster_id AND t5.gen_end=t3.gen_start AND t1.cluster_id=t6.cluster_id AND t1.gen_end=t6.gen_start AND t6.cluster_id=t3.cluster_id AND t6.gen_end=t3.gen_start;
Strutture gerarchiche e db
I db relazionali non sono adatti per rappresentare dati sequenziali
Difficile rappresentare 'sottosequenze' (o slice di stringhe)
Altri tipi di database
Python ha delle buone librerie per interagire con altri tipi di database
db a oggetti: ZODB
db gerarchico: PyTables
...
HDF5
HDF5 un formato di file binario, usato un fisica e astronomia
Database gerarchico (tabelle dentro altre tabelle)
Ottime APIs in python (PyTables)
SNP object
- id
- position
- chromosome
- genotypes
individualgenotype
- allele1- allele2- stats
populationiHSFst
Nested tables
Librerie open source per la bioinformatica
Vediamo qualche modulo di utilit generica..
Biopython
Una collezione di moduli per la bioinformatica
Numero di funzionalit implementate:bioconductor > bioperl > biopython > tutti gli altri
Punti forti di Biopython:Supporto a diversi formati
APIs per entrez e alcuni database importanti
Pdb / strutture
Biopython Esempi
# Leggere un file in formato fasta e salvarlo in un
dizionario
from Bio.SeqIO import SeqIO
seqfile = open('fastafile.fa', 'r')
sequences = SeqIO.to_dict(SeqIO.parse(seqfile))
# Query NCBI
results = Entrez.esearch(db='nucleotide', term='cox2')
Entrez.read(results)
Pygr
Ottimo per analisi su genomi
Punti fortiNasconde il problema del salvataggio di dati (database, files)
Usare e configurare blast locali
Creare annotazioni
Interfaccia con ncbi, ensembl, ucsc
Pygr esempi
# Ensembl APIs
serverRegistry = get_registry(
host='ensembldb.ensembl.org',
user='anonymous')
coreDBAdaptor = serverRegistry.get_DBAdaptor(
'homo_sapiens', 'core',
'47_36i')
sequence = coreDBAdaptor.fetch_slice_by_seqregion(
coordSystemName, seqregionName)
# Scarica la seq del genoma umano da ucsc(18)
import pygr.Data
hg18 = pygr.Data.Bio.Seq.Genome.HUMAN.hg18(
download=True)
Scientific Python
Numpy: modulo per calcolo numerico (array, matrici..)
Scipy: calcolo matematico avanzato, test statistici..
Matplotlib: plottare grafici
Alcune alternative:sage
rpy (interfaccia a R)
Numpy/Scipy example
Note: ipython -pylab per trasformare python in un ambiente simile a R
Svantaggi di Python in bioinfo
La comunit open source di Python attiva, ma quelle di Perl e R lo sono di pi
In alcuni campi, mancano ancora buone librerie
Problemi con multi-threading
Problemi della bioinfo
Mentalit 'Publish or Perish'dopo aver pubblicato, programmi e database vengono abbandonati
Il testing poco diffuso, difficile riconoscere gli erroriMolti scripts non sono inclusi nelle pubblicazioni!
Poca cultura su software engineering
Babele di formati/database/scripts
Grazie per l'attenzione!!
Ringraziamenti:Bologna biocomp group
molecularlab.it
Biologia evolutiva UPF
nodalpoint.org and all bioinfo bloggers
Fine talk
Sequenziamento genoma umano
Immaginate una sequenza grande come il genoma umano
Come trarre ordine da una massa di dati come questa?
Come associare un gene ad una posizione, sequenza?
Che strumenti? Che tecniche?
Che approcci?
Esempio di annotazione di una sequenza
Annotazione di una sequenza -> identificiare posizioni di geni, fattori di regolazione, ...
Esempio di esperimento bioinformatico
Ipotesi: il gene XYZ conservato in uomo e topo.
Assunzioni: I genomi di entrambi gli organismi sono stati sequenziati con lo stesso livello di qualit;
....
....
Esempio di esperimento bioinformatico
Per dimostrare che il gene XYZ conservato in entrambe le specie, potrei scrivere diversi scripts:download_sequences.py
check_sequences.py
compare_length.py
Il modo pi semplice di organizzare una pipeline tramite Make o tool simili