Pycon

1,653 views
1,566 views

Published on

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,653
On SlideShare
0
From Embeds
0
Number of Embeds
112
Actions
Shares
0
Downloads
28
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Pycon

    1. 1. Pycon.it 2009 Python e bioinformatica Giovanni Marco Dall'Olio Universitá Pompeu Fabra, Biologia Evolutiva, Barcelona
    2. 2. Bioinformatica <ul><li>E' la scienza che si occupa di analizzare e trattare tutti i dati prodotti dalla ricerca scientifica, tramite metodi computazionali
    3. 3. Nata negli anni '70, con lo sviluppo di un metodo per confrontare due sequenze di proteine (Matrici PAM) </li></ul>
    4. 4. Esplosione di dati scientifici <ul><li>Al giorno d'oggi si producono piú dati scientifici di quanto si riesca ad analizzare
    5. 5. Costi e tempi diminuiti rapidamente </li></ul>n. sequenze (GenBank) 2009 1996
    6. 6. Tipico esempio di bioinformatica <ul><li>Il sequenziamento del genoma umano nel 2001: </li><ul><li>CCGACGGTTTAACCGCGGGACCGACCTTTGAGAATATCGGTACTCGCGAGACGGATTATCTGTAGAGTGATCGTTGGAATTTGCTCGATAATCCCCCTCTGCTGGTGAACATGGGAAATAACGAGAACCCAAAATGCGTACCAGCTTCGCTCCAATATATAGTGGAGGCGCATCATACAATCCAGATCCTAACGCCCTAAGAGAAGATTGTCAGCCTCGAGTGCAACGATTGAGCGAGAGAGAAGATAGGGCGGTGAAGACTTTCTCTCAGATAATTCTAACTCTTCCGACTCAAAACGGCCTGTCAATGGCCTATGCGGAAGAGTATTGAGTATTGAACCTACGCGATCCTCAGTGTGGCGTGCGACGTCCTCACCAATGTTACGTAAGAGTTCTAACCGTTTTCTGGACCCCTAGCCAGGTGGTCAGGGGTACGAACTTTTAATCACCAATGTTACGTAAGAGTTCTAACCGTTTTCTGGACCCCTAGCCAGGTGGTCAGGGGTACGAACTTTTAAAGTGTTCGGCGAATCCCGAACGCCGTTAGTGGCGCACTCAAATTCCCCATCTAGGAGGTTTTCGTGATGTTAATATTTGCGCGAGGATACTTCACCAAGC....... </li></ul><li>Una enorme sequenza di 3*10^9 caratteri </li></ul>
    7. 7. Genoma umano <ul><li>Immaginate una sequenza come quella del genoma umano
    8. 8. Non é molto utile finché non la integriamo con altri dati
    9. 9. Che strumenti utilizzare per analizzarla?
    10. 10. Che approcci, che tecniche? </li></ul>
    11. 11. Esempio di annotazione <ul><ul><li>CCGACGGTTTAACCGCGGGACCGACCTTTGAGAATATCGGTACTCGCGAGACGGATTATCTGTAGAGTGATCGTTGGAATTTGCTCGATAATCCCCCTCTGCTGGTGAACATGGGAAATAACGAGAACCCAAAATGCGTACCAGCTTCGCTCCAATATATAGT GGAGGCGCATCATACAA TCCAG ATCCTAACGCCC TAAGAGAAGATTGTCAGCCTCGAGTGCAACGATTGAGCGAGAGAGAAGATAGGGCGGTGAAGACTTTCTCTCAGATAATTCTAACTCTTCCGACTCAAAACGGC C TGTCAATGGCCTATGCGGAAGAGTATTGAGTATTGAACCTACGCGATCCTCAGTGTGGCGTGCGACGTCCTCACCA ATGTTACGTAAGAGTTCT AACCGTTTTCTGGACC CCTAGCCAGGTGGTCAGGG GTACGAACTTTTAAAGTGTTCGGCGAATCCCGAACGCCGTTAGTGGCGCACTCAAATTCCCCATCTAGGAGGTTTTCGTGATGTTAATATTTGCGCGAGGATACTTCACCAAGC....... </li></ul></ul>Coding SNP ????
    12. 12. Bioinfo – altri casi d'uso <ul><li>Biologia strutturale: studiare strutture di proteine, predirle
    13. 13. Docking molecolare : simulare l'efficacia di una molecola come farmaco </li></ul>
    14. 14. Bioinfo – altri casi d'uso <ul><li>Data integration – ovvero riunire informazioni da piu' fonti
    15. 15. La maggior parte del lavoro di un bioinformatico consiste in questo </li><ul><li>Scaricare una lista di geni da un sito, le loro sequenze da un altro, ... </li></ul><li>Unire i risultati di piú esperimenti indipendenti </li></ul>
    16. 16. Altri esempi – presentare i dati <ul><li>La comunicazione via web é molto importante
    17. 17. Senza, sarebbe impossibile coordinare qualsiasi progetto di ricerca
    18. 18. Alcuni portali (ncbi, uniprot, …) mettono a disposizione dati e tool pubblici </li></ul>
    19. 19. Bioinformatica e programmazione <ul><li>La maggior parte delle persone che lavorano come bioinformatici ha un background in biologia </li><ul><li>Non molti programmatori professionisti </li></ul><li>Per molte operazioni mostrate nelle slide precedenti, non é necessario utilizzare linguaggi a basso livello
    20. 20. -> in bioinformatica sono molto diffusi linguaggi di scripting (perl, python, R, ...) </li></ul>
    21. 21. Python e bioinformatica <ul><li>Python é uno dei linguaggi piú utilizzati in bioinformatica </li></ul>www.bioinformatics.org survey Java Perl Python
    22. 22. Vantaggi di Python in bioinfo <ul><li>Sintassi chiara , documentazione
    23. 23. Facile da imparare
    24. 24. Ottimo per scripting
    25. 25. Librerie per database, testing, documentazione, calcolo scientifico
    26. 26. Orientato ad oggetti , ma multi-paradigma </li></ul>
    27. 27. 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
    28. 28. Bioinformatica e programmazione <ul><li>Bioinformatica – un approccio diverso rispetto alla programmazione di un software </li><ul><li>Uso estensivo di scripts e moduli
    29. 29. Makefiles e simili per creare pipelines
    30. 30. Tests utilizzati anche per comunicare con non-programmatori
    31. 31. Continua necessitá di riadattare scripts </li></ul></ul>
    32. 32. Bioinformatica e scripts <ul><li>Piu' che scrivere programmi completi, spesso si scrivono piccoli scripts e librerie </li><ul><li>Piú facili da scrivere
    33. 33. Piu' facili da riadattare </li></ul><li>Makefiles e simili posso essere utilizzati per creare pipelines </li></ul>
    34. 34. Esempio di pipeline (Makefile) <ul><li>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 </li></ul>
    35. 35. 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 )
    36. 36. Testing usato per comunicare <ul><li>Immaginate che questo grafico sia il risultato di una vostra analisi
    37. 37. Come dimostrare che sia corretto? </li></ul>
    38. 38. Testing - esempio <ul><li>La parte piu' difficile di un esperimento é scegliere i controlli e i background corretti
    39. 39. In bioinformatica é la stessa cosa, solo che molto si fa al computer </li></ul>
    40. 40. Testing - esempio <ul><li>Abbiamo scritto un programma per leggere il formato Fasta e convertirlo al formato GenBank
    41. 41. 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..... </li></ul>
    42. 42. Python e testing <ul><li>Python ha delle buone librerie per il testing </li><ul><li>Doctest -> esempi inclusi nella documentazione
    43. 43. Unittest -> unit test classico con fixtures
    44. 44. Nosetest -> individua tutte le funzioni che assomigliano a tests e le esegue </li></ul></ul>
    45. 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. 46. Doctest esempio 2 <ul><li>Le doctest sono comode per comunicare con un non-programmatore </li></ul>
    47. 47. 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
    48. 48. Python a oggetti <ul><li>Un genoma é composto da diversi cromosomi
    49. 49. Su ogni cromosoma possiamo individuare diversi elementi, come geni, fattori di regolazione, etc..
    50. 50. Ogni gene codifica per più trascritti, che a loro volta possono dare origine a più proteine
    51. 51. > la programmazione a oggetti si presta molto bene a rappresentare dati di tipo biologico </li></ul>
    52. 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. 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. 54. Un oggetto in python class gene: def __init__ ( self ) : position = None sequence = '' transcripts = [] def get_subseq ( self , start, end ) : pass <ul><li>La sintassi di Python per gli oggetti é chiara e semplice
    55. 55. Più concisa di Java, inoltre non é obbligatorio usare OO
    56. 56. OO é piuttosto complicato in perl </li></ul>
    57. 57. 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!)
    58. 58. Lavorare con dati scientifici <ul><li>Un problema serio é quello di immagazzinare i dati e accedervi
    59. 59. diffusione di vari formati di testo
    60. 60. disputa tra flat files, database, e altri sistemi </li></ul>
    61. 61. Python e database <ul><li>Python ha ottimi moduli per gestire database relazionali </li><ul><li>Sqlalchemy, elixir..... </li></ul></ul>
    62. 62. sqlalchemy example
    63. 63. Python e database <ul><li>Python ha ottimi moduli per gestire database relazionali </li><ul><li>Sqlalchemy, elixir..... </li></ul><li>I db relazionali non vanno sempre bene per gestire dati scientifici </li><ul><li>Rappresentare grafi?
    64. 64. Strutture gerarchiche?
    65. 65. Merging di insiemi di dati? </li></ul></ul>
    66. 66. Grafi e database relazionali <ul><li>E' facile rappresentare un grafo in un db relazionale, ma difficile navigarlo (query ricorsive)
    67. 67. Problema comune in bioinformatica </li></ul>http://phenomics.cs.ucla.edu/
    68. 68. Strutture gerarchiche e db <ul><li>I db relazionali non sono adatti per rappresentare dati sequenziali
    69. 69. Difficile rappresentare 'sottosequenze' (o slice di stringhe) </li></ul>
    70. 70. Altri tipi di database <ul><li>Python ha delle buone librerie per interagire con altri tipi di database
    71. 71. db a oggetti: ZODB
    72. 72. db gerarchico: PyTables
    73. 73. ... </li></ul>
    74. 74. HDF5 <ul><li>HDF5 é un formato di file binario, usato un fisica e astronomia
    75. 75. Database gerarchico (tabelle dentro altre tabelle)
    76. 76. Ottime APIs in python (PyTables) </li></ul>SNP object - id - position - chromosome - genotypes individual genotype - allele1 - allele2 - stats population iHS Fst Nested tables
    77. 77. Librerie open source per la bioinformatica <ul><li>Vediamo qualche modulo di utilità generica.. </li></ul>
    78. 78. Biopython <ul><li>Una collezione di moduli per la bioinformatica
    79. 79. Numero di funzionalitá implementate: </li><ul><li>bioconductor > bioperl > biopython > tutti gli altri </li></ul><li>Punti forti di Biopython: </li><ul><li>Supporto a diversi formati
    80. 80. APIs per entrez e alcuni database importanti
    81. 81. Pdb / strutture </li></ul></ul>
    82. 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. 83. Pygr <ul><li>Ottimo per analisi su genomi
    84. 84. Punti forti </li><ul><li>Nasconde il problema del salvataggio di dati (database, files)
    85. 85. Usare e configurare blast locali
    86. 86. Creare annotazioni
    87. 87. Interfaccia con ncbi, ensembl, ucsc </li></ul></ul>
    88. 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. 89. Scientific Python <ul><li>Numpy : modulo per calcolo numerico (array, matrici..)
    90. 90. Scipy : calcolo matematico avanzato, test statistici..
    91. 91. Matplotlib : plottare grafici
    92. 92. Alcune alternative: </li><ul><li>sage
    93. 93. rpy (interfaccia a R) </li></ul></ul>
    94. 94. Numpy/Scipy example <ul><li>Note: ipython -pylab per trasformare python in un ambiente simile a R </li></ul>
    95. 95. Svantaggi di Python in bioinfo <ul><li>La comunitá open source di Python é attiva, ma quelle di Perl e R lo sono di più
    96. 96. In alcuni campi, mancano ancora buone librerie
    97. 97. Problemi con multi-threading </li></ul>
    98. 98. Problemi della bioinfo <ul><li>Mentalitá 'Publish or Perish' </li><ul><li>dopo aver pubblicato, programmi e database vengono abbandonati </li></ul><li>Il testing é poco diffuso, difficile riconoscere gli errori </li><ul><li>Molti scripts non sono inclusi nelle pubblicazioni! </li></ul><li>Poca cultura su software engineering
    99. 99. Babele di formati/database/scripts </li></ul>
    100. 100. Grazie per l'attenzione!! <ul><li>Ringraziamenti: </li><ul><li>Bologna biocomp group
    101. 101. molecularlab.it
    102. 102. Biologia evolutiva UPF
    103. 103. nodalpoint.org and all bioinfo bloggers </li></ul></ul>
    104. 104. Fine talk
    105. 105. Sequenziamento genoma umano <ul><li>Immaginate una sequenza grande come il genoma umano
    106. 106. Come trarre ordine da una massa di dati come questa?
    107. 107. Come associare un gene ad una posizione, sequenza?
    108. 108. Che strumenti? Che tecniche?
    109. 109. Che approcci? </li></ul>
    110. 110. Esempio di annotazione di una sequenza <ul><li>Annotazione di una sequenza -> identificiare posizioni di geni, fattori di regolazione, ... </li></ul>
    111. 111. Esempio di esperimento bioinformatico <ul><li>Ipotesi : il gene XYZ è conservato in uomo e topo.
    112. 112. Assunzioni : </li><ul><li>I genomi di entrambi gli organismi sono stati sequenziati con lo stesso livello di qualità;
    113. 113. ....
    114. 114. .... </li></ul></ul>
    115. 115. Esempio di esperimento bioinformatico <ul><li>Per dimostrare che il gene XYZ é conservato in entrambe le specie, potrei scrivere diversi scripts: </li><ul><li>download_sequences.py
    116. 116. check_sequences.py
    117. 117. compare_length.py </li></ul><li>Il modo più semplice di organizzare una pipeline é tramite Make o tool simili </li></ul>

    ×