Bonjour. Quand je me suis réveillé le matin, j'ai été surpris que «#Protest contre l'amendement à la loi du bureau du procureur» soit sur la tendance Twitter, alors je l'ai analysé. Twitter qui regorge de tweets politiques n'est pas Twitter. Twitter, que je connais, est un monde rempli de "Kintama Glitter Friday". Je ne pense pas qu'il y aura 2 millions de tweets politiques sur Twitter. Shinzo Abe ... C'est un mensonge ...
Tout d'abord, mon arrière-grand-père a dit pendant la guerre qu'il ne fallait pas croire ces chiffres comme une prémisse. Quand j'ai vu cela, j'ai d'abord soupçonné que "la tendance intentionnelle était causée par Bot et spam." Il existe également un risque de publication multiple par la même personne. Heureusement, j'ai postulé pour l'API Twitter il y a quelques mois, et maintenant je peux accéder librement à la recherche Twitter depuis le programme, donc j'aimerais écrire le code immédiatement.
from requests_oauthlib import OAuth1Session
import json
from datetime import datetime
import calendar
import csv
import time
from bs4 import BeautifulSoup
#Code pour accéder à l'API Twitter
consumer_key = *****
consumer_key_secret = *****
access_token = *****
access_token_secret = *****
#Accéder à l'API Twitter
twitter = OAuth1Session(consumer_key, consumer_key_secret, access_token, access_token_secret)
#Définissez une fonction de recherche sur Twitter. que est le mot de recherche, bot est de savoir s'il faut inclure le bot, le nombre est le nombre de tweets acquis, max_id est l'ID maximum du Tweet à rechercher.
def get(que,max_id):
params = {'q': que, 'count': 100, 'max_id': max_id, 'modules': 'status', 'lang': 'ja'}
#Accédez à Twitter.
req = twitter.get("https://api.twitter.com/1.1/search/tweets.json", params=params)
#Si l'accès réussit, les informations du Tweet sont conservées.
if req.status_code == 200:
search_timeline = json.loads(req.text)
limit = req.headers['x-rate-limit-remaining']
reset = int(req.headers['x-rate-limit-reset'])
print("API remain: " + limit)
if int(limit) == 1:
print('sleep')
time.sleep((datetime.fromtimestamp(reset) - datetime.now()).seconds)
#En cas d'échec, mettez fin au processus.
elif req.status_code == 503:
time.sleep(30)
req = twitter.get("https://api.twitter.com/1.1/search/tweets.json", params=params)
if req.status_code == 200:
search_timeline = json.loads(req.text)
#Repos API
limit = req.headers['x-rate-limit-remaining']
reset = int(req.headers['x-rate-limit-reset'])
print("API remain: " + limit)
if limit == 0:
print('sleep')
time.sleep((datetime.fromtimestamp(reset) - datetime.now()).seconds)
else:
print(req.status_code)
return [], 0
else:
print(req.status_code)
return [], 0
for i in range(len(search_timeline['statuses'])):
bs3obj = BeautifulSoup(search_timeline['statuses'][i]['source'], 'html.parser')
search_timeline['statuses'][i]['source'] = bs3obj.text
#Renvoie une liste d'informations sur les Tweets lorsque cette fonction est exécutée.
return search_timeline['statuses'], search_timeline['statuses'][-1]['id']
def TweetSearch(que, bot, rep):
max_id = 1259158522710730000 - 1
global search_timeline, tweetTime
tweetList = []
#Spécifiez s'il faut exclure les Tweets par bot.
if bot:
que = str(que + ' -bot -rt')
else:
que = str(que + ' -rt')
for i in range(rep):
time.sleep(1)
result, max_id = get(que,max_id)
if max_id == 0:
break
tweetList.extend(result)
return tweetList
word = '#Protestation contre le projet de loi modifiant la loi sur le bureau du procureur'
tweetList = TweetSearch(word,False,200)
head = [i for i in tweetList[0]]
#Sortie vers un fichier CSV
with open('tweetanalysis_02.csv','w',newline='', encoding='utf_8') as f:
writter = csv.writer(f)
writter.writerow(head)
for i in tweetList:
writter.writerow([i[key] for key in head])
Il y a une partie relativement lâche pour finir à la hâte. Pour ajouter une chose, un identifiant est attribué à chaque Tweet et vous pouvez le vérifier en regardant les 18 derniers chiffres de l'URL du Tweet. Et la valeur prise par cet identifiant devient plus grande à mesure que l'heure du Tweet devient plus tardive. En utilisant cette propriété pour limiter les recherches de Tweet avec max_id, vous pouvez empêcher l'extraction de Tweets en double lorsque plusieurs requêtes sont soumises. (Le nombre de Tweets pouvant être recherchés avec une seule requête peut aller jusqu'à 100 Tweets)
Exécutez ce programme, 5/9 23:46 --5 / 10 2:58 37935 Tweets enregistrés au format CSV.
À ce stade, vous pouvez voir qu'il n'atteint pas massivement 1 million. (En fait, à ce stade, la tendance aurait dû dépasser 1 million de Tweets) Soit dit en passant, il y a un élément appelé "retweet_count" dans les données acquises, et vous pouvez savoir combien de fois chacun des Tweets acquis a été retweeté. Si vous les additionnez brièvement, ce sera 391675, il semble donc préférable de penser que la tendance de Twitter inclut le Retweet. (En fait, les Tweets avant le 09/05 à 23h46 sont également considérés comme contribuant à la tendance) C'est aussi la première question posée ・ Publié par le même utilisateur ・ Bot, publication de spam Vérifions brièvement. Je ne suis pas une personne formidable qui peut gérer le CSV avec un logiciel statistique tel que R, donc cette fois c'est une méthode classique, mais je vais l'essayer facilement en utilisant Excel. (Parce que la quantité de données n'est pas si grande et je pensais que mon PC pourrait y résister)
Dans l'onglet [Données], cochez "utilisateur" dans l'élément [Supprimer les doublons] et vérifiez![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com /0/596394/04981035-8aa0-125f-ceee-1b3044ed2dc4.png) Effacer! Oh. Environ 1/4 des Tweets ont été supprimés en tant qu'utilisateurs en double. Bien sûr, cela ne vous dit pas à lui seul si le même utilisateur a été dérangé ou si de nombreux utilisateurs ont été tweetés plusieurs fois, mais au moins vous pouvez voir que le nombre d'utilisateurs qui tweetent est beaucoup moins qu'il n'y paraît.
Ensuite, découvrons la source de publication des données. Il analyse les données en supprimant les doublons d'utilisateurs. En conséquence, Twitter pour iPhone représentait plus de la moitié. En outre, en ce qui concerne d'autres choses, il existe de nombreux clients officiels tels que «Twitter pour iPad» et «Client Web Twitter» et des clients non officiels, et vous pouvez voir qu'il y a si peu de tweets en raison de la publication automatique et du spam. (En passant, vous ne pouvez pas définir la source de votre propre Tweet qui inclut la chaîne "Twitter", donc tant que Twitter est inclus dans la chaîne, vous pouvez conclure que 100% des messages ne sont pas publiés par spam.)
C'est simple, mais j'ai analysé les tendances Twitter. J'ai téléchargé le code Python et le fichier CSV obtenu sur github. https://github.com/ogadra/twitter_analysis La prochaine fois, j'aimerais augmenter les données et les analyser avec R etc.
Je ne suis pas sûr, mais il semble y avoir une omission d'acquisition. Je ne sais toujours pas si cela utilise l'API Twitter ou si je suis mauvais, alors je vais essayer de l'obtenir à nouveau.
Recommended Posts