YouTube Statistics

Veröffentlicht: 6. März 2012 in Hochschule, Web
Schlagwörter:, , , , , ,

Bereits im vergangen Jahr habe ich eine Hausarbeit über YouTube-Statistiken erstellt. Dazu habe ich bereits die Einträge „Python Classifier“ und „MySQL Datenbank“ erstellt. Nun kommt etwas verspätet auch ein Eintrag dazu🙂

Inhaltlich habe ich in der Arbeit einen Testserver aufgesetzt, Daten über die YouTube Data API angefragt und die Daten in eine MySQL Datenbank geschrieben. Die Daten wurden dann zu einem späteren Zeitpunkt mit Hilfe eines Python-Skripts ausgewertet.

Der erste Schritt war die Analyse des Datenverkehrs eines YouTube Videos. Dazu habe ich ein Video, welches in verschiedenen Qualitätsstufen vorhanden war, im Browser geladen und den Datenverkehr per Wireshark aufgezeichnet. Diese Messung hat dargestellt, dass mit jeder Erhöhung der Videoqualitätsstufe (480p, 720p, 1080p) sich das übertragene Datenvolumen um Faktor ~2 erhöht hat. Interessanter war bei der Messung, wie die Daten von YouTube übertragen werden (kein Streaming, sondern ein HTTP-Download) und das die Daten im voraus geladen werden, um einen Videocache im Browser zu befüllen.

Der zweite Schritt bestand darin, Daten von der YouTube Data API über die beliebtesten, am meisten diskutierten und neuesten Videos und deren Kommentare anzufragen. Die Daten wurde einmal täglich angefragt und lokal auf dem Server in eine MySQL Datenbank geschrieben. Die Auswertung der Daten wurde von einem Python Skript mit NLP-Verfahren ausgeführt. Um die Daten besser analysieren zu können, hab ich im voraus aus einigen Video-Kommentaren Trainingsdaten erzeugt und diese in die Kategorieren „good“, „bad“ und „spam“ kategorisiert um damit später den „Naive Bayes Classifier“ trainieren zu können. Hierzu ein kleiner Auszug aus dem Analyse Skript:

print ">> open documents ..."
file_spam = open( cwd + "spam.txt" ) # 'spam' comments
file_com_good = open( cwd + "com_good.txt" ) # 'good' comments
file_com_bad = open( cwd + "com_bad.txt" ) # 'bad' comments

print ">> prepare documents ..."
documents = ([ ( dict(line2words(line)), 'spam') for line in file_spam.readlines()] +
[ ( dict(line2words(line)), 'bad') for line in file_com_bad.readlines()] +
[ ( dict(line2words(line)), 'good') for line in file_com_good.readlines()])

print ">> close all training data documents ..."
file_spam.close()
file_com_good.close()
file_com_bad.close()

Zusätzlich hab ich versucht, die Genauigkeit meiner Classifiers auf über 80 % zu halten. Dazu habe ich die Classifier so oft trainiert, bis die gewünschten 80 % erreicht wurden.

accuracy = 0
while accuracy < 0.8:
    # shuffle the documents to get random test and train data
    random.shuffle(documents)

    # divide the train <-> test set by 90:10 percent
    pivot = int(math.floor(len(documents) * 0.1))
    train_set, test_set = documents[pivot:], documents[:pivot]

    classifier = nltk.NaiveBayesClassifier.train(train_set)
    accuracy = nltk.classify.accuracy(classifier, test_set)

Die zu analysieren Daten wurden dazu täglich aus der Datenbank ausgelesen, in Blöcken analysiert und die Ergebnisse in eine weitere Datenbank-Tabelle zurück geschrieben. Die Analyse der Daten ist Dank des umfangreichen NLP-Pakets in Python relativ einfach und kann mit Hilfe des folgenden Aufrufs ausgeführt werden:

result = classifier.classify( line2words(text) )

Der Naive Bayes Classifier ist sehr performant, wodurch die Analyse von mehreren zehntausend Datensätzen innerhalb weniger Minuten möglich war.

Insgesamt hat die Auswertung der Daten sehr aufschlussreiche Ergebnisse gebracht und das praktische Arbeiten mit Python NLTK war eine interessante und lehrreiche Herausforderung. Alle Ergebnisse können in meiner Arbeit Youtube-Statistics.pdf nachgelesen werden.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s