cassionAnalyse de données

Atelier · Débutant

Trois départements, six orthographes

Une enquête EAH où une équipe d'enquêteurs a écrit un nom de département de quatre façons, fragmentant le département le moins bien desservi. Normalisez avec forcats, placez chaque ménage sur les échelles du JMP, puis enveloppez le tout dans une fonction qui tournera sur la prochaine vague.

RVotre propre machine90 min

Groupez cette enquête par département et vous en obtenez six. Il y en a trois. Une équipe d’enquêteurs a écrit Nord-Ouest de quatre manières différentes et, comme les variantes se trient séparément, le département où l’accès à l’eau est le plus mauvais se retrouve découpé en morceaux assez petits pour qu’aucun n’atteigne le haut du tableau.

Personne ne vous préviendra. Le tableau aura l’air correct.

Cet atelier s’exécute localement dans RStudio plutôt que dans un notebook hébergé. Colab sait exécuter R, mais l’environnement doit être basculé à la main — et la leçon 1 a été consacrée à un projet qui se rouvre un an plus tard, ce qu’une session hébergée n’apprend pas.

Le fichier

wash-household-survey-2024.v1.csv — 2 403 entretiens de ménage répartis sur trois départements et dix-huit communautés, portant sur la source d’eau, le temps de collecte, la quantité, l’analyse au point de collecte, l’assainissement et l’hygiène. Synthétique.

À installer d’abord

Un projet RStudio avec renv initialisé, comme le décrit la leçon 1, et les données dans leur propre dossier. Pas de setwd(), pas de chemin absolu. Vous lancerez ce script deux fois — maintenant et à la fin, depuis une session propre — et c’est la seconde exécution qui fait la preuve.

Le travail

Placer chaque ménage sur les trois échelles de service du JMP — eau de boisson, assainissement, hygiène — et présenter la couverture par département.

Cinq obstacles.

Les noms de départements. Normalisez avant de grouper, avec fct_collapse() ou un recodage, et non par une chaîne de ifelse(). Vérifiez ensuite : fct_count() doit montrer trois modalités et aucun NA. Si une cinquième orthographe apparaît à la prochaine vague, votre code doit échouer de façon visible plutôt que d’ajouter silencieusement un département.

L’échelle n’est pas la source. Une source améliorée à plus de 30 minutes aller-retour relève du service limité, pas du service élémentaire. Environ un quart de ces ménages se retrouve en service limité pour ce seul motif, et une classification fondée sur water_source seule les manque tous. Utilisez case_when(), et placez le test des 30 minutes avant celui de la source pour que l’ordre soit explicite.

Le partage non plus n’est pas élémentaire. Un ouvrage d’assainissement amélioré partagé entre ménages relève du service limité. La colonne est shared_sanitation ; l’oublier gonfle l’assainissement élémentaire.

Deux dénominateurs, pas un. La qualité de l’eau n’a été analysée que sur un tiers environ des ménages. Les indicateurs d’accès portent sur l’échantillon complet ; les indicateurs de qualité sur le sous-échantillon analysé. Présentez chacun sur son propre dénominateur et dites lequel dans le nom de la colonne — c’est l’habitude sur laquelle le cours revient sans cesse.

Des unités qui mentent. Onze enregistrements portent le temps de collecte en heures et non en minutes, et quatorze portent les litres pour le ménage entier et non par personne. Les deux paraissent plausibles isolément. Repérez-les à l’aide de household_size et de la distribution, décidez du traitement, et consignez la décision.

Ce qu’il faut rendre

Un script R, exécuté depuis une session propre, produisant :

  • un tableau de couverture par département et par échelle, avec district en facteur ordonné du plus mauvais au meilleur plutôt que par ordre alphabétique
  • la part des ménages sous le minimum Sphère de 15 litres par personne et par jour
  • le tableau de qualité de l’eau, sur son propre dénominateur, avec la part analysée indiquée
  • un journal de nettoyage : chaque ligne écartée ou corrigée, et pourquoi

Enveloppez ensuite le nettoyage dans une fonction unique prenant le chemin du fichier et renvoyant le tibble nettoyé, pour que la prochaine vague tienne en un appel.

Vérifiez vos chiffres

Les notes du jeu de données indiquent ce que trouve une analyse correcte :

Attendu
Sous le minimum Sphère de 15 L/personne/jour environ 13 %
Aller-retour de plus de 30 minutes environ 39 %
Défécation à l’air libre environ 13 %
Service d’hygiène élémentaire environ 34 %

Si vous obtenez six départements, la normalisation n’a pas été appliquée avant le regroupement. Si l’assainissement élémentaire paraît élevé, c’est que shared_sanitation n’a pas été pris en compte.

Les questions à traiter en prose

Trois phrases chacune.

1. La normalisation des noms de départements déplace le classement de l’un d’eux. Lequel, dans quel sens, et qu’aurait-on décidé autrement si le tableau était parti sans normalisation ?

2. Environ 530 ménages déclarent traiter leur eau sans qu’aucune mesure de chlore soit enregistrée. Les écarter est tentant et faux. Dites ce que ces ménages ont en commun et ce que leur retrait ferait au chiffre de traitement de l’eau.

3. Vous avez présenté la qualité de l’eau sur un dénominateur plus petit que l’accès. Un relecteur demande pourquoi les deux taux de couverture ne se comparent pas directement. Répondez-lui.

Comment savoir que c’est terminé

Un renv::restore() sur une autre machine, un seul source(), et les mêmes tableaux. Votre fonction de nettoyage doit tourner sans modification si la prochaine vague ajoute un quatrième département — et doit vous le signaler, au lieu de produire silencieusement une quatrième ligne.

Ce que cet atelier n’est pas

Ce n’est pas la méthodologie du JMP. Les définitions des échelles vous sont données ici ; la manière dont elles ont été établies et ce qu’elles laissent de côté relève du contenu EAH lui-même. Cet atelier porte sur le R : des facteurs qui gardent leur ordre, un case_when() qui se lit dans l’ordre où il s’évalue, et un nettoyage qui survit à son exécution par quelqu’un d’autre.