Ukraine : Analyse Twitter (tutoriel Twint/Gephi)

  • Avertissement : cet article engage uniquement son auteur. OSINT-FR ne pourra être tenu responsable en cas de mise à jour d’outil décrit dans ce guide.
  • Date : 30 mars 2022
  • Categorie : Méthodologie
  • Author:  Le Merovingien

Dans ce tutoriel je vais vous montrer comment créer un graphe de relations en extrayant des tweets.

Les données sont disponibles sur le Github d’OSINT-FR

Installation prérequise :

Je vous conseille d’installer le module twint avec cette commande :


Copy to Clipboard

Etape 1 : Récolter les tweets

Par exemple lancer la commande :
Copy to Clipboard

Voici le manuel de commande : https://github.com/twintproject/twint/wiki/Basic-usage

Cela va donner un fichier csv avec ces métadonnées :

id, conversation_id, created_at, date, time, timezone, user_id, username, name, 
place, tweet, language, mentions, urls, photos, replies_count, retweets_count, 
likes_count, hashtags, cashtag,  link, retweet, quote_url, video, thumbnail, 
near, geo, source, user_rt_id, user_rt, retweet_id, reply_to, retweet_date, 
translate, trans_src, trans_dest

Il y a souvent un moment où le scrapping s’épuise et twint ne peut pas aller plus dans le passé.

Ici on obtient un fichier de 1,3 Mo, 2195 tweets. Quand vous ouvrez le fichier csv avec Excel ou Libre Office n’utilisez que les séparateurs « tabulations ». Le plus facile que j’ai trouvé pour que Python digère bien ce csv est de l’enregistrer au format XLSX.

Python arrive à le digérer avec ce code (python) :

Copy to Clipboard

Etape 2 : Nettoyer le fichier

Pour notre graphe de relation, les noeuds sont les utilisateurs (on va utiliser la colonne username) et les liens sont les mentions. Il n’y a donc pas besoin de tout le fichier. On va filtrer avec ce script python les tweets qui comportent une mentions et extraire les username pour que cela soit simple à lire pour la suite.

Copy to Clipboard

Note importante : Dans cet exemple je fais une approximation importante, c’est que tous les username mentionnés sont dans ceux qui ont tweeté. Ce n’est pas forcément le cas.

Etape 3 : Créer le fichier Gephi

On va sur le site https://medialab.github.io/table2net/ pour utiliser le fichier CSV de l’étape précédente.

On vérifie visuellement que le CSV est bien importé :

Paramétrage :

  • Type of network : Normal (one type of node)
  • Nodes : username (on doit voir quelques username apparaître dessous)
  • Links : mentions (on doit voir les username apparaître dessous)

Etape 4 : Paramétrer Gephi

On ouvre le fichier précédent :

Onglet : Vue d’ensemble

Comme il n’y a pas beaucoup de noeuds, il n’y a pas besoin de filtrer ceux qui n’ont pas beaucoup de liens. On va directement voir s’il existe des communautés.

On clique sur Modularité pour calculer la statistique

puis Fermer

Dans l’onglet de gauche on va se servir de cette statistique. Noeuds / Partition / Modularity Class. Cela va utiliser la statistique pour colorer les communautés. On clique sur appliquer :

Enfin on va gérer la taille des noeuds avec le bouton Taille à droite, puis Noeuds, puis Classement, puis Appliquer :

Maintenant il faut laisser Gephi faire ses calculs pour disposer harmonieusement les nœuds.

Onglet de gauche, choisir une spatialisation, Force Atlas 2, si vous le laissez tourner comme cela sans paramétrer vous obetenz cela :

Il faut les rapprocher et empêcher le recouvrement :

Il n’y a pas beaucoup de liens dans cet exemple et les utilisateurs semblent aussi importants.

On peut aller dans l’onglet Prévisualisation pour voir les labels.

Si on coche Afficher les labels et une taille 5 on obtient ce graphe :

J’ai réduit la taille max des noeuds à 50 et j’ai rafraîchi :

Vous pouvez enregistrer l’image en PNG, SVG, PDF. Les deux derniers ont l’avantage de garder le texte des username.

BONUS :

j’ai récolté les 75 000 derniers tweets de la commande (qui donne des tweets du 05 mars 19H54 au 08 mars 00H) :

Copy to Clipboard

en extrayant les tweets intéressants (cad avec mentions), on en récupère à peu près 3000. on voit différentes communautés sans influenceurs qui écrasent et certains comptes qui font les liens.