• Générer des «Narrative Charts» pour Reflets d'Acide

    La nuit dernière, la motivation est venue sous la forme d'une idée rigolote : XKCD avait fait des movie narrative charts, qui représente, à un instant donné, les personnages qui sont ensembles. Les visualisations pour différents films, y compris pour Le Seigneur des Anneaux et Jurassic Park, rendent super bien et sont très rigolotes à explorer.

    D'où la question :

    Que faudrait-il pour reproduire ce genre de graphe pour Reflets d'Acide ?

    La réponse est dans ce billet, qui accompagne un programme qui s'occupe de générer les graphiques.



    Les données

    Le dépôt Neamar/sagas-mp3 contient, à ma connaissance, les données les plus à jour sur Reflets d'Acide. C'est un travail collaboratif impressionnant et, surtout, très facile à exploiter : les épisodes sont dans un format standard textuel facile à parser (j'ai même commencé un package pour automatiser ça).

    Donc, on a accès, pour chaque épisode, pour chaque chapitre, pour chaque ligne de dialogue, au personnage qui parle, ce qu'il dit, et même les annotations qui expliquent les références et autres jeux de mot. Parfait ! C'est même plus qu'il n'en faut !

    La théorie

    En considérant qu'un chapitre est une unité de temps et d'espace, on sait facilement qui est avec qui : si deux personnages parlent dans le même chapitre, ils sont ensembles. (on note la place particulière du Narrateur, que je vais généralement enlever des données pour cette raison)

    Maintenant, le mouvement : on relie deux chapitres pour chaque personnage en commun, à condition qu'il n'y ait aucun chapitre entre les deux qui contienne aussi le personnage (on relis de proche en proche, quoi). En d'autres termes, ce sont les personnages présents dans les chapitres qui définissent comment ceux-ci sont liés entre eux.

    Il y a aussi des questions plus complexes, comme les chapitres équivalents : des chapitres qui se suivent et contiennent exactement les même personnages, sans qu'ils n'aient été utilisés par un autre chapitre entre-temps. Plutôt que les afficher bêtement, ce qui alourdis le graphique sans être très informatif, on préférerais n'avoir qu'un seul groupe qui porte les noms de tous les chapitres qu'il représente.

    On note enfin certains personnages spéciaux : Travia, le groupe de gredins que rencontre Alia, Squikky et ses amis, ou encore le Capitaine Gloomy et son équipage… Tout ces personnages :

    • apparaissent une unique fois, ou
    • sont nombreux, mais apparaissent tous ensembles

    Les premiers peuvent être, pour les plus mineurs, retirés : ils sont endémiques à un chapitre qu'ils justifient d'eux-même : pas besoin de les placer dans la timeline. Je pense notamment à Rico, René, le prêtre prononçant l'exil de Tormys, Peggy, Gégène,…

    Les second gagneraient quant à eux à être «compressés» en un seul, afin de gagner de la place, et donc en lisibilité.

    La pratique

    Ces derniers temps, je joue pas mal avec plotly, qui a l'avantage d'être utilisable en python et de produire des graphes interactifs en javascript. Préparez-vous à en manger !

    Le code python est disponible ici. Il consiste en les routines qui extraient l'information, calculent le graphique final, et en une interface en ligne de commande qui permet de jouer avec différents paramètres, tels que les personnages à considérer, les épisodes à étudier,…

    Dans le code, on trouvera notamment des listes d'alias, ou de personnages à ignorer, permettant de contrôler finement ceux qui seront présents dans le graphique (ces listes étant utilisées comme valeur par défaut quand le programme est lancé en ligne de commande).

    Les résultats

    Je donnerais à chaque fois la commande qui a permit de générer le graphique, et le graphique lui-même.

    Complet de 6

    Un simple d'abord : je veux l'évolution des personnages durant les 6 premiers épisodes.

    python cli.py 1 6 -m -b -io -i narrateur tous groupe -t "Timeline des 6 premiers épisodes de Reflets d'Acide"
    

    Notons que j'enlève le narrateur, car il est partout, et casse donc un peu la visualisation, et les méta-personnages comme «tous» et «groupe».

    Et on obtient :