Pratique de pandas : un exemple complet

Après avoir présenté la logique de Pandas dans le chapitre précédent, ce chapitre vise à illustrer les fonctionalités du package à partir de données d’émissions de gaz à effet de serre de l’Ademe.

Manipulation
Exercice
Author

Lino Galiana

Published

2024-04-12

Les exemples de ce TP sont visualisables sous forme de Jupyter Notebooks:

Dans cette série d’exercices Pandas, nous allons découvrir comment manipuler plusieurs jeux de données avec Python.

Si vous êtes intéressés par R, une version très proche de ce TP est disponible dans ce cours.

Dans ce tutoriel, nous allons utiliser deux sources de données :

La librairie pynsee n’est pas installée par défaut avec Python. Avant de pouvoir l’utiliser, il est nécessaire de l’installer :

!pip install xlrd
!pip install pynsee

Toutes les dépendances indispensables étant installées, il suffit maintenant d’importer les librairies qui seront utilisées pendant ces exercices :

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pynsee
import pynsee.download

Importer les données

Lire des données depuis un chemin local

Cet exercice vise à présenter l’intérêt d’utiliser un chemin relatif plutôt qu’un chemin absolu.

Pour préparer cet exercice, le code suivant permettra de télécharger des données qu’on va écrire en local

TYPECOM COM REG DEP CTCD ARR TNCC NCC NCCENR LIBELLE CAN COMPARENT
0 COM 01001 84.0 01 01D 012 5 ABERGEMENT CLEMENCIAT Abergement-Clémenciat L'Abergement-Clémenciat 0108 NaN
1 COM 01002 84.0 01 01D 011 5 ABERGEMENT DE VAREY Abergement-de-Varey L'Abergement-de-Varey 0101 NaN
['04b_regex_TP.qmd',
 '04a_webscraping_TP.ipynb',
 '03_geopandas_TP.qmd',
 '03_geopandas_TP.ipynb',
 '01_numpy_files',
 '02b_pandas_TP.qmd',
 'index.qmd',
 '04c_API_TP.qmd',
 '01_numpy.ipynb',
 '01_numpy.html',
 '02a_pandas_tutorial.qmd',
 '_06a_exo_supp_webscraping.qmd',
 '04c_API_TP.ipynb',
 '02a_pandas_tutorial.html',
 '04b_regex_TP.ipynb',
 '01_numpy.qmd',
 'index.html',
 '02a_pandas_tutorial.ipynb',
 'knn.png',
 '_play_with_projection.qmd',
 '03_geopandas_tutorial.ipynb',
 'scatter_numpy.png',
 'index.ipynb',
 '04a_webscraping_TP.qmd',
 'cog_2023.csv',
 '07_dask.qmd',
 '02b_pandas_TP.ipynb',
 '02a_pandas_tutorial_files',
 '03_geopandas_tutorial.qmd',
 'featured_pandas_tutorial.png']

Import d’un csv de l’Ademe

Il est plus pratique lorsque le CSV est disponible directement depuis un lien HTTPS de lire directement les données avec Pandas, sans passer par l’écriture d’un fichier en local. Cela permet de limiter les problèmes d’adhérance à un file system.

L’URL d’accès aux données peut être conservé dans une variable ad hoc :

url = "https://koumoul.com/s/data-fair/api/v1/datasets/igt-pouvoir-de-rechauffement-global/convert"

Et utilisé ensuite pour la lecture des données. L’objectif du premier exercice est de se familiariser à l’import et l’affichage de données avec Pandas.

Premières manipulations de données

Le chapitre précédent évoquait quelques manipulations traditionnelles de données. Les principales sont rappelées ici :

Sélectionner des colonnes Renommer des colonnes

Créer de nouvelles colonnes Sélectionner des lignes

Réordonner le DataFrame

Réordonner le DataFrame

La cheatsheet suivante est très pratique puisqu’elle illustre ces différentes fonctions. Il est recommandé de régulièrement la consulter :

Cheasheet Pandas

Cheasheet Pandas

L’objectif du prochain exercice est de se familiariser aux principales manipulations de données sur un sous-ensemble de la table des émissions de gaz carbonique.

A la question 5, quand on ordonne les communes exclusivement à partir de la variable transports_total, on obtient ainsi:

code_insee Commune transports transports_international dep transports_total
31108 77291 LE MESNIL-AMELOT 133834.090767 3.303394e+06 77 3.437228e+06
31099 77282 MAUREGARD 133699.072712 3.303394e+06 77 3.437093e+06
31111 77294 MITRY-MORY 89815.529858 2.202275e+06 77 2.292090e+06

A la question 6, on obtient ce classement :

