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)
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) 2009 1996
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 CCGACGGTTTAACCGCGGGACCGACCTTTGAGAATATCGGTACTCGCGAGACGGATTATCTGTAGAGTGATCGTTGGAATTTGCTCGATAATCCCCCTCTGCTGGTGAACATGGGAAATAACGAGAACCCAAAATGCGTACCAGCTTCGCTCCAATATATAGT GGAGGCGCATCATACAA TCCAG ATCCTAACGCCC TAAGAGAAGATTGTCAGCCTCGAGTGCAACGATTGAGCGAGAGAGAAGATAGGGCGGTGAAGACTTTCTCTCAGATAATTCTAACTCTTCCGACTCAAAACGGC C TGTCAATGGCCTATGCGGAAGAGTATTGAGTATTGAACCTACGCGATCCTCAGTGTGGCGTGCGACGTCCTCACCA ATGTTACGTAAGAGTTCT AACCGTTTTCTGGACC CCTAGCCAGGTGGTCAGGG GTACGAACTTTTAAAGTGTTCGGCGAATCCCGAACGCCGTTAGTGGCGCACTCAAATTCCCCATCTAGGAGGTTTTCGTGATGTTAATATTTGCGCGAGGATACTTCACCAAGC.......  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 questo Scaricare 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
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'apprendimento ☺☺☺☺☺ Facile da imparare ma potente Leggibilitá ☺☺☺☺☺ Testing ☺☺☺☺☺ Doctest, unittest, nose Comunitá open source ☺☺☺ BioPerl e BioConductor sono piu' ampi Paradigmi di programmazione ☺☺☺☺☺ Multi paradigma, OO Velocitá di esecuzione  Interpretato;  Database ☺☺☺☺☺ Ottimi ORM (sqlalchemy), supporto ad altri tipi di db
Bioinformatica e programmazione Bioinformatica – un approccio diverso rispetto alla programmazione di un software Uso 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 e scripts Piu' che scrivere programmi completi, spesso si scrivono piccoli scripts e librerie Piú 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 testing Doctest  -> 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 <name> 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): ..... @classmethod def 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

