Retour au blog

Extraction de données Twitter à l'aide de Python

Extraction de données Twitter à l'aide de Python

Twitter n’est pas seulement une source d’informations étendue, c’est de loin l’un des meilleurs échantillons des pensées du monde. Avec plus de 330 millions d’utilisateurs actifs, c’est l’une des principales plateformes où les gens aiment partager leurs pensées. Les données de Twitter peuvent être utilisées à diverses fins telles que la recherche, l'analyse des consommateurs, les données démographiques, et bien d’autres.

Par conséquent, le but principal de ce tutoriel est de vous apprendre à obtenir un échantillon de données Twitter pertinent pour votre projet ou votre entreprise.

Avant de poursuivre, assurez-vous d’avoir toutes ces variables à portée de main :

  1. Consumer Key
  2. Consumer Secret
  3. Access Token
  4. Access Token Secret

Si vous voulez savoir comment obtenir les détails mentionnés ci-dessus, allez lire cet article de blog écrit par mon collègue Dattatray Upase.

Maintenant, faisons un peu de code !

Définition des variables d’entrée

Tout d’abord, vous devez définir certaines des variables globales dont vous aurez besoin pour le programme :

J’importe ‘sys’ pour obtenir les arguments de la ligne de commande, car je pourrais vouloir changer les mots-clés, la date de début ou la date de fin. Pour la langue, j’ai choisi l’anglais, mais vous voudrez peut-être vérifier quelles autres langues sont prises en charge. Les résultats seront stockés dans ‘data’ à la fin.

Par conséquent, une utilisation typique du script ressemblerait à ceci :

python script.py start_date end_date keyword

Accéder à l’API Twitter
Twitter permet l’utilisation de son API via un framework d’autorisation oauth2. Ils fournissent la documentation sur leur site web avec laquelle le filtrage des tweets peut être effectué. Le morceau de code ci-dessus l’implémentera pour vous.

La variable req_count est le nombre de fois que j’ai utilisé l’API lors de l’exécution de mon programme. Je rencontre l’erreur suivante avec le code fourni :

TypeError: Unicode-objects must be encoded before hashing

Pour éviter cela, je remplace post_body=”” par post_body=b”” et cela résout le problème.

Utilisation et référence de l’API Twitter

Il’s temps de définir l’URL de l’API pour obtenir les données Twitter. J’utilise le paramètre min_faves. Voici l’explication de l’URL et quelques astuces d’optimisation :

‘min_faves’ est utilisé pour définir le nombre minimum de favoris qu'un tweet doit avoir dans les données. C’est une fonctionnalité très utile mais elle n'est pas mentionnée dans la documentation de l'API Twitter.

‘q’ représente la requête ou les mots-clés que vous souhaitez saisir. Ici, il’est important de s'assurer de donner le moins de mots-clés possible. Par exemple, imaginons que je veuille des tweets sur Facebook et Google. Si je donne les deux comme mots-clés, disons, FACEBOOK et GOOGLE, cela ne va me renvoyer que 100 tweets maximum, car c'est une restriction. Mais si j'exécute la requête deux fois – une fois avec Facebook et une fois avec Google, je peux obtenir un total de 200 tweets. Pour faire court, il vaut mieux utiliser un seul mot-clé par requête.

‘lang’ représente la langue des tweets filtrés. Comme je veux obtenir des tweets en anglais, je le définis sur ‘en’.

‘since’ est la date de début de la période à partir de laquelle vous souhaitez rechercher des tweets. Cette date de début doit se situer dans les 7 derniers jours. C'est une autre fonctionnalité qui n'est pas documentée dans la documentation de l'API Twitter.

‘until’ représente la date de fin de la période souhaitée. Logiquement, elle devrait également se situer dans les 7 derniers jours. Elle n'est pas non plus documentée dans la documentation de l'API Twitter.

‘result_type’ représente le type de tweets que vous souhaitez. Il a 3 valeurs :

‘recent’ donne les tweets les plus récents, c'est-à-dire les tweets à la fin de la période sélectionnée.

‘popular’ donne les tweets les plus populaires et manque donc beaucoup de tweets. Vous obtiendrez toujours les tweets avec le plus de favoris et de retweets. Le min_faves ne serait d'aucune utilité ici.

‘mixed’ donne un mélange de tweets récents et populaires.

‘count’ représente le nombre maximum de tweets dans le résultat. Par défaut, il est défini sur 15 et le maximum est de 100.

Avec le result_type mixte et l'utilisation de min_faves, nous pouvons obtenir le maximum de tweets en exécutant la requête plusieurs fois.

Pour plus de fonctionnalités documentées, vous pouvez également consulter la documentation de l'API de Twitter.

Sauvegarde/Sauvegarde automatique des données de tweets récupérées