code_insee Commune transports transports_international dep transports_total
4438 13096 SAINTES-MARIES-DE-LA-MER 271182.758578 0.000000 13 271182.758578
4397 13054 MARIGNANE 245375.418650 527360.799265 13 772736.217915
11684 31069 BLAGNAC 210157.688544 403717.366279 31 613875.054823

Import des données de l’Insee

En ce qui concerne nos informations communales, on va utiliser l’une des sources de l’Insee les plus utilisées : les données Filosofi. Afin de faciliter la récupération de celles-ci, nous allons utiliser le package communautaire pynsee :

On va utiliser les données Filosofi (données de revenus) au niveau communal de 2016. Ce n’est pas la même année que les données d’émission de CO2, ce n’est donc pas parfaitement rigoureux, mais cela permettra tout de même d’illustrer les principales fonctionnalités de Pandas

Le point d’entrée principal de la fonction pynsee est la fonction download_file.

Le code pour télécharger les données est le suivant :

from pynsee.download import download_file

filosofi = download_file("FILOSOFI_COM_2016")

Le DataFrame en question a l’aspect suivant :

CODGEO LIBGEO NBMENFISC16 NBPERSMENFISC16 MED16 PIMP16 TP6016 TP60AGE116 TP60AGE216 TP60AGE316 ... PPEN16 PPAT16 PPSOC16 PPFAM16 PPMINI16 PPLOGT16 PIMPOT16 D116 D916 RD16
807 02432 Limé 77 180.5 19918 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9850 27610 Saint-Victor-sur-Avre NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
25236 64366 Mascaraàs-Haron 52 111 19699.33333333333 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15543 41184 Prunay-Cassereau 252 614.5 21800.47619047619 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
33270 87129 Royères 371 907 21942.38095238095 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

5 rows × 29 columns

Pandas a géré automatiquement les types de variables. Il le fait relativement bien, mais une vérification est toujours utile pour les variables qui ont un statut spécifique.

Pour les variables qui ne sont pas en type float alors qu’elles devraient l’être, on modifie leur type.

filosofi.loc[:, filosofi.columns[2:]] = filosofi.loc[:, filosofi.columns[2:]].apply(
    pd.to_numeric, errors="coerce"
)

Un simple coup d’oeil sur les données donne une idée assez précise de la manière dont les données sont organisées. On remarque que certaines variables de filosofi semblent avoir beaucoup de valeurs manquantes (secret statistique) alors que d’autres semblent complètes. Si on désire exploiter filosofi, il faut faire attention à la variable choisie.

Notre objectif à terme va être de relier l’information contenue entre ces deux jeux de données. En effet, sinon, nous risquons d’être frustré : nous allons vouloir en savoir plus sur les émissions de gaz carbonique mais seront très limités dans les possibilités d’analyse sans ajout d’une information annexe issue de filosofi.

Les indices

Les indices sont des éléments spéciaux d’un DataFrame puisqu’ils permettent d’identifier certaines observations. Il est tout à fait possible d’utiliser plusieurs indices, par exemple si on a des niveaux imbriqués.

Pour le moment, on va prendre comme acquis que les codes communes (dits aussi codes Insee) permettent d’identifier de manière unique une commune. Un exercice ultérieur permettra de s’en assurer.

Pandas propose un système d’indice qui permet d’ordonner les variables mais également de gagner en efficacité sur certains traitements, comme des recherches d’observations. Le prochain exercice illustre cette fonctionnalité.

En pratique, l’utilisation des indices en Pandas peut être piégeuse, notamment lorsqu’on associe des sources de données.
Il est plutôt recommandé de ne pas les utiliser ou de les utiliser avec parcimonie, cela pourra éviter de mauvaises surprises.

Restructurer les données

Quand on a plusieurs informations pour un même individu ou groupe, on retrouve généralement deux types de structure de données :

  • format wide : les données comportent des observations répétées, pour un même individu (ou groupe), dans des colonnes différentes
  • format long : les données comportent des observations répétées, pour un même individu, dans des lignes différentes avec une colonne permettant de distinguer les niveaux d’observations

Un exemple de la distinction entre les deux peut être pris à l’ouvrage de référence d’Hadley Wickham, R for Data Science:

Données long et wide

Données long et wide

L’aide mémoire suivante aidera à se rappeler les fonctions à appliquer si besoin :

Le fait de passer d’un format wide au format long (ou vice-versa) peut être extrêmement pratique car certaines fonctions sont plus adéquates sur une forme de données ou sur l’autre.

En règle générale, avec Python comme avec R, les formats long sont souvent préférables. Les formats wide sont plutôt pensés pour des tableurs comme Excel ou on dispose d’un nombre réduit de lignes à partir duquel faire des tableaux croisés dynamiques.

Le prochain exercice propose donc une telle restructuration de données. Les données de l’ADEME, et celles de l’Insee également, sont au format wide. Le prochain exercice illustre l’intérêt de faire la conversion long \(\to\) wide avant de faire un graphique.

Combiner les données

Travail préliminaire

Jusqu’à présent lorsque nous avons produit des statistiques descriptives, celles-ci étaient univariées, c’est-à-dire que nous produisions de l’information sur une variable mais nous ne la mettions pas en lien avec une autre. Pourtant, on est rapidement amené à désirer expliquer certaines statistiques agrégées à partir de caractéristiques issues d’une autre source de données. Cela implique donc d’associer des jeux de données, autrement dit de mettre en lien deux jeux de données présentant le même niveau d’information.

On appelle ceci faire un merge ou un join. De manière illustrée, ceci revient à effectuer ce type d’opération :

Avant de faire ceci, il est néanmoins nécessaire de s’assurer que les variables communes entre les bases de données présentent le bon niveau d’information.

Ce petit exercice permet de se rassurer car les libellés dupliqués sont en fait des noms de commune identiques mais qui ne sont pas dans le même département. Il ne s’agit donc pas d’observations dupliquées. On peut donc se fier aux codes communes, qui eux sont uniques.

Associer des données

Une information que l’on cherche à obtenir s’obtient de moins en moins à partir d’une unique base de données. Il devient commun de devoir combiner des données issues de sources différentes.

Nous allons ici nous focaliser sur le cas le plus favorable qui est la situation où une information permet d’apparier de manière exacte deux bases de données (autrement nous serions dans une situation, beaucoup plus complexe, d’appariement flou). La situation typique est l’appariement entre deux sources de données selon un identifiant individuel ou un identifiant de code commune, ce qui est notre cas.

Il est recommandé de lire ce guide assez complet sur la question des jointures avec R qui donne des recommandations également utiles en Python.

Dans le langage courant du statisticien, on utilise de manière indifférente les termes merge ou join. Le deuxième terme provient de la syntaxe SQL. Quand on fait du Pandas, on utilise plutôt la commande merge.

A l’issue de la question 5, le graphique des corrélations est le suivant :

Exercices bonus

Les plus rapides d’entre vous sont invités à aller un peu plus loin en s’entraînant avec des exercices bonus qui proviennent du site de Xavier Dupré. 3 notebooks en lien avec numpy et pandas vous y sont proposés :

  1. Calcul Matriciel, Optimisation : énoncé / corrigé
  2. DataFrame et Graphes : énoncé / corrigé
  3. Pandas et itérateurs : énoncé / corrigé

Informations additionnelles

environment files have been tested on.

