[PYTHON] Versuchen Sie, die Anzahl der Likes auf Twitter zu schätzen

Einführung

Der Ursprung davon war der Versuch, das Schaben für die Produktion von Pferderennen-KI zu lernen, und ich suchte nach der Lernaufgabe. Wie auch immer, ich denke, es wäre schön, eine Abfolge von Datenerfassung → Vorverarbeitung → Lernen → Inferenz zu haben. ** Schätzen Sie die Anzahl der Likes aus dem Tweet-Inhalt meiner Lieblingsmänner Hana Oba ** Ich beschloss, es zu einer Lernaufgabe zu machen. Dieses Mal ist es das Ziel, sich mit einem einfachen Fluss zu bewegen, und ich werde in Zukunft an der Genauigkeit arbeiten.

Datensammlung

Die Datenerfassung erfolgt über die Twitter-API. Für die Registrierungsmethode habe ich auf den folgenden Artikel verwiesen. Tipps zum Bestehen der Twitter-API-Registrierung in 30 Minuten (mit japanischer Übersetzung) Nun, es ist ein Schmerz zu schreiben, wenn man den Grund bedenkt, also sei bitte vorbereitet. Ich war hier für einen Tag niedergeschlagen. (Japanisch ist unpraktisch ...)

Nach der Registrierung können Sie Tweet erhalten, also werde ich das Akquisitionsprogramm schreiben. Normalerweise scheint die Twitter-API nur bis zu 200 Tweets abrufen zu können. Dies kann auch anhand des folgenden Artikels "Abrufen aller Tweets von @hana_oba" realisiert werden. Ich werde den Code schreiben. Die meisten davon sind Kopien des Referenzartikelprogramms, daher werde ich nur die Teile auflisten, die ich hier geschrieben habe. Holen Sie sich viele Tweets mit TwitterAPI. Berücksichtigen Sie serverseitige Fehler (in Python)

get_twitter.py


    #Holen Sie sich durch Angabe des Benutzers (Bildschirm_name)
    getter = TweetsGetter.byUser('hana_oba')
    df = pd.DataFrame(columns = ['week_day','have_photo','have_video','tweet_time','text_len','favorite_count','retweet_count'])
 
    cnt = 0
    for tweet in getter.collect(total = 10000):
        cnt += 1

        week_day = tweet['created_at'].split()[0]
        tweet_time = tweet['created_at'].split()[3][:2]

        #Geben Sie in der Liste die Spalte an, die Sie als Eoncode verwenden möchten. Natürlich können Sie mehrere angeben.
        list_cols = ['week_day']
        #Geben Sie die Spalte an, die OneHotEncode enthalten soll. Geben Sie auch die Abschlussmethode für Null oder Unbekannt an.
        ce_ohe = ce.OneHotEncoder(cols=list_cols,handle_unknown='impute')

        photo = 0
        video = 0
        if 'media' in tweet['entities']:

            if 'photo' in tweet['entities']['media'][0]['expanded_url']:
                photo = 1
            else:
                video = 1
        
        df = df.append(pd.Series([week_day, photo, video, int(tweet_time), len(tweet['text']),tweet['favorite_count'],tweet['retweet_count']], index=df.columns),ignore_index=True)
        df_session_ce_onehot = ce_ohe.fit_transform(df)

    df_session_ce_onehot.to_csv('oba_hana_data.csv',index=False)

Ich habe nichts Besonderes entwickelt, aber es ist schwierig, mit Daten gut umzugehen, ohne die Spezifikationen der Twitter-API zu verstehen. Lassen Sie uns also die gewünschten Daten per Google oder durch Ausprobieren abrufen. Dieser Datensatz ist --Tag

Vorverarbeitung, Lernen

Bis zu diesem Zeitpunkt habe ich das Programm auf meinem eigenen PC ausgeführt, aber obwohl es keine große Sache ist, reichen die Maschinenspezifikationen aufgrund zukünftiger Entwicklungen nicht aus. Von hier aus werde ich es auf Google Colaboratory ausführen.

Lesen Sie zuerst die vom vorherigen Programm ausgegebenen Daten.

import pandas as pd

datapath = '/content/drive/My Drive/data_science/'
df = pd.read_csv(datapath + 'oba_hana_data.csv')

Die Gesamtzahl der Daten beträgt

df.shape

Es gab 2992 Fälle.

(2992, 13)

Ich werde 70% der Gesamtzahl als Trainingsdaten und die restlichen 30% als Verifizierungsdaten verwenden. Die Daten sind in chronologischer Reihenfolge angeordnet, und wenn sie nur 70% von vorne entfernt sind, sind die Bedingungen wie die Anzahl der Follower zu diesem Zeitpunkt unterschiedlich, sodass ich zufällig 70% erwerben möchte. Obwohl es einige analoge Elemente enthält, werden wir dieses Mal 2400 Fälle, was etwa 70% der Gesamtzahl entspricht, als Trainingsdaten und den Rest als Verifizierungsdaten verwenden.

df_train = df.sample(n=2400)
df_test = df.drop(df_train.index)

x_train = df_train.iloc[:,:11]
t_train = df_train['favorite_count']

x_test = df_test.iloc[:,:11]
t_test = df_test['favorite_count']

Lassen Sie uns mit diesen Daten einmal in einer zufälligen Gesamtstruktur lernen.

#Modelldeklaration
from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor(n_estimators=2000, max_depth=10,
                                min_samples_leaf=4, max_features=0.2, random_state=0)

#Modelllernen
model.fit(x_train, t_train)

Mal sehen, die Partitur

#Modell Bestätigung
print(model.score(x_train, t_train))
print(model.score(x_test, t_test))
0.5032870524389081
0.3102920436689621

Was die Punktzahl darstellt, ist der Entscheidungsfaktor, da dies ein Regressionsproblem ist. Wenn Sie einen Wert von 0 bis 1 annehmen, ist die Genauigkeit umso höher, je näher er an 1 liegt.

Wenn man sich diesmal die Punktzahl ansieht, ist die Genauigkeit nicht gut. Lassen Sie uns nun eine Vorverarbeitung durchführen, um die Genauigkeit zu verbessern. Schauen wir uns zunächst den Beitrag der einzelnen Parameter an.

#Variable Speicherung in absteigender Reihenfolge des Beitrags der Merkmalsmenge
feat_names = x_train.columns.values
importances = model.feature_importances_
indices = np.argsort(importances)[::-1]

plt.figure(figsize=(10, 10))
plt.title('Feature importances')
plt.barh(range(len(indices)), importances[indices])
plt.yticks(range(len(indices)), feat_names[indices], rotation='horizontal')
plt.show();

feature.png

Ich möchte, dass Sie darüber nachdenken, was für eine Schätzung wichtig ist. Es scheint, dass have_photo den höchsten Beitrag leistet, dh das Vorhandensein oder Fehlen von Fotos ist groß. Die Videos scheinen nicht so wichtig zu sein, aber die Videos machen wahrscheinlich nicht einmal 3% der Gesamtzahl aus. Es scheint, dass die Tage fast irrelevant sind. Dies kann aus den Daten entfernt werden.

Wir werden auch Ausreißer betrachten.

#Visualisiere mit Grafik
plt.figure(figsize=(8, 6))
plt.scatter(range(x_train.shape[0]), np.sort(t_train.values))
plt.xlabel('index', fontsize=12)
plt.ylabel('y', fontsize=12)
plt.show()

glaph.png

Sie können sehen, dass einige der Trainingsdaten eindeutig nicht synchron sind. Ich werde diese Daten entfernen, da ich von diesen gezogen werden und lernen kann.

#Es ist die Umkehrung der Erklärungsreihenfolge, aber wenn Sie dies nicht in dieser Reihenfolge tun, können Sie nicht mit entfernten Ausreißern teilen
#Ausreißer entfernen
df_train = df_train[df_train['favorite_count'] < 4500]
df_train.shape

#Tag löschen
x_train = df_train.iloc[:,7:11]
t_train = df_train['favorite_count']
x_test = df_test.iloc[:,7:11]
t_test = df_test['favorite_count']

Jetzt lernen wir noch einmal und sehen die Partitur.

#Modell Bestätigung
print(model.score(x_train, t_train))
print(model.score(x_test, t_test))
0.5175871090277164
0.34112337762190204

Es ist besser als zuvor. Lassen Sie uns abschließend die Verteilung der tatsächlichen Anzahl von Likes und der geschätzten Anzahl von Likes in einem Histogramm betrachten.

compare.png

Blau ist die geschätzte Anzahl und Orange ist die tatsächliche Anzahl von Likes. Es gibt sicherlich eine Lücke, aber ich kann nichts sagen, weil ich nicht jeden von ihnen gesehen habe.

Die Verbesserung der Genauigkeit wird auch als nächstes kommen.

Referenz

Tipps zum Bestehen der Twitter-API-Registrierung in 30 Minuten (mit japanischer Übersetzung)

Holen Sie sich viele Tweets mit TwitterAPI. Berücksichtigen Sie serverseitige Fehler (in Python)

Recommended Posts

Versuchen Sie, die Anzahl der Likes auf Twitter zu schätzen
Versuchen Sie, die Genauigkeit der Twitter-ähnlichen Zahlenschätzung zu verbessern
Veröffentlichen Sie das Thema Google Mail auf Twitter
Versuchen Sie, die Parameter der Gammaverteilung zu schätzen, während Sie einfach MCMC implementieren
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Versuchen Sie, die Bewegung des Sonnensystems zu simulieren
Speichern Sie Suchergebnisse auf Twitter in CSV.
Ermitteln Sie mithilfe der Twitter-API die Anzahl der Tweets, die sich auf ein bestimmtes Keyword beziehen
Wie man die Portnummer des xinetd-Dienstes kennt
So ermitteln Sie die Anzahl der Stellen in Python
Versuchen Sie, die Probleme des "Matrix-Programmierers" zu lösen (Kapitel 1).
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
Posten Sie mit der API auf Twitter in Ihrem Konto
Tweet die dreifache Vorhersage des Bootsrennens auf Twitter
Ein Tool zum Verfolgen von Postern mit einer großen Anzahl von Likes auf Instagram [25 Minuten bis 1 Sekunde]
Befehl zum Überprüfen der Gesamtzahl der physischen CPU-Kerne / logischen Kerne / physischen Speicher auf dem Mac
Veröffentlichte die Anzahl der neuen Corona-Positiven in Tokio an Slack (auf Heroku bereitgestellt)
10. Zählen der Anzahl der Zeilen
Versuchen Sie, Twitter-Trends zu analysieren
Versuchen Sie es mit der Twitter-API
Holen Sie sich die Anzahl der Ziffern
Versuchen Sie es mit der Twitter-API
Berechnen Sie die Anzahl der Änderungen
So finden Sie die optimale Anzahl von Clustern für k-means
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Zählen Sie die Anzahl der Zeichen im Text in der Zwischenablage auf dem Mac
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Versuchen Sie, die Probleme / Probleme des "Matrix-Programmierers" zu lösen (Kapitel 0-Funktion)
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Wie man die Anzahl der GPUs aus Python kennt ~ Hinweise zur Verwendung von Multiprocessing mit pytorch ~
So geben Sie die Anzahl der ANSICHTEN, Likes und Bestände von Artikeln aus, die in Qiita an CSV gesendet wurden (erstellt mit "Python + Qiita API v2")
[Anmerkung] Versuchen wir, den Stromverbrauch vorherzusagen! (Teil 1)
Holen Sie sich die Anzahl der Ansichten von Qiita
Zeigen Sie das Bild der an den PC angeschlossenen Kamera auf der GUI an.
Erste Python ② Versuchen Sie, Code zu schreiben, während Sie die Funktionen von Python untersuchen
Versuchen Sie, das N Queen-Problem mit SA von PyQUBO zu lösen
Berechnung der Anzahl der Assoziationen von Klamer
Versuchen Sie, das Thema Pelican vorzustellen
Django: Variiert die Anzahl der untergeordneten Formulare in Abhängigkeit von der Anzahl der Eingabeelemente
Probieren Sie Ajax auf der Django-Seite aus
Versuchen Sie, die kumulierte Rendite des Rollovers im Futures-Handel zu modellieren
Verkleide das Gras auf GitHub und versuche Ingenieur zu werden.
Verwendung von Jupyter am Frontend von Spacon ITO
Ein Befehl zum einfachen Überprüfen der Netzwerkgeschwindigkeit auf der Konsole
Holen Sie sich die Anzahl der Youtube-Abonnenten
Probieren Sie Cython in kürzester Zeit aus
Ich habe das Bild der Science University auf Twitter mit Word2Vec überprüft.
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Versuchen Sie, das Triplett des Bootsrennens vorherzusagen, indem Sie das Lernen bewerten
Der schnellste Weg, EfficientNet auszuprobieren
Ergänzung zur Erklärung von vscode
Ich habe versucht, den Abschnitt zu schätzen.
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Der einfachste Weg, PyQtGraph auszuprobieren