[PYTHON] "Der Typ, der die Anzahl der Aufrufe aus dem Titel von Jar Jals Video vorhersagt"

Einführung

Dieses Mal werden wir über die Erstellung eines Modells sprechen, das die Anzahl der Aufrufe aus dem Titel von Jar Jals Video vorhersagt. Da NLP ein kompletter Amateur ist, habe ich versucht, es zu imitieren, indem ich mich auf die Artikel anderer Leute bezog.

Was ist Jar Jal?

Jar Jar ist eine ** kräftigste Lachkombination **, die aus Junpei Goto und Shusuke Fukutoku besteht, die zum Hauptquartier von Yoshimoto Kogyo in Tokio gehören. Derzeit veröffentliche ich tägliche Nachrichten zum Projekt JARUJARU TOWER auf dem offiziellen YouTube-Kanal von Jarjaru. Ich werde. 01d318f64a7d2aec966c8def02c80acc2b69fcd3.jpg

Hintergrund

Es ist sehr kostspielig, das täglich auf Youtube veröffentlichte Material zu überprüfen. Außerdem wachsen Jar Jal-Videos mit unklaren Titeln leichter (sehr subjektiv). Zum Beispiel "Der Typ, der von einem schlechten Angestellten zu einem schlechten Kunden gemacht wurde" "[Der Eier-Typ des Diktators](https: // www. youtube.com/watch?v=RPXFYBRJVMw) ". Wenn der Titel Wörter wie "Gefährlich, verrückt" enthält, ist die Anzahl der Aufrufe meiner Meinung nach im Allgemeinen hoch. Andererseits wird die Geschichte "Der Typ, der die Geschichte von Chara Man Bancho sieht" seltener gespielt, und jeder im Video mit diesem Titel * Es ist eine jährliche Veranstaltung, bei der eine niedrige Bewertung ** vergeben wird, ohne Fragen zu stellen. スクリーンショット 2019-12-20 13.51.23.png

Entwicklungsumgebung

Datensammlung

Dieses Mal werden wir die Youtube-Daten-API verwenden, um Videotitel und -ansichten als Set zu sammeln. Der Artikel "Verwenden von YouTube Data API v3 von Python zum Abrufen von Videos eines bestimmten Kanals [^ 1]" und "Verwenden von YouTube Data API v3 von Python zum Abrufen der Anzahl der sanft angezeigten Videos [^ 2]" Ich habe auf den Artikel verwiesen. Da für die Verwendung der Youtube-API ein API-Schlüssel erforderlich ist, "So erhalten Sie den YouTube-API-API-Schlüssel [^ 3]", habe ich den Schlüssel unter Bezugnahme auf diesen Artikel erhalten. Sammeln Sie zunächst den Titel und die Video-ID des folgenden Codevideos (erforderlich, um die Anzahl der Aufrufe des Videos zu ermitteln).

jarujaru_scraping1.py


import os
import time
import requests

import pandas as pd


API_KEY = os.environ['API_KEY']#Bringen Sie die der Umgebungsvariablen hinzugefügte ID mit
CHANNEL_ID = 'UChwgNUWPM-ksOP3BbfQHS5Q'


base_url = 'https://www.googleapis.com/youtube/v3'
url = base_url + '/search?key=%s&channelId=%s&part=snippet,id&maxResults=50&order=date'
infos = []

while True:
    time.sleep(30)
    response = requests.get(url % (API_KEY, CHANNEL_ID))
    if response.status_code != 200:
        print('Endet mit einem Fehler')
        print(response)
        break
    result = response.json()
    infos.extend([
        [item['id']['videoId'], item['snippet']['title'], item['snippet']['description'], item['snippet']['publishedAt']]
        for item in result['items'] if item['id']['kind'] == 'youtube#video'
    ])

    if 'nextPageToken' in result.keys():
        if 'pageToken' in url:
            url = url.split('&pageToken')[0]
        url += f'&pageToken={result["nextPageToken"]}'
    else:
        print('Erfolgreiche Fertigstellung')
        break

videos = pd.DataFrame(infos, columns=['videoId', 'title', 'description', 'publishedAt'])
videos.to_csv('data/video1.csv', index=None)

Verwenden Sie nach dem Sammeln der Videotitel und IDs den folgenden Code, um die Anzahl der Aufrufe zu erfassen.

jarujaru_scraping2.py


import os
import time
import requests

import pandas as pd


API_KEY = os.environ['API_KEY']
videos = pd.read_csv('videos.csv')
base_url = 'https://www.googleapis.com/youtube/v3'
stat_url = base_url + '/videos?key=%s&id=%s&part=statistics'

len_block = 50
video_ids_per_block = []
video_ids = videos.videoId.values

count = 0
end_flag = False
while not end_flag:
    start = count * len_block
    end = (count + 1) * len_block
    if end >= len(video_ids):
        end = len(video_ids)
        end_flag = True

    video_ids_per_block.append(','.join(video_ids[start:end]))

    count += 1

stats = []
for block in video_ids_per_block:
    time.sleep(30)
    response = requests.get(stat_url % (API_KEY, block))
    if response.status_code != 200:
        print('error')
        break
    result = response.json()
    stats.extend([item['statistics'] for item in result['items']])

pd.DataFrame(stats).to_csv('data/stats.csv', index=None)
videos = pd.read_csv('videos.csv')
stasas = pd.read_csv('stats.csv')
pd.merge(videos, stasas, left_index=True, right_index=True).to_csv('data/jarujaru_data.csv')

Die folgenden Daten werden gespeichert. スクリーンショット 2019-12-20 14.43.11.png

Playback-Vorhersagemodell

Beschriftung

Dieses Mal werde ich die Anzahl der Ansichten in drei Stufen unterteilen und daraus ein Klassifizierungsproblem machen. Das Histogramm der Wiedergabezahl ist wie folgt. Aus der folgenden Grafik werden wir mit überwältigender Subjektivität beschriften. Die Anzahl der Aufrufe beträgt weniger als 100.000, 100.000 oder mehr und weniger als 250.000 und 250.000 oder mehr. image.png

Der folgende Code ist ein Code, der nur den Kontrollnamen aus der Beschriftung und den Titel des Videos übernimmt. Jar Jals Conte-Video verwendet immer den Conte-Namen in "".

jarujaru_scraping3.py


import re
import pandas as pd
info = []
df = pd.read_csv('data/jarujaru_data.csv')
for row, item in df.iterrows():
    if '『' in item['title']:
        title = 'x' + item['title']
        title = re.split('[『』]', title)[1]
        if item['viewCount'] >= 250000:
            label = 2
        elif 100000 <= item['viewCount'] < 250000:
            label = 1
        elif item['viewCount'] < 100000:
            label = 0
        info.extend([[title, item['viewCount'], item['likeCount'], item['dislikeCount'], item['commentCount'], label]])
        
pd.DataFrame(info, columns=['title', 'viewCount', 'likeCount', 'dislikeCount', 'commentCount', 'label']).to_csv('data/jarujaru_norm.csv')

Morphologische Lösung usw.

In diesem Artikel [^ 4] können Sie den Titel des Steuerelements morphologisch analysieren und den Titel in einen Merkmalsvektor (Bag-of-Words-Format) konvertieren. Unten ist ein Teil des Codes. Alle Implementierungen werden auf GitHub [^ 5] veröffentlicht.

jarujaru.py


import analysis #Ich werde es auf meinem eigenen Code, GitHub, veröffentlichen.
import pandas as pd
from gensim import corpora
from gensim import matutils

def vec2dense(vec, num_terms):
    return list(matutils.corpus2dense([vec], num_terms=num_terms).T[0])

df = pd.read_csv('data/jarujaru_norm.csv')
words = analysis.get_words(df['title']) #Geben Sie hier den morphologisch analysierten Titel ein

#Erstelle ein Wörterbuch
dictionary = corpora.Dictionary(words)
dictionary.filter_extremes(no_below=2, keep_tokens=['Chara','Mann','Bancho'])
dictionary.save('data/jarujaru.dict')
courpus = [dictionary.doc2bow(word) for word in words]

# Bag-of-In das Wortformat konvertieren
data_all = [vec2dense(dictionary.doc2bow(words[i]),len(dictionary)) for i in range(len(words))]

Modelllernen

Dieses Mal haben wir SVM als Modell übernommen, da die Anzahl der Daten gering ist. Teilen Sie die Daten in Trainingsdaten und Testdaten und tauchen Sie in das Modell ein.

jarujaru.py


from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

#Einstellen von Trainingstestdaten
train_data = data_all
X_train, X_test, y_train, y_test = train_test_split(train_data, df['label'], test_size=0.2, random_state=1)

#Datenstandardisierung
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)


#Erstellen eines Lernmodells
clf = SVC(C = 1, kernel = 'rbf')
clf.fit(X_train_std, y_train)
import pickle
with open('data/model.pickle', mode='wb') as fp:
     pickle.dump(clf, fp)

Lassen Sie uns das Modell bewerten.

jarujaru.py


score = clf.score(X_test_std, y_test)
print("{:.3g}".format(score))
predicted = clf.predict(X_test_std)

Die Genauigkeit betrug 53%. Es sind 33%, also kann ich lernen (obwohl es schrecklich ist). Schauen wir uns auch den Verwirrungsprozess an. Es scheint, dass die meisten Videos ein robustes Modell sind, das mehr als 100.000 Wiedergaben vorhersagt. image.png

Am Ende

Dieses Mal habe ich ein Modell erstellt, das die Anzahl der Aufrufe aus dem Titel des Videos von Jar Jal vorhersagt. Als NLP-Amateur wusste ich nicht viel über das Vektorisieren von Sätzen, aber ich konnte bis zum Ende ein Modell erstellen. Alle Implementierungen werden auf GitHub [^ 5] veröffentlicht. Das nächste Mal werde ich dieses Modell verwenden, um "LINE-Bot zu entwickeln, der Sie benachrichtigt, wenn es sich lohnt, es sich anzusehen, wenn ein Jar Jal-Video veröffentlicht wird". Außerdem möchte ich die Methode zur Vektorisierung von Sätzen und Modellen untersuchen, die mit Zeitreihendaten (LSTM usw.) umgehen.

[^ 1]: Videos für einen bestimmten Kanal mit YouTube Data API v3 von Python abrufen [^ 2]: Verwenden Sie YouTube Data API v3 von Python, um die Anzahl der Videoaufrufe sanft abzurufen [^ 3]: So erhalten Sie den YouTube-API-API-Schlüssel [^ 4]: Vorhersage der Klassifizierung von Nachrichtenartikeln durch maschinelles Lernen [^ 5]: Quellcode dieser Zeit

Recommended Posts

"Der Typ, der die Anzahl der Aufrufe aus dem Titel von Jar Jals Video vorhersagt"
Holen Sie sich die Anzahl der Ansichten von Qiita
Holen Sie sich den Songtitel aus dem Titel des von Ihnen gesungenen Videos
Der Typ, der Audio von YouTube-Wiedergabelisten herunterlädt
Eine Einführung in die Datenanalyse mit Python - Um die Anzahl der Videoansichten zu erhöhen -
Der Typ, der die Fitbit-Daten vom Server erhält
Berechnung der minimal erforderlichen Stimmenzahl aus der Stimmenzahl
Der Typ, der den Abschlag für Hugo von Qiita generiert
[Python] Ermittelt die Anzahl der Aufrufe aller veröffentlichten Artikel
Visualisieren Sie die Anzahl der Beschwerden von Lebensversicherungsunternehmen
Untersuchen Sie den Fehlerbereich bei der Anzahl der Todesfälle aufgrund einer Lungenentzündung
10. Zählen der Anzahl der Zeilen
Holen Sie sich die Anzahl der Ziffern
Berechnen Sie die Anzahl der Änderungen