Pycon

  • 1.
    Pycon.it 2009 Pythone bioinformatica Giovanni Marco Dall'Olio Universitá Pompeu Fabra, Biologia Evolutiva, Barcelona
  • 2.
    Bioinformatica E' lascienza che si occupa di analizzare e trattare tutti i dati prodotti dalla ricerca scientifica, tramite metodi computazionali
  • 3.
    Nata negli anni'70, con lo sviluppo di un metodo per confrontare due sequenze di proteine (Matrici PAM)
  • 4.
    Esplosione di datiscientifici Al giorno d'oggi si producono piú dati scientifici di quanto si riesca ad analizzare
  • 5.
    Costi e tempidiminuiti rapidamente n. sequenze (GenBank) 2009 1996
  • 6.
    Tipico esempio dibioinformatica Il sequenziamento del genoma umano nel 2001: CCGACGGTTTAACCGCGGGACCGACCTTTGAGAATATCGGTACTCGCGAGACGGATTATCTGTAGAGTGATCGTTGGAATTTGCTCGATAATCCCCCTCTGCTGGTGAACATGGGAAATAACGAGAACCCAAAATGCGTACCAGCTTCGCTCCAATATATAGTGGAGGCGCATCATACAATCCAGATCCTAACGCCCTAAGAGAAGATTGTCAGCCTCGAGTGCAACGATTGAGCGAGAGAGAAGATAGGGCGGTGAAGACTTTCTCTCAGATAATTCTAACTCTTCCGACTCAAAACGGCCTGTCAATGGCCTATGCGGAAGAGTATTGAGTATTGAACCTACGCGATCCTCAGTGTGGCGTGCGACGTCCTCACCAATGTTACGTAAGAGTTCTAACCGTTTTCTGGACCCCTAGCCAGGTGGTCAGGGGTACGAACTTTTAATCACCAATGTTACGTAAGAGTTCTAACCGTTTTCTGGACCCCTAGCCAGGTGGTCAGGGGTACGAACTTTTAAAGTGTTCGGCGAATCCCGAACGCCGTTAGTGGCGCACTCAAATTCCCCATCTAGGAGGTTTTCGTGATGTTAATATTTGCGCGAGGATACTTCACCAAGC....... Una enorme sequenza di 3*10^9 caratteri
  • 7.
    Genoma umano Immaginateuna sequenza come quella del genoma umano
  • 8.
    Non é moltoutile finché non la integriamo con altri dati
  • 9.
    Che strumenti utilizzareper analizzarla?
  • 10.
  • 11.
    Esempio di annotazioneCCGACGGTTTAACCGCGGGACCGACCTTTGAGAATATCGGTACTCGCGAGACGGATTATCTGTAGAGTGATCGTTGGAATTTGCTCGATAATCCCCCTCTGCTGGTGAACATGGGAAATAACGAGAACCCAAAATGCGTACCAGCTTCGCTCCAATATATAGT GGAGGCGCATCATACAA TCCAG ATCCTAACGCCC TAAGAGAAGATTGTCAGCCTCGAGTGCAACGATTGAGCGAGAGAGAAGATAGGGCGGTGAAGACTTTCTCTCAGATAATTCTAACTCTTCCGACTCAAAACGGC C TGTCAATGGCCTATGCGGAAGAGTATTGAGTATTGAACCTACGCGATCCTCAGTGTGGCGTGCGACGTCCTCACCA ATGTTACGTAAGAGTTCT AACCGTTTTCTGGACC CCTAGCCAGGTGGTCAGGG GTACGAACTTTTAAAGTGTTCGGCGAATCCCGAACGCCGTTAGTGGCGCACTCAAATTCCCCATCTAGGAGGTTTTCGTGATGTTAATATTTGCGCGAGGATACTTCACCAAGC....... Coding SNP ????
  • 12.
    Bioinfo – altricasi d'uso Biologia strutturale: studiare strutture di proteine, predirle
  • 13.
    Docking molecolare :simulare l'efficacia di una molecola come farmaco
  • 14.
    Bioinfo – altricasi d'uso Data integration – ovvero riunire informazioni da piu' fonti
  • 15.
    La maggior partedel lavoro di un bioinformatico consiste in questo Scaricare una lista di geni da un sito, le loro sequenze da un altro, ... Unire i risultati di piú esperimenti indipendenti
  • 16.
    Altri esempi –presentare i dati La comunicazione via web é molto importante
  • 17.
    Senza, sarebbe impossibilecoordinare qualsiasi progetto di ricerca
  • 18.
    Alcuni portali (ncbi,uniprot, …) mettono a disposizione dati e tool pubblici
  • 19.
    Bioinformatica e programmazioneLa 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
  • 20.
    -> in bioinformaticasono molto diffusi linguaggi di scripting (perl, python, R, ...)
  • 21.
    Python e bioinformaticaPython é uno dei linguaggi piú utilizzati in bioinformatica www.bioinformatics.org survey Java Perl Python
  • 22.
    Vantaggi di Pythonin bioinfo Sintassi chiara , documentazione
  • 23.
  • 24.
    Ottimo per scripting
  • 25.
    Librerie per database,testing, documentazione, calcolo scientifico
  • 26.
    Orientato ad oggetti, ma multi-paradigma
  • 27.
    Python e bioinformaticaCurva d'apprendimento ☺☺☺☺☺ Facile da imparare ma potente Leggibilitá ☺☺☺☺☺ Testing ☺☺☺☺☺ Doctest, unittest, nose Comunitá open source ☺☺☺ BioPerl e BioConductor sono piu' ampi Paradigmi di programmazione ☺☺☺☺☺ Multi paradigma, OO Velocitá di esecuzione  Interpretato; Database ☺☺☺☺☺ Ottimi ORM (sqlalchemy), supporto ad altri tipi di db
  • 28.
    Bioinformatica e programmazioneBioinformatica – un approccio diverso rispetto alla programmazione di un software Uso estensivo di scripts e moduli
  • 29.
    Makefiles e similiper creare pipelines
  • 30.
    Tests utilizzati ancheper comunicare con non-programmatori
  • 31.
    Continua necessitá diriadattare scripts
  • 32.
    Bioinformatica e scriptsPiu' che scrivere programmi completi, spesso si scrivono piccoli scripts e librerie Piú facili da scrivere
  • 33.
    Piu' facili dariadattare Makefiles e simili posso essere utilizzati per creare pipelines
  • 34.
    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
  • 35.
    Esempio più complicatodi 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 )
  • 36.
    Testing usato percomunicare Immaginate che questo grafico sia il risultato di una vostra analisi
  • 37.
    Come dimostrare chesia corretto?
  • 38.
    Testing - esempioLa parte piu' difficile di un esperimento é scegliere i controlli e i background corretti
  • 39.
    In bioinformatica éla stessa cosa, solo che molto si fa al computer
  • 40.
    Testing - esempioAbbiamo scritto un programma per leggere il formato Fasta e convertirlo al formato GenBank
  • 41.
    Abbiamo scritto unprogramma 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.....
  • 42.
    Python e testingPython ha delle buone librerie per il testing Doctest -> esempi inclusi nella documentazione
  • 43.
    Unittest ->unit test classico con fixtures
  • 44.
    Nosetest ->individua tutte le funzioni che assomigliano a tests e le esegue
  • 45.
    doctest >>> help (say_hello) Help on function say_hello in module __main__: say_hello(name) print hello <name> to the screen example: >>> say_hello('Albert Einstein') hello Albert Einstein!!!
  • 46.
    Doctest esempio 2 Le doctest sono comode per comunicare con un non-programmatore
  • 47.
    unittest From unittestimport * class SimpleFastaSeqCase(unittest.TestCase): @classmethod def setUpClass(cls): ..... @classmethod def 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
  • 48.
    Python a oggettiUn genoma é composto da diversi cromosomi
  • 49.
    Su ogni cromosomapossiamo individuare diversi elementi, come geni, fattori di regolazione, etc..
  • 50.
    Ogni gene codificaper più trascritti, che a loro volta possono dare origine a più proteine
  • 51.
    > laprogrammazione a oggetti si presta molto bene a rappresentare dati di tipo biologico\
  • 52.
    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
  • 53.
    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
  • 54.
    Un oggetto inpython 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
  • 55.
    Più concisa diJava, inoltre non é obbligatorio usare OO
  • 56.
    OO é piuttostocomplicato in perl
  • 57.
    Python and Javaclasses 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!)
  • 58.
    Lavorare con datiscientifici Un problema serio é quello di immagazzinare i dati e accedervi
  • 59.
    diffusione di variformati di testo
  • 60.
    disputa tra flatfiles, database, e altri sistemi
  • 61.
    Python e databasePython ha ottimi moduli per gestire database relazionali Sqlalchemy, elixir.....
  • 62.
  • 63.
    Python e databasePython ha ottimi moduli per gestire database relazionali Sqlalchemy, elixir..... I db relazionali non vanno sempre bene per gestire dati scientifici Rappresentare grafi?
  • 64.
  • 65.
  • 66.
    Grafi e databaserelazionali E' facile rappresentare un grafo in un db relazionale, ma difficile navigarlo (query ricorsive)
  • 67.
    Problema comune inbioinformatica http://phenomics.cs.ucla.edu/
  • 68.
    Strutture gerarchiche edb I db relazionali non sono adatti per rappresentare dati sequenziali
  • 69.
  • 70.
    Altri tipi didatabase Python ha delle buone librerie per interagire con altri tipi di database
  • 71.
  • 72.
  • 73.
  • 74.
    HDF5 HDF5 éun formato di file binario, usato un fisica e astronomia
  • 75.
    Database gerarchico (tabelledentro altre tabelle)
  • 76.
    Ottime APIs inpython (PyTables) SNP object - id - position - chromosome - genotypes individual genotype - allele1 - allele2 - stats population iHS Fst Nested tables
  • 77.
    Librerie open sourceper la bioinformatica Vediamo qualche modulo di utilità generica..
  • 78.
    Biopython Una collezionedi moduli per la bioinformatica
  • 79.
    Numero di funzionalitáimplementate: bioconductor > bioperl > biopython > tutti gli altri Punti forti di Biopython: Supporto a diversi formati
  • 80.
    APIs per entreze alcuni database importanti
  • 81.
  • 82.
    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)
  • 83.
    Pygr Ottimo peranalisi su genomi
  • 84.
    Punti forti Nascondeil problema del salvataggio di dati (database, files)
  • 85.
    Usare e configurareblast locali
  • 86.
  • 87.
    Interfaccia con ncbi,ensembl, ucsc
  • 88.
    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)
  • 89.
    Scientific Python Numpy: modulo per calcolo numerico (array, matrici..)
  • 90.
    Scipy : calcolomatematico avanzato, test statistici..
  • 91.
  • 92.
  • 93.
  • 94.
    Numpy/Scipy example Note: ipython -pylab per trasformare python in un ambiente simile a R
  • 95.
    Svantaggi di Pythonin bioinfo La comunitá open source di Python é attiva, ma quelle di Perl e R lo sono di più
  • 96.
    In alcuni campi,mancano ancora buone librerie
  • 97.
  • 98.
    Problemi della bioinfoMentalitá 'Publish or Perish' dopo aver pubblicato, programmi e database vengono abbandonati Il testing é poco diffuso, difficile riconoscere gli errori Molti scripts non sono inclusi nelle pubblicazioni! Poca cultura su software engineering
  • 99.
  • 100.
    Grazie per l'attenzione!!Ringraziamenti: Bologna biocomp group
  • 101.
  • 102.
  • 103.
    nodalpoint.org and allbioinfo bloggers
  • 104.
  • 105.
    Sequenziamento genoma umanoImmaginate una sequenza grande come il genoma umano
  • 106.
    Come trarre ordineda una massa di dati come questa?
  • 107.
    Come associare ungene ad una posizione, sequenza?
  • 108.
  • 109.
  • 110.
    Esempio di annotazionedi una sequenza Annotazione di una sequenza -> identificiare posizioni di geni, fattori di regolazione, ...
  • 111.
    Esempio di esperimentobioinformatico Ipotesi : il gene XYZ è conservato in uomo e topo.
  • 112.
    Assunzioni : I genomi di entrambi gli organismi sono stati sequenziati con lo stesso livello di qualità;
  • 113.
  • 114.
  • 115.
    Esempio di esperimentobioinformatico Per dimostrare che il gene XYZ é conservato in entrambe le specie, potrei scrivere diversi scripts: download_sequences.py
  • 116.
  • 117.
    compare_length.py Il modopiù semplice di organizzare una pipeline é tramite Make o tool simili