-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpython_fr.html
More file actions
487 lines (422 loc) · 22.6 KB
/
python_fr.html
File metadata and controls
487 lines (422 loc) · 22.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<title>R et Python au CASD</title>
<link rel="stylesheet" href="dist/reset.css"/>
<link rel="stylesheet" href="dist/reveal.css"/>
<link rel="stylesheet" href="dist/theme/dracula.css"/>
<!-- Theme used for syntax highlighted code -->
<link rel="stylesheet" href="plugin/highlight/monokai.css"/>
</head>
<body>
<div class="reveal">
<div class="slides">
<!--Slide 1: Overview-->
<section>
<section>
<img src="assets/CASD.png" alt="casd logo" style="
height: 250px;
margin: 0 auto 4rem auto;
background: transparent;
-webkit-filter: invert(1);
filter: invert(1);
" class="demo-logo"/>
<h3>Python au CASD</h3>
<p>
<small>Equipe Datascience</small>
</p>
</section>
<section data-transition="fade-in slide-out">
<h3>Goals</h3>
<ul>
<li>Pourquoi utiliser Python ?</li>
<li>Les concepts de base en Python</li>
<li>Comment utiliser Python au CASD ?</li>
<li>La syntaxe de base en Python</li>
<li>Python pour la datascience</li>
</ul>
</section>
</section>
<!--Slide 2: Why use python?-->
<section data-transition="fade-in slide-out">
<section data-align="left">
<h3>Pourquoi utiliser Python ?</h3>
<p>
<em>Python</em> est un <span style="font-weight: bold;">langage généraliste (General Purpose Language)</span>
initié en février 1991. Python est devenu populaire dans les années 2010, porté par le développement de la <em>data
science</em>.
</p>
<p class="fragment">
<em>R</em> est un <span style="font-weight: bold;"> langage spécifique (Domain Specific Language)</span>
dédié à l'analyse et à la visualisation de données.
</p>
</section>
<section>
<h4>Les principaux avantages de Python :</h4>
<ul>
<li class="fragment">Syntaxe simple et lisible</li>
<li class="fragment">Multi-plateforme et polyvalent</li>
<li class="fragment">Interopérable avec d'autres langages</li>
<li class="fragment">Ecosystème vaste et mature</li>
<li class="fragment">Prend en charge plusieurs paradigmes (ex : code procédural, orienté objet, fonctionnel)</li>
</ul>
<aside class="notes">
Le code Python est proche de l'anglais courant
Python fonctionne sous Linux, Windows, macOS sans adaptation du code.
Il s'intègre facilement avec:
- C/C++ via ctypes, cython, pybind11
- Java via Jython
- .NET via pythonnet
500k librairies via PyPI et Conda:
- Data scienc e: pandas, numpy, matplotlib, scikit-learn
- Déceloppement web : Django, Flask, FastAPI
- Automatisation : requests, selenium, pyautogui
- AI/ML: tensorflow, torch, transformers
</aside>
</section>
<section id="disadvantages">
<h3>Quelques désavantages</h3>
<ul>
<li class="fragment"><em>Langage interprété</em> : Plus lent que les langages compilés (ex : C, Go)</li>
<li class="fragment"><em>Typage dynamique</em> : L'interpréteur Python infère automatiquement le type
des variables <a href="#/var-type" class="button">⏩ Exemple de code </a></li>
<li class="fragment"><em>Pas fortement typé</em> : comme Java <a href="#/weak-type" class="button">⏩
Exemple de code</a></li>
<li class="fragment"><em>Verrou global de l'interpreteur (Global Interpreter Lock)</em> : les opérations ne
peuvent pas tourner en parallèle sur plusieurs coeurs
</li>
</ul>
</section>
<!-- var type code example-->
<section id="var-type">
<h3>Le typage des variables est dynamique en Python</h3>
<pre><code class="language-python" data-trim data-line-numbers="|1|4|">
x = 5
print(f"type of x is: {type(x)}")
# type of x is int
x = "hello"
print(f"type of x is: {type(x)}")
# type of x is str
</code></pre>
<a href="#/disadvantages" class="button">⏩ Go back</a>
</section>
<!-- weak type code example-->
<section id="weak-type">
<h3>Python est faiblement typé</h3>
<pre><code class="language-python" data-trim data-line-numbers="|2|4|5|">
# Python contrôle automatiquement le type des variables
1 + "2" # ❌ TypeError: unsupported operand types (int + str)
# mais propose de la flexibilité entre certains types
1 + True # ✅ 2 (True → 1)
3 * "a" # ✅ "aaa"
</code></pre>
<a href="#/disadvantages" class="button">⏩ Revenir en arrière</a>
</section>
</section>
<!--Slide 3: Key concepts in python-->
<section data-transition="fade-in slide-out">
<!--Slide 3-1: Key concepts summery-->
<section>
<h3>Les fondamentaux d'un projet Python</h3>
<ul>
<small>
<li class="fragment"><em>Interpréteur Python</em> : Le moteur d'exécution du code Python.
</li>
</small>
<small>
<li class="fragment"><em>Environnement virtuel</em> : Un environnement de développement isolé,
par exemple pour éviter les conflits de versions des packages entre différents projets.
</li>
</small>
<small>
<li class="fragment"><em>Gestionnaire de packages</em> : L'outil permettant de gérer l'installation,
la mise à jour, la suppression de packages ou de librairies tierces.
</li>
</small>
<small>
<li class="fragment"><em>Environnement de développement intégré (IDE)</em> : Un logiciel qui propose
des outils facilitant la programmation : éditeur de code, analyse/cotrôle du code en temps réel
(linting), mode de débogage, ... (ex : Rstudio, VSCode)
</li>
</small>
<small>
<li class="fragment"><em>Structure d'un projet & fichier de configuration</em> : Des fichiers comme
`pyproject.toml` contiennent des métadonnées relatives à l'auteur, aux dépences, aux licences, etc.
</li>
</small>
</ul>
</section>
<!--Slide 3-2: python interpreter-->
<section>
<p>Un interpreteur Python, c'est :</p>
<ul>
<small>
<li class="fragment"><em>Un compilateur</em> : Traduit les fichiers source .py en fichiers bytecodes .pyc
</li>
</small>
<small>
<li class="fragment"><em>Une machine virtuelle basée sur une pile</em> : Exécute les instructions en bytecode .pyc
pour permettre au code Python de produire le même résultat sur différents systèmes d'exploitation
(ex : Windows, Linux)
</li>
</small>
<small>
<li class="fragment"><em>Des fonctions et types intégrés</em> : Implémentation de types primitifs
(ex : int, str, etc.) et de fonctions de base (ex : print, len, etc.)
</li>
</small>
<small>
<li class="fragment"><em>Un runtime</em> : Réalise l'interface entre la machine virtuelle et le système d'exploitation (mémoire,
fichier, socket, etc.)
</li>
</small>
<small>
<li class="fragment"><em>Un Garbage Collector</em> : Nettoyage récurrent de l'environnement
pour librérer de la mémoire</li>
</small>
<small>
<li class="fragment"><em>Des bibliothèques de base</em> : Modules présents par défaut, comme `os`, `math`, `statistics`</li>
</small>
</ul>
</section>
<!--Slide 3-3: Virtual Environment-->
<section>
<p><em>Un environnement virtuel Python</em> est un espace de travail isolé qui contient ses <em>propres interpreteur
Python et dépendances</em>.
</p>
<ul>
<small>
<li class="fragment"><em>Isolation</em> : Assurer l'independance des dépendances de chaque projet pour
éviter les conflits de versions.
</li>
</small>
<small>
<li class="fragment"><em>Reproductibilité</em> : Capacité à reproduire exactement les mêmes opérations
dans un nouvel environnement, notamment en figeant les versions des packages (pip freeze).
</li>
</small>
<small>
<li class="fragment"><em>Envionnement propre</em> : Eviter de polluer l'environnement Python avec
des packages spécifiques à certains projets.
</li>
</small>
<small>
<li class="fragment"><em>Versions de Python multiples</em> : Différents projets peuvent utiliser des
versions de Python différentes (Ex : 3.9 vs 3.12).
</li>
</small>
</ul>
</section>
<section>
<img src="assets/python-virtual-envs.webp" alt="illustration venv"/>
</section>
<!--Slide 3-4: python package manager-->
<section>
<p><em>La gestion des librairies</em> en Python fait référence au système qui gère :</p>
<ul>
<li class="fragment"> L'installation, la mise à jour, la suppression de <em> librairies tierces (ou
packages)</em></li>
<li class="fragment"> La gestion des dépendances entre packages</li>
<li class="fragment"> La compatibilité des versions</li>
<li class="fragment"> Outils populaires : <em>pip, conda, poetry </em></li>
</ul>
</section>
<!--Slide 3-5: IDE for python package manager-->
<section>
<p>Les IDE Python :</p>
<p>Un <em>IDE</em> est un logiciel qui fournit un ensemble d'outils pour <em>écrire,
déboguer, tester, et déployer du code plus efficacement, </em> en une seule interface. </p>
<ul>
<small>
<li class="fragment"><em>PyCharm</em> : Excellent support d'analyse, de débogage du code, etc. Consomme
beaucoup de mémoire.
</li>
</small>
<small>
<li class="fragment"><em>Visual Studio Code (VS Code)</em> : Beaucoup plus léger, mais nécessite l'installation de
nombreux plugins pour faciliter les développements.
</li>
</small>
<small>
<li class="fragment"><em>JupyterLab</em> : Adapté pour l'utilisation de Notebooks, idéal pour l'analyse de données, le
machine learning, etc.
</li>
</small>
<small>
<li class="fragment"><em>Spyder</em> : Interface similaire à Matlab, dédiée au calcul scientifique.</li>
</small>
</ul>
</section>
<!-- Slide 3-6: Python project structure and configuration files-->
<section>
<p>Structure d'un projet & fichier de configuration</p>
<pre data-id="code-animation"><code class="language-Bash" data-trim
data-line-numbers="|3-10|12-15|24|25|26|27|28|"><script
type="text/template">
my_project/
│
├── src/ # code source (contient le code de l'application)
│ └── my_project/ # Package principal (du même nom que le projet)
│ ├── __init__.py
│ ├── core.py
│ ├── utils.py
│ └── submodule/
│ ├── __init__.py
│ └── logic.py
│
├── tests/ # Tests unitaires et tests d'intégration
│ ├── __init__.py
│ ├── test_core.py
│ └── test_logic.py
│
├── scripts/ # Scripts complémentaires, CLI (fonctionnalités en ligne de commande), migrations, etc.
│ └── generate_report.py
│
├── docs/ # Documentation (Sphinx, Markdown, etc.)
│ └── index.md
│
├── .gitignore
├── MANIFEST.in # Pour ajouter des ressources additionnelles dans le package
├── requirements.txt # Versions figées des dépendances, pour l'installation (en production)
├── requirements-dev.txt # Versions dev/test des dependances (ex : pytest, flake8)
├── README.md
├── pyproject.toml # Fichier de configuration moderne
</script></code></pre>
</section>
</section>
<!--Slide 4: python in CASD-->
<section data-transition="fade-in slide-out">
<!-- Slide 4-1: overview -->
<section>
<p>Python au CASD</p>
<ul>
<li class="fragment"><em>Interpreteur Python</em> : conda</li>
<li class="fragment"><em>Environnement Virtuel</em> : conda</li>
<li class="fragment"><em>Gestionnaire de packages</em> : pip</li>
<li class="fragment"><em>Environnement de développement intégré (IDE)</em> : VSCode</li>
<li class="fragment"><em>Structure d'un projet & fichier de configuration</em> : Bonnes pratiques au CASD</li>
</ul>
</section>
<section>
<h3>CASD VS le reste du monde :</h3>
<img src="assets/serveurs.png" height="400">
</section>
<section>
<p>Procédure pour créer un projet Python au CASD</p>
<pre data-id="code-animation"><code class="language-powershell" data-trim
data-line-numbers="|1-4|6-11|13-14|16-22|24-26|28-29|31-32|">
<script type="text/template">
# 1. Vérifier que conda existe dans le shell
conda --version
# Activer conda dans le powershell (optionnel)
conda init powershell
# 2. Créer un environnement virtuel
conda create --name project-name python=python-version --offline
# Lister les environnements virtuels existants
conda env list
# Contrôler le statut d'un environnement virtuel
conda info --envs
# 3. Activer un environnement virtuel
conda activate project-name
# 4. Gérer les packages de son projet
# Contrôler la liste des packages installer
pip list
# Installer un nouveau package (s'assurer que casd pypi server est en marche)
pip install pandas
# Installer les packages via le fichier requirements.txt
pip install -r requirements.txt
# 5. Exécuter son code
cd /path/to/project-name
python main.py
# 6. Fermer un environnement virtuel
conda deactivate
# 7. Supprimer un environnement virtuel
conda remove -n env_name --all
</script>
</code></pre>
</section>
<section>
<h3>Packages Python :</h3>
<p>Les bibliothèques de base sont chargées par défaut dans l'interpreteur Python !</p>
<pre><code> pip install sys</code></pre>
<p class="fragment">Cette commande va <em>échouer</em>, car <em>sys</em> est une bibliothèque de base. Elle
est déjà présente dans l'interpréteur Python. On peut l'utiliser sans prérequis.</p>
<pre><code> import sys</code></pre>
</section>
<section>
<h3>Librairies tierces :</h3>
<small><p>Les utilisateurs doivent activer le <em>serveur CASD PyPi</em> avant de lancer la commande suivante : </p></small>
<pre><code>pip install pandas</code></pre>
<small><p>Le<em> serveur CASD PyPi </em>ne dispose pas de tous les packages disponibles dans l'index officiel PyPi. Vous pouvez
tester la disponibilité d'un package avec les commandes suivantes :</p></small>
<pre><code class="language-Bash">pip install package-name --dry-run</code></pre>
ou
<pre><code class="language-Bash">pip index versions package-name</code></pre>
<p>Si vous avez besoin d'un package qui n'est pas disponible, contactez <em>service@casd.eu</em></p>
</section>
</section>
<!--Slide 5: vscode in CASD-->
<section>
<h2>VSCode au CASD</h2>
<p>Par defaut, <em>VSCode</em> ne dispose pas des plugins nécesaires pour coder en Python .</p>
<p>Le CASD fournit les plugins <em>VSCode</em> suivants pour Python :</p>
<ul>
<li class="fragment"><em>Emplacement des plugins</em> : S:\VsCode</li>
<li class="fragment"><em>Plugins pour Python</em> : S:\VsCode\Python\*</li>
<li class="fragment"><em>Plugins pour markdown</em> : S:\VsCode\MarkDown\*</li>
<li class="fragment"><em>Plugins pour Git</em> : S:\VsCode\Git\*</li>
</ul>
</section>
<!--Slide 6: Basic python syntax -->
<section>
<section>
<h3>La syntaxe de base en Python</h3>
<ul>
<li class="fragment">Indentation (important !) </li>
<li class="fragment">Types de variables et de données </li>
<li class="fragment">Conditions </li>
<li class="fragment">Boucles </li>
<li class="fragment">Fonctions </li>
<li class="fragment">Structures de données courantes </li>
<li class="fragment">Gestion des exceptions </li>
<li class="fragment">Imports </li>
</ul>
<p class="fragment">Aller au TP 2 : <a href="https://github.com/CASD-EU/Seminar_Python_Git/blob/main/notebooks/basic_python_syntax.ipynb">basic_python_syntax</a></p>
</section>
</section>
<!--Slide 7: Python for data science -->
<section>
<section>
<h4>Python pour la datascience</h4>
<p>Python offre des milliers de packages pour faire de la datascience. Voici une liste de packages très populaires : </p>
<ul>
<small> <li class="fragment"><em>Manipulation de données</em> : <span style="color:#b2dba1;">pyspark, pandas</span>, pyarrow, dask, polars </li></small>
<small> <li class="fragment"><em>Données geospatiales</em> : <span style="color:#b2dba1;">sedona, geopandas, shapely, pyproj, rasterio</span>, kepler.gl</li></small>
<small> <li class="fragment"><em>Statistiques et mathématiques</em> : <span style="color:#b2dba1;">ydata-profiling, statsmodels, sympy, numpy</span>, scikit-misc</li></small>
<small> <li class="fragment"><em>Machine learning</em> : <span style="color:#b2dba1;">scikit-learn, xgboost</span>, lightgbm, catboost </li></small>
<small> <li class="fragment"><em>Deep learning</em> : <span style="color:#b2dba1;">tensorflow, torch, keras</span>, fastai</li></small>
<small> <li class="fragment"><em>Time series & prevision</em> : <span style="color:#b2dba1;">prophet, tsfresh, darts</span>, sktime </li></small>
<small> <li class="fragment"><em>Natural Language Processing (NLP)</em> : <span style="color:#b2dba1;">nltk, spacy, transformers</span>, gensim, textblob, </li></small>
</ul>
</section>
</section>
</div>
</div>
<script src="dist/reveal.js"></script>
<script src="plugin/notes/notes.js"></script>
<script src="plugin/markdown/markdown.js"></script>
<script src="plugin/highlight/highlight.js"></script>
<script>
// More info about initialization & config:
// - https://revealjs.com/initialization/
// - https://revealjs.com/config/
Reveal.initialize({
hash: true,
// Learn about plugins: https://revealjs.com/plugins/
plugins: [RevealMarkdown, RevealHighlight, RevealNotes],
});
</script>
</body>
</html>