Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Quickie Incanter/Clojure à Devoxx France 2012

6,449 views

Published on

Présentation d'Incanter et initiation à Clojure. Les exemples de code sont sur GitHub https://github.com/cfalguiere/Demo-Incanter-Devoxx-France

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Quickie Incanter/Clojure à Devoxx France 2012

  1. 1. goo.gl/4mmJQdes statistiques en un coup de baguette magique Claude Falguière - @cfalguiere Devoxx France 20 Avril 2012 1
  2. 2. L’incantation du jour 2
  3. 3. L’incantation du jour 2
  4. 4. L’incantation du jour 3
  5. 5. L’incantation du jour 3
  6. 6. Claude Falguière Architecte Technique depuis plus de 10 ans@cfalguiere 4
  7. 7. Incanter : Clojure + R The R Project for Statistical Computing 5
  8. 8. Incanter : Clojure + R = + The R Project for Statistical Computing 5
  9. 9. Incanter, quelles magies Charting & visualization Mathematical functions Statistical functionsMatrix & linear algebra functions Data manipulations 6
  10. 10. Incanter, quelles magies Charting & visualization Mathematical functions Statistical functionsMatrix & linear algebra functions Data manipulations 6
  11. 11. Incanter, quelles magies 7
  12. 12. Incanter, quelles magiesProbability distributions ProbabilitésMonte Carlo simulation 7
  13. 13. Incanter, quelles magiesProbability distributions ProbabilitésMonte Carlo simulation Linear regression Hypothesis / Significance / Correlation tests Principal Componants Analysis (PCA) Statistiques Statistical learning / Classification Bayesian statistics ... 7
  14. 14. Langage fonctionnel Source http://r.wikipedia.org/wiki/Programmation_fonctionnellePas depanique ... 8
  15. 15. Langage fonctionnel Source http://r.wikipedia.org/wiki/Programmation_fonctionnelleFonctions 8
  16. 16. Langage fonctionnel Source http://r.wikipedia.org/wiki/Programmation_fonctionnelleFonctions Programme = emboîtement de fonctions que lon peut voir comme des « boîtes noires » 8
  17. 17. Langage fonctionnel Source http://r.wikipedia.org/wiki/Programmation_fonctionnelleFonctions Programme = emboîtement de fonctions que lon peut voir comme des « boîtes noires » Chaque boîte possède plusieurs paramètres en entrée mais une seule sortie 8
  18. 18. Langage fonctionnel Source http://r.wikipedia.org/wiki/Programmation_fonctionnelleFonctions Programme = emboîtement de fonctions que lon peut voir comme des « boîtes noires » Chaque boîte possède plusieurs paramètres en entrée mais une seule sortie Pas d’état => pas d’effet de bord 8
  19. 19. ClojureLISP like ((()()())) compilé en bytecode Sur JVM toutes les librairies Java sont disponibles Orienté données immuables et collections persistantes concurrence support du multi-threading 9
  20. 20. Clojure - expressions 10
  21. 21. Clojure - expressions(println "Hello Devoxx") -> "Hello Devoxx" 10
  22. 22. Clojure - expressions(println "Hello Devoxx") -> "Hello Devoxx"(def conference "Devoxx")(println "Hello" conference) 10
  23. 23. Clojure - expressions(println "Hello Devoxx") -> "Hello Devoxx"(def conference "Devoxx")(println "Hello" conference)(count (str "Hello" conference)) -> 11 10
  24. 24. Clojure - intégration Java 11
  25. 25. Clojure - intégration Java(println "Hello"(.toUpperCase conference)) 11
  26. 26. Clojure - intégration Java(println "Hello"(.toUpperCase conference))(javax.swing.JOptionPane/showMessageDialog nil"Hello Devoxx") 11
  27. 27. Clojure - fonctions 12
  28. 28. Clojure - fonctions(def print-hello (fn[name] (println "Hello", name))) 12
  29. 29. Clojure - fonctions(def print-hello (fn[name] (println "Hello", name)))(defn print-hello [name] (println "Hello", name))(print-hello "Devoxx") 12
  30. 30. Clojure - fonctions(def print-hello (fn[name] (println "Hello", name)))(defn print-hello [name] (println "Hello", name))(print-hello "Devoxx")(def conferences ("Devoxx" "Mix-IT"))(map #(str "Hello " %) conferences) -> ("Hello Devoxx" "Hello Mix-IT") 12
  31. 31. Clojure - les nombres 13
  32. 32. Clojure - les nombresBoxésDouble par défaut 13
  33. 33. Clojure - les nombres (+ 1 2 3) -> 7BoxésDouble par défaut 13
  34. 34. Clojure - les nombres (+ 1 2 3) -> 7Boxés (+ 4 (* 2 3)) -> 10Double par défaut 13
  35. 35. Clojure - les nombres (+ 1 2 3) -> 7Boxés (+ 4 (* 2 3)) -> 10Double par défaut (= 2 (+ 1 1)) -> true 13
  36. 36. Clojure - les nombres (+ 1 2 3) -> 7Boxés (+ 4 (* 2 3)) -> 10Double par défaut (= 2 (+ 1 1)) -> true (= 1 1.0) -> true 13
  37. 37. Clojure - les collectionsList,Vector,Set 14
  38. 38. Clojure - les collections (def valuelist (1 2 2 3)) (def avector [1 2 2 3])List, (def aset #{1 2 3})Vector,Set 14
  39. 39. Clojure - les collections (def valuelist (1 2 2 3)) (def avector [1 2 2 3])List, (def aset #{1 2 3})Vector,Set (count valuelist) -> 4 (count (2 1 3)) -> 3 14
  40. 40. Clojure - les collections (def valuelist (1 2 2 3)) (def avector [1 2 2 3])List, (def aset #{1 2 3})Vector,Set (count valuelist) -> 4 (count (2 1 3)) -> 3 (nth (2 1 3) 0) -> 2 ([1 2 2 3] 0) -> 1 14
  41. 41. Clojure - les collectionsMap 15
  42. 42. Clojure - les collections (def colormap { "Black" 0, "White" 7} ) (def person { :name "Alice", :score 2} )Map 15
  43. 43. Clojure - les collections (def colormap { "Black" 0, "White" 7} ) (def person { :name "Alice", :score 2} )Map (colormap "White") -> 7 (person :name) -> "Alice" 15
  44. 44. Clojure - les collections (def colormap { "Black" 0, "White" 7} ) (def person { :name "Alice", :score 2} )Map (colormap "White") -> 7 (person :name) -> "Alice" (map #(:score %) (filter #(= (:name %) "Alice") persons)) -> 1 15
  45. 45. Incanter - la collection Dataset 16
  46. 46. Incanter - la collection Dataset(def inputds (read-dataset "test-data.csv" :header true)) 16
  47. 47. Incanter - la collection Dataset(def inputds (read-dataset "test-data.csv" :header true))($where {:status "true"} inputds) -> les lignes OK 16
  48. 48. Incanter - la collection Dataset(def inputds (read-dataset "test-data.csv" :header true))($where {:status "true"} inputds) -> les lignes OK($ :t inputds) -> la colonne t 16
  49. 49. Incanter - la collection Dataset(def inputds (read-dataset "test-data.csv" :header true))($where {:status "true"} inputds) -> les lignes OK($ :t inputds) -> la colonne t(mean ($ :t inputds)) -> la moyenne 16
  50. 50. Incanter - visualisation(view inputds) 17
  51. 51. Incanter - visualisation(view inputds)(histogram :t :data inputds) 18
  52. 52. Incanter - visualisation(view inputds)(histogram :t :data inputds)(time-series-plot :ts :t :data inputds)) 19
  53. 53. Incanter - initiation à la magie 20
  54. 54. Incanter - initiation à la magieLes grimoiresincanter.orgdata-sorcery.orggithub.com/liebke/incanterclojure.org4clojure.com 20
  55. 55. Incanter - initiation à la magie 21
  56. 56. Incanter - initiation à la magie L’atelier REPL Emacs - Slime Eclipse - CounterClockWise IDEA - La Clojure 21
  57. 57. Incanter - initiation à la magie 22
  58. 58. Incanter - initiation à la magie Les assistants Leiningen Midge Swank ... 22
  59. 59. Incanter - se lancer 23
  60. 60. Incanter - se lancerLa voie du novice downloader Incantercliquer sur l’icône 23
  61. 61. Incanter - se lancer 24
  62. 62. Incanter - se lancerLa voie du gourouinstaller clojure, lein, swank, incanter ... 24
  63. 63. Incanter - se lancer La voie du gourou faineant installer cljr cljr install incanter cljr repl REPL & more (lein, swank, ...) 24
  64. 64. Incanter - quelques incantations 25
  65. 65. Incanter - quelques incantationsLe fichier tu liras Le graphe des temps de réponse tu afficherasLes erreurs tu filtreras Les données tu grouperas par labelLa moyenne des temps de réponse tucalculeras Sur chaque groupe, la moyenne des temps tu produirasLes statistiques des temps de Pour chaque groupe, l’histogrammeréponse tu calculeras tu produiras https://github.com/cfalguiere/Demo-Incanter-Devoxx-France 25
  66. 66. Incanter - incantation 1 26
  67. 67. Incanter - incantation 1Le fichier tu lirasLes erreurs tu filtrerasLa moyenne des temps de réponse tu calculeras 26
  68. 68. Incanter - incantation 1Le fichier tu lirasLes erreurs tu filtrerasLa moyenne des temps de réponse tu calculeras https://github.com/cfalguiere/Demo-Incanter-Devoxx-France/blob/master/demo1.clj 851.7333333333333 26
  69. 69. Incanter - incantation 2 27
  70. 70. Incanter - incantation 2Le fichier tu lirasLes erreurs tu filtrerasLes statistiques des temps de réponse tu calculeras 27
  71. 71. Incanter - incantation 2Le fichier tu lirasLes erreurs tu filtrerasLes statistiques des temps de réponse tu calculeras https://github.com/cfalguiere/Demo-Incanter-Devoxx-France/blob/master/demo2.clj {"sd" 1366.7118238764929, "mean" 851.7333333333333, "count" 15} 27
  72. 72. Incanter - incantation 3 28
  73. 73. Incanter - incantation 3Le fichier tu lirasLes erreurs tu filtrerasLe graphe des temps de réponse tu afficheras 28
  74. 74. Incanter - incantation 3Le fichier tu lirasLes erreurs tu filtrerasLe graphe des temps de réponse tu afficherashttps://github.com/cfalguiere/Demo-Incanter-Devoxx-France/blob/master/demo3.clj 28
  75. 75. Incanter - incantation 4 29
  76. 76. Incanter - incantation 4 Le fichier tu lirasLes erreurs tu filtrerasLes données tu grouperas par labelSur chaque groupe, la moyenne des temps tu produiras 29
  77. 77. Incanter - incantation 4 Le fichier tu liras Les erreurs tu filtreras Les données tu grouperas par label Sur chaque groupe, la moyenne des temps tu produirashttps://github.com/cfalguiere/Demo-Incanter-Devoxx-France/blob/master/demo-functions.cljhttps://github.com/cfalguiere/Demo-Incanter-Devoxx-France/blob/master/demo4.clj {"SearchProduct" 1255.5, "HomePage" 341.75} 29
  78. 78. Incanter - incantation 5 30
  79. 79. Incanter - incantation 5 Le fichier tu lirasLes erreurs tu filtrerasLes données tu grouperas par labelPour chaque groupe, l’histogramme tu produiras 30
  80. 80. Incanter - incantation 5 Le fichier tu liras Les erreurs tu filtreras Les données tu grouperas par label Pour chaque groupe, l’histogramme tu produirashttps://github.com/cfalguiere/Demo-Incanter-Devoxx-France/blob/master/demo-functions.cljhttps://github.com/cfalguiere/Demo-Incanter-Devoxx-France/blob/master/demo5.clj 30
  81. 81. Incanter - les secrets du magicien 31
  82. 82. Incanter - les secrets du magicien Parallel Colt a multi-threaded version of Colt https://sites.google.com/site/piotrwendykier/software/parallelcolt 31
  83. 83. Incanter - les secrets du magicien Parallel Colt a multi-threaded version of Colt https://sites.google.com/site/piotrwendykier/software/parallelcoltColt a set of Open Source Libraries for High Performance Scientific and Technical Comput http://acs.lbl.gov/software/colt/ 31
  84. 84. Incanter - les secrets du magicien Parallel Colt a multi-threaded version of Colt https://sites.google.com/site/piotrwendykier/software/parallelcoltColt a set of Open Source Libraries for High Performance Scientific and Technical Comput http://acs.lbl.gov/software/colt/ Netlib-Java a collection of mission-critical software components for linear algebra systems (i.e. working with vectors or matrices) http://code.google.com/p/netlib-java/ 31
  85. 85. Incanter - les secrets du magicien 32
  86. 86. Incanter - les secrets du magicien OpenCVS http://www.opencvs.org/ 32
  87. 87. Incanter - les secrets du magicien OpenCVS POI http://www.opencvs.org/ a Java API for microsoft documents http://poi.apache.org/ 32
  88. 88. Incanter - les secrets du magicien OpenCVS POI http://www.opencvs.org/ a Java API for microsoft documents http://poi.apache.org/ CongoMongo a Clojure wrapper for mongo-db API https://github.com/aboekhoff/congomongo 32
  89. 89. Incanter - les secrets du magicien 33
  90. 90. Incanter - les secrets du magicien iText a library that allows you to create and manipulate PDF documents. http://itextpdf.com/ 33
  91. 91. Incanter - les secrets du magicien iText a library that allows you to create and manipulate PDF documents. http://itextpdf.com/ JLaTeXMath display mathematical formulas written in LaTeX http://forge.scilab.org/index.php/p/jlatexmath/ 33
  92. 92. Incanter - les secrets du magicien iText a library that allows you to create and manipulate PDF documents. http://itextpdf.com/ JLaTeXMath display mathematical formulas written in LaTeX http://forge.scilab.org/index.php/p/jlatexmath/ JFreeChart http://www.jfree.org/jfreechart/ 33
  93. 93. Incanter - les secrets du magicien iText a library that allows you to create and manipulate PDF documents. http://itextpdf.com/ JLaTeXMath display mathematical formulas written in LaTeX http://forge.scilab.org/index.php/p/jlatexmath/ JFreeChart http://www.jfree.org/jfreechart/ 33
  94. 94. Incanter - les secrets du magicien 34
  95. 95. Incanter - les secrets du magicien JLine a Java library for handling console input http://jline.sourceforge.net/ 34
  96. 96. Incanter - les écoles de magie 35
  97. 97. Incanter - les écoles de magiehttp://dev.clojure.org/display/community/Clojure+User+Groups Paris Clojure User Group Incanter Google Group Incanter & Clojure sur Stackoverflow 35
  98. 98. 36
  99. 99. MerciBonnes incantations ! 36

×