Python: a arma secreta do Cientista de Dados

1.290 visualizações

Publicada em

Uma mescla da palestra "Cientista de Dados" com a palestra "Python: cabe no seu bolso, no seu micro, no seu cérebro".

Publicada em: Software

Python: a arma secreta do Cientista de Dados

  1. 1. Python: A Arma Secreta do Cientista de Dados Rodrigo Dias Arruda Senra rsenra@acm.org
  2. 2. Apenas um rapaz latino americano...
  3. 3. Apenas um rapaz latino americano...
  4. 4. Apenas um rapaz latino americano... • Engenheiro de Computação Grad-MSc-PhD IC-Unicamp
  5. 5. Apenas um rapaz latino americano... • Engenheiro de Software • GPr Sistemas (11 anos) • HI Tecnologia (5 anos) • Engenheiro de Computação Grad-MSc-PhD IC-Unicamp
  6. 6. Apenas um rapaz latino americano... • Engenheiro de Software • GPr Sistemas (11 anos) • HI Tecnologia (5 anos) • Professor Universitário - PUC-Campinas (2 anos) • Engenheiro de Computação Grad-MSc-PhD IC-Unicamp
  7. 7. Apenas um rapaz latino americano... • Engenheiro de Software • GPr Sistemas (11 anos) • HI Tecnologia (5 anos) • Professor Universitário - PUC-Campinas (2 anos) • Especialista - globo.com (2 anos) • Engenheiro de Computação Grad-MSc-PhD IC-Unicamp
  8. 8. Apenas um rapaz latino americano... • Engenheiro de Software • GPr Sistemas (11 anos) • HI Tecnologia (5 anos) • Professor Universitário - PUC-Campinas (2 anos) • Especialista - globo.com (2 anos) • Cientista Pesquisador - EMC2 • Engenheiro de Computação Grad-MSc-PhD IC-Unicamp
  9. 9. Apenas um rapaz latino americano... • Engenheiro de Software • GPr Sistemas (11 anos) • HI Tecnologia (5 anos) • Professor Universitário - PUC-Campinas (2 anos) • Especialista - globo.com (2 anos) • Cientista Pesquisador - EMC2 • Engenheiro de Computação Grad-MSc-PhD IC-Unicamp • Entusiasta de FLOSS (atuante na comunidade Python desde 2000)
  10. 10. Quem está aí ?
  11. 11. Quem está aí ? • Estudantes ?
  12. 12. Quem está aí ? • Estudantes ? • Profissionais ?
  13. 13. Quem está aí ? • Estudantes ? • Profissionais ? • Professores ?
  14. 14. Quem está aí ? • Estudantes ? • Profissionais ? • Professores ? • Palestrantes ?
  15. 15. Quem está aí ? • Estudantes ? • Profissionais ? • Professores ? • Palestrantes ? • Pythonistas ?
  16. 16. Vamos falar do quê ? • Cientista de Dados • O Graal do desenvolvedor • Escolhendo uma linguagem • Contextualizando Python • Vocabulário Ofidiglota
  17. 17. fONTE: IDC Digital Universe Study, patrocinado pela EMC, 2011 fonte: http://thehumanfaceofbigdata.com/
  18. 18. fONTE: IDC Digital Universe Study, patrocinado pela EMC, 2011 IN 2010 THE DIGITAL UNIVERSE WAS 1.2 ZETTABYTES fonte: http://thehumanfaceofbigdata.com/
  19. 19. fONTE: IDC Digital Universe Study, patrocinado pela EMC, 2011 IN 2010 THE DIGITAL UNIVERSE WAS 1.2 ZETTABYTES 1,200,000,000,000,000,000,000 Zetta Exa Peta Tera Giga Mega Kilo Byte fonte: http://thehumanfaceofbigdata.com/
  20. 20. fONTE: IDC Digital Universe Study, patrocinado pela EMC, 2011 2009
 0.8 Zettabytes CRESCIMENTO DA INFORMAÇÃO 2020 44 X MAIOR 35.2 ZB IN 2010 THE DIGITAL UNIVERSE WAS 1.2 ZETTABYTES 1,200,000,000,000,000,000,000 Zetta Exa Peta Tera Giga Mega Kilo Byte fonte: http://thehumanfaceofbigdata.com/
  21. 21. fONTE: IDC Digital Universe Study, patrocinado pela EMC, 2011 2009
 0.8 Zettabytes CRESCIMENTO DA INFORMAÇÃO 2020 44 X MAIOR 35.2 ZB IN 2010 THE DIGITAL UNIVERSE WAS 1.2 ZETTABYTES 1,200,000,000,000,000,000,000 Zetta Exa Peta Tera Giga Mega Kilo Byte fonte: http://thehumanfaceofbigdata.com/
  22. 22. http://www.telegraph.co.uk/news/picturegalleries/picturesoftheday/2545407/Pictures-of-the-day-12-August-2008.html?image=8
  23. 23. Cientista de Dados Rodrigo Senra O que faz ? Quem é ?
  24. 24. Data Science is a newly emerging field dedicated to analyzing and manipulating data to derive insights and build data products. https://beta.oreilly.com/ideas/what-is-data-science It combines skill-sets ranging from computer science, to mathematics, to art. http://images.fineartamerica.com/images-medium-large-5/1-pi-transition-paths-martin-krzywinski.jpg
  25. 25. http://drewconway.com/
  26. 26. http://berkeleysciencereview.com/scientific-collaborations-uc-berkeley-data-driven-cover/
  27. 27. Estatísticas descritivas: ! Média vs. Mediana. ! Desvio Padrão ! Quartis, Min/Max. ! Correlação entre variavéis
  28. 28. Estatísticas descritivas: ! Média vs. Mediana. ! Desvio Padrão ! Quartis, Min/Max. ! Correlação entre variavéis 1 X y 10. 8.0 8.0 6.9 13. 7.5 9.0 8.8 11.0 8.3 14. 9.9 6.0 7.2 4.0 4.2 12. 10. 7.0 4.8 5.0 5.6 2 x y 10. 9.1 8.0 8.1 13. 8.7 9.0 8.7 11. 9.2 14. 8.1 6.0 6.1 4.0 3.1 12. 9.1 7.0 7.2 5.0 4.7 3 x y 10. 7.4 8.0 6.7 13. 12. 9.0 7.1 11. 7.8 14. 8.8 6.0 6.0 4.0 5.3 12. 8.1 7.0 6.4 5.0 5.7 4 x y 8.00 6.58 8.00 5.76 8.00 7.71 8.00 8.84 8.00 8.47 8.00 7.04 8.00 5.25 19.0 12.5 8.00 5.56 8.00 7.91 8.00 6.89
  29. 29. Estatísticas descritivas: ! Média vs. Mediana. ! Desvio Padrão ! Quartis, Min/Max. ! Correlação entre variavéis 1 X y 10. 8.0 8.0 6.9 13. 7.5 9.0 8.8 11.0 8.3 14. 9.9 6.0 7.2 4.0 4.2 12. 10. 7.0 4.8 5.0 5.6 2 x y 10. 9.1 8.0 8.1 13. 8.7 9.0 8.7 11. 9.2 14. 8.1 6.0 6.1 4.0 3.1 12. 9.1 7.0 7.2 5.0 4.7 3 x y 10. 7.4 8.0 6.7 13. 12. 9.0 7.1 11. 7.8 14. 8.8 6.0 6.0 4.0 5.3 12. 8.1 7.0 6.4 5.0 5.7 4 x y 8.00 6.58 8.00 5.76 8.00 7.71 8.00 8.84 8.00 8.47 8.00 7.04 8.00 5.25 19.0 12.5 8.00 5.56 8.00 7.91 8.00 6.89 Média de x: 9 Variância de x: 11 Média exata de y: 7.5 (2 d.p) Variância de y: 4.13 (to 2 d.p) Correlação entre x e y : 0.816 Regressão linear: Y = 3.00 + 0.500x
  30. 30. Estatísticas descritivas: ! Média vs. Mediana. ! Desvio Padrão ! Quartis, Min/Max. ! Correlação entre variavéis 1 X y 10. 8.0 8.0 6.9 13. 7.5 9.0 8.8 11.0 8.3 14. 9.9 6.0 7.2 4.0 4.2 12. 10. 7.0 4.8 5.0 5.6 2 x y 10. 9.1 8.0 8.1 13. 8.7 9.0 8.7 11. 9.2 14. 8.1 6.0 6.1 4.0 3.1 12. 9.1 7.0 7.2 5.0 4.7 3 x y 10. 7.4 8.0 6.7 13. 12. 9.0 7.1 11. 7.8 14. 8.8 6.0 6.0 4.0 5.3 12. 8.1 7.0 6.4 5.0 5.7 4 x y 8.00 6.58 8.00 5.76 8.00 7.71 8.00 8.84 8.00 8.47 8.00 7.04 8.00 5.25 19.0 12.5 8.00 5.56 8.00 7.91 8.00 6.89 Média de x: 9 Variância de x: 11 Média exata de y: 7.5 (2 d.p) Variância de y: 4.13 (to 2 d.p) Correlação entre x e y : 0.816 Regressão linear: Y = 3.00 + 0.500x
  31. 31. Estatísticas descritivas: ! Média vs. Mediana. ! Desvio Padrão ! Quartis, Min/Max. ! Correlação entre variavéis 1 X y 10. 8.0 8.0 6.9 13. 7.5 9.0 8.8 11.0 8.3 14. 9.9 6.0 7.2 4.0 4.2 12. 10. 7.0 4.8 5.0 5.6 2 x y 10. 9.1 8.0 8.1 13. 8.7 9.0 8.7 11. 9.2 14. 8.1 6.0 6.1 4.0 3.1 12. 9.1 7.0 7.2 5.0 4.7 3 x y 10. 7.4 8.0 6.7 13. 12. 9.0 7.1 11. 7.8 14. 8.8 6.0 6.0 4.0 5.3 12. 8.1 7.0 6.4 5.0 5.7 4 x y 8.00 6.58 8.00 5.76 8.00 7.71 8.00 8.84 8.00 8.47 8.00 7.04 8.00 5.25 19.0 12.5 8.00 5.56 8.00 7.91 8.00 6.89 Média de x: 9 Variância de x: 11 Média exata de y: 7.5 (2 d.p) Variância de y: 4.13 (to 2 d.p) Correlação entre x e y : 0.816 Regressão linear: Y = 3.00 + 0.500xTruth lies on statistics !
  32. 32. Big Data a cada passo da exploração de petróleo
  33. 33. Big Data a cada passo da exploração de petróleo Navigation Seismic: Pre-stack Seismic: Post-stack Log Curves Culture Data Geologic Model Pressure Data Velocity Data Interpretation
  34. 34. http://i0.wp.com/sciencereview.berkeley.edu/wp-content/uploads/2014/04/spring_2014_azam_05.jpg
  35. 35. Fernando Perez, lead PI at BIDS and creator of IPython, demonstrates brain imaging analyses performed using the IPython Notebook, an interactive web-based computational environment. credit: Peg Skorpinski
  36. 36. O Graal do Desenvolvedor
  37. 37. O Graal do Desenvolvedor http://blog.jessitron.com/
  38. 38. A eterna busca pela ferramenta perfeita
  39. 39. 40 Plankalkü Transistor 50 Fortran LISP Harddisk Circuito Integrado 60 COBOL SIMULA BASIC LOGO ITS OS360 MULTICS Mouse Interrupções Virt.Mem ARPANET RS-232 70 Pascal C Smalltalk Prolog UNIX CP/M VMS Floppy Micro- processador PONG TCP/IP Ethernet 80 Ada C++ Perl SQL LISA Macintosh UNIX MS-DOS Windows 1.0-2.0 OS/2 MINIX AIX HPUX SCO GNU RISC 90 Javascript Python Java PHP BeOS Linux Solaris Windows 2.0 - 98 OpenBSD ISA WWW 2000 Scala C# Mac OSX Windows ME 2000 XP Vista 7 Go Linux Julia
  40. 40. A verdade dói... # Edsger W.Dijkstra, 18 Junho 1975 http://www.cbi.umn.edu/inv/burros/ewd498.htm
  41. 41. A verdade dói... # Edsger W.Dijkstra, 18 Junho 1975 http://www.cbi.umn.edu/inv/burros/ewd498.htm FORTRAN --"the infantile disorder"--, by now nearly 20 years old, is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use
  42. 42. A verdade dói... # Edsger W.Dijkstra, 18 Junho 1975 http://www.cbi.umn.edu/inv/burros/ewd498.htm PL/1 --"the fatal disease"-- belongs more to the problem set than to the solution set
  43. 43. A verdade dói... # Edsger W.Dijkstra, 18 Junho 1975 http://www.cbi.umn.edu/inv/burros/ewd498.htm It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration
  44. 44. A verdade dói... # Edsger W.Dijkstra, 18 Junho 1975 http://www.cbi.umn.edu/inv/burros/ewd498.htm The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence
  45. 45. Truth lies on statistics!
  46. 46. Top 10 - SourceForge
  47. 47. Top 10 - SourceForge
  48. 48. http://githut.info/
  49. 49. Last data update: Fri Jul 24 20:03:26 BRT 2015 http://www.langpop.com Yahoo Search, Craigslist, Ohloh, Google Code, Freshmeat, Delicious, Powells
  50. 50. http://sogrady-media.redmonk.com/sogrady/files/2015/07/lang-rank-615-wm.png
  51. 51. Segurança Fonte: http://nvd.nist.gov/nvd.cfm
  52. 52. Segurança Fonte: http://nvd.nist.gov/nvd.cfm Python 91 Ruby 109 JS 209 Java 613 C 1559 PHP 2732
  53. 53. http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html
  54. 54. Duelo de linguagens
  55. 55. Duelo de linguagens
  56. 56. Duelo de linguagens
  57. 57. Duelo de linguagens
  58. 58. import java.io.*; import java.util.*; import java.text.*; public class sumcol { public static void main(String[] args) { int count = 0; String line; try { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); while ((line = in.readLine()) != null) { count = count + Integer.parseInt(line); } } catch (IOException e) { } System.out.println(Integer.toString(count)); Java
  59. 59. import java.io.*; import java.util.*; import java.text.*; public class sumcol { public static void main(String[] args) { int count = 0; String line; try { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); while ((line = in.readLine()) != null) { count = count + Integer.parseInt(line); } } catch (IOException e) { } System.out.println(Integer.toString(count)); Javausing System; class App { public static int Main(String[] args) { int count = 0; for (String line = Console.In.ReadLine(); line != null; line = Console.In.ReadLine()) { count += System.Convert.ToInt32(line); } Console.WriteLine(count.ToString()); return(0); } C#
  60. 60. import java.io.*; import java.util.*; import java.text.*; public class sumcol { public static void main(String[] args) { int count = 0; String line; try { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); while ((line = in.readLine()) != null) { count = count + Integer.parseInt(line); } } catch (IOException e) { } System.out.println(Integer.toString(count)); Javausing System; class App { public static int Main(String[] args) { int count = 0; for (String line = Console.In.ReadLine(); line != null; line = Console.In.ReadLine()) { count += System.Convert.ToInt32(line); } Console.WriteLine(count.ToString()); return(0); } C#import sys count = 0 while 1: line = sys.stdin.readline().strip() if not line: break count += int(line) print count Python
  61. 61. import java.io.*; import java.util.*; import java.text.*; public class sumcol { public static void main(String[] args) { int count = 0; String line; try { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); while ((line = in.readLine()) != null) { count = count + Integer.parseInt(line); } } catch (IOException e) { } System.out.println(Integer.toString(count)); Javausing System; class App { public static int Main(String[] args) { int count = 0; for (String line = Console.In.ReadLine(); line != null; line = Console.In.ReadLine()) { count += System.Convert.ToInt32(line); } Console.WriteLine(count.ToString()); return(0); } C#import sys count = 0 while 1: line = sys.stdin.readline().strip() if not line: break count += int(line) print count Pythonimport sys, itertools print sum(itertools.imap(int, sys.stdin)) Python
  62. 62. Python é ... • propósito geral • foco em produtividade do desenvolvedor • multi-plataforma e multi-paradigma • pilhas incluídas • floss software • fácil de extender e embutir • madura (criada em1989, liberada ao público 1991)
  63. 63. Interoperabiilidade ✴ Jython (Python implementado em Java) ✴ CPython (onde existir compilador C ISO/IEC 9899:1990) ✴ IronPython (implementado em C# pela M$) ✴ PyPy (Python implementado em... Python) ✴ Py4J (ponte entre CPython e JVM) ✴ Python for .NET [Brian Lloyd] ✴ Win32all [Mark Hammond] (adeus VBA!) ✴ PyObjC (Mac OSX middleware) ✴ Python for Delphi [Morgan Marat] ✴ LunaticPython [Gustavo Niemeyer] ✴ Ruby/Python (importar módulos Python em Ruby) ✴ Python + Fortran
  64. 64. Hora da Demo Dá tempo de ver o Python em ação ? É possível ? Seria pedir muito ?
  65. 65. Pygame
  66. 66. Pygame
  67. 67. Python no celular S60
  68. 68. Python no celular S60
  69. 69. Bancos de Dados from psycopg import * o = connect(“ dbname=teste user=fulano” ) c = o.cursor() c.execute(“ SELECT * FROM nome_da_tabela” ) row = c.fetchone() print row x = [ ('valor_1', 'fulano', 0), ('valor_2', 'beltrano', 5), ('valor_3', 'ciclano', 15)] c.executemany(" " " INSERT INTO outra_tabela VALUES (%s, %s, %s)""", x) c.commit()
  70. 70. Networking from twisted.internet.protocol import Protocol, Factory from twisted.internet import reactor from time import asctime class TimeServer(Protocol): def dataReceived(self, data): self.transport.write(asctime()) def main(): f = Factory() f.protocol = TimeServer reactor.listenTCP(8000, f) reactor.run() main()
  71. 71. Web Services from SOAPpy import SOAPProxy from SOAPpy import Types google = SOAPProxy( 'http://api.google.com/search/beta2', 'urn:GoogleSearch') results = google.doGetCachedPage('Pd6ke...ArQoX' , 'www.owls.org') of = open('cached_page_response.html', 'w') of.write(results) of.close()
  72. 72. SciPy import view from Numeric import * x = arange(-3, 6, .04) y = arange(-12, 12, .08) y = sin(y)*exp(-y*y/18.0) z = x * y[:,NewAxis] view.view(z)
  73. 73. Referências ! http://python.org ! http://www.pythonbrasil.com.br ! http://associacao.pythonbrasil.org ! http://showmedo.com
  74. 74. Referências ! Fluent Python: Luciano Ramalho (O’Reilly) ! Python in a Nutshell: Alex Martelli (O'Reilly) ! Python Cookbook: Alex Martelli, David Ascher (O'Reilly) ! Learning Python for Interactive Computing and Data Visualisation: Cyrille Rossant (Packt)
  75. 75. Conclusão • Ágil, madura e moderna • Fácil aprendizado • Comunidade Ativa • Fartura de documentação • Divertida ;o)
  76. 76. Obrigado a todos pela atenção. Rodrigo Dias Arruda Senra http://rodrigo.senra.nom.br rodsenra@gmail.com @rodsenra As opiniões e conclusões expressas nesta apresentação são de exclusiva responsabilidade de Rodrigo Senra. Não é necessário requisitar permissão do autor para o uso de partes ou do todo desta apresentação, desde que não sejam feitas alterações no conteúdo reutilizado e que esta nota esteja presente na íntegra no material resultante. Imagens e referências para outros trabalhos nesta apresentação permanecem propriedade daqueles que detêm seus direitos de copyright. Agradecimento especial a Ana Oliveira e Diego Salomone que contribuíram com alguns slides de suas apresentações sobre o mesmo tema.

×