Comme étape suivante, vous devez définir une méthode de sauvegarde/sauvegarde automatique qui possède un paramètre ‘saveOverride’. Cette étape est simplement nécessaire pour supprimer la restriction de temps de sauvegarde automatique et enregistrer le fichier. Pour ce faire, je crée un t_last pour enregistrer l'heure de début du programme. Ensuite, j'y accède dans le programme et vérifie s'il s'est écoulé 5 minutes depuis le t_last (dernière heure de sauvegarde). S'il s'est écoulé plus de 5 minutes, je marque le ‘saveStatus’ comme True.

Ensuite, je vérifie ‘saveOverride’, ce qui signifie simplement que je dois donner l'instruction à mon programme que, quoi qu'il arrive, le fichier doit être sauvegardé maintenant. Pour cela, je définis le saveStatus sur True.

Ensuite, si ‘saveStatus’ est True, le script changera le t_last par l'heure actuelle. Après cela, le code crée un objet dictionnaire et affiche “Sauvegarde automatique à [time]” afin que vous sachiez que les données sont en cours de sauvegarde automatique.

Ensuite, je vérifie si le fichier de sortie existe déjà. Si c'est le cas, je combine les données et les données d'un fichier déjà sauvegardé. Après combinaison, je l'écris dans le même fichier. S'il n'existe pas, je crée un nouveau fichier puis j'écris les données dans ce fichier.

En conséquence, j'ai codé presque toute la fonctionnalité que je voulais.

Optimisation plus poussée

Enfin, il est temps d'utiliser ces fonctions. J'écris une boucle while(1), ce qui signifie while(True). Cela fait essentiellement s'exécuter l'instruction indéfiniment jusqu'à ce qu'une instruction ‘break’ soit appelée ou qu'une exception soit levée.

Tout d'abord, je collecte les données des tweets dans le dictionnaire  ‘d’ en utilisant json.loads qui convertit les données dans un format de dictionnaire. Ensuite, j'exécute un try-catch/except sur le bloc de code extrayant les statuts des données. J'utilise try-catch car parfois l'API Twitter ne renvoie pas de données mais un JSON mentionnant l'erreur. Je ne veux pas que mon programme s'arrête dans de tels cas. De plus, je veux qu'il récupère à quel numéro de requête cela se produit et qu'il sauvegarde mes données Twitter à l'aide de la commande de sauvegarde automatique. Twitter nous permet de faire 180 requêtes toutes les 15 minutes. C'est environ 12 requêtes par minute ou une requête toutes les cinq secondes. Juste pour être sûr, j'ajoute une commande sleep pour mettre mon programme en veille pendant 5 secondes après l'exécution d'une itération.

Après cela, le code affichera le nombre de tweets que le script a collectés jusqu'à présent.

Enfin, il est temps de passer à l'astuce d'optimisation majeure. J'ai testé ce script pendant près d'une semaine et j'ai obtenu le nombre de tweets suivant pour chaque valeur de min_faves. Je peux obtenir un maximum de 100 tweets par requête et je veux en obtenir autant que possible. Actuellement, il n'y a pas beaucoup de tweets avec des valeurs plus élevées de min_faves mais nous voulons prendre en compte les moments où, peut-être, l'entreprise ou le mot-clé est tendance. La valeur maximale de min_faves peut être de 999999.

Valeur de min_faves Nombre de tweets
100,000 1
90,000 1
80,000 1
70,000 2
60,000 3
50,000 6
40,000 6
30,000 12
25,000 12

Par conséquent, j'utilise une logique qui obtiendrait des tweets à partir d'une valeur de min_faves de 60000, puis la diminue de 10000 à chaque fois jusqu'à atteindre 10000. Mais si, par exemple, le mot-clé est tendance et que j'obtiens 100 tweets lorsque je travaille avec la valeur de min_faves à 30000, cela va augmenter le min_faves à 35000 puis obtenir à nouveau les résultats. Donc maintenant, la nouvelle logique est de 5000 au lieu de 10000. Cependant, si le changement diminue à moins de 1000, je lui demande d'ignorer et de continuer en soustrayant 1000.

Je spécifie un intervalle fixe de 1000 dont min_faves doit diminuer si min_faves est inférieur ou égal à 10000.

À la fin du programme, le programme vous informera que le travail est terminé en affichant ‘Fin’.

Vous pouvez trouver l'intégralité du code sur GitHub.

C’est tout. Dans le prochain tutoriel sur les données Twitter, je vais vous apprendre à récupérer des tweets en temps réel à l'aide de l'outil de big data ‘Flume’. Restez à l'écoute !

author

Akshay Nagpal

Auteur · CloudSigma

Preslav Dobrev est un designer créatif chez CloudSigma, axé sur une identité commerciale cohérente à travers des canaux marketing traditionnels et innovants. Il excelle à fusionner la vision artistique avec le marketing stratégique pour créer des récits de marque percutants.

Commentaires

Aucun commentaire pour l'instant. Soyez le premier.