You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/manipulation/02_pandas_suite.qmd
+22Lines changed: 22 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -111,6 +111,7 @@ Le chapitre précédent utilisait quasi exclusivement la librairie `Pandas`. Nou
111
111
112
112
Comme expliqué ci-dessous, nous allons utiliser une librairie nommée `pynsee` pour récupérer les données de l'Insee utiles à enrichir notre jeu de données de l'Ademe. Cette librairie n'est pas installée par défaut dans `Python`. Avant de pouvoir l'utiliser,
113
113
il est nécessaire de l'installer, comme la librairie `great_tables` que nous verrons à la fin de ce chapitre:
114
+
:::
114
115
115
116
::: {.content-visible when-profile="en"}
116
117
## Environment
@@ -1377,11 +1378,15 @@ To read this type of file optimally, it is recommended to use the `DuckDB` libra
1377
1378
1378
1379
1379
1380
::: {.content-visible when-profile="fr"}
1381
+
1380
1382
Bien sûr, pour aller plus loin, il faudrait mieux normaliser les données, vérifier que l'information recherchée n'est pas à cheval sur plusieurs colonnes et bien sûr faire de l'inspection visuelle pour détecter les jeux de mots cachés. Mais déjà, en quelques minutes, on a des statistiques partielles sur le phénomène des coiffeurs blagueurs.
1383
+
1381
1384
:::
1382
1385
1383
1386
::: {.content-visible when-profile="en"}
1387
+
1384
1388
Of course, to go further, it would be better to normalize the data more thoroughly, check that the information sought is not spread across multiple columns, and conduct visual inspections to detect hidden puns. But already, in just a few minutes, we have partial statistics on the phenomenon of punny hairdressers.
1389
+
1385
1390
:::
1386
1391
1387
1392
::: {.content-visible when-profile="fr"}
@@ -1399,9 +1404,11 @@ Pour pallier ce problème, a récémment été mis en oeuvre le [code statistiqu
1399
1404
1400
1405
1401
1406
[^flou]: Autrement, on rentre dans le monde des appariements flous ou des appariements probabilistes. Les appariements flous sont des situations où on ne dispose plus d'un identifiant exact pour associer deux bases mais d'une information partiellement bruitée entre deux sources pour faire cette mise en relation. Par exemple, dans une base de données produit on aura `Coca Cola 33CL` et dans une autre `Coca Cola canette` mais sous ces deux noms sont cachés le même produit. Le chapitre d'[ouverture aux enjeux de recherche textuelle avec `ElasticSearch`](/content/modern-ds/elastic.qmd) est consacré à cette problématique. Les appariements probabilistes sont un autre type d'approche. Dans ceux-ci, on associe des observations dans deux bases non pas sur la base d'un identifiant mais sur la distance entre un ensemble de caractéristiques dans les deux bases. Cette technique est très utilisée dans les statistiques médicales ou dans l'évaluation de politiques publiques sur la base du [_propensity score matching_](https://en.wikipedia.org/wiki/Propensity_score_matching).
1407
+
1402
1408
:::
1403
1409
1404
1410
::: {.content-visible when-profile="en"}
1411
+
1405
1412
### The social security number and the issue of individual identifiers' confidentiality
1406
1413
1407
1414
For individuals, there exists a unique identifier that allows linking them across different data sources: the [NIR](https://www.cnil.fr/fr/definition/nir-numero-dinscription-au-repertoire), also known as the INSEE number or social security number.
@@ -1414,14 +1421,17 @@ This identifier is mainly present in management databases related to payroll, so
1414
1421
To address this problem, the [non-significant statistical code (CSNS)](https://www.insee.fr/fr/information/7635825?sommaire=7635842) or hashed NIR, a non-identifying anonymous individual identifier, was recently implemented. The goal of this anonymized identifier is to reduce the dissemination of personal information that, although allowing civil servants and researchers to deterministically link numerous databases, provided analysts with non-essential information about the individuals in question.
1415
1422
1416
1423
[^flou]: Otherwise, we enter the realm of fuzzy matching or probabilistic matching. Fuzzy matching occurs when we no longer have an exact identifier to link two databases but have partially noisy information between two sources to make the connection. For example, in a product database, we might have `Coca Cola 33CL` and in another `Coca Cola canette`, but these names hide the same product. The chapter on [Introduction to Textual Search with ElasticSearch](/content/modern-ds/elastic.qmd) addresses this issue. Probabilistic matching is another approach. In these, observations in two databases are associated not based on an identifier but on the distance between a set of characteristics in both databases. This technique is widely used in medical statistics or in the evaluation of public policies based on [_propensity score matching_](https://en.wikipedia.org/wiki/Propensity_score_matching).
1424
+
1417
1425
:::
1418
1426
1419
1427
::: {.content-visible when-profile="fr"}
1428
+
1420
1429
## Exercices d'application
1421
1430
1422
1431
### Pourquoi a-t-on besoin d'un code commune quand on a déjà son nom ?
1423
1432
1424
1433
Cet exercice va revenir un peu en arrière afin de saisir pourquoi nous avons pris comme hypothèse ci-dessus que le code commune était la clé de jointure.
1434
+
1425
1435
:::
1426
1436
1427
1437
::: {.content-visible when-profile="en"}
@@ -1436,24 +1446,33 @@ This exercise will take a step back to understand why we assumed above that the
1436
1446
{{< include "02_pandas_suite/_exo3_solution.qmd" >}}
1437
1447
1438
1448
::: {.content-visible when-profile="fr"}
1449
+
1439
1450
Ce petit exercice permet donc de se rassurer car les libellés dupliqués
1440
1451
sont en fait des noms de commune identiques mais qui ne sont pas dans le même département.
1441
1452
Il ne s'agit donc pas d'observations dupliquées.
1442
1453
On peut donc se fier aux codes communes, qui eux sont uniques.
1454
+
1443
1455
:::
1444
1456
1445
1457
::: {.content-visible when-profile="en"}
1458
+
1446
1459
This small exercise reassures us as the duplicated labels are actually the same commune names but in different departments. So, these are not duplicated observations. We can thus rely on the commune codes, which are unique.
1460
+
1447
1461
:::
1448
1462
1449
1463
::: {.content-visible when-profile="fr"}
1464
+
1450
1465
### Calculer une empreinte carbone grâce à l'association entre des sources
1466
+
1451
1467
:::
1452
1468
1453
1469
::: {.content-visible when-profile="en"}
1470
+
1454
1471
### Associating different sources to compute carbon footprints
1472
+
1455
1473
:::
1456
1474
1475
+
1457
1476
{{< include "02_pandas_suite/_exo4.qmd" >}}
1458
1477
{{< include "02_pandas_suite/_exo4_solution.qmd" >}}
1459
1478
@@ -1493,6 +1512,7 @@ directement. Nous allons repartir de ce jeu de données:
1493
1512
:::
1494
1513
1495
1514
::: {.content-visible when-profile="en"}
1515
+
1496
1516
# Formatting descriptive statistics tables
1497
1517
1498
1518
A `Pandas` DataFrame is automatically formatted when viewed from a notebook as a minimally styled HTML table. This formatting is convenient for viewing data, a necessary task for data scientists, but it doesn't go much beyond that.
@@ -1540,6 +1560,7 @@ To learn more about constructing tables with `great_tables`, you can replicate t
1540
1560
:::
1541
1561
1542
1562
::: {.content-visible when-profile="fr"}
1563
+
1543
1564
# `Pandas`: vers la pratique et au-delà
1544
1565
1545
1566
## `Pandas` dans une chaine d'opérations
@@ -1552,6 +1573,7 @@ Cette manière de procéder est le coeur de la syntaxe `dplyr` en `R` mais n'est
Les données comportent plusieurs dimensions pouvant faire l'objet d'une analyse statistique. Nous allons commencer par nous focaliser sur le volume de passage à tel ou tel compteur.
5
+
6
+
Puisque nous avons comme objectif de synthétiser l'information présente dans notre jeu de données, nous devons d'abord mettre en oeuvre quelques agrégations _ad hoc_ pour produire un
7
+
graphique lisible.
8
+
9
+
1. Garder les dix bornes à la moyenne la plus élevée. Comme pour obtenir un graphique ordonné du plus grand au plus petit avec les méthodes `plot` de `Pandas`, il faut avoir les données ordonnées du plus petit au plus grand (oui c'est bizarre mais c'est comme ça...), réordonner les données.
10
+
11
+
2. En premier lieu, sans se préoccuper des éléments de style ni de la beauté
12
+
du graphique, créer la structure du _barplot_ (diagramme en batons) de la
13
+
[page d'analyse des données](https://opendata.paris.fr/explore/dataset/comptage-velo-donnees-compteurs/dataviz/?disjunctive.id_compteur&disjunctive.nom_compteur&disjunctive.id&disjunctive.name).
14
+
15
+
3. Pour préparer le travail sur la deuxième figure, ne conserver
16
+
que les 10 compteurs ayant comptabilisés le plus de vélos.
17
+
18
+
4. Comme pour la question 2, créer un _barplot_
19
+
pour reproduire la figure 2 de l'_open data_ parisien
0 commit comments