Du code et des liens (avec des expressions régulières)

Dans la série “on n’a pas le temps de bloguer, mais d’autres s’en chargent à notre place…” Quelques actualités quand même.

1. Un député américain a demandé la suppression des crédits de recherche pour les sciences sociales.

Bizarre, pour un pays qui devrait avoir besoin de quelques recherches sur le wahhabisme. Ah, il a spécifiquement demandé la suppression de la science politique. Pas de chance, c’est là où se publient les recherches sur les trajectoires des terroristes. Ah, il a aussi une meilleur poste de dépense à conseiller : la recherche médicale (les blouses blanches qui sauvent des vies). Sur les “death panels” ?

Merci au lecteur qui nous a signalé le truc, récemment relaté en détail sur The Monkey Cage avec les manoeuvres précédentes. Je ne mets pas de lien précis, car pour être honnête, c’est vu et revu, et stupide. L’argument sur le wahhabisme est par ailleurs emprunté à un rapport public sur les sciences humaines et sociales, signé par Maurice Godelier. Je l’aime bien, cet argument.

2. Il faut lire Christophe Bouillaud sur les élections en Italie (quel bordel), et le film-documentaire TPB AFK (quelle aventure) sur le procès du site Internet The Pirate Bay.

3. Un excellent exemple de scraping avec expressions régulières sur le blog Quanti, par les auteurs du blog Data Sciences Sociales ; les deux sur la même plateforme que le ‘Bistro.

(La suite est ultra-nerd mais peut-être de salut public pour ceux qui enseignent avec R.)

Ah, l’utilité des expressions régulières… Si je devais apprendre deux choses à toute personne qui utilise un ordinateur, ce serait les raccourcis clavier et les “regex”.

Je m’en sers par exemple dans ce fichier pour compiler tout un cours en une seule frappe clavier qui sélectionne tous les fichiers .Rmd, les compile sous knitr, puis les copie au bon endroit. En pratique, ça donne ça :

html <- dir(pattern="(index|[0-9]{2,}_\\w+).html|style.css")
code <- dir("code", pattern="([0-9]{2,}_\\w+).R$")

La première ligne signifie “sélectionner le fichier index.html, tous les fichiers .html commençant par deux chiffres ou plus suivis d’un underscore et d’un mot, et le fichier style.css”. La seconde ligne signifie presque la même chose mais appliquée uniquement aux scripts .R. Une commande ultérieure les copie dans un dossier, qui est ensuite placé sur GitHub et publié par GitHub Pages.

Un autre exemple dans ce document .Rprofile, qui contient quelques fonctions pour enseigner le même cours. L’objectif était de permettre à une vingtaine d’étudiants débutants de télécharger tous les fichiers du jour en une commande, et de leur épargner les installations et chargements de packages que demande fréquemment R en s’en chargeant à leur place.

La fonction ida.prep() fait ce travail : (1) elle télécharge tous les fichiers pour une séance du cours, puis (2) elle fait scanner les fichiers par la fonction ida.scan() pour voir quels packages y sont chargés, et enfin (3) elle fait charger les packages par la fonction ida.load(), en les téléchargeant au préalable si nécessaire, le plus silencieusement possible (c’est-à-dire pas assez).

Voici les lignes qui détectent toutes les utilisations des commandes library() et require() :

grepl("(library|require)\\(([a-zA-Z0-9]*)\\)", text)
gsub(".*(library|require)\\(([a-zA-Z0-9]*)\\).*", "\\2", text)

Les lignes proviennent de la fonction ida.scan(). La première ligne “attrape” toutes les lignes de code contenant les termes library ou require suivis de quelque chose entre parenthèses. La seconde ligne extrait le contenu des parenthèses. J’envoie ensuite ce vecteur de noms de packages à la fonction ida.load().

Allez, un dernier exemple bien tordu pour la route :

grepl(paste0("^(", paste0(x, 0:3, collapse = "|"), ")_"), prep)

Cette ligne requiert un argument x, qui est le numéro de la séance. Chaque séance est divisée en quatre segments numérotés de 0 à 3. Cette ligne colle le numéro de séance à “0”, puis à “1”, puis à “2”, puis à “3”, puis colle tout ça ensemble avec des barres “|”, qui sont l’opérateur logique “ou” en regex. Tout cela doit être situé en début de ligne (“^”) et suivi d’un underscore.

Cette dernière expression sert à extraire les pages de cours pour une séance donnée, à partir de la page d’index du cours. Le reste du code montre comment exécuter tout le boulot décrit ci-dessus en moins de 100 lignes, qui permettent de gagner beaucoup de temps en classe en réduisant tout le travail de (télé)chargement à une commande, de type ida.prep(n).

4. Plus rapidement, sur le même sujet, il y a de chouettes projets de packages pour R autour de moi, et comme pour les “blogs SHS” il fut un temps, j’aimerais aider la communauté à se former.

Si vous programmez un peu sur R et voulez aider au développement de fonctions pour les analyses de données pour les sciences sociales (et notamment pour les analyses de données d’enquête, comme le permettent par exemple les packages survey et memisc), faîtes signe au Polit’bistro sur Twitter, ou dans les commentaires si vous avez comme moi du mal à tout mettre en 128 caractères.

5. Je n’ai plus le temps de bloguer sur tous les chouettes trucs qu’on peut découvrir sur les blogs de Baptiste Coulmont et Jérôme Cukier, mais vous avez les adresses.

6. Est-ce qu’on peut vraiment tolérer, au sein de l’Union européenne, un territoire qui se dispense d’élection au suffrage universel ?

Je me souviens avoir lu quelque part que le Vatican ne pratiquait pas non plus la transférabilité des peines, ce qui fait qu’un meurtrier ou un violeur au Vatican n’a pas de casier judiciaire à l’extérieur (il est simplement excommunié, en application du droit canonique). À vérifier, mais un juriste avait monté quelque chose d’assez conséquent sur le sujet ; je n’arrive plus à mettre la main dessus.

C’est à présent l’heure d’aller vraiment au bistro, histoire de savoir qui a gagné ce soir.


4 réflexions au sujet de « Du code et des liens (avec des expressions régulières) »

    • Merci pour le lien, j’avais négligé WikiBooks dans ma propre revue de littérature pour le cours (qui est en développement, mais les premières sessions seront très bientôt finalisées !).

  1. Comme tu le sais, I’m in pour les packages d’analyse de données !

    Par ailleurs, le Saint-Siège n’est pas membre de l’UE…

Les commentaires sont fermés.