Mon projet On the Shoulders of Cloud Giants qui tente de décrire les pratiques de citations dans les publications de jeux de rôle sur table dort un peu en ce moment. Je suis en train de tester une nouvelle technique qui consiste à créer des index automatiques de citations mais ça prend du temps.
En attendant, j’ai expérimenté des visualisations de données avec Observable, la plateforme qui permet d’intégrer des données avec des bibliothèques de visualisation JavaScript.
Le code interroge Wikidata et rapatrie les données de manière structuré sous la forme (principalement) de séries de paires entre un jeux de rôle qui cite et un jeux de rôle qui est cité.
Les données existent dans Wikidata grâce à la propriété P2860 (cites work).
Le code se trouve en annexe (tout en bas de la page Observable) dans la variable query=
D’autres données sont rapatriées au passage : date de publication, “mouvement” auquel appartient le jeu de rôle (The Forge, OSR, etc.), maison d’édition et mécaniques de jeu.
Ces données sous la forme d’un tableau sont codées au format JSON. C’est important car comme nous allons faire des visualisations JavaScript, il faut structurer les données dans ce format pour qu’elles soient absorbées correctement par les bibliothèques de visualisation JavaScript.
Ensuite, ce tableau JSON est transformé dans une hiérarchie JSON, c’est une organisation de l’information spécialement conçue pour les visualisations de réseau / de relation.
En gros, la structure de cette hiérarchie JSON se découpe en deux parties : une partie décrivant chaque jeu indépendamment (partie nodes) et une partie listant chaque relation (partie edges).
La transformation a été effectuée par une fonction nommée table2hierarchy
La variable contenant ce fichier se trouve dans data_citingCited
À partir de là, l’essentiel est fait car les bibliothèques JavaScript font tout le reste du travail. Il faut juste les modifier un petit peu chaque fois pour avoir l’effet désiré (comme le fait de filtrer les données ou de les colorer). Plusieurs visualisations sont ainsi faites :
Mon collègue Philippe m’a expliqué comment fonctionnait la plateforme ObservableHQ qui a été conçue pour faire de jolies visualisations interactives avec JavaScript. J’ai été très enchanté du résultat et de la facilité d’utilisation. J’y ai donc transposé une partie du code R Studio discuté dans le billet précédent.
N’importe qui peut cloner (fork) le code avec un compte personnel créé gratuitement. Notez cependant qu’avec un compte gratuit, le code et les données sont accessibles à la vue de tous.
Je discuterai dans des prochains billets de deux autres projets qui dormaient en format R Studio et dot et que j’ai transposé partiellement sur ObservableHQ :
L’aspect interactif, la rétroaction rapide sur les données et l’esthétique de leur visualisation peuvent ré-dynamiser des projets assoupis de mani`ère salutaire.
Ma proposition de présentation du colloque «Vous êtes dans une taverne… Retour sur 50 ans de jeux de rôle» a été acceptée. Intitulée « Évolution historique et analyse bibliométrique de la recherche académique sur le jeu de rôle sur table dans les publications universitaires », elle consiste principalement à faire une étude descriptive de la publication universitaire sur le jeu de rôle sur table depuis les années 80.
Depuis 2014, j’ai entrepris de rassembler des références universitaires se rapportant à l’étude du jeu de rôle sur table. Cette démarche a abouti à la création d’une base de données librement accessible via Zotero, comprenant un total de 2400 références. Parmi celles-ci, on dénombre 460 articles soumis à une évaluation par des pairs, 180 ouvrages, 300 thèses, et bien d’autres encore.
Dans le but de faire une analyse bien reproductible, non seulement je verse les données en libre accès mais je verse aussi les algorithmes qui permettent de les analyser. Le tout est déposé sur GitHub à https://github.com/pmartinolli/ZoteroRnalysis
J’ai choisi d’utiliser le logiciel R Studio parce que j’ai appris à l’utiliser dans le cadre de mon travail, aussi parce que c’est un logiciel performant et libre, et enfin parce qu’il est facile de demander à ChatGPT 3.5 de OpenAI de corriger mes bugs de codage (ce que je fais très souvent).
Le principe est simple :
J’exporte les références bibliographiques de Zotero au format csv
J’importe les données dans R Studio
Je mouline les données dans R Studio
R Studio me produit des jolis graphiques et d’autres tables csv
Au passage, j’aligne mes données avec celles de Wikidata pour augmenter mes données (dans un processus appelé la «réconciliation», fait par le logiciel OpenRefine). Par exemple, avec la liste des noms des revues universitaires, je vais chercher la date de la création de la revue et son pays d’origine pour repérer des tendances.
All I want for this graph is you
Après ce deuxième jeu de mots douteux du temps des Fêtes (nous sommes le 1er décembre), voici quelques jolies extractions sous forme graphiques. Notez que ce ne sont pas les versions définitives car, d’ici le colloque, je vais encore « shampooiner les données » pour les corriger et les améliorer.
Pour la suite, je vous donne rendez-vous à Reims (je serai par Zoom), ou sur ce blogue, ou plus tard dans une publication plus définitive.
Annexe : suite de la proposition de présentation au colloque
« Dans la présentation, je vais expliquer en quoi la compilation d’articles évalués par des pairs et d’ouvrages publiés depuis les années 1980, tant en anglais qu’en français, est presque exhaustive et permet de généraliser les analyses qui vont suivre. Je mettrai également en lumière les éventuels biais de sélection et d’indexation qui peuvent être présents.
« Mon projet consiste à réaliser une analyse historique et bibliométrique des publications de type articles évalués par des pairs et de type chapitres de livres. Cette analyse permettra de mettre en évidence les variations observées au fil des années, dans diverses disciplines, pour différents sujets de recherche, ainsi que les enjeux entourant la publication (notamment les prépublications, les revues systématiques, les publications potentiellement prédatrices, les rétractions, etc.). Je montrerai, par exemple, comment les premières publications des années 1980 visaient à expliquer la montée en popularité de cette passion et à répondre aux paniques morales de l’époque. De même, j’illustrerai comment les publications récentes se concentrent davantage sur des thématiques telles que le genre, les actual play et les aspects psychothérapeutiques liés à la pratique du jeu de rôle. Je mettrai également en évidence la grande diversité des domaines académiques abordant l’étude du jeu de rôle, allant des disciplines traditionnelles telles que la sociologie, la psychologie et les humanités, jusqu’à des domaines plus atypiques tels que la musique, la neurosciences et la philosophie. Cette présentation s’étend également à l’échelle internationale, englobant l’Europe, l’Amérique du Nord, ainsi que d’autres régions d’Amérique latine et d’Asie. Je soulignerai la prédominance du jeu Dungeons & Dragons, tout en identifiant d’autres jeux étudiés ou mentionnés en marge de cette prépondérance.
« Pour enrichir cette analyse, je discuterai de la réflexion théorique et pratique de la communauté des joueurs sur leur loisir en parallèle du milieu universitaire. Je passerai également en revue les conférences, congrès et colloques consacrés au jeu de rôle, ainsi que les mémoires et thèses abordant ce sujet. Enfin, je discuterai des pratiques de citation dans le jeu de rôle sur table, dans son étude et dans ses communautés de pratiquants. »
Ce billet fait partie de la série sur les épigraphes. Plusieurs jeux de rôle sur table utilisent cette technique littéraire.
En 2019, une nouvelle propriété nommée épigraphe littéraire (P7150) a été créée dans Wikidata pour indexer les épigraphes dans les œuvres littéraires*. C’est une initiative très intéressante car elle prouve que Wikidata peut contenir une ontologie des données riche et précise dans ses descriptions qualitatives. Pour le moment, la propriété est assez peu utilisée (l’essentiel des contributions viennent de moi**).
Je rêve qu’un jour les données seront suffisamment complètes et significatives pour pouvoir produire des résultats intéressants en humanité numérique. Cela serait un beau sujet de mémoire ou de thèse. Hypothèse (développée dans un prochain billet) : Peut-être que les littératures de l’imaginaire sont plus référencées que la « normale » des œuvres littéraires, dans le sens qu’elles contiennent plus de références diverses vers d’autres œuvres ou d’autres sources.
Quelques exemples d’utilisation
Dans les littératures de l’imaginaire
Foundation : les épigraphes intra-diégétiques dévoilent la réussite du projet de Hari Seldon d’Encyclopédie Galactique et ainsi cadrent le récit.
Dans Dune, les épigraphes peuvent provenir de personnages qui deviendront centraux plus tard dans l’œuvre (comme la princesse Irulan). De manière générale, ils créent un style chorus (avant que ça ne devienne la mode).
Le Seigneur des Anneaux débute avec son fameux poème épigraphique qui synthétise l’histoire passée, la situation actuelle et les enjeux des romans. Il reprend en partie les mots du principal antagoniste dans un poème écrit par les peuples libres.
La servante écarlate commence avec des épigraphes sourcés qui dévoilent les conflits de valeur mis en jeu dans le roman.
The King in Yellow contient un épigraphe par chapitre/nouvelle, ainsi qu’un épigraphe pour le recueil : certains épigraphes renvoient à des œuvres existantes, d’autres à des œuvres fictives. Créant un effet de confusion propre au mouvement décadent, ainsi qu’un effet ludique avec le lecteur.
Pour repérer tous les épigraphes dans les littératures de l’imaginaire
Pour lister les œuvres contenant le plus d’épigraphes
Pour compter combien d’épigraphes sont indexés dans Wikidata
Comment contribuer ?
Pour indexer des épigraphes spécifiques :
P7150 (epigraph)
Indiquer le texte de l’épigraphe sans guillemets.
Indiquer la langue de l’épigraphe : en ou fr ou la (latin) ou autre. En cas de langues multiple : mul. En cas de langue inconnue : und.
Qualifiersde P7150 :
P1545 (series ordinal) : si plusieurs épigraphes, indiquer leur ordre : 1, 2, 3,…
P792 (chapter) : quel endroit dans l’œuvre si ce n’est pas au début de l’œuvre (dans ce cas ne rien indiquer). Ou P958 (section, verse, paragraph, or clause)
P1552 (has quality)
= Q96102813 (in-universe perspective) : dans le cas d’un épigraphe intra-diégétique (donc vraie dans la fiction). (Exemple : le poème au début du Seigneur des Anneaux).
OU Q96102813 (fictional quotation)
= Q112046597 (made up quotation) : dans le cas d’une citation fausse, inventée, apocryphe (Exemple : fausse citation de Eleanor Roosevelt dans Talladega Nights).
P5997 (stated in reference as) : la référence de l’épigraphe telle que rédigée dans l’œuvre.
References:
P248 (stated in) : QID de l’œuvre d’où l’épigraphe est issu.
P50 (author) : QID de l’auteur de l’épigraphe.
P792 (chapter) : quel endroit dans l’œuvre si ce n’est pas au début de l’œuvre (dans ce cas ne rien indiquer). Ou P958 (section, verse, paragraph, or clause).
Pour indexer plusieurs épigraphes (pas spécifiquement) :
P2283 (uses) =
epigraphs (Q669777)
has quality (P1552) = referenced value (Q71536081)
quantity (P114) = nombre d’épigraphes issus d’œuvres externes
fictional quotation (Q18011336)
has quality (P1552) = in-universe perspective (Q96102813)
quantity (P114) = nombre d’épigraphes forgés exclusivement pour cette œuvre
Exemple de code QuickStatement pour une importation en lot :
______________________ * J’ai aussi clarifié l’ontologie et les autres définitions du terme épigraphe (en archéologie, en mathématiques, etc.). ** J’ai saisi les 84 épigraphes fous de Moby-Dick par exemple.
Aujourd’hui, nous fêtons le 50e anniversaire de la première partie de Blackmoor, le 17 avril 1971, dirigée par Dave Arneson dans son sous-sol de Saint Paul, Minnesota.
Dans le documentaire Secrets of Blackmoor, il est bien expliqué comment la création de ce nouveau type de gameplay a émergé de l’expérience des wargame avec figurine et des tables de Braunstein de David Wesely. Avec une approche histoire et anthropologie culturelle, les documentaristes nous montrent bien le processus Copie + Transformation + Combinaison à l’œuvre dans la démarche d’innovation de Dave Arneson et ses amis depuis les années 60. On y découvre aussi une manière de jouer très freeform et centrée sur les joueurs. Une démarche de jeu qui est revenu à la mode avec le mouvement FKR (FreeKriegsspiel Renaissance). Le billet de blogue d’aujourd’hui de Secrets of Blackmoortémoigne de l’innovation radicale du gameplay, avant même sa marchandisation avec D&D.
J’avais pas mal travaillé sur les pages Wikipédia de Dave Arneson en français et en anglais ces vacances de Noël. C’était un peu en friche. C’est dommage qu’il n’y ait pas une meilleure connaissance de la naissance du hobby car il y a des choses à en tirer pour l’amélioration de l’expérience de jeu aujourd’hui. Jon Peterson, historien des jdr, s’était désolé que l’histoire du hobby s’était constituée trop tard et que l’on avait perdu énormément de sources (les deux principales étant Dave Arneson et Gary Gygax eux-mêmes).
C’est aussi pour cela que la reconnaissance de la transmission culturelle par la citation est importante : pour nous faire comprendre de manière durable par où la sève est passée, où elle a bloqué et où elle a porté des fruits. Cela peut être la garantie pas de créer de meilleurs jeux ou d’avoir de meilleures expériences de jeu. C’est un peu ce que j’essaye de faire avec le projet On the Shoulders of Cloud Giants.
Ce sujet sera abordé dans le livre à paraître en octobre de cette année : Peterson, Jon. 2021. Game Wizards. The Epic Battle for Dungeons & Dragons. MIT Press. https://mitpress.mit.edu/books/game-wizards.
Il a été abordé (mais de manière insatisfaisante selon moi) dans le livre : Kuntz, Robert J. 2017. Dave Arneson’s True Genius. TLS1001. Scottsdale, AZ: Three Line Studio. https://www.threelinestudio.com/store/dave-arneson-s-true-genius/. On attend toujours la sortie d’un livre plus ambitieux du même auteur.
Après avoir fait plus de 14 000 modifications à la main dans Wikidata, je me suis enfin penché sur les modifications semi-automatiques de QuickStatements, une API qui permet les modifications en lot. Voici la méthode pour se sauver du temps et de l’ennui avec l’exemple de la propriété P123 Publisher pour les maisons d’édition de jeux de rôle sur table :
Exporter une table csv depuis Wikidata
Lancer une requête SPARQL avec, pour chaque élément, une colonne pour l’identifiant Q Wikidata et une colonne pour le label. Dans l’exemple, item = élément de base Q Wikidata du jeu, itemLabel = nom du jeu, publisher = élément Q de la propriété P123, publisherLabel = nom de la maison d’édition.
SELECT DISTINCT ?item ?itemLabel ?publisher ?publisherLabel WHERE {
{
{ ?item wdt:P31 wd:Q1643932. } #TTRPG
UNION
{ ?item wdt:P31 wd:Q2164067. } #System
UNION
{ ?item wdt:P31 wd:Q71631512. } #supplement
UNION
{ ?item wdt:P31 wd:Q4418079. } #setting
UNION
{ ?item wdt:P31 wd:Q4686479. } #adventure, campaign
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
OPTIONAL { ?item wdt:P123 ?publisher.}
}
ORDER BY (?itemLabel)
Ouvrir le fichier csv dans LibreOffice Calc (le meilleur éditeur libre de fichier csv).
Modifier les éléments désirés en ajoutant les Label dans la colonne Publisher Label. Bénéficier de la saisie semi-automatique si l’élément existe déjà. Si l’élément n’existe pas, le créer dans Wikidata et le rajouter dans la colonne Q ET la colonne Label.
Trier la colonne Label. Copier-coller les Q manquants très visibles dans les trous de la colonne.
Supprimer les colonnes Label.
Sauvegarder les deux colonnes restantes au format csv.
Déboublonner le fichier csv. J’ai testé 3 méthodes, la meilleure est Notepad++ avec l’extention TextFX. Voir annexe.
Sur la première ligne, remplacer item, publisher par qid,P123. Le fichier devrait ressembler à ceci :
Aller sur QuickStatements, connectez-vous avec votre identifiant Wikimedia. Nouveau lot > Collez le contenu du fichier csv dans la case puis cliquez sur le bouton Importer les commandes CSV.
Et voilà!
Annexe : comment dédoublonner des fichiers txt, csv,…
Cas: j’ai 1575 lignes à dédoublonner dans un fichiers csv. Trois méthodes sont testées :
A. Dans Calc : Bien.
Sélectionner LES DEUX colonnes > Données > Plus de filtres > Filtre Standard > Nom du champs = “Aucun” + Options = “Sans doublons” > OK.
Copier-coller le résultat dans Notepad++. Remplacer (mode étendu) les \t par des virgules ,
Avertissement : Les données sont incomplètes et leur traitement est embryonnaire. Ce 100e billet de blogue a pour but de faire le point sur la méthode et les résultats à mi-parcours.
Introduction
Dans le cadre du Projet Sur les épaules des géants des nuages, qui analyse les pratiques de citations dans les jeux de rôle sur table (JDRT), j’ai poussé mon travail vers :
La sélection et le dépouillement de jeux de rôle sur table ;
La création d’une base de données de citations, structurée et hébergée à l’intérieur de Wikidata, puis interrogée par SPARQL ;
L’analyse de cette base de données par R et R Studio, une suite de logiciels libres de traitement statistique.
Sélection
La sélection des JDRT s’est faite sur :
La liste de tous les JDRT qui ont une page Wikipédia en anglais et en français. Complétude estimée : environ 95% ;
Plus tous les JDRT cités dans des périodiques que je suis depuis les dix dernières années : des podcasts francophones, des blogues francophones et anglophones et des magazines sur le JDRT. Complétude : environ 80% ;
Plus tous les JDRT cités par des JDRT issus des listes précédentes.
Cette sélection est modérément biaisée car la notoriété est attribuée de manière externe par des tierces parties (ie. les contributeurs de Wikipédia et les éditeurs des périodiques).
La sélection a été validée par le fait que chaque jeu mentionné comporte une ou plusieurs notices de référence dans la base de données RPGGeek (environ 99.9%).
Dépouillement
Le dépouillement des JDRT a été fait sur plusieurs mois. Chaque page de JDRT mentionnant un autre JDRT a été récolté dans un dossier électronique par numérisation ou par re-numérisation (capture d’écran d’un PDF par exemple) sous la forme de fichiers image PNG nommés nomdujeu-pXX.png (où XX représente la page de la numérisation).
Pour enrichir les données dépouillées, des métadonnées d’édition du JDRT ont aussi été capturées : ours, colophons, pages de crédit (env. 90%), pages de remerciement, extrait de la page des participants des souscriptions (env. 50%), parfois couverture ou dos de couverture (env. 5%).
D’autres mentions de citation, d’attribution ou de référence ont été récoltées : bibliographies, filmographies, citations d’auteurs ou d’œuvres, etc.
Tout ou une partie des épigraphes ont été récoltés.
Conception de la base de données
J’ai choisi Wikidata pour déposer le cœur de la base de données des pratiques de citation.
Cela m’évite d’avoir à créer ma propre base de données ;
Cela me permet de partager ma base de données de manière ouverte ;
Wikidata est simple à alimenter ;
Wikidata exporte dans des formats simples. Aussi, il est très facile de l’interroger directement via R Studio avec le package adéquat ;
Il y avait presque toutes les propriétés dont j’ai besoin :
Inconvénient : il n’y a pas de propriété pour renseigner les informations suivantes : existence d’une bibliographie, présence d’épigraphes.
Je peux potentiellement lier les données à d’autres bases de données pour enrichir ce cœur (à explorer : c’est une manipulation à faire dans R Studio, ou bien à faire semi-automatiquement dans Wikidata grâce à des programmes comme QuickStatements).
Pour l’occasion et pour enrichir Wikidata de données liées, j’ai demandé à Wikidata la création d’une propriété d’identifiant (identifier ID P7226) vers RPGGeek pour commencer à lier ces deux bases de données. L’identifiant est désormais présent dans l’outil Mix’n’Match de Magnus Manske.
Avancement
La saisie dans Wikidata a débuté en mai 2019. En décembre 2019, il y avait environ 13 000 éditions faites.
Environ 766 liens ont été créés entre 137 JDRT (voir cette extraction SPARQL).
Beaucoup de données étaient à corriger ou à préciser. Par exemple, de nombreux JDRT n’avaient pas d’instance, ou bien avaient l’instance jeu (game) ou jeu de rôle (role-playing game), alors que l’instance correcte est jeu de rôle sur table (tabletop role-playing game).
D’autres mises en ordre taxonomiques ont été référencées sur la page WikiProject Boardgame.
SPARQL
Le langage SPARQL permet d’extraire les données de Wikidata. La principale requête pour ce projet a été déposée ici. Elle est aussi présente directement dans le code R.
Elle permet d’extraire un tableau simple, ayant les jeux analysés dans une colonne et tous les jeux de rôle cités par celui-ci dans une autre colonne.
Dans une seconde phase, il va être intéressant d’exporter aussi les données de maison d’édition et d’auteur pour pondérer à la baisse la force de certaines citations. En effet, beaucoup de jeux d’une même gamme/ maison d’édition se citent les uns les autres. De la même manière, parfois des jeux du même auteur sont mentionnés en indication purement autobiographique.
Analyse avec le logiciel R
R est une suite de logiciels libres pour traiter de données numériques. C’est la grande mode en ce moment dans la recherche universitaire alors pourquoi pas les utiliser pour mon projet ? Ces logiciels sont gratuit et ouverts, donc il existe beaucoup de partage de codes et d’outils en ligne. Idéal pour moi qui suis un programmeur du dimanche. De plus, la manipulation de R n’est pas très complexe avec l’interface R Studio.
Développement futur : comme expliqué précédemment, je souhaite pondérer les liens de citations en réduisant la force des liens vers d’autres JDRT de même publisher ou de même author.
Dans le billet précédent, j’expliquai les limites techniques de mon projet de chronologie des jeux de rôles, d’arbre des innovations et des citations, par mes limites de compétences en informatique. Il se trouve que je viens tout juste d’assister à une formation sur Wikidata donnée par Simon Villeneuve, véritable wiki-héros Chicoutimien (107 contributions).
Wikidata est une solution simple pour constituer une base de données d’éléments liés (ex: Q1375) et pour générer des tableaux de données, des chronologies, des graphes, etc. grâce à des requêtes complexes. Même si les déclarations d’éléments peuvent être complexes, Wikidata m’évite d’avoir à apprendre des langages de programmation, de structuration de données et d’installer le tout localement. De plus, le cheminement est progressif et il porte ses fruits dès le début. Il peut être jumelé ou soutenir des projets d’humanités numériques pour lesquels vous manquez de ressources de programmation. Parlez-en à votre bibliothécaire disciplinaire.
Du coup, je réfléchis comment apparier mes données avec celles de Wikidata et comment utiliser cet outil qui a le bénéfice d’être entièrement ouvert (le contenu dans le domaine public CC0).
Bases de Wikidata
Un élément Wikidata Q possède des propriétés P qui elles-mêmes sont souvent d’autres éléments Q.
Pour plus de précisions, on peut encore préciser ces données avec des éléments P et Q.
Chaque élément est multilingue.
Il est possible de sourcer tous les éléments avec des références bibliographiques.
Il est possible de lier les données à des bases de données externes grâce à des propriétés de type « Identifiers / Identifiants ».
Chaque modification est signée et comptabilisée (j’en suis à 12 000 en nov. 2019).
On peut interroger Wikidata et récupérer les données sous différents formats grâce à des requêtes SPARQL (exemples).
J’ai demandé avec succès que la base de données RPGGeek obtienne une propriété P7226 de type «identifiant» pour lier Wikidata avec d’autres bases de données. Voici des exemples : de jeu, de maison d’édition, d’auteur de jeu.
Bientôt : la structure des liens de la base de données du Grog permettrait aussi ce type de maillage. Je demanderai la création d’une propriété semblable dans le courant 2020.