Skip to content

Commit 53bb1f7

Browse files
authored
Merge pull request #23 from InseeFrLab/review2024
Review2024
2 parents c425aad + 9cf0174 commit 53bb1f7

File tree

10 files changed

+94
-21
lines changed

10 files changed

+94
-21
lines changed

index.qmd

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ La base du notebook est le *kernel*, visible en haut à droite (`Python 3 (ipyke
7171

7272
Les cellules grisées correspondent aux cellules de code. Pour exécuter le contenu d'une cellule, il suffit de cliquer dessus puis d'utiliser les raccourcis clavier `Ctrl + Entrée` (exécute la cellule et reste sur la cellule active) ou `Shift + Entrée` (exécute la cellule et passe à la cellule suivante). Attention, exécuter une cellule revient à exécuter l'ensemble de son contenu. Si l'on souhaite exécuter ligne à ligne, on peut créer des nouvelles cellules (bouton ➕) et y insérer les différentes lignes de code. D'autres éditeurs de code (comme `VSCode`, disponible sur le `SSP Cloud`) permettent, comme `RStudio` par exemple, d'exécuter du code ligne à ligne, mais ils sont moins adaptés à la découverte de `Python`.
7373

74+
::: {.callout-tip}
75+
Si vous faites, peut-être par mégarde, un double-clic sur une cellule de texte d'un notebook Jupyter, la mise en forme disparaît et laisse place à du texte markdown brut : c'est le mode édition de la cellule.
76+
77+
Dans ce cas, pas de panique : un simple `Ctrl + Entrée` permet de ré-exécuter la cellule et remet en forme le texte.
78+
:::
79+
7480
### Comment résoudre les erreurs ?
7581

7682
La survenue d'erreurs est tout à fait naturelle et attendue lors de l'apprentissage (et même après !) d'un langage informatique. La résolution de ces erreurs est vraiment l'occasion de comprendre comment fonctionne le langage et de devenir autonome dans sa pratique de celui-ci. Voici une proposition d'étapes à suivre (dans cet ordre) pour résoudre une erreur :
@@ -93,9 +99,9 @@ Tous les supports de formation restent accessibles sur le `SSP Cloud` après la
9399

94100
Pour approfondir sa connaissance du langage `Python` après cette formation d'introduction, rien de tel que la mise en pratique sur des sujets concrets ! Pour les modalités d'utilisation de `Python` dans le cadre des projets statistiques, cela va dépendre de l'organisation :
95101

96-
- pour des **projets open-data et inter-administrations**, le `SSP Cloud` est une bonne alternative dans la mesure où les services `Python` y sont déjà pré-configurés et où un service de stockage de données y est proposé (cf. [documentation](https://www.sspcloud.fr/formation) pour plus de détails) ;
102+
- pour des **projets open-data et inter-administrations**, le `SSP Cloud` est une bonne solution dans la mesure où les services `Python` y sont déjà pré-configurés et où un service de stockage de données y est proposé (cf. [documentation](https://www.sspcloud.fr/formation) pour plus de détails) ;
97103

98-
- pour des **projets internes à l'Insee**, se référer à la [documentation](https://datascience.gitlab-pages.insee.fr/site-documentaire/ausv3/logiciels-carte/eco-systeme-python/) sur l'utilisation de `Python` en interne ;
104+
- pour des **projets internes à l'Insee**, l'utilisation de [`LS3`](https://datascience.gitlab-pages.insee.fr/site-documentaire/ls3/ls3-c-est-quoi/) (la version interne du `SSPcloud` pour le dire rapidement) est à privilégier. À noter qu'il est aussi possible d'utiliser Python directement depuis AUS mais avec un coût d'entrée sûrement plus important (se référer à la [documentation](https://datascience.gitlab-pages.insee.fr/site-documentaire/ausv3/logiciels-carte/eco-systeme-python/)) ;
99105

100106
- pour des **projets internes à d'autres administrations**, se rapprocher de sa DSI pour connaître les modalités d'utilisation recommandées.
101107

slides/index.qmd

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Introduction à Python
33
subtitle: |
4-
[**[Romain Avouac, Yves-Laurent Benichou]**]{.orange}
4+
[**Romain AVOUAC, Julien PRAMIL**]{.orange}
55
slide-number: true
66
footer: |
77
Formation "Introduction à Python"
@@ -30,6 +30,9 @@ from: markdown+emoji
3030
- Langage [**puissant**]{.orange}
3131
- [**Versatile**]{.blue2} : riche bibliothèque de [***packages***]{.blue2}
3232
- Fédère des [**communautés diverses**]{.blue2}
33+
- Datascience, recherche
34+
- Développement web
35+
- Cybersécurité, *fintech*, etc.
3336

3437
## Pourquoi se former à `Python` ?
3538

@@ -73,8 +76,20 @@ Source : [josephsalmon.eu](https://josephsalmon.eu/HMMA238.html)
7376
- Pédagogie par la [**pratique**]{.blue2}
7477

7578
- [**Tutorat**]{.orange}
76-
- [Canal Tchap](https://tchap.gouv.fr/#/room/!XKtsUhPslGXsbIUOIw:agent.finances.tchap.gouv.fr?via=agent.finances.tchap.gouv.fr) : pour poser toutes vos questions en continu
77-
- [**Visio périodique**]{.orange} (dates à définir) : questions de fond, déroulement pas à pas..
79+
- [Canal Tchap : SSPy - Formation "Initiation à Python"](https://tchap.gouv.fr/#/room/!XKtsUhPslGXsbIUOIw:agent.finances.tchap.gouv.fr?via=agent.finances.tchap.gouv.fr) : pour poser toutes vos questions en continu
80+
- [**Visio périodique**]{.orange} : questions de fond, déroulement pas à pas..
81+
82+
## Les visio périodiques
83+
84+
- [**Bureau ouvert**]{.orange} pour poser vos questions.
85+
- Une [**thématique principale**]{.orange} mais pas unique par visio.
86+
87+
- Dates proposées :
88+
- mardi 7 janvier 10h30-12h (**manipulation de données**)
89+
- mardi 21 janvier 10h30-12h (**POO, fichiers, numpy**)
90+
- mardi 4 février 10h30-12h (**pandas**)
91+
- vendredi 14 février 13h30-16h30 (**projets + bilan**)
92+
7893

7994
## Hébergée sur le SSP Cloud
8095

@@ -110,6 +125,11 @@ Source : [josephsalmon.eu](https://josephsalmon.eu/HMMA238.html)
110125

111126
- Seul pré-requis : [créer un compte sur le SSP Cloud](https://auth.lab.sspcloud.fr/auth/realms/sspcloud/login-actions/registration?client_id=onyxia&tab_id=IU7LpltKvV8)
112127

128+
::: {.callout-warning}
129+
## Mail pro
130+
Utilisez votre mail professionnel (ex : @insee.fr) pour avoir accès à la plateforme.
131+
:::
132+
113133
## Comment résoudre les *bugs* ?
114134

115135
- [**Etapes de résolution**]{.orange}

slides/notes.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## E-formation, comment ça se passe ? :
2+
- Autonomie mais pas non plus un Mooc : on fait des sessions d'accompagnement au cours de la période de formation (toutes les deux semaines).
3+
- Session de cloture, feed-back
4+
- On sort de l'idée de "on vient 2 jours en présentiel pour connaître un langage"
5+
- Chacun avance à son rythme.
6+
7+
Feed-back sur le temps passé par chacun
8+
9+
## Slides :
10+
- C'est de l'intro à Python, base commune. Porte d'entrée sur un gigantesque ecosystème.
11+
- 1991, pas nouveau mais très a jour et très utilisé, et de plus en plus.
12+
- Haut-niveau, facile à lire.
13+
14+
R : pensé pour les statisticiens (exemple : dataframe natif en R), pas Python.
15+
Python : machine learning, dev d'application, commu plus développés.
16+
17+
SSPcloud : plateforme hébergée à l'Insee, pour l'expérimentation en datascience.
18+
- Pas de pb d'installation
19+
- reproductibilité : on a tous le même environnement (si ça tourne chez moi, ça tourne chez vous).
20+
21+
Formation par la pratique avec les projets proches des cas d'usage métier.
22+
23+
Notebook jupyter très adaptés à la formation et aux phases d'expérimentation.
24+
25+
SSPcloud : parler des parcours de formation divers et varier.
26+
27+
Démonstration sur les notebooks :
28+
- executer du code
29+
- créer une nouvelle cellule / delete une cellule
30+
- Execution de l'ensemble de la cellule, pas ligne à ligne.
31+
- Montre les exos à la fin des notebooks.
32+
- Montrer comment on ouvre un jupyter vierge sur le sspcloud et parler de LS3.

source/fundamentals/data-structures1/tutorial.qmd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ b.index("d")
196196

197197
### Définition
198198

199-
Les **tuples** sont une autre structure de données basique en Python, semblable à celle des listes dans leur fonctionnement. Il y a cependant une différence fondamentale : là où les éléments d'une liste peuvent être modifiés par position comme on l'a vu précédemment, les tuples sont **non-modifiables** (*immutable*). Ainsi, les éléments d'un tuple ne peuvent pas être modifiés sans redéfinir complètement le tuple.
199+
Les **tuples** sont une autre structure de données basique en Python, semblable à celle des listes dans leur fonctionnement. Il y a cependant une différence fondamentale : là où les éléments d'une liste peuvent être modifiés comme on l'a vu précédemment, les tuples sont **non-modifiables** (*immutable*). Ainsi, les éléments d'un tuple ne peuvent pas être modifiés sans redéfinir complètement le tuple.
200200

201201
Quand est-il pertinent d'utiliser un tuple plutôt qu'une liste ? En pratique, les tuples sont beaucoup moins fréquemment utilisés que les listes. On utilise généralement les tuples pour **stocker des données qui n'ont pas vocation à être modifiées** lors de l'exécution de notre programme Python. Cela permet de se prémunir contre des problèmes d'intégrité de données, c'est à dire de modification non-voulue des données d'entrée. On s'évite ainsi parfois de longues et pénibles séances de debugging.
202202

@@ -312,7 +312,7 @@ Ces fonctions ont d'autres usages en pratique, que nous verrons en exercice.
312312

313313
- 4/ Une liste est un objet mutable : il est possible d'ajouter, supprimer ou modifier des éléments d'une liste après sa création. A l'inverse, les tuples sont immutables : une fois qu'un tuple est défini, on ne peut ni changer ses éléments, ni ajouter ou supprimer des éléments.
314314

315-
- 5/ En vertu de leur immutabilité, les tuples sont particulièrement adaptés pour stocker des données dont on voudrait s'assurer qu'elle ne seront pas modifiés par erreur. Par exemples, pour stocker des constantes d'un algorithme (paramètres, coordonnées géographiques, chemin de fichier, etc).
315+
- 5/ En vertu de leur immutabilité, les tuples sont particulièrement adaptés pour stocker des données dont on voudrait s'assurer qu'elles ne seront pas modifiées par erreur. Par exemple, pour stocker des constantes d'un algorithme (paramètres, coordonnées géographiques, chemin de fichier, etc.).
316316

317317
- 6/ Oui, il est tout à fait possible d'avoir des éléments de types différents dans une même liste ou dans un même tuple. Ces éléments peuvent être de types de base (ex : `int` et `string`), mais également des conteneurs (ex : liste, tuple, dictionnaire, etc.).
318318

source/fundamentals/data-structures2/tutorial.qmd

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ print(cv["marc"])
7979
print(cv["marc"]["hobbies"][0])
8080
```
8181

82-
Répétons-le : les dictionnaires n'ont pas de notion d'ordre. Ainsi, il n'y a pas de sens à requêter l'élément de position `0` d'un dictionnaire (sauf si la clé `0` existe..). Requêter une clé inexistante renvoie une erreur.
82+
Répétons-le : les dictionnaires n'ont pas de notion d'ordre. Ainsi, il n'y a pas de sens à requêter l'élément de position `0` d'un dictionnaire (sauf si la clé `0` existe...). Requêter une clé inexistante renvoie une erreur.
8383

8484

8585
```{python}
@@ -99,6 +99,8 @@ inventaire['cafe'] = {'arabica': '250g', 'robusta': '400g'}
9999
inventaire
100100
```
101101

102+
La valeur associée à la clé "cafe" était une chaîne de caractères ('500g'). Après modification, cette valeur n'est plus une chaîne de caractères mais un dictionnaire.
103+
102104
### Suppression d'éléments
103105

104106
Pour supprimer une clé (et la valeur associée), les mêmes opérations que celles qui permettent de supprimer des éléments dans une liste peuvent être utilisées.
@@ -158,6 +160,11 @@ list(cv.values())
158160
list(cv.items())
159161
```
160162

163+
::: {.callout-tip}
164+
La méthode `.items()` est très utile pour les itérations, nous le verrons plus loin.
165+
Pour les plus curieux, gardez en tête que cette méthode renvoie, pour chaque élément du dictionnaire, un tuple de taille 2 contenant la clé et la valeur.
166+
:::
167+
161168
## Sets
162169

163170
### Définition
@@ -214,6 +221,14 @@ x.remove(2)
214221
x
215222
```
216223

224+
Tout cela fonctionne aussi pour des sets de chaînes de caractères par exemple :
225+
226+
```{python}
227+
x = {"Jeanne", "Jean"}
228+
x.remove("Jean")
229+
x
230+
```
231+
217232
### Utilisation
218233

219234
Les sets ne sont pas très souvent utilisés en pratique, mais ils s'avèrent bien utiles dans certaines situations précises. Du fait de l'unicité des éléments qu'ils contiennent, les sets permettent simplement et efficacement de supprimer les doublons dans un conteneur séquentiel, comme une liste.

source/fundamentals/functions/tutorial.qmd

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ Dans cet exemple, la fonction `len` :
2929

3030
- renvoie ce nombre en sortie
3131

32-
L'"ensemble d'instructions" qui permettent de calculer la longueur de la chaîne n'est pas connu. En tant qu'utilisateur, on a seulement besoin de savoir ce que prend la fonction en entrée et ce qu'elle renvoie en sortie. Cela vaut pour les cas dans lesquels on utilise des fonctions natives de Python ou bien des fonctions issus de librairies Python auxquelles on fait confiance. On parle de "boîtes noires" pour caractériser de telles fonctions.
32+
L'"ensemble d'instructions" qui permettent de calculer la longueur de la chaîne n'est pas connu. En tant qu'utilisateur, on a seulement besoin de savoir ce que prend la fonction en entrée et ce qu'elle renvoie en sortie. Cela vaut pour les cas dans lesquels on utilise des fonctions natives de Python ou bien des fonctions issues de librairies Python auxquelles on fait confiance. On parle de "boîtes noires" pour caractériser de telles fonctions.
3333

3434
En pratique, on va vouloir définir ses propres fonctions pour structurer son code et le réutiliser dans les analyses.
3535

@@ -238,8 +238,8 @@ def accueil(prenom):
238238
print("Salutations " + prenom + " !")
239239
240240
x = accueil("Léontine")
241-
print(x)
242-
print(type(x))
241+
print(f"Valeur de x : {x}")
242+
print(f"Classe de x : {type(x)}")
243243
```
244244

245245
Comme attendu, la fonction a imprimé un message de bienvenue dans la console. Mais on n'a pas spécifié de valeur à retourner. Comme un objet doit malgré tout être retourné par définition, Python renvoie la valeur `None`, qui est un objet particulier, de type `NoneType`, et qui représente l'absence de valeur. Son seul intérêt est de bien marquer la différence entre une valeur réelle et l'absence de valeur.

source/fundamentals/loops/tutorial.qmd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ Agrémentons l'exemple précédent pour illustrer son fonctionnement. Tant qu'un
219219

220220
```{python}
221221
#| eval: false
222-
votre_prenom = ""
222+
votre_prenom = "bob"
223223
224224
while True:
225225
print("Veuillez entrer votre prénom.")
@@ -228,7 +228,7 @@ while True:
228228
continue
229229
print("Veuillez entrer votre mot de passe.")
230230
mdp = input()
231-
if mdp == "insee2021":
231+
if mdp == "lemotdepasse":
232232
break
233233
print("Bienvenue " + votre_prenom)
234234
```

source/fundamentals/oop/tutorial.qmd

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
::: {.content-visible when-profile="fr"}
22
# Notions de programmation orientée objet
33

4-
Python est un langage dit "multi-paradigmes", c'est à dire qu'il admet plusieurs manières de coder et de concevoir ses programmes. L'une d'entre elle est la programmation orientée objet (POO). La POO est un paradigme puissant, mais fait intervenir des concepts assez complexes (polymorphisme, héritage, etc.). Fort heureusement pour nous, Python n'impose pas de coder en POO. Cela étant, le fonctionnement interne de Python est fortement teinté de POO, et la plupart des *packages* les plus utilisés reposent à des degrés divers sur les objets. Nous allons donc étudier dans ce tutoriel les bases de la POO, afin de pouvoir être autonomes lorsque son usage est nécessaire.
4+
Python est un langage dit "multi-paradigmes", c'est à dire qu'il admet plusieurs manières de coder et de concevoir ses programmes. L'une d'entre elles est la programmation orientée objet (POO). La POO est un paradigme puissant, mais fait intervenir des concepts assez complexes (polymorphisme, héritage, etc.). Fort heureusement pour nous, Python n'impose pas de coder en POO. Cela étant, le fonctionnement interne de Python est fortement teinté de POO, et la plupart des *packages* les plus utilisés reposent à des degrés divers sur les objets. Nous allons donc étudier dans ce tutoriel les bases de la POO, afin de pouvoir être autonomes lorsque son usage est nécessaire.
55

66

77
## La programmation orientée objet
@@ -58,7 +58,7 @@ Analysons la syntaxe de construction d'une classe d'objets :
5858

5959
- l'instruction `class` définit la **classe d'objets**. Différents objets pourront être créés selon le modèle défini par cette classe. Par convention, le nom de la classe doit commencer par une majuscule.
6060

61-
- la classe spécifie un certains nombres de fonctions. Dans ce contexte particulier, on appelle ces fonctions "**méthodes**" : ce sont des fonctions spécifiques à la classe d'objets définie.
61+
- la classe spécifie un certain nombre de fonctions. Dans ce contexte particulier, on appelle ces fonctions "**méthodes**" : ce sont des fonctions spécifiques à la classe d'objets définie.
6262

6363
- une première méthode bien spécifique, nommée `__init__`, est appelée le **constructeur**. Elle permet de définir les **attributs** attachés à cette classe d'objets. Il est possible de passer des paramètres à la fonction (comme `couleur` et `qte_jus`) pour définir des attributs propres à une **instance** de l'objet (plus de détails sur cette notion dans la section suivante).
6464

@@ -178,7 +178,7 @@ Le fait que les objets possèdent des attributs permet de garder en mémoire **l
178178

179179
- l'entraînement d'un modèle de machine-learning. Il est fréquent d'entraîner un modèle une première fois, et de vouloir ensuite continuer l'entraînement plus longtemps, ou bien avec d'autres données. Sauvegarder l'état dans une instance de la classe `Modele` permet de faire cela. C'est pourquoi la plupart des *packages* de machine-learning en Python sont fondés sur de la POO.
180180

181-
- le fonctionnement en continu d'une application web. Une telle application doit garder des choses en mémoire pour fournir à l'utilisateur une expérience fluide : le fait que l'utilisateur se soit connecté, son historique, etc. Là encore, la plupart des *frameworks* web (`Django`, `Flask`..) reposent sur de la POO.
181+
- le fonctionnement en continu d'une application web. Une telle application doit garder des choses en mémoire pour fournir à l'utilisateur une expérience fluide : le fait que l'utilisateur se soit connecté, son historique, etc. Là encore, la plupart des *frameworks* web (`Django`, `Flask`...) reposent sur de la POO.
182182

183183
Dans le même temps, le fait d'utiliser des objets qui gardent en mémoire un état peut **limiter la reproductibilité des analyses**. Pour illustrer cela, revenons à l'exemple du tutoriel : exécutez plusieurs fois d'affilée la cellule suivante.
184184

0 commit comments

Comments
 (0)