diff --git a/module2/exo2/exercice_python_fr.org b/module2/exo2/exercice_python_fr.org index 3d950ac091083b9fc79bade34e9709712822fc29..9d15e31a87b67314384ba5c8c121891acd6a9900 100644 --- a/module2/exo2/exercice_python_fr.org +++ b/module2/exo2/exercice_python_fr.org @@ -1,6 +1,6 @@ -#+TITLE: Votre titre -#+AUTHOR: Votre nom -#+DATE: La date du jour +#+TITLE: Quelques statistiques de base +#+AUTHOR: Samuel Loury +#+DATE: [2020-06-23 Tue] #+LANGUAGE: fr # #+PROPERTY: header-args :eval never-export @@ -15,53 +15,78 @@ ** L'entrée -On considère cette série : + On considère cette série : - #+NAME: input - | 14.0 | 7.6 | 11.2 | 12.8 | 12.5 | 9.9 | 14.9 | 9.4 | 16.9 | 10.2 | 14.9 | 18.1 | 7.3 | 9.8 | 10.9 | 12.2 | 9.9 | 2.9 | 2.8 | 15.4 | 15.7 | 9.7 | 13.1 | 13.2 | 12.3 | 11.7 | 16.0 | 12.4 | 17.9 | 12.2 | 16.2 | 18.7 | 8.9 | 11.9 | 12.1 | 14.6 | 12.1 | 4.7 | 3.9 | 16.9 | 16.8 | 11.3 | 14.4 | 15.7 | 14.0 | 13.6 | 18.0 | 13.6 | 19.9 | 13.7 | 17.0 | 20.5 | 9.9 | 12.5 | 13.2 | 16.1 | 13.5 | 6.3 | 6.4 | 17.6 | 19.1 | 12.8 | 15.5 | 16.3 | 15.2 | 14.6 | 19.1 | 14.4 | 21.4 | 15.1 | 19.6 | 21.7 | 11.3 | 15.0 | 14.3 | 16.8 | 14.0 | 6.8 | 8.2 | 19.9 | 20.4 | 14.6 | 16.4 | 18.7 | 16.8 | 15.8 | 20.4 | 15.8 | 22.4 | 16.2 | 20.3 | 23.4 | 12.1 | 15.5 | 15.4 | 18.4 | 15.7 | 10.2 | 8.9 | 21.0 | + #+NAME: input + | 14.0 | 7.6 | 11.2 | 12.8 | 12.5 | 9.9 | 14.9 | 9.4 | 16.9 | 10.2 | 14.9 | 18.1 | 7.3 | 9.8 | 10.9 | 12.2 | 9.9 | 2.9 | 2.8 | 15.4 | 15.7 | 9.7 | 13.1 | 13.2 | 12.3 | 11.7 | 16.0 | 12.4 | 17.9 | 12.2 | 16.2 | 18.7 | 8.9 | 11.9 | 12.1 | 14.6 | 12.1 | 4.7 | 3.9 | 16.9 | 16.8 | 11.3 | 14.4 | 15.7 | 14.0 | 13.6 | 18.0 | 13.6 | 19.9 | 13.7 | 17.0 | 20.5 | 9.9 | 12.5 | 13.2 | 16.1 | 13.5 | 6.3 | 6.4 | 17.6 | 19.1 | 12.8 | 15.5 | 16.3 | 15.2 | 14.6 | 19.1 | 14.4 | 21.4 | 15.1 | 19.6 | 21.7 | 11.3 | 15.0 | 14.3 | 16.8 | 14.0 | 6.8 | 8.2 | 19.9 | 20.4 | 14.6 | 16.4 | 18.7 | 16.8 | 15.8 | 20.4 | 15.8 | 22.4 | 16.2 | 20.3 | 23.4 | 12.1 | 15.5 | 15.4 | 18.4 | 15.7 | 10.2 | 8.9 | 21.0 | ** Les calculs + :PROPERTIES: + :ID: 5354d0c3-8cd0-4ba0-a6a3-b6db4565e9df + :END: -L'énoncé est « Calculer la moyenne et l'écart-type, le min, la médiane et le max -des données suivantes ». - -Ceci se fait en une seule ligne de code avec pandas. - -#+NAME: describe -#+BEGIN_SRC python :results value :var i=[[1]] :exports both :session e4574272-89b0-46a9-878c-dee64eea663b - from pandas import DataFrame, set_option - from tabulate import tabulate - set_option("display.precision", 2) - desc = DataFrame(i).T.describe() - tabulate(desc, headers="keys", tablefmt="orgtbl", floatfmt=".2f") -#+END_SRC - -#+RESULTS: describe -#+begin_example -| | 0 | -|-------+--------| -| count | 1.00 | -| mean | 1.00 | -| std | nan | -| min | 1.00 | -| 25% | 1.00 | -| 50% | 1.00 | -| 75% | 1.00 | -| max | 1.00 | -#+end_example - -#+CALL: describe(i=input) - -#+RESULTS: -#+begin_example -| | 0 | -|-------+--------| -| count | 100.00 | -| mean | 14.11 | -| std | 4.33 | -| min | 2.80 | -| 25% | 11.85 | -| 50% | 14.50 | -| 75% | 16.80 | -| max | 23.40 | -#+end_example + L'énoncé est « Calculer la moyenne et l'écart-type, le min, la médiane et le max + des données suivantes ». + + Ceci se fait en une seule ligne de code avec pandas. + + #+NAME: describe + #+BEGIN_SRC python :results value :var i=[[]] :exports code :session 5354d0c3-8cd0-4ba0-a6a3-b6db4565e9df + from pandas import DataFrame + desc = DataFrame(i).T.describe() + #+END_SRC + + Malheureusement et étonnamment, org-mode ne fournit pas de moyen rapide + d'afficher proprement un DataFrame. Il faut jouer avec la syntaxe org mode pour + arriver à un résultat satisfaisant. + + Pour exporter l'index, il est préférable de le passer en colonne. + + #+NAME: index_as_column + #+BEGIN_SRC python :results none :exports code :session 5354d0c3-8cd0-4ba0-a6a3-b6db4565e9df + desc = desc.reset_index(level=0) + #+END_SRC + + Puis, on doit sortir le tableau dans un format que emacs sait interpréter. + + #+NAME: fixup_desc + #+BEGIN_SRC python :results value :exports code :session 5354d0c3-8cd0-4ba0-a6a3-b6db4565e9df + [list(desc)] + [None] + desc.values.tolist() + #+END_SRC + + #+NAME: code + #+BEGIN_SRC python :results value :exports none :var i=input :noweb yes :session 5354d0c3-8cd0-4ba0-a6a3-b6db4565e9df + <> + <> + <> + #+END_SRC + + Enfin, pour afficher les résultats avec 2 chiffres après la virgule, il faut + jouer avec l'affichage d'emacs. On définit un post processing qui transformera + les nombres en leur équivalent formatté convenablement. + + #+NAME: round-tbl + #+BEGIN_SRC emacs-lisp :export code :var tbl="" fmt="%.3f" + (mapcar (lambda (row) + (mapcar (lambda (cell) + (if (numberp cell) + (format fmt cell) + cell)) + row)) + tbl) + #+end_src + + On peut maintenant appeler le code et observer le résultat suivant : + + #+NAME: results + #+CALL: code(input) :export both :post round-tbl(*this*, "%.2f") + + #+RESULTS: results + | count | 100.00 | + | mean | 14.11 | + | std | 4.33 | + | min | 2.80 | + | 25% | 11.85 | + | 50% | 14.50 | + | 75% | 16.80 | + | max | 23.40 |