Pycon

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    Pycon - Presentation Transcript

    1. Pycon.it 2009 Python e bioinformatica Giovanni Marco Dall'Olio Universitá Pompeu Fabra, Biologia Evolutiva, Barcelona
    2. 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)
    3. 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
    4. Tipico esempio di bioinformatica
      • Il sequenziamento del genoma umano nel 2001:
        • CCGACGGTTTAACCGCGGGACCGACCTTTGAGAATATCGGTACTCGCGAGACGGATTATCTGTAGAGTGATCGTTGGAATTTGCTCGATAATCCCCCTCTGCTGGTGAACATGGGAAATAACGAGAACCCAAAATGCGTACCAGCTTCGCTCCAATATATAGTGGAGGCGCATCATACAATCCAGATCCTAACGCCCTAAGAGAAGATTGTCAGCCTCGAGTGCAACGATTGAGCGAGAGAGAAGATAGGGCGGTGAAGACTTTCTCTCAGATAATTCTAACTCTTCCGACTCAAAACGGCCTGTCAATGGCCTATGCGGAAGAGTATTGAGTATTGAACCTACGCGATCCTCAGTGTGGCGTGCGACGTCCTCACCAATGTTACGTAAGAGTTCTAACCGTTTTCTGGACCCCTAGCCAGGTGGTCAGGGGTACGAACTTTTAATCACCAATGTTACGTAAGAGTTCTAACCGTTTTCTGGACCCCTAGCCAGGTGGTCAGGGGTACGAACTTTTAAAGTGTTCGGCGAATCCCGAACGCCGTTAGTGGCGCACTCAAATTCCCCATCTAGGAGGTTTTCGTGATGTTAATATTTGCGCGAGGATACTTCACCAAGC.......
      • Una enorme sequenza di 3*10^9 caratteri
    5. 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?
    6. Esempio di annotazione
        • CCGACGGTTTAACCGCGGGACCGACCTTTGAGAATATCGGTACTCGCGAGACGGATTATCTGTAGAGTGATCGTTGGAATTTGCTCGATAATCCCCCTCTGCTGGTGAACATGGGAAATAACGAGAACCCAAAATGCGTACCAGCTTCGCTCCAATATATAGT GGAGGCGCATCATACAA TCCAG ATCCTAACGCCC TAAGAGAAGATTGTCAGCCTCGAGTGCAACGATTGAGCGAGAGAGAAGATAGGGCGGTGAAGACTTTCTCTCAGATAATTCTAACTCTTCCGACTCAAAACGGC C TGTCAATGGCCTATGCGGAAGAGTATTGAGTATTGAACCTACGCGATCCTCAGTGTGGCGTGCGACGTCCTCACCA ATGTTACGTAAGAGTTCT AACCGTTTTCTGGACC CCTAGCCAGGTGGTCAGGG GTACGAACTTTTAAAGTGTTCGGCGAATCCCGAACGCCGTTAGTGGCGCACTCAAATTCCCCATCTAGGAGGTTTTCGTGATGTTAATATTTGCGCGAGGATACTTCACCAAGC.......
      Coding SNP ????
    7. Bioinfo – altri casi d'uso
      • Biologia strutturale: studiare strutture di proteine, predirle
      • Docking molecolare : simulare l'efficacia di una molecola come farmaco
    8. 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
    9. 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
    10. 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, ...)
    11. Python e bioinformatica
      • Python é uno dei linguaggi piú utilizzati in bioinformatica
      www.bioinformatics.org survey Java Perl Python
    12. 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
    13. 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
    14. 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
    15. 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
    16. 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
    17. 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 )
    18. Testing usato per comunicare
      • Immaginate che questo grafico sia il risultato di una vostra analisi
      • Come dimostrare che sia corretto?
    19. 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
    20. 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.....
    21. 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
    22. 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!!!
    23. Doctest esempio 2
      • Le doctest sono comode per comunicare con un non-programmatore
    24. 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
    25. 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
    26. 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
    27. 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
    28. 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
    29. 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!)
    30. 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
    31. Python e database
      • Python ha ottimi moduli per gestire database relazionali
        • Sqlalchemy, elixir.....
    32. sqlalchemy example
    33. Python e database
      • Python ha ottimi moduli per gestire database relazionali
        • Sqlalchemy, elixir.....
      • I db relazionali non vanno sempre bene per gestire dati scientifici
        • Rappresentare grafi?
        • Strutture gerarchiche?
        • Merging di insiemi di dati?
    34. 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/
    35. Strutture gerarchiche e db
      • I db relazionali non sono adatti per rappresentare dati sequenziali
      • Difficile rappresentare 'sottosequenze' (o slice di stringhe)
    36. Altri tipi di database
      • Python ha delle buone librerie per interagire con altri tipi di database
      • db a oggetti: ZODB
      • db gerarchico: PyTables
      • ...
    37. 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 individual genotype - allele1 - allele2 - stats population iHS Fst Nested tables
    38. Librerie open source per la bioinformatica
      • Vediamo qualche modulo di utilità generica..
    39. 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
    40. 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)
    41. Pygr
      • Ottimo per analisi su genomi
      • Punti forti
        • Nasconde il problema del salvataggio di dati (database, files)
        • Usare e configurare blast locali
        • Creare annotazioni
        • Interfaccia con ncbi, ensembl, ucsc
    42. 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)
    43. 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)
    44. Numpy/Scipy example
      • Note: ipython -pylab per trasformare python in un ambiente simile a R
    45. 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
    46. Problemi della bioinfo
      • Mentalitá '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
      • Babele di formati/database/scripts
    47. Grazie per l'attenzione!!
      • Ringraziamenti:
        • Bologna biocomp group
        • molecularlab.it
        • Biologia evolutiva UPF
        • nodalpoint.org and all bioinfo bloggers
    48. Fine talk
    49. 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?
    50. Esempio di annotazione di una sequenza
      • Annotazione di una sequenza -> identificiare posizioni di geni, fattori di regolazione, ...
    51. 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à;
        • ....
        • ....
    52. 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
    SlideShare Zeitgeist 2009

    + Giovanni Dall'OlioGiovanni Dall'Olio Nominate

    custom

    415 views, 2 favs, 1 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 415
      • 318 on SlideShare
      • 97 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 11
    Most viewed embeds
    • 97 views on http://bioinfoblog.it

    more

    All embeds
    • 97 views on http://bioinfoblog.it

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories