Commit 012c45343db4c1341beef15bbab8afba149385f3

Authored by Rémi Emonet
1 parent 0d50079829
Exists in master

c6 (pdf à venir)

Showing 3 changed files with 377 additions and 0 deletions

cours-06.html View file @ 012c453
  1 +<!DOCTYPE html>
  2 +<html>
  3 + <head>
  4 + <meta charset="utf-8">
  5 + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6 +
  7 + <title>Informatique 6   axes numpy, matplotlib</title>
  8 + <meta name="cours-n" content="6">
  9 +
  10 + <meta name="author" content="Rémi Emonet">
  11 + <meta name="venue" content="L2SPICHI">
  12 + <meta name="date" content="2017">
  13 + <meta name="affiliation" content="Université Jean Monnet − Laboratoire Hubert Curien">
  14 +
  15 + <style type="text/css">
  16 + .strik{text-decoration: line-through;}
  17 + </style>
  18 +
  19 + <!--
  20 + <script src="deck.js/extensions/includedeck/load.js"></script>
  21 + <script src="extensions/slides-dev.js"></script>
  22 + -->
  23 + <script src="extensions/deck-packed.js"></script>
  24 + <script src="extensions/slides.js"></script>
  25 + <script>go(function() {
  26 + });</script>
  27 + </head>
  28 +
  29 +<body>
  30 +
  31 +<div class="deck-container">
  32 +
  33 + <div class="deck-loading-splash" style="background: black; color: chartreuse;"><span class="vcenter" style="font-size: 30px; font-family: Arial; ">Please wait, while our marmots are preparing the hot chocolate…</span></div>
  34 +
  35 +<section class="smart">
  36 +
  37 +# @chunk: chunks/title.md
  38 +
  39 +# @chunk: chunks/objectives.md
  40 +
  41 +## Informatique <span>{var-cours-n}</span> : Plan {#plan overview}
  42 +- Numpy : rappels, agrégations et axes {npaxes}
  43 +- Numpy : lecture de csv {npcsv}
  44 +- Bibliothèque Matplotlib : premier contact {matplotlibintro}
  45 +- Cas d'utilisation {usecases}
  46 +- Matplotlib : principes {matplotlibprinciples}
  47 +
  48 +
  49 +
  50 +<!-- TD -->
  51 +# @copy:#plan: %+class:inred: .tdlogistique
  52 +
  53 +## « TD » de Lundi {libyli}
  54 +- Inscription ?
  55 +- Écrire « **TD** » devant votre nom (sur la feuille d'émargement)
  56 +
  57 +
  58 +
  59 +# @copy:#plan: %+class:inred: .npaxes
  60 +
  61 +# @chunk: chunks/q/np-shape-1.md
  62 +# @chunk: chunks/q/np-shape-3.md
  63 +# @chunk: chunks/q/np-shape-4.md
  64 +# @chunk: chunks/q/np-shape-5.md
  65 +# @chunk: chunks/q/np-shape-6.md
  66 +
  67 +## Tranches de listes Python {libyli}
  68 +- Rappel : accès à un élément d'une liste `la_liste[l_indice]`
  69 +```python
  70 +a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
  71 +print(a[3]) # 30
  72 +{slide}
  73 +```
  74 +- Extraction d'une sous partie de liste
  75 +```python
  76 +b = a[3:6]
  77 +print(b) # [30, 40, 50]
  78 +
  79 +# avec un pas de 2
  80 +c = a[3:6:2]
  81 +print(c) # [30, 50]
  82 +{slide}
  83 +```
  84 +- Équivalent à
  85 +```python
  86 +b = [a[i] for i in range(3, 6)]
  87 +
  88 +c = [a[i] for i in range(3, 6, 2)]
  89 +
  90 +# rappel : équivalent à
  91 +c = []
  92 +for in range(3, 6, 2):
  93 + c.append(a[i])
  94 +{slide}
  95 +```
  96 +
  97 +## Tranches en Python : raccourcis {libyli}
  98 +- Omission des indices {anim-continue}
  99 +```python
  100 +a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
  101 +{slide}
  102 +```
  103 +- Début et fin automatique
  104 +```python
  105 +print(a[:3]) # [0, 10, 20]
  106 +print(a[5:]) # [50, 60, 70, 80, 90]
  107 +{slide}
  108 +```
  109 +- Avec un pas
  110 +```python
  111 +print(a[:5:2]) # [0, 20, 40]
  112 +print(a[5::2]) # [50, 70, 90]
  113 +
  114 +# et que le pas
  115 +print(a[::3]) # [0, 30, 60, 90]
  116 +{slide}
  117 +```
  118 +- Astuces
  119 +```python
  120 +print(a[:]) # une copie de a
  121 +
  122 +# pas négatif
  123 +print(a[::-1]) # [90, 80, 70, 60, 50, 40, 30, 20, 10, 0]
  124 +print(a[::-3]) # [90, 60, 30, 0]
  125 +{slide}
  126 +```
  127 +
  128 +## Indices et tranches Python : indices négatifs {libyli}
  129 +```python
  130 +a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
  131 +{slide}
  132 +```
  133 +- Indices à partir de la fin
  134 +```python
  135 +print(a[-1]) # 90
  136 +print(a[len(a)-1]) # 90
  137 +
  138 +print(a[-3]) # 70
  139 +print(a[len(a)-3]) # 70
  140 +{slide}
  141 +```
  142 +- Marche aussi en tranches
  143 +```python
  144 +print(a[1:-1]) # 10 ... 80
  145 +print(a[1:len(a)-1]) # 10 ... 80
  146 +
  147 +print(a[:-3]) # 0 ... 60
  148 +{slide}
  149 +```
  150 +
  151 +
  152 +# @chunk: chunks/q/np-slice-1.md
  153 +# @chunk: chunks/q/np-slice-2.md
  154 +# @chunk: chunks/q/np-slice-3.md
  155 +# @chunk: chunks/q/np-slice-4.md
  156 +# @chunk: chunks/q/np-shape-slice-1.md
  157 +# @chunk: chunks/q/np-shape-slice-1b.md
  158 +# @chunk: chunks/q/np-shape-slice-2.md
  159 +
  160 +
  161 +## Numpy : fonctions d'agrégations {libyli}
  162 +```python
  163 +a = np.random.uniform(0.95, 1.05, (20, 50))
  164 +
  165 +print(a.shape) # (20, 50)
  166 +print(a.size) # 1000
  167 +{slide}
  168 +```
  169 +```python
  170 +print(a.sum()) # ≈ 1000
  171 +{slide}
  172 +```
  173 +```python
  174 +print(a.mean()) # ≈ 1
  175 +print(a.var()) # ≈ 0.0008333 (0.1² / 12)
  176 +print(a.std()) # = a.var() ** 0.5
  177 +{slide}
  178 +```
  179 +```python
  180 +print(a.min()) # ≳ 0.95
  181 +print(a.max()) # ≲ 1.05
  182 +{slide}
  183 +```
  184 +- Indice du min/max
  185 +```python
  186 +b = np.array([[10, 20, 30],
  187 + [60, 50, 40]])
  188 +
  189 +print(b.argmin()) # 0
  190 +bligne = b.reshape((-1,))
  191 +print(bligne.argmax()) # 3
  192 +
  193 +print(b.argmax()) # 3 (comme si en ligne)
  194 +
  195 +print(np.unravel_index(b.argmax(), b.shape)) # (1, 0)
  196 +{slide}
  197 +```
  198 +
  199 +## Numpy : axes d'un tableau {libyli}
  200 +- Axes d'un tableau ?
  201 + - un axe est une dimension du tableau (numérotés en partant de 0)
  202 + - *shape* correspond donc aux nombres d'éléments selon chaque axe
  203 +- Illustration
  204 +
  205 +@SVG: media/numpy/axes.svg 800 200 {slide}
  206 +
  207 +```python
  208 +a = np.arange(21).reshape((3, 7))
  209 +print(a)
  210 +
  211 +print("Selon l'axe 0, il y a", a.shape[0], "valeurs")
  212 +print("Selon l'axe 1, il y a", a.shape[1], "valeurs")
  213 +{dense slide}
  214 +```
  215 +
  216 +## Numpy : axes et agrégations {libyli}
  217 +- Les fonctions d'agrégation (min, max, sum, mean, ...) acceptent deux paramètres
  218 + - `axis`: l'axe selon lequel agréger (c'est l'axe qui va « disparaître »), <br/> avec `np.sum` et un tableau à 2 dimensions :
  219 + - `axis=0` : sommer chaque colonne
  220 + - `axis=1` : sommer chaque ligne
  221 + - `keepdims`: pour décider si l'axe disparaît ou est réduit à un élément
  222 + - `keepdims=False` (par défaut), l'axe disparaît totalement
  223 + - `keepdims=True`, l'axe est conservé, il n'a alors plus qu'un élément
  224 +- Exemple
  225 +```python
  226 +a = np.ones((3, 7))
  227 +print(np.sum(a)) # 21
  228 +
  229 +print(np.sum(a, axis=0).shape) # (7,)
  230 +print(np.sum(a, axis=1).shape) # (3,)
  231 +
  232 +print(np.sum(a, axis=0, keepdims=True).shape) # (1,7)
  233 +print(np.sum(a, axis=1, keepdims=True).shape) # (3,1)
  234 +print(np.sum(a, keepdims=True).shape) # (1,1)
  235 +{slide}
  236 +```
  237 +- Avancé (pour les tableaux à $n>2$ dimensions)
  238 + - il est possible de passer un tuple à `axis`, par ex, `axis=(0, 1)`
  239 +
  240 +# @chunk: chunks/q/np-aggr-shape-1.md
  241 +# @chunk: chunks/q/np-aggr-shape-2.md
  242 +# @chunk: chunks/q/np-aggr-shape-3.md
  243 +# @chunk: chunks/q/np-aggr-shape-4.md
  244 +
  245 +
  246 +
  247 +
  248 +<!-- ######################################## -->
  249 +# @copy:#plan: %+class:inred: .npcsv
  250 +
  251 +## Numpy : lecture de fichier texte {libyli}
  252 +- Fichier de donnés textuels
  253 + - CSV : *Comma-Separated Values*
  254 + - valeur séparées par des virgules
  255 + - NB: le « . » est utilisé pour les nombres réels en programmation
  256 + - il existe aussi TSV (*Tabulation-Separated Values*) {slide}
  257 +- Exemple CSV (ici, 3 valeurs par ligne)
  258 +```
  259 +1219,5,89.57
  260 +1220,9,89.66
  261 +1221,22,89.88
  262 +1222,22,90.10
  263 +1223,8,90.18
  264 +1224,16,90.34
  265 +1225,18,90.52
  266 +1226,13,90.64
  267 +1227,1,90.65
  268 +...
  269 +{slide}
  270 +```
  271 +- Lecture avec la fonction genfromtxt de Numpy
  272 +```python
  273 +a = np.genfromtxt('monfichier.csv', delimiter=',')
  274 +
  275 +print(a.shape) # (..., 3) dans l'exemple
  276 +{slide}
  277 +```
  278 +
  279 +
  280 +<!-- ######################################## -->
  281 +# @copy:#plan: %+class:inred: .matplotlibintro
  282 +
  283 +## Matplotlib : exemple
  284 +```python
  285 +from matplotlib import pyplot as plt
  286 +
  287 +x = np.linspace(0, 10, 2000)
  288 +y = x**3
  289 +z = (10+x)**2
  290 +
  291 +plt.plot(x, y, label="courbe 1")
  292 +plt.plot(x, z, label="courbe 2")
  293 +plt.legend()
  294 +
  295 +#plt.savefig('courbes.pdf')
  296 +plt.show()
  297 +```
  298 +
  299 +
  300 +<!-- ######################################## -->
  301 +# @copy:#plan: %+class:inred: .usecases
  302 +
  303 +# Retour sur $\pi$ : agrégation, courbes
  304 +
  305 +# Illustration de Numpy + Matplotlib : affichage des pas (quand on marche)
  306 +- {comment}
  307 + - np.genfromtxt(..., separator=',')n
  308 + - cf prep/steps
  309 +
  310 +<!-- ######################################## -->
  311 +# @copy:#plan: %+class:inred: .matplotlibprinciples
  312 +
  313 +## Pyplot : `from matplotlib import pyplot as plt` {libyli}
  314 +- Matplotlib permet de
  315 + - tracer des figures
  316 + - tracer des courbes, histogrammes, etc
  317 + - sauver dans un fichier image
  318 + - afficher de manière interactive
  319 +- `from matplotlib import pyplot as plt`
  320 + - `plt` pour simplifier les taches simple avec une courbe
  321 +- Quelques fonctions {libyli}
  322 + - `plt.truc(...)`
  323 + - plot, savefig, show, ...
  324 + - scatter, bar, barh, contour, contourf,
  325 + - xlabel, ylabel, xticks, yticks, legend, grid, title, ...
  326 + - text, annotate, ...
  327 + - imshow, ...
  328 +- http://matplotlib.org/api/pyplot_summary.html
  329 +
  330 +## Matplotlib : apparence des courbes
  331 +- Paramètres de `plt.plot()`
  332 +
  333 +# OK {no-print}
  334 +<!--
  335 +## Points Clés {key deck-status-fake-end}
  336 +-->
  337 +
  338 +</section>
  339 +
  340 + <!-- deck.status snippet -->
  341 + <p class="deck-status deck-progress-10"> <span class="deck-status-current"></span> / <span class="deck-status-total"></span> − <span class="var-author">will be replaced by the author</span> − <span class="var-title">will be replaced by the title</span></p>
  342 +
  343 + <a data-progress-size=": spe.top(15, 555); height: 45*designRatio; left: slide.right - 90*designRatio; width: 90*designRatio" class="ccby" href="http://en.wikipedia.org/wiki/Creative_Commons_license" title="This work is under CC-BY licence." target="_blank"></a>
  344 +
  345 + <a class="ujm" data-progress-size=": spe.top(15, 525); height: 65*designRatio; left: slide.left; width: 130*designRatio" target="_blank"></a>
  346 +
  347 +</div>
  348 +<!-- clicky Cla -->
  349 +<script type="text/javascript">
  350 +var clicky_site_ids = clicky_site_ids || [];
  351 +clicky_site_ids.push(100779706);
  352 +(function() {
  353 + var s = document.createElement('script');
  354 + s.type = 'text/javascript';
  355 + s.async = true;
  356 + s.src = '//static.getclicky.com/js';
  357 + ( document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0] ).appendChild( s );
  358 +})();
  359 +</script>
  360 +<noscript><p><img alt="Clicky" width="1" height="1" src="//in.getclicky.com/100779706ns.gif" /></p></noscript>
  361 +
  362 +
  363 +<!-- Histats.com START (aync)-->
  364 +<script type="text/javascript">var _Hasync= _Hasync|| [];
  365 +_Hasync.push(['Histats.start', '1,2767123,4,0,0,0,00010000']);
  366 +_Hasync.push(['Histats.fasi', '1']);
  367 +_Hasync.push(['Histats.track_hits', '']);
  368 +(function() {
  369 +var hs = document.createElement('script'); hs.type = 'text/javascript'; hs.async = true;
  370 +hs.src = ('http://s10.histats.com/js15_as.js');
  371 +(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(hs);
  372 +})();</script>
  373 +<noscript><a href="http://www.histats.com" target="_blank"><img src="http://sstatic1.histats.com/0.gif?2767123&101" alt="javascript hit counter" border="0"></a></noscript>
  374 +<!-- Histats.com END -->
  375 +</body>
  376 +</html>
... ... @@ -50,6 +50,7 @@
50 50 <div data-lesson="03" data-hascode="y">Biblio, Fonct., Algo</div>
51 51 <div data-lesson="04" data-hascode="y">π, intro Numpy</div>
52 52 <div data-lesson="05" data-hascode="y">Numpy, indices, tranches</div>
  53 + <div data-lesson="06" data-hascode="y">Numpy, tranches, axes</div>
53 54 <!--
54 55 <div data-lesson="02">Bash</div>
55 56 <div data-lesson="03">Bases de Python</div>
raw/cours-06.zip View file @ 012c453

No preview for this file type