Démarche à adopter face à un jeu de données

Quelques éléments pour adopter une démarche scientifique et éthique face à un jeu de données.

Tutoriel
Rappels
Author

Lino Galiana

Published

2024-04-27

Pour bien débuter des travaux sur une base de données, il est nécessaire de se poser quelques questions de bon sens et de suivre une démarche scientifique dont un certain nombre de gestes sont assez simple.

Dans un projet sur des jeux de données, on peut schématiquement séparer les étapes en quatre grandes parties :

  1. La récupération et structuration des données ;
  2. L’analyse de celle-ci, notamment la production de statistiques descriptives indispensables pour orienter les exploitations ultérieures ;
  3. La modélisation ;
  4. La valorisation finale des étapes précédentes et la communication de résultats ou la mise en oeuvre d’une chaine de production.

Ce cours explore ces différentes étapes de manière progressive grâce à l’écosystème Python qui est très complet. Chaque chapitre du cours peut être vu comme une manière de progresser dans ce fil conducteur. Dans ce chapitre, nous allons plutôt mettre en avant quelques réflexions à avoir avant de se lancer dans chaque étape.

1 Lors de la récupération des données

1.1 Réflexions à mener en amont

La phase de constitution de son jeu de données sous-tend tout le projet qui suit.

La première question à se poser est “de quelles données ai-je besoin pour répondre à ma problématique ?”. Cette problématique pourra éventuellement être affinée en fonction des besoins mais les travaux sont généralement de meilleure qualité lorsque la problématique amène à la réflexion sur les données disponibles plutôt que l’inverse.

Ensuite, “qui produit et met à disposition ces données” ? Les sources disponibles sur internet sont-elles fiables ? Par exemple, les sites d’open data gouvernementaux sont par exemple assez fiables mais autorisent parfois l’archivage de données restructurées par des tiers et non des producteurs officiels. A l’inverse, sur Kaggle ou sur Github la source de certains jeux de données n’est pas tracée ce qui rend compliquée la confiance sur la qualité de la donnée

Une fois identifié une ou plusieurs sources de données, est-ce que je peux les compléter avec d’autres données ? (dans ce cas, faire attention à avoir des niveaux de granularité adéquats).

1.2 Structuration des données

Vient ensuite la phase de mise en forme et nettoyage des jeux de données récupérés. Cette étape est primordiale et est généralement celle qui mobilise le plus de temps. Pendant quelques années, on parlait de data cleaning. Cependant, cela a pu, implicitement, laisser penser qu’il s’agissait d’une tâche subalterne. On commence à lui préférer le concept de feature engineering qui souligne bien qu’il s’agit d’une compétence qui nécessite beaucoup de compétences.

Un jeu de données propre est un jeu de données dont la structure est adéquate et n’entraînera pas d’erreur, visible ou non, lors de la phase d’analyse. Voici quelques éléments structurants d’un jeu de données propre :

  • les informations manquantes sont bien comprises et traitées. numpy et pandas proposent un certain formalisme sur le sujet qu’il est utile d’adopter en remplaçant par NaN les observations manquantes. Cela implique de faire attention à la manière dont certains producteurs codent les valeurs manquantes : certains ont la facheuse tendance à être imaginatifs sur les codes pour valeurs manquantes : “-999”, “XXX”, “NA”
  • les variables servant d’identifiants sont bien les mêmes d’une table à l’autre (notamment dans le cas de jointure) : même format, même modalités
  • pour des variables textuelles, qui peuvent etre mal saisies, avoir corrigé les éventuelles fautes (ex “Rolland Garros” -> “Roland Garros”)
  • créer des variables qui synthétisent l’information dont vous avez besoin
  • supprimer les éléments inutiles (colonne ou ligne vide)
  • renommer les colonnes avec des noms compréhensibles

2 Lors de l’analyse descriptive

Une fois les jeux de données nettoyés, vous pouvez plus sereinement étudier l’information présente dans les données. Cette phase et celle du nettoyage ne sont pas séquentielles, en réalité vous devrez régulièrement passer de votre nettoyage à quelques statistiques descriptives qui vous montreront un problème, retourner au nettoyage etc.

