Hallo. Als ich morgens aufwachte, war ich überrascht, dass "#Protest gegen die Gesetzesvorlage zur Änderung des Gesetzes über die Staatsanwaltschaft" im Twitter-Trend war, also analysierte ich es. Twitter, das mit politischen Tweets gefüllt ist, ist nicht Twitter. Twitter, das ich kenne, ist eine Welt voller "Kintama Glitter Friday". Ich glaube nicht, dass es auf Twitter 2 Millionen politische Tweets geben wird. Shinzo Abe ... Es ist eine Lüge ...
Zunächst sagte mein Urgroßvater während des Krieges, dass Sie diese Zahlen nicht als Voraussetzung glauben sollten. Als ich das sah, vermutete ich zuerst, dass "der absichtliche Trend durch Bot und Spam verursacht wurde". Es besteht auch das Risiko, dass dieselbe Person mehrere Beiträge verfasst. Glücklicherweise habe ich mich vor einigen Monaten für die Twitter-API beworben, und jetzt kann ich die Twitter-Suche im Programm frei berühren, sodass ich den Code sofort schreiben möchte.
from requests_oauthlib import OAuth1Session
import json
from datetime import datetime
import calendar
import csv
import time
from bs4 import BeautifulSoup
#Code für den Zugriff auf die Twitter-API
consumer_key = *****
consumer_key_secret = *****
access_token = *****
access_token_secret = *****
#Greifen Sie auf die Twitter-API zu
twitter = OAuth1Session(consumer_key, consumer_key_secret, access_token, access_token_secret)
#Definieren Sie eine Funktion für die Suche auf Twitter. que ist das Suchwort, bot ist, ob bot eingeschlossen werden soll, count ist die Anzahl der erfassten Tweets, max_id ist die maximale ID des zu durchsuchenden Tweets.
def get(que,max_id):
params = {'q': que, 'count': 100, 'max_id': max_id, 'modules': 'status', 'lang': 'ja'}
#Greifen Sie auf Twitter zu.
req = twitter.get("https://api.twitter.com/1.1/search/tweets.json", params=params)
#Wenn der Zugriff erfolgreich ist, bleiben die Tweet-Informationen erhalten.
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)
#Wenn dies fehlschlägt, beenden Sie den Vorgang.
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)
#API-Rest
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
#Gibt eine Liste mit Tweet-Informationen zurück, wenn diese Funktion ausgeführt wird.
return search_timeline['statuses'], search_timeline['statuses'][-1]['id']
def TweetSearch(que, bot, rep):
max_id = 1259158522710730000 - 1
global search_timeline, tweetTime
tweetList = []
#Geben Sie an, ob Tweets von Bot ausgeschlossen werden sollen.
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 = '#Protest gegen die Gesetzesvorlage zur Änderung des Gesetzes der Staatsanwaltschaft'
tweetList = TweetSearch(word,False,200)
head = [i for i in tweetList[0]]
#Ausgabe in CSV-Datei
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])
Es gibt einen relativ losen Teil, der mit Eile endet. Um eine Sache hinzuzufügen, wird jedem Tweet eine ID zugewiesen, und Sie können diese überprüfen, indem Sie sich die letzten 18 Ziffern der Tweet-URL ansehen. Und der Wert, den diese ID annimmt, wird größer, wenn die Tweet-Zeit später wird. Indem Sie diese Eigenschaft verwenden, um die Suche nach Tweets mit max_id einzuschränken, können Sie verhindern, dass doppelte Tweets extrahiert werden, wenn mehrere Abfragen gesendet werden. (Die Anzahl der Tweets, die mit einer Abfrage durchsucht werden können, beträgt bis zu 100 Tweets.)
Führen Sie dieses Programm aus, 5/9 23:46 --5 / 10 2:58 37935 Tweets in CSV gespeichert.
An diesem Punkt können Sie sehen, dass es nicht überwältigend 1 Million erreicht. (Eigentlich hätte der Trend zu diesem Zeitpunkt 1 Million Tweets überschreiten sollen) Übrigens gibt es in den erfassten Daten ein Element namens 'Retweet_count', und Sie können wissen, wie oft jeder der erfassten Tweets Retweet war. Wenn Sie sie kurz addieren, wird es 391675 sein, also scheint es besser zu denken, dass der Trend von Twitter Retweet einschließt. (Tatsächlich wird auch davon ausgegangen, dass Tweets vor dem 5. Mai um 23:46 Uhr zum Trend beitragen.) Es ist auch die erste aufgeworfene Frage ・ Gepostet von demselben Benutzer ・ Bot, Spam-Posting Lassen Sie uns kurz überprüfen. Ich bin keine großartige Person, die mit CSV mit statistischer Software wie R umgehen kann. Diesmal ist es also eine klassische Methode, aber ich werde es einfach mit Excel versuchen. (Weil die Datenmenge nicht so groß ist und ich dachte, mein PC könnte es aushalten)
Aktivieren Sie auf der Registerkarte [Daten] den Befehl 'Benutzer' im Element [Duplikate löschen] und aktivieren Sie /0/596394/04981035-8aa0-125f-ceee-1b3044ed2dc4.png) Löschen! Oh. Etwa 1/4 der Tweets wurden als doppelte Benutzer entfernt. Dies allein sagt Ihnen natürlich nicht, ob derselbe Benutzer durcheinander gebracht wurde oder ob viele Benutzer mehrmals getwittert wurden, aber zumindest können Sie sehen, dass die Anzahl der Benutzer, die twittern, viel geringer ist, als es aussieht.
Lassen Sie uns als Nächstes die Datenquellenquelle herausfinden. Es werden Daten analysiert, wobei Benutzerduplikate entfernt werden. Infolgedessen machte Twitter für iPhone mehr als die Hälfte aus. Auch in Bezug auf andere Dinge gibt es viele offizielle Kunden wie "Twitter für iPad" und "Twitter Web Client" und inoffizielle Kunden, und Sie können sehen, dass es aufgrund der automatischen Veröffentlichung und des Spam so wenige Tweets gibt. (Übrigens können Sie die Quelle Ihres eigenen Tweets, der die Zeichenfolge "Twitter" enthält, nicht festlegen. Solange Twitter in der Zeichenfolge enthalten ist, können Sie daraus schließen, dass 100% der Beiträge nicht per Spam veröffentlicht werden.)
Es ist einfach, aber ich habe Twitter-Trends analysiert. Ich habe den Python-Code und die erhaltene CSV-Datei auf github hochgeladen. https://github.com/ogadra/twitter_analysis Nächstes Mal möchte ich die Daten erhöhen und mit R usw. analysieren.
Ich bin mir nicht sicher, aber es scheint eine Auslassung des Erwerbs zu geben. Ich bin mir immer noch nicht sicher, ob dies die Twitter-API verwendet oder ob ich schlecht bin, also werde ich versuchen, es erneut zu bekommen.
Recommended Posts