Latest built version: 2024-04-12

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
bcrypt 4.1.2
beautifulsoup4 4.12.3
black 24.3.0
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
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
greenlet 3.0.3
gunicorn 21.2.0
hvac 2.1.0
idna 3.6
imageio 2.34.0
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.3.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
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.1
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.4
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.0
pydantic_core 2.18.1
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.9
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.1
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.2.12
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
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
c03aa61 2024-01-16 17:33:18 Lino Galiana Exercice sur les chemins relatifs (#483)
005d89b 2023-12-20 17:23:04 Lino Galiana Finalise l’affichage des statistiques Git (#478)
3fba612 2023-12-17 18:16:42 Lino Galiana Remove some badges from python (#476)
1684220 2023-12-02 12:06:40 Antoine Palazzolo Première partie de relecture de fin du cours (#467)
1f23de2 2023-12-01 17:25:36 Lino Galiana Stockage des images sur S3 (#466)
a06a268 2023-11-23 18:23:28 Antoine Palazzolo 2ème relectures chapitres ML (#457)
889a71b 2023-11-10 11:40:51 Antoine Palazzolo Modification TP 3 (#443)
8071bbb 2023-10-23 17:43:37 tomseimandi Make minor changes to 02b, 03, 04a (#440)
df01f01 2023-10-10 15:55:04 Lino Galiana Menus automatisés (#432)
7221e7b 2023-10-10 14:00:44 Thomas Faria Relecture Thomas TD Pandas (#431)
98bb886 2023-10-09 11:50:03 Lino Galiana typo
a771183 2023-10-09 11:27:45 Antoine Palazzolo Relecture TD2 par Antoine (#418)
ac80862 2023-10-07 21:05:25 Lino Galiana Relecture antuki (#427)
5ab34aa 2023-10-04 14:54:20 Kim A Relecture Kim pandas & git (#416)
7e03cea 2023-10-04 14:07:17 Lino Galiana Clean pandas tutorial and exercises (#417)
154f09e 2023-09-26 14:59:11 Antoine Palazzolo Des typos corrigées par Antoine (#411)
9a4e226 2023-08-28 17:11:52 Lino Galiana Action to check URL still exist (#399)
9977c5d 2023-08-28 10:43:36 Lino Galiana Fix bug path pandas (#397)
a8f90c2 2023-08-28 09:26:12 Lino Galiana Update featured paths (#396)
3bdf3b0 2023-08-25 11:23:02 Lino Galiana Simplification de la structure 🤓 (#393)
5d4874a 2023-08-11 15:09:33 Lino Galiana Pimp les introductions des trois premières parties (#387)
130ed71 2023-07-18 19:37:11 Lino Galiana Restructure les titres (#374)
ef28fef 2023-07-07 08:14:42 Lino Galiana Listing pour la première partie (#369)
f21a24d 2023-07-02 10:58:15 Lino Galiana Pipeline Quarto & Pages 🚀 (#365)
3c880d5 2022-12-27 17:34:59 Lino Galiana Chapitre regex + Change les boites dans plusieurs chapitres (#339)
89d0798 2022-11-02 10:19:58 Lino Galiana Ajoute icone aux autres TP (#317)
a3eadd4 2022-11-01 18:51:14 Romain Avouac Modèle de notebooks de correction exécutables (#304)
af763cc 2022-10-12 10:17:56 Lino Galiana Reprise exercice geopandas (#294)
1ef97df 2022-10-11 12:14:03 Lino Galiana Relecture chapitre geopandas (#289)
e2b53ac 2022-09-28 17:09:31 Lino Galiana Retouche les chapitres pandas (#287)
eb8f922 2022-09-22 17:40:43 Lino Galiana Corrige bug TP pandas (#276)
f10815b 2022-08-25 16:00:03 Lino Galiana Notebooks should now look more beautiful (#260)
494a85a 2022-08-05 14:49:56 Lino Galiana Images featured ✨ (#252)
d201e3c 2022-08-03 15:50:34 Lino Galiana Pimp la homepage ✨ (#249)
12965ba 2022-05-25 15:53:27 Lino Galiana :launch: Bascule vers quarto (#226)
9c71d6e 2022-03-08 10:34:26 Lino Galiana Plus d’éléments sur S3 (#218)
6777f03 2021-10-29 09:38:09 Lino Galiana Notebooks corrections (#171)
2a8809f 2021-10-27 12:05:34 Lino Galiana Simplification des hooks pour gagner en flexibilité et clarté (#166)
b138cf3 2021-10-21 18:05:59 Lino Galiana Mise à jour TP webscraping et API (#164)
4870662 2021-10-05 08:29:33 Romain Avouac fix and simplify pyinsee install (#157)
0677932 2021-10-03 15:32:51 Lino Galiana Ajoute un code pour download pynsee (#156)
2fa78c9 2021-09-27 11:24:19 Lino Galiana Relecture de la partie numpy/pandas (#152)
85ba119 2021-09-16 11:27:56 Lino Galiana Relectures des TP KA avant 1er cours (#142)
2e4d586 2021-09-02 12:03:39 Lino Galiana Simplify badges generation (#130)
bf5ebc5 2021-09-01 14:41:17 Lino Galiana Fix problem import pynsee (#128)
4a317e3 2021-08-31 12:38:17 Lino Galiana pynsee pour importer des données Insee 🚀 (#127)
4cdb759 2021-05-12 10:37:23 Lino Galiana :sparkles: :star2: Nouveau thème hugo :snake: :fire: (#105)
7f9f97b 2021-04-30 21:44:04 Lino Galiana 🐳 + 🐍 New workflow (docker 🐳) and new dataset for modelization (2020 🇺🇸 elections) (#99)
6d010fa 2020-09-29 18:45:34 Lino Galiana Simplifie l’arborescence du site, partie 1 (#57)
66f9f87 2020-09-24 19:23:04 Lino Galiana Introduction des figures générées par python dans le site (#52)
4677769 2020-09-15 18:19:24 Lino Galiana Nettoyage des coquilles pour premiers TP (#37)
5c1e76d 2020-09-09 11:25:38 Lino Galiana Ajout des éléments webscraping, regex, API (#21)
d48e68f 2020-09-08 18:35:07 Lino Galiana Continuer la partie pandas (#13)
Back to top

Footnotes

  1. Par manque d’imagination, on est souvent tenté d’appeler notre dataframe principal df ou data. C’est souvent une mauvaise idée puisque ce nom n’est pas très informatif quand on relit le code quelques semaines plus tard. L’autodocumentation, approche qui consiste à avoir un code qui se comprend de lui-même, est une bonne pratique et il est donc recommandé de donner un nom simple mais efficace pour connaître la nature du dataset en question.↩︎

  2. Idéalement, il serait nécessaire de s’assurer que cette jointure n’introduit pas de biais. En effet, comme nos années de référence ne sont pas forcément identiques, il peut y avoir un mismatch entre nos deux sources. Le TP étant déjà long, nous n’allons pas dans cette voie. Les lecteurs intéressés pourront effectuer une telle analyse en exercice supplémentaire.↩︎

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.