-
Notifications
You must be signed in to change notification settings - Fork 45
/
index.qmd
333 lines (274 loc) · 13.5 KB
/
index.qmd
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
---
title: Introduction
date: "2023-06-29T00:00:00Z"
description: |
Cette introduction propose quelques éléments de
révision des concepts de base en `Python` et
présente l'écosystème `Python` que nous allons
découvrir tout au long de ce cours.
slug: introduction
type: book
weight: 10
image: https://ensae-reproductibilite.github.io/website/cards/introduction/egg.jpg
---
# Introduction
Ce cours rassemble l'ensemble du contenu du cours
*Python {{< fa brands python >}} pour la data-science* que je donne
à l'[ENSAE](https://www.ensae.fr/courses/python-pour-le-data-scientist-pour-leconomiste/)
depuis 2018.
Ce cours était auparavant donné par [Xavier Dupré](http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx3/td_2a.html).
Quelques éléments supplémentaires sont disponibles dans
les [slides d'introduction](/slides/intro/).
Des éléments plus avancés sont présents dans un autre cours consacré
à la mise en production de projets _data science_
que je donne avec Romain Avouac
à l'ENSAE ([ensae-reproductibilite.github.io/website](https://ensae-reproductibilite.github.io/website))
`Python` est un langage qui a déjà plus de trente ans
mais qui a connu, au cours de la décennie 2010, une
nouvelle jeunesse du fait de l'engouement pour
la _data science_.
`Python`, plus que tout autre
langage informatique, réunit des communautés aussi
diverses que des statisticiens, des développeurs,
des gestionnaires
d'applications ou d'infrastructures informatiques,
des lycées - `Python` est au programme du bac français
depuis quelques années - ou des chercheurs
dans des champs à la fois théoriques et appliqués. Contrairement
à beaucoup de langages informatiques qui fédèrent
une communauté assez homogène, `Python` est parvenu à réunir
largement grâce à quelques principes centraux: la lisibilité
du langage, la simplicité à utiliser des modules,
la simplicité à l'associer à des langages plus performants
pour certaines tâches données, l'énorme volume de documentation
disponible en ligne...
Être le deuxième meilleur langage pour réaliser telle ou telle
tâche
peut ainsi être une source de succès lorsque la concurrence ne dispose
pas d'un éventail aussi large d'avantages.
Le succès de `Python`, de par sa nature de
langage couteau-suisse, est indissociable
de l'émergence du profil du _data-scientist_, individu
capable de s'intégrer à différents niveaux dans la valorisation
de données.
@davenport2012data, dans la _Harvard Business Review_,
ont ainsi pu parler du _"boulot le plus sexy du 21e siècle"_
et ont pu, dix ans plus tard, faire un panorama complet de l'évolution
des compétences attendues d'un _data-scientist_ dans
la même revue [@davenport2022data].
La richesse de `Python` permet de l'utiliser dans toutes les phases
du traitement de la donnée, de sa récupération et structuration à partir de
sources diverses à sa valorisation.
Par le prisme de la _data science_, nous verrons que `Python` est
un très bon candidat pour assister les _data scientists_ dans tous
les aspects du travail de données.
Ce cours introduit différents outils qui permettent de mettre en relation
des données et des théories grâce à `Python`. Néanmoins, ce cours
va au-delà d'une simple introduction au langage et propose
des éléments plus approfondis, notamment sur les dernières
innovations permises par la _data-science_ dans les méthodes de travail.
## Pourquoi faire du `Python` pour l'analyse de données ?
Le succès de [scikit-learn](https://scikit-learn.org/stable/) et
de [Tensorflow](https://www.tensorflow.org/) dans la communauté
de la *Data-Science* ont beaucoup contribué à l'adoption de `Python`. Cependant,
résumer `Python` à ces quelques librairies serait réducteur tant il s'agit
d'un véritable couteau-suisse pour les *data-scientists*,
les *social scientists* ou les économistes.
L'intérêt de `Python` pour un *data scientist* ou *data economist*
va au-delà du champ du *Machine Learning*.
Comme pour `R`, l'intérêt de Python est son rôle central dans un
écosystème plus large autour d'outils puissants, flexibles et *open-source*.
`Python` concurrence très bien `R` dans son domaine de prédilection, à
savoir l'analyse statistique sur des bases de données structurées.
Comme dans `R`, les *dataframes* sont un concept central de `Python`.
`Python` est néanmoins bien plus complet dans certains domaines.
Outre le *Machine Learning*,
`Python` est mieux adapté aux données volumineuses que
`R`. `Python` est également meilleur que `R` pour faire
du *webscraping* ou accéder à des données par le biais d'API.
Dans le domaine de l'économétrie, `Python` offre
l'avantage de la simplicité avec un nombre restreint de packages (`scikit` et
`statsmodels`) permettant d'avoir des modèles très généraux
(les [generalized estimating equations](https://www.statsmodels.org/stable/gee.html))
alors qu'il faut
choisir parmi une grande variété de packages en `R` pour obtenir les
modèles équivalents. Dans le domaine du _Deep Learning_, `Python` écrase
la concurrence.
Au contraire, dans certains domaines, `R` reste meilleur, même si les
évolutions très récentes de certains outils peuvent amener à réviser
ce constant. Historiquement,
`R` était très bien intégré au langage de publication `Markdown` ce qui,
permet la construction de documents reproductibles très raffinés.
L'émergence récente de `Quarto`, héritier de `R Markdown` développé par
la société `Posit` permet aux utilisateur de `Python` de bénéficier
également de la richesse de cette approche pour leur langage de prédilection.
Ce site *web*, à l'arborescence relativement complexe, est ainsi
construit grâce à cet outil qui permet à la fois de tester les blocs
de code présentés mais aussi de produire de manière automatisée les
tableaux et graphiques présentés. S'il fallait trouver un point faible
à `Python` par rapport à `R` dans le domaine de la _data-science_
c'est sur la production de graphiques. `matplotlib` et `seaborn`, qui sont
présentés dans la partie visualisation, sont d'excellents outils. Néanmoins,
`ggplot2`, l'équivalent en `R` est plus facile de prise en main et
propose une syntaxe extrêmement flexible, qu'il est difficile de ne pas
apprécier. Cependant, l'écosystème de la
visualisation de données est en pleine révolution avec le succès
d'[`Observable`](https://observablehq.com/) qui
rapproche l'écosystème `JavaScript` des développeurs web
de la communauté des analystes de données.
Un des avantages comparatifs de `Python` par rapport à d'autres
langages (notamment `R` et `Julia`) est sa dynamique,
ce que montre [l'explosion du nombre de questions
sur `Stack Overflow`](https://towardsdatascience.com/python-vs-r-for-data-science-6a83e4541000).
Cependant, il ne s'agit pas bêtement d'enterrer `R`.
Au contraire, outre leur logique très proche,
les deux langages sont dans une phase de convergence avec des initiatives comme
[`reticulate`](https://rstudio.github.io/reticulate/),
[`quarto`](https://quarto.org/) ou
[snakemake](https://snakemake.readthedocs.io/en/stable/tutorial/basics.html) qui
permettent, de manière différente, de créer des chaînes de traitement
mélangeant `R` et `Python`.
Une autre raison pour laquelle cette guéguerre `R`/`Python` n'a pas
de sens est que les bonnes
pratiques peuvent être transposées de manière presque transparente d'un
langage à l'autre. Il s'agit d'un point qui est développé plus amplement
dans le cours plus avancé que je donne avec Romain Avouac en dernière année
d'ENSAE: [ensae-reproductibilite.github.io/website](https://ensae-reproductibilite.github.io/website).
A terme, les data-scientists et chercheurs en sciences sociales ou
économie utiliseront
de manière presque indifférente, et en alternance, `Python` et `R`. Ce cours
présentera ainsi régulièrement des analogies avec `R` pour aider les
personnes découvrant `Python`, mais connaissant déjà bien `R`, à
mieux comprendre certains messages.
## Objectif du cours
Le but de ce cours est de rendre autonome sur
l'utilisation de `Python`
dans un contexte de travail de *data scientist* ou de
*social scientist* (économie, sociologie, géographie...).
Autrement dit,
il présuppose qu'on désire faire un usage intense
de données dans un cadre statistique rigoureux.
La _data-science_ est un ensemble de techniques
visant à donner du sens à des sources de données
diverses. Selon les organisations,
les _data-scientists_ peuvent ainsi être à
l'interface de projets nécessitant un
large spectre de compétences
(analyse
de données textuelles, représentation
graphique interactive...),
avoir des interactions avec des profils
très différents (experts métiers,
développeurs, _data architect_,
_data engineer_...) voire adopter
un peu tous ces rôles.
Les innovations
récentes de la _data-science_ ne se réduisent
néanmoins
pas qu'à des découvertes méthodologiques.
La _data-science_ propose un ensemble de
techniques et de méthodes de travail
pour réduire les coûts de passage
d'un protype à une chaine
de production pérenne.
Ce cours introduit à quelques notions
sur le sujet, notamment les
_pipelines_ `scikit`, pour adopter
dès l'apprentissage du langage
quelques bons réflexes.
Je donne également un cours,
plus avancé,
sur ce sujet à l'ENSAE avec
Romain Avouac:
https://ensae-reproductibilite.github.io/website/.
## Public cible
Ce cours ne revient que de manière secondaire
sur les fondements statistiques ou algorithmiques
derrière certaines des techniques évoquées.
Ne pas connaître ces notions n'empêche néanmoins pas de comprendre
le contenu de ce site *web*. En effet, la facilité d'usage de `Python`
évite de devoir programmer soi-même un modèle, ce qui rend
possible l'application
de modèles dont on n'est pas expert. La connaissance des modèles sera
plutôt nécessaire dans l'interprétation des résultats.
Cependant, la facilité avec laquelle il est possible de construire des modèles complexes
avec `Python` peut laisser apparaître que connaître les spécifités de chaque
modèle est inutile. Il
s'agirait d'une grave erreur: même si l'implémentation de modèles est aisée, il
est nécessaire de bien comprendre la structure des données et leur adéquation
avec les hypothèses d'un modèle.
## Reproductibilité
Ce cours donne une place centrale à
la notion de reproductibilité. Cette exigence se traduit de diverses
manières dans cet enseignement, en particulier en insistant sur un
outil indispensable pour favoriser le partage de codes informatiques,
à savoir `Git`.
L'ensemble du contenu du site *web* est reproductible dans des environnements
informatiques divers. Il est bien-sûr possible de copier-coller les morceaux
de code présents dans ce site. Cette méthode montrant rapidement ses limites,
le site présente un certain nombre de boutons disponibles pour
ouvrir la page sous un format `Jupyter Notebook` sur divers
pages *web*:
- Sur l'ensemble du site web,
il est possible de cliquer
sur la petite icone {{< fa brands github >}}
pour être redirigé vers le dépôt `Github` associé à ce cours.
- Un certain nombre de boutons permettent de transformer chaque
page web en `Jupyter Notebooks` s'il est nécessaire de
visualiser ou exécuter du code `Python`.
Voici, par exemple, ces boutons pour le tutoriel `Numpy`
```{python}
#| echo: false
#| output: 'asis'
#| include: true
#| eval: true
import sys
sys.path.insert(1, '../../') #insert the utils module
from utils import print_badges
#print_badges(__file__)
print_badges("content/manipulation/01_numpy.qmd")
```
Pour les agents de la fonction publique, ou
les élèves des écoles partenaires, il est recommandé
de privilégier le bouton `SSPCloud` qui est
une infrastructure _cloud_ moderne, puissante et flexible
développée par l'Insee et accessible à l'url
[https://datalab.sspcloud.fr](https://datalab.sspcloud.fr/home)[^1].
[^1]: Pour les utilisateurs de cette infrastructure, les _notebooks_
sont également listés, parmi de nombreuses autres
ressources de qualité, sur la
[page `Formation`](https://www.sspcloud.fr/formation)
L'ensemble du contenu de ce site s'appuie sur des données
ouvertes, qu'il s'agisse de données françaises (principalement
issues de la plateforme
centralisatrice [`data.gouv`](https://www.data.gouv.fr) ou du site
_web_ de l'[Insee](https://www.insee.fr)) ou de données
américaines. Les résultats sont donc reproductibles pour quelqu'un
disposant d'un environnement identique.
## Architecture du site web
Ce cours présente
des tutoriels et des exercices complets.
Chaque page est structurée sous la forme
d'un problème concret et présente la
démarche générique pour résoudre ce problème général.
Vous pouvez naviguer dans l'architecture du site via la table des matières
ou par les liens vers le contenu antérieur ou postérieur à la fin de chaque
page. Certaines parties, notamment celle consacrée à la modélisation,
proposent des exemples fil-rouge pour illustrer la démarche de manière
plus extensive.
## Evaluation
Les élèves de l'ENSAE valident le cours grâce à
un projet approfondi.
Les éléments relatifs à l'évaluation du cours, ainsi qu'une
liste des projets déjà effectués, sont disponibles dans la
Section [Evaluation](annexes/evaluation).
## Références
::: {#refs}
:::
## Contenu général
{{< list_children >}}
## Eléments supplémentaires
<div id="wcb" class="carbonbadge wcb-d"></div>
<script src="https://unpkg.com/website-carbon-badges@1.1.3/b.min.js" defer></script>
## Structuration de cette partie
{{< list_children >}}