cassionAnalyse de données

Exercice · Intermédiaire

Les trois écoles du bas de tableau

Un classement envoie une équipe d'appui aux trois écoles les moins assidues. Les trois y figurent à cause d'une décision de jointure, et l'école qui a réellement la pire assiduité arrive quatrième.

R45 min

La conseillère pédagogique dispose d’une visite d’appui et demande un classement. Le script ci-dessous en produit un. Trois écoles occupent le bas de tableau, très détachées des autres, et une équipe est sur le point d’être envoyée aux trois.

Aucune des trois n’y a sa place.

Les fichiers

school-roster-2024.v1.csv — 1 202 lignes couvrant 1 200 élèves de 24 écoles. school-attendance-2024.v1.csv — 70 245 marques de présence journalière sur 60 jours de classe. Les deux sont synthétiques.

Le script

library(dplyr)
library(readr)
library(tidyr)

roster     <- read_csv("school-roster-2024.v1.csv")
attendance <- read_csv("school-attendance-2024.v1.csv")

ranking <- roster |>
  left_join(attendance, by = "student_id") |>                      # 1
  complete(student_id, attendance_date) |>                         # 2
  mutate(present = if_else(present == "true", TRUE, FALSE)) |>     # 3
  mutate(present = replace_na(present, FALSE)) |>                  # 4
  left_join(select(roster, student_id, school_id),
            by = "student_id") |>                                  # 5
  summarise(attendance_rate = mean(present), .by = school_id) |>
  arrange(attendance_rate)

head(ranking, 5)

La tâche

Première partie — le grand livre. Pour chacune des cinq étapes numérotées, notez le nombre de lignes entrantes, le nombre de lignes sortantes, et une phrase sur la raison du changement. Certaines étapes ne changent rien ; ces lignes figurent quand même au grand livre.

Deuxième partie — le classement. Produisez le classement une seconde fois, correctement, et mettez les deux côte à côte. Dites quelles écoles bougent et de combien de places.

Troisième partie — la recommandation. Nommez l’école à laquelle la visite d’appui devrait aller, et dites en une phrase chacune ce qu’il faut faire des trois écoles retenues par le script.

Ce que contiennent réellement les données

Vous pouvez utiliser ces faits, mais vous devez montrer le code qui trouve chacun d’eux.

  • Deux écoles n’ont enregistré aucune présence pendant les quinze jours de classe du 11 au 29 mars.
  • Une école a enregistré la présence avec Y et N pour une part substantielle de ses lignes.
  • La liste compte 1 202 lignes et 1 200 élèves.

Trois défauts, trois écoles, et le script convertit les trois en faible assiduité.

Deux repères

Calculée sur les marques réellement existantes, l’école la moins assidue de ce district est à environ 78,5 %, et celle classée avant-dernière à environ 79,0 %.

Le classement du script place trois écoles sous 66 %. Si votre classement corrigé comporte encore quoi que ce soit sous 75 %, l’une des cinq étapes fait toujours ce qu’elle faisait.

Les questions à traiter en prose

Trois phrases chacune.

1. L’étape 3 convertit present en logique avec if_else. Dites exactement ce qu’elle fait d’une valeur Y, ce que l’étape 4 fait ensuite de cette ligne, et pourquoi les deux étapes réunies sont pires que chacune séparément.

2. L’étape 2 complète la grille sur tous les élèves et toutes les dates. Expliquez pourquoi c’est le bon réflexe et la mauvaise mise en œuvre ici, et à partir de quoi la grille aurait dû être bâtie.

3. Les étapes 1 et 5 joignent toutes deux la liste. Dites ce que la seconde fait que la première n’a pas fait, ce qu’il advient des colonnes, et comment un lecteur du résultat pourrait — ou ne pourrait pas — s’en apercevoir.

Ce qu’il faut rendre

Un script R produisant le grand livre de cinq lignes et les deux classements sous forme de tableaux, affichés, plus une recommandation de trois phrases en commentaire au pied du fichier.

Comment savoir que c’est fini

Le nombre de lignes final de votre grand livre égale le nombre de journées-élèves pendant lesquelles les écoles étaient réellement ouvertes, et vous savez dire ce qu’est ce nombre et comment vous l’avez obtenu. Chaque jointure de votre script corrigé porte un argument relationship =.