Cette année, à NewCrafts, j’ai assisté à une session de Evelina Gabasova. Elle nous a parlé des personnages de Star Wars et d’un de ses projets personnels : appliquer les techniques BigData pour d’analyser les interactions entre les personnages de Star Wars et en déduire les personnages les plus importants.

Parsing

Pour pouvoir analyser les interactions, elle a d’abord parsé les scripts des différents épisodes, présentés sous forme de texte brut, et est rapidement arrivée à quelques conclusions : certains personnages reviennent TRES souvent (Luke, Leïa, Han Solo) car ils ont beaucoup de dialogues.

Mais les choses ne sont pas si simples :

  • Un personnage dans Star Wars ne parle pas forcément (Chewbacca, R2D2).
  • Son nom peut contenir des chiffres, des caractères spéciaux…
  • Peut-on conclure de l’importance d’un personnage uniquement à partir de son nombre de lignes de dialogue ?

Evelina a utilisé F# pour parser les scripts à l’aide d’expressions régulières. Ainsi une fois sous forme de liste, elle peut savoir si ce sont des personnages des lieux où des textes. Mais cela reste un travail très manuel.

En utilisant cette technique on passe à côté de beaucoup de détails. Ainsi il est par exemple difficile d’avoir tous les personnages et les informations qui les concernent.

SWAPI

L’idéal serait d’avoir une API qui permet de récupérer les informations des personnages. Et comme il y a une API pour tout, il y a SWAPI (Star Wars API) une Api pour l’univers de star Wars. Avec cette api, elle peut connaître tout un tas d’informations sur les personnages, comme la couleur de peau (noire, blanc, or…), le sexe (masculin, féminin, robot… ), l’histoire…

Et pour bien faire, elle a créé un wrapper F# pour interroger SWAPI disponible sur Github.

 

XPlot

Avec toutes ces informations, elle a utilisé XPlot pour les mettre en forme. Ce qui lui permet de générer des graphiques sympathiques.
Grâce à ces informations elles a fait des regroupements sur la couleur de peau par exemple. On découvre que Anakin change de couleur quand il devient Dark Vador.

Elle a aussi regardé la parité hommes / femmes.

Mais ce qui nous intéresse c’est les interactions entre les personnages et en déduire les personnages les plus influents. Voici par exemple le schéma généré avec les relations des personnages de l’épisode 7 :

Elle nous explique quelques concepts comme le fait qu’un personnage qui a beaucoup de relations est intéressant. Mais ce n’est pas parce qu’il a beaucoup de relations qu’il est important. Ainsi certains personnages sont plus importants car ils permettent de mettre en relation deux personnages qui ne se connaissent pas. Ces personnages permettent de créer une glue entre les protagonistes. C’est le cas de Rey dans l’épisode 7. Le nombre de relations et le nombre de personnages permettent de calculer la densité du réseau. Si l’on utilise le premier algorithme pour calculer cette densité obtient :

Par contre si pour calculer l’importance d’un personnage on tient compte du fait qu’il permet de mettre en relation des personnages on obtient des coefficients différents :

C’est ce qu’elle nomme “Clustering coefficient”, aussi appelé la transitivité d’un réseau.

The End

En résumé, F# permet de récupérer des informations très facilement. Mais aussi de les analyser et de sortir des graphes. F# est un langage de programmation très intéressant pour le domaine de la recherche car :

  • C’est un langage fonctionnel
  • On peut le tester dans une console
  • Beaucoup de librairies orientées datascience sont compatibles avec F#.

Vous pouvez retrouver toutes les études des personnages dans le monde star Wars sur la page de Evelina Gabasova. Enfin, la vidéo de la conférence est disponible ici :