Add a lot of details

parent 88acc073
#+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
<<describe>>
<<index_as_column>>
<<fixup_desc>>
#+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 |
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment