Mouais, le titre de ce billet rentre définitivement dans le genre « vanne pourrie ».
Avec la saison des examens pour les étudiants, vient inexorablement la période des corrections pour le professeur. Jusqu'à présent, je pratiquais la « correction par calculatrice ». C'est-à-dire qu'après avoir corrigé les copies, je prend ma fidèle calculatrice, un examen de la pile, et je fais la somme des points obtenus pour les différentes questions, je divise ensuite le total obtenu par le diviseur de manière à avoir ma cote sur 20.
Cette méthode est probablement pratiquée par bon nombre de prof, mais elle ne me satisfaisait pas vraiment. En effet, si le total des points obtenus par mes étudiants est intéressant, j'aimerais également avoir les résultats par question1, voire même établir des corrélations entre certaines variables.
Une solution choisie par beaucoup de professeurs de nos jours est de s'appuyer sur un tableur comme Excel ou OpenOffice.org Calc. On encode ses données, on construit ses formules et, hop, nous avons les résultats. Le seul problème, de mon point de vue (et oui, je chipote), c'est que l'on doit reconstruire systématiquement son tableur :
- avec les données, et c'est difficile de faire autrement !
- avec les formules, là par contre, on pourrait abstraire
Et pour abstraire les formules, pourquoi ne pas écrire un script ! Bon, je pourrais le faire avec Perl, ou n'importe quel autre langage de scripts (Python, Ruby, etc), mais puisque mon but est de faire des statistiques sur les données, autant utiliser un langage de script spécialisé dans le traitement des données. J'ai nommé R. Il y a pas mal de bouquins qui sont sortis sur l'analyse de données, et sur R ces derniers temps. J'ai donc eu l'occasion de lire quelques introductions sur ce langage, et donc sans être spécialiste, j'ai pu écrire le script suivant
Ce code est relativement trivial et n'est probablement pas idiomatique pour les programmeurs chevronnés. Mais il fonctionne, et je ne demande qu'à m'améliorer2.
La première ligne, #!/usr/bin/env Rscript est le shebang classique
pour le script. Dans le cas de R, un script existe de manière à passer
les bons arguments à l'interpréteur R.
Ce script reçoit des arguments, et je dois donc les récupérer. Je suis
resté dans une gestion basique, et donc j'ai utilisé la fonction
commandArgs(TRUE) qui retourne une liste des arguments. L'ordre de
ces arguments est arbitraire. Dans mon cas :
- le premier argument doit être le nom du fichier CSV ;
- le second argument doit être le total de l'examen.
La première opération est donc de calculer le diviseur nécessaire pour obtenir la cote finale.
La deuxième opération consiste à « charger » les données.
Et ensuite, je me construit une seconde structure de données qui contiendra les résultats de l'opération, et je boucle pour traiter les données.
Ensuite, j'affiche la moyenne pour le cours, ainsi que la structure de données.
Et le boulot est fait !
Côté amélioration, voici ce qui m'a déjà traversé la tête :
- gestion des spécificités des fichiers CSV (gestion de différents séparateurs, des symboles pour encadrer les données, etc) ;
- gestion des colonnes « examens » et de colonnes « travaux pratiques » ;
- produire un résultat final en tenant compte du fait que l'examen compte pour 60% de la cote finale, alors que les travaux compte pour 40% ;
- utiliser getopt pour gérer les arguments du script ;
- créer un fichier CSV contenant les données calculées plutôt que de simplement les afficher.