Les questions à se poser pour “challenger” le jeu de données :

  • Est-ce que mon échantillon est bien représentatif de ce qui m’intéresse ? N’avoir que 2000 communes sur les 35000 n’est pas nécessairement un problème mais il est bon de s’être posé la question.
  • Est-ce que les ordres de grandeur sont bons ? Pour cela, confronter vos premieres stats desc à vos recherches internet. Par exemple trouver que les maisons vendues en France en 2020 font en moyenne 400 m² n’est pas un ordre de grandeur réaliste.
  • Est-ce que je comprends toutes les variables de mon jeu de données ? Est-ce qu’elles se “comportent” de la bonne façon ? A ce stade, il est parfois utile de se faire un dictionnaire de variables (qui explique comment elles sont construites ou calculées). On peut également mener des études de corrélation entre nos variables.
  • Est-ce que j’ai des outliers, i.e. des valeurs aberrantes pour certains individus ? Dans ce cas, il faut décider quel traitement on leur apporte (les supprimer, appliquer une transformation logarithmique, les laisser tel quel) et surtout bien le justifier.
  • Est-ce que j’ai des premiers grands messages sortis de mon jeu de données ? Est-ce que j’ai des résultats surprenants ? Si oui, les ai-je creusé suffisamment pour voir si les résultats tiennent toujours ou si c’est à cause d’un souci dans la construction du jeu de données (mal nettoyées, mauvaise variable…)

3 Lors de la modélisation

A cette étape, l’analyse descriptive doit voir avoir donné quelques premières pistes pour savoir dans quelle direction vous voulez mener votre modèle. Une erreur de débutant est de se lancer directement dans la modélisation parce qu’il s’agirait d’une compétence plus poussée. Cela amène généralement à des analyses de pauvre qualité : la modélisation tend généralement à confirmer les intuitions issues de l’analyse descriptive. Sans cette dernière, l’interprétation des résultats d’un modèle peu s’avérer inutilement complexe.

Vous devrez plonger dans vos autres cours (Econométrie 1, Series Temporelles, Sondages, Analyse des données etc.) pour trouver le modèle le plus adapté à votre question.

La méthode sera guidée par l’objectif.

  • Est-ce que vous voulez expliquer ou prédire ? https://hal-cnam.archives-ouvertes.fr/hal-02507348/document
  • Est-ce que vous voulez classer un élément dans une catégorie (classification ou clustering) ou prédire une valeur numérique (régression) ?

En fonction des modèles que vous aurez déjà vu en cours et des questions que vous souhaiterez résoudre sur votre jeu de données, le choix du modèle sera souvent assez direct.

Vous pouvez également vous référez à la démarche proposée par Xavier Dupré http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx3/debutermlprojet.html#l-debutermlprojet

Pour aller plus loin (mais de manière simplifiée) sur les algorithmes de Machine Learning :
https://datakeen.co/8-machine-learning-algorithms-explained-in-human-language/

3.1 Valorisation des travaux

La mise à disposition de code sur Github ou Gitlab est une incitation très forte pour produire du code de qualité. Il est ainsi recommandé de systématiquement utiliser ces plateformes pour la mise à disposition de code. Cependant, il ne s’agit que d’une petite partie des gains à l’utiliser. Le cours que je donne avec Romain Avouac en troisième année d’ENSAE (ensae-reproductibilite.github.io/website/) évoque l’un des principaux gains à utiliser ces plateformes, à savoir la possibilité de mettre à disposition automatiquement différents livrables pour valoriser son travail auprès de différents publics.

Selon le public visé, la communication ne sera pas identique. Le code peut intéresser les personnes désirant avoir des détails sur la méthodologie mise en oeuvre en pratique mais il peut s’agir d’un format rebutant pour d’autres publics. Une visualisation de données dynamiques parlera à des publics moins experts de la donnée mais est plus dure à mettre en oeuvre qu’un graphique standard.

4 Ethique et responsabilité du data scientist

4.1 La reproductibilité est importante

Les données sont une représentation synthétique de la réalité et les conclusions de certaines analyses peuvent avoir un vrai impact sur la vie des citoyens. Les chiffres erronés de Reinhart et Rogoff ont ainsi pu servir de justification théorique à des politiques d’austérité qui ont pu avoir des conséquences violentes pour certains citoyens de pays en crise1. En Grande-Bretagne, le recensement des personnes contaminées par le Covid en 2020, et donc de leurs proches pour le suivi de l’épidémie, a été incomplet à cause de troncatures dues à l’utilisation d’un format non adapté de stockage des données (tableur Excel)2. Dernier exemple avec le credit scoring mis en oeuvre aux Etats-Unis. La citation ci-dessous, issue de l’article de Hurley and Adebayo (2016), illustre très bien les conséquences et les aspects problématiques d’un système de construction automatisée d’un score de crédit :

Consumers have limited ability to identify and contest unfair credit decisions, and little chance to understand what steps they should take to improve their credit. Recent studies have also questioned the accuracy of the data used by these tools, in some cases identifying serious flaws that have a substantial bearing on lending decisions. Big-data tools may also risk creating a system of “creditworthinessby association” in which consumers’ familial, religious, social, and other affiliations determine their eligibility for an affordable loan.

Hurley and Adebayo (2016)

4.2 Lutter contre les biais cognitifs

La transparence sur les intérêts et limites d’une méthode mise en oeuvre est donc importante. Cette exigence de la recherche, parfois oubliée à cause de la course aux résultats novateurs, mérite également d’être appliquée en entreprise ou administration. Même sans intention manifeste de la part de la personne qui analyse des données, une mauvaise interprétation est toujours possible. Tout en valorisant un résultat, il est possible d’alerter sur certaines limites. Il est important, dans ses recherches comme dans les discussions avec d’autres interlocuteurs, de faire attention au biais de confirmation qui consiste à ne retenir que l’information qui correspond à nos conceptions a priori et à ne pas considérer celles qui pourraient aller à l’encontre de celles-ci :

Certaines représentations de données sont à exclure car des biais cognitifs peuvent amener à des interprétations erronées3. Dans le domaine de la visualisation de données, les camemberts (pie chart) ou les diagrammes radar sont par exemple à exclure car l’oeil humain perçoit mal ces formes circulaires. Pour une raison similaire, les cartes avec aplat de couleur (cartes choroplèthes) sont trompeuses. Les posts de blog pour datawrapper de Lisa Charlotte Muth ou ceux d’Eric Mauvière sont d’excellentes ressources pour apprendre les bonnes et mauvaises pratiques de visualisation (voir la partie visualisation de ce cours pour plus de détails).

4.3 Réglementation des données

Le cadre réglementaire de protection des données a évolué ces dernières années avec le RGPD. Cette réglementation a permis de mieux faire saisir le fait que la collecte de données se justifie au nom de finalités plus ou moins bien identifiées. Prendre conscience que la confidentialité des données se justifie pour éviter la dissémination non contrôlée d’informations sur une personne est important. Des données particulièrement sensibles, notamment les données de santé, peuvent être plus contraignantes à traiter que des données peu sensibles.

En Europe, par exemple, les agents du service statistique public (Insee ou services statistiques ministériels) sont tenus au secret professionnel (article L121-6 du Code général de la fonction publique), qui leur interdit la communication des informations confidentielles dont ils sont dépositaires au titre de leurs missions ou fonctions, sous peine des sanctions prévues par l’article 226-13 du Code pénal (jusqu’à un an d’emprisonnement et 15 000 € d’amende). Le secret statistique, défini dans une loi de 1951, renforce cette obligation dans le cas de données détenues pour des usages statistiques. Il interdit strictement la communication de données individuelles ou susceptibles d’identifier les personnes, issues de traitements à finalités statistiques, que ces traitements proviennent d’enquêtes ou de bases de données. Le secret statistique exclut par principe de diffuser des données qui permettraient l’identification des personnes concernées, personnes physiques comme personnes morales. Cette obligation limite la finesse des informations disponibles en diffusion

Ce cadre contraignant s’explique par l’héritage de la Seconde Guerre Mondiale et le désir de ne plus revivre une situation où la collecte d’information sert une action publique basée sur la discrimination entre catégories de la population.

4.4 Partager les moyens de reproduire une analyse

Un article récent de Nature, qui reprend les travaux d’une équipe d’épidémiologistes (Gabelica, Bojčić, and Puljak 2022) évoque le problème de l’accès aux données pour des chercheurs désirant reproduire une étude. Même dans les articles scientifiques où il est mentionné que les données peuvent être mises à disposition d’autres chercheurs, le partage de celles-ci est rare :

Graphique issu de l’article de Nature

Ce constat, quelque peu inquiétant, est confirmé par une étude récente de Samuel and Mietchen (2023) qui a tenté d’exécuter un peu moins de 30 000 notebooks associés à des études scientifiques. Seuls 3% des notebooks reproduisent les résultats espérés.

Afin de partager les moyens de reproduire des publications sans diffuser des données potentiellement confidentielles, les jeux de données synthétiques sont de plus en plus utilisés. Par le biais de modèles de deep learning, il est ainsi possible de générer des jeux de données synthétiques complexes qui permettent de reproduire les principales caractéristiques d’un jeu de données tout en évitant, si le modèle a été bien calibré, de diffuser une information individuelle.

Dans l’administration française, les codes sources sont considérés comme des documents administratifs et peuvent donc être mis à disposition de tout citoyen sur demande à la Commission d’accès aux documents administratifs (CADA):

« Sont considérés comme documents administratifs, au sens des titres Ier, III et IV du présent livre, quels que soient leur date, leur lieu de conservation, leur forme et leur support, les documents produits ou reçus, dans le cadre de leur mission de service public, par l’État, les collectivités territoriales ainsi que par les autres personnes de droit public ou les personnes de droit privé chargées d’une telle mission. Constituent de tels documents notamment les dossiers, rapports, études, comptes rendus, procès-verbaux, statistiques, instructions, circulaires, notes et réponses ministérielles, correspondances, avis, prévisions, codes sources et décisions. »

Avis 20230314 - Séance du 30/03/2023 de la Commission d’accès aux documents administratifs

En revanche, les poids des modèles utilisés par l’administration, notamment ceux des modèles de machine learning ne sont pas réglementés de la même manière (Avis 20230314 de la CADA). En effet, comme il existe toujours un risque de rétro-ingénierie amenant à une révélation partielle des données d’entraînement lors d’un partage de modèle, les modèles entraînés sur des données sensibles (comme les décisions de justice étudiées par (l’avis 20230314 de la CADA)) n’ont pas vocation à être partagés.

4.5 Adopter une approche écologique

Le numérique constitue une part croissante des émissions de gaz à effet de serre. Représentant aujourd’hui 4 % des émissions mondiales de CO2, cette part devrait encore croître (Arcep 2019). Le monde de la data science est également concerné.

L’utilisation de données de plus en plus massives, notamment la constitution de corpus monumentaux de textes, récupérés par scraping, est une première source de dépense d’énergie. De même, la récupération en continu de nouvelles traces numériques nécessite d’avoir des serveurs fonctionnels en continu. A cette première source de dépense d’énergie, s’ajoute l’entraînement des modèles qui peut prendre des jours, y compris sur des architectures très puissantes. Strubell, Ganesh, and McCallum (2019) estime que l’entraînement d’un modèle à l’état de l’art dans le domaine du NLP nécessite autant d’énergie que ce que consommeraient cinq voitures, en moyenne, au cours de l’ensemble de leur cycle de vie.

L’utilisation accrue de l’intégration continue, qui permet de mettre en oeuvre de manière automatisée l’exécution de certains scripts ou la production de livrables en continu, amène également à une dépense d’énergie importante. Il convient donc d’essayer de limiter l’intégration continue à la production d’output vraiment nouveaux.

Les data scientists doivent être conscients des implications de leur usage intensif de ressources et essayer de minimiser leur impact. Par exemple, plutôt que ré-estimer un modèle de NLP, la méthode de l’apprentissage par transfert, qui permet de transférer les poids d’apprentissage d’un modèle à une nouvelle source, permet de réduire les besoins computationnels. De même, il peut être utile, pour prendre conscience de l’effet d’un code trop long, de convertir le temps de calcul en émissions de gaz à effet de serre. Le package codecarbon propose cette solution en adaptant l’estimation en fonction du mix énergétique du pays en question. Mesurer étant le prérequis pour prendre conscience puis comprendre, ce type d’initiatives peut amener à responsabiliser les data scientists et ainsi permettre un meilleur partage des ressources.

Références

Arcep. 2019. “L’empreinte Carbone Du Numérique.” Rapport de l’Arcep.
Gabelica, Mirko, Ružica Bojčić, and Livia Puljak. 2022. “Many Researchers Were Not Compliant with Their Published Data Sharing Statement: Mixed-Methods Study.” Journal of Clinical Epidemiology.
Hurley, Mikella, and Julius Adebayo. 2016. “Credit Scoring in the Era of Big Data.” Yale JL & Tech. 18: 148.
Samuel, Sheeba, and Daniel Mietchen. 2023. “Computational Reproducibility of Jupyter Notebooks from Biomedical Publications.” https://arxiv.org/abs/2308.07333.
Strubell, Emma, Ananya Ganesh, and Andrew McCallum. 2019. “Energy and Policy Considerations for Deep Learning in NLP.” https://arxiv.org/abs/1906.02243.

Informations additionnelles

environment files have been tested on.

Latest built version: 2024-04-27

Python version used:

'3.11.6 | packaged by conda-forge | (main, Oct  3 2023, 10:40:35) [GCC 12.3.0]'
Package Version
affine 2.4.0
aiobotocore 2.12.2
aiohttp 3.9.3
aioitertools 0.11.0
aiosignal 1.3.1
alembic 1.13.1
aniso8601 9.0.1
annotated-types 0.6.0
appdirs 1.4.4
archspec 0.2.3
astroid 3.1.0
asttokens 2.4.1
attrs 23.2.0
Babel 2.14.0
bcrypt 4.1.2
beautifulsoup4 4.12.3
black 24.4.2
blinker 1.7.0
blis 0.7.11
bokeh 3.4.0
boltons 23.1.1
boto3 1.34.51
botocore 1.34.51
branca 0.7.1
Brotli 1.1.0
cachetools 5.3.3
cartiflette 0.0.2
Cartopy 0.23.0
catalogue 2.0.10
cattrs 23.2.3
certifi 2024.2.2
cffi 1.16.0
charset-normalizer 3.3.2
click 8.1.7
click-plugins 1.1.1
cligj 0.7.2
cloudpathlib 0.16.0
cloudpickle 3.0.0
colorama 0.4.6
comm 0.2.2
commonmark 0.9.1
conda 24.3.0
conda-libmamba-solver 24.1.0
conda-package-handling 2.2.0
conda_package_streaming 0.9.0
confection 0.1.4
contextily 1.6.0
contourpy 1.2.1
cryptography 42.0.5
cycler 0.12.1
cymem 2.0.8
cytoolz 0.12.3
dask 2024.4.1
dask-expr 1.0.10
debugpy 1.8.1
decorator 5.1.1
dill 0.3.8
distributed 2024.4.1
distro 1.9.0
docker 7.0.0
duckdb 0.10.1
en-core-web-sm 3.7.1
entrypoints 0.4
et-xmlfile 1.1.0
exceptiongroup 1.2.0
executing 2.0.1
fastjsonschema 2.19.1
fiona 1.9.6
flake8 7.0.0
Flask 3.0.2
folium 0.16.0
fontawesomefree 6.5.1
fonttools 4.51.0
frozenlist 1.4.1
fsspec 2023.12.2
GDAL 3.8.4
gensim 4.3.2
geographiclib 2.0
geopandas 0.12.2
geoplot 0.5.1
geopy 2.4.1
gitdb 4.0.11
GitPython 3.1.43
google-auth 2.29.0
graphene 3.3
graphql-core 3.2.3
graphql-relay 3.2.0
graphviz 0.20.3
great-tables 0.5.0
greenlet 3.0.3
gunicorn 21.2.0
htmltools 0.5.1
hvac 2.1.0
idna 3.6
imageio 2.34.1
importlib_metadata 7.1.0
importlib_resources 6.4.0
inflate64 1.0.0
ipykernel 6.29.3
ipython 8.22.2
ipywidgets 8.1.2
isort 5.13.2
itsdangerous 2.1.2
jedi 0.19.1
Jinja2 3.1.3
jmespath 1.0.1
joblib 1.3.2
jsonpatch 1.33
jsonpointer 2.4
jsonschema 4.21.1
jsonschema-specifications 2023.12.1
jupyter-cache 1.0.0
jupyter_client 8.6.1
jupyter_core 5.7.2
jupyterlab_widgets 3.0.10
kaleido 0.2.1
kiwisolver 1.4.5
kubernetes 29.0.0
langcodes 3.4.0
language_data 1.2.0
lazy_loader 0.4
libmambapy 1.5.7
llvmlite 0.42.0
locket 1.0.0
lxml 5.2.1
lz4 4.3.3
Mako 1.3.2
mamba 1.5.7
mapclassify 2.6.1
marisa-trie 1.1.0
Markdown 3.6
MarkupSafe 2.1.5
matplotlib 3.8.3
matplotlib-inline 0.1.6
mccabe 0.7.0
menuinst 2.0.2
mercantile 1.2.1
mizani 0.11.2
mlflow 2.11.3
mlflow-skinny 2.11.3
msgpack 1.0.7
multidict 6.0.5
multivolumefile 0.2.3
munkres 1.1.4
murmurhash 1.0.10
mypy 1.9.0
mypy-extensions 1.0.0
nbclient 0.10.0
nbformat 5.10.4
nest_asyncio 1.6.0
networkx 3.3
nltk 3.8.1
numba 0.59.1
numpy 1.26.4
oauthlib 3.2.2
opencv-python-headless 4.9.0.80
openpyxl 3.1.2
OWSLib 0.28.1
packaging 23.2
pandas 2.2.1
paramiko 3.4.0
parso 0.8.4
partd 1.4.1
pathspec 0.12.1
patsy 0.5.6
Pebble 5.0.7
pexpect 4.9.0
pickleshare 0.7.5
pillow 10.3.0
pip 24.0
pkgutil_resolve_name 1.3.10
platformdirs 4.2.0
plotly 5.19.0
plotnine 0.13.5
pluggy 1.4.0
polars 0.20.18
preshed 3.0.9
prometheus_client 0.20.0
prometheus-flask-exporter 0.23.0
prompt-toolkit 3.0.42
protobuf 4.25.3
psutil 5.9.8
ptyprocess 0.7.0
pure-eval 0.2.2
py7zr 0.20.8
pyarrow 15.0.0
pyarrow-hotfix 0.6
pyasn1 0.5.1
pyasn1-modules 0.3.0
pybcj 1.0.2
pycodestyle 2.11.1
pycosat 0.6.6
pycparser 2.21
pycryptodomex 3.20.0
pydantic 2.7.1
pydantic_core 2.18.2
pyflakes 3.2.0
Pygments 2.17.2
PyJWT 2.8.0
pylint 3.1.0
PyNaCl 1.5.0
pynsee 0.1.7
pyOpenSSL 24.0.0
pyparsing 3.1.2
pyppmd 1.1.0
pyproj 3.6.1
pyshp 2.3.1
PySocks 1.7.1
python-dateutil 2.9.0
python-dotenv 1.0.1
python-magic 0.4.27
pytz 2024.1
pyu2f 0.1.5
pywaffle 1.1.0
PyYAML 6.0.1
pyzmq 25.1.2
pyzstd 0.15.10
QtPy 2.4.1
querystring-parser 1.2.4
rasterio 1.3.10
referencing 0.34.0
regex 2023.12.25
requests 2.31.0
requests-cache 1.2.0
requests-oauthlib 2.0.0
rpds-py 0.18.0
rsa 4.9
Rtree 1.2.0
ruamel.yaml 0.18.6
ruamel.yaml.clib 0.2.8
s3fs 2023.12.2
s3transfer 0.10.1
scikit-image 0.23.2
scikit-learn 1.4.1.post1
scipy 1.13.0
seaborn 0.13.2
setuptools 69.2.0
shapely 2.0.3
six 1.16.0
smart-open 6.4.0
smmap 5.0.0
snuggs 1.4.7
sortedcontainers 2.4.0
soupsieve 2.5
spacy 3.7.4
spacy-legacy 3.0.12
spacy-loggers 1.0.5
SQLAlchemy 2.0.29
sqlparse 0.4.4
srsly 2.4.8
stack-data 0.6.2
statsmodels 0.14.1
tabulate 0.9.0
tblib 3.0.0
tenacity 8.2.3
texttable 1.7.0
thinc 8.2.3
threadpoolctl 3.4.0
tifffile 2024.4.24
tomli 2.0.1
tomlkit 0.12.4
toolz 0.12.1
topojson 1.8
tornado 6.4
tqdm 4.66.2
traitlets 5.14.2
truststore 0.8.0
typer 0.9.4
typing_extensions 4.11.0
tzdata 2024.1
Unidecode 1.3.8
url-normalize 1.4.3
urllib3 1.26.18
wasabi 1.1.2
wcwidth 0.2.13
weasel 0.3.4
webcolors 1.13
webdriver-manager 4.0.1
websocket-client 1.7.0
Werkzeug 3.0.2
wheel 0.43.0
widgetsnbextension 4.0.10
wordcloud 1.9.3
wrapt 1.16.0
xgboost 2.0.3
xlrd 2.0.1
xyzservices 2024.4.0
yarl 1.9.4
yellowbrick 1.5
zict 3.0.0
zipp 3.17.0
zstandard 0.22.0

View file history

SHA Date Author Description
c9f9f8a 2024-04-24 15:09:35 Lino Galiana Dark mode and CSS improvements (#494)
d75641d 2024-04-22 18:59:01 Lino Galiana Editorialisation des chapitres de manipulation de données (#491)
005d89b 2023-12-20 17:23:04 Lino Galiana Finalise l’affichage des statistiques Git (#478)
4cd44f3 2023-12-11 17:37:50 Antoine Palazzolo Relecture NLP (#474)
1f23de2 2023-12-01 17:25:36 Lino Galiana Stockage des images sur S3 (#466)
652009d 2023-10-09 13:56:34 Lino Galiana Finalise le cleaning (#430)
a771183 2023-10-09 11:27:45 Antoine Palazzolo Relecture TD2 par Antoine (#418)
154f09e 2023-09-26 14:59:11 Antoine Palazzolo Des typos corrigées par Antoine (#411)
6f20643 2023-09-25 14:33:20 Lino Galiana Correction lien mort cours ENSAE
6dee48d 2023-08-31 11:47:07 linogaliana Démarche scientifique
fb186dd 2023-08-31 08:42:58 linogaliana Ajoute avis CADA
9a4e226 2023-08-28 17:11:52 Lino Galiana Action to check URL still exist (#399)
8082302 2023-08-25 17:48:36 Lino Galiana Mise à jour des scripts de construction des notebooks (#395)
3bdf3b0 2023-08-25 11:23:02 Lino Galiana Simplification de la structure 🤓 (#393)
2dbf853 2023-07-05 11:21:40 Lino Galiana Add nice featured images (#368)
b2d4823 2022-09-21 17:36:29 Lino Galiana Relec KA 21/09 (#273)
bacb5a0 2022-07-04 19:05:20 Lino Galiana Enrichir la partie elastic (#241)
22d4b5a 2022-06-30 12:40:41 Lino Galiana Corrige la typo pour la ref (#245)
5123634 2022-06-30 11:24:49 Lino Galiana Amélioration de la première partie (#244)
12965ba 2022-05-25 15:53:27 Lino Galiana :launch: Bascule vers quarto (#226)
2f7b52d 2021-07-20 17:37:03 Lino Galiana Improve notebooks automatic creation (#120)
aeb3995 2021-07-06 11:11:03 avouacr Relecture et ajouts sur anaconda + jupyter (#116)
Back to top

Footnotes

  1. Le livre de Reinhart et Rogoff, This time is different, s’appuyait sur un Excel constitué à la main. Un doctorant s’est aperçu d’erreurs dans celui-ci et a remarqué que lorsqu’on substituait les chiffres officiels, les résultats n’étaient plus valides.↩︎

  2. On suppose ici que le message erroné est transmis sans volonté de manipulation. La manipulation manifeste est un problème encore plus grave.↩︎

  3. On suppose ici que le message erroné est transmis sans volonté de manipulation. La manipulation manifeste est un problème encore plus grave.↩︎

Citation

BibTeX citation:
@book{galiana2023,
  author = {Galiana, Lino},
  title = {Python Pour La Data Science},
  date = {2023},
  url = {https://pythonds.linogaliana.fr/},
  doi = {10.5281/zenodo.8229676},
  langid = {en}
}
For attribution, please cite this work as:
Galiana, Lino. 2023. Python Pour La Data Science. https://doi.org/10.5281/zenodo.8229676.