Wie ich Habr analysiert habe, Teil 1: Trends

Als der Neujahrs-Olivier fertig war, hatte ich nichts zu tun und beschloss, alle Artikel von Habrahabr (und verwandten Plattformen) auf meinen Computer herunterzuladen und zu erkunden.

Es gab mehrere interessante Geschichten. Die erste davon ist die Entwicklung des Formats und der Themen der Artikel im Laufe des 12-jährigen Bestehens der Website. Beispielsweise ist die Dynamik einiger Themen durchaus bezeichnend. Fortsetzung - unter dem Schnitt.

Wie ich Habr analysiert habe, Teil 1: Trends

Parsing-Prozess

Um zu verstehen, wie sich Habr entwickelte, war es notwendig, alle seine Artikel durchzugehen und daraus Metainformationen (z. B. Daten) zu extrahieren. Die Umgehung war einfach, da die Links zu allen Artikeln wie „habrahabr.ru/post/337722/“ aussehen und die Nummern streng der Reihe nach angegeben sind. Da ich wusste, dass der letzte Beitrag eine Nummer von etwas weniger als 350 hat, habe ich einfach alle möglichen Dokument-IDs in einer Schleife durchgegangen (Python-Code):

import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
    docs = p.map(download_document, np.arange(350000))

Funktion download_document versucht, die Seite mit der entsprechenden ID zu laden und aus der HTML-Struktur aussagekräftige Informationen zu extrahieren.

import requests
from bs4 import BeautifulSoup

def download_document(pid):
    """ Download and process a Habr document and its comments """
    # выгрузка документа
    r = requests.get('https://habrahabr.ru/post/' +str(pid) + '/')
    # парсинг документа
    soup = BeautifulSoup(r.text, 'html5lib') # instead of html.parser
    doc = {}
    doc['id'] = pid
    if not soup.find("span", {"class": "post__title-text"}):
        # такое бывает, если статья не существовала или удалена
        doc['status'] = 'title_not_found'
    else:
        doc['status'] = 'ok'
        doc['title'] = soup.find("span", {"class": "post__title-text"}).text
        doc['text'] = soup.find("div", {"class": "post__text"}).text
        doc['time'] = soup.find("span", {"class": "post__time"}).text
        # create other fields: hubs, tags, views, comments, votes, etc.
        # ...
    # сохранение результата в отдельный файл
    fname = r'files/' + str(pid) + '.pkl'
    with open(fname, 'wb') as f:
        pickle.dump(doc, f)

Beim Parsen habe ich einige neue Dinge entdeckt.

Erstens sagen sie, dass es sinnlos sei, mehr Prozesse zu erstellen, als Kerne im Prozessor vorhanden sind. Aber in meinem Fall stellte sich heraus, dass die limitierende Ressource nicht der Prozessor, sondern das Netzwerk ist und 100 Prozesse schneller funktionieren als 4 oder, sagen wir, 20.

Zweitens gab es in einigen Beiträgen Kombinationen von Sonderzeichen – zum Beispiel Euphemismen wie „%&#@“. Es stellte sich heraus, dass html.parser, das ich zuerst verwendet habe, reagiert auf die Kombination &# schmerzhaft, wenn man bedenkt, dass es der Anfang der HTML-Entität ist. Ich wollte bereits schwarze Magie anwenden, aber im Forum wurde vorgeschlagen, dass man einfach den Parser ändern kann.

Drittens gelang es mir, alle Veröffentlichungen bis auf drei zu entladen. Die Dokumente mit den Nummern 65927, 162075 und 275987 wurden von meinem Antivirenprogramm sofort gelöscht. Dabei handelt es sich jeweils um Artikel über eine Javascript-Kette, die ein bösartiges PDF herunterlädt, SMS-Ransomware in Form einer Reihe von Browser-Plugins und die Website CrashSafari.com, die iPhones in einen Neustart schickt. Antivirus entdeckte später während eines Systemscans einen weiteren Artikel: Beitrag 338586 über Skripte auf der Zoohandlungs-Website, die den Prozessor des Benutzers zum Schürfen von Kryptowährungen nutzen. Wir können also davon ausgehen, dass die Arbeit des Antivirenprogramms völlig ausreichend ist.

Es stellte sich heraus, dass „lebende“ Artikel nur die Hälfte des potenziellen Maximums ausmachten – 166307 Stück. Für den Rest gibt Habr die Optionen „Die Seite ist veraltet, wurde gelöscht oder existierte überhaupt nicht.“ Nun ja, alles kann passieren.

Dem Hochladen der Artikel folgten technische Arbeiten: So mussten beispielsweise Veröffentlichungstermine vom Format „21. Dezember 2006 um 10:47 Uhr“ auf den Standard umgestellt werden datetimeund „12,8“ Aufrufe – 12800. Zu diesem Zeitpunkt kamen noch einige weitere Vorfälle ans Licht. Das Lustigste hat mit der Stimmenzahl und den Datentypen zu tun: Einige alte Beiträge hatten einen Int-Überlauf und erhielten jeweils 65535 Stimmen.

Wie ich Habr analysiert habe, Teil 1: Trends

Infolgedessen kosteten mich die Texte von Artikeln (ohne Bilder) 1.5 Gigabyte, Kommentare mit Metainformationen weitere 3 und etwa hundert Megabyte Metainformationen zu Artikeln. Dies kann komplett im RAM gehalten werden, was für mich eine angenehme Überraschung war.

Ich begann die Analyse von Artikeln nicht anhand der Texte selbst, sondern anhand von Metainformationen: Daten, Tags, Hubs, Ansichten und Likes. Es stellte sich heraus, dass sie viel erzählen konnte.

Habrahabr-Entwicklungstrends

Artikel auf der Website werden seit 2006 veröffentlicht; am intensivsten - in den Jahren 2008-2016.

Wie ich Habr analysiert habe, Teil 1: Trends

Wie aktiv diese Artikel zu unterschiedlichen Zeiten gelesen wurden, ist nicht so einfach einzuschätzen. Texte aus dem Jahr 2012 und jünger erhielten mehr Kommentare und Bewertungen, neuere Texte haben jedoch mehr Aufrufe und Lesezeichen. Diese Kennzahlen verhielten sich nur einmal im Jahr 2015 gleich (halbiert). Vielleicht hat sich die Aufmerksamkeit der Leser in einer Situation der wirtschaftlichen und politischen Krise von IT-Blogs auf schmerzhaftere Themen verlagert.

Wie ich Habr analysiert habe, Teil 1: Trends

Zusätzlich zu den Artikeln selbst habe ich weitere Kommentare dazu heruntergeladen. Es gab 6 Millionen Kommentare, davon wurden jedoch 240 verboten („ein UFO ist eingeflogen und hat diese Inschrift hier veröffentlicht“). Eine nützliche Eigenschaft von Kommentaren ist, dass sie einen Zeitstempel haben. Indem Sie den Zeitpunkt von Kommentaren studieren, können Sie ungefähr nachvollziehen, wann Artikel überhaupt gelesen werden.

Es stellte sich heraus, dass die meisten Artikel zwischen 10 und 20 Uhr geschrieben und kommentiert wurden, also zwischen XNUMX und XNUMX Uhr. an einem typischen Moskauer Arbeitstag. Dies kann bedeuten, dass Habr aus beruflichen Gründen gelesen wird und dass dies eine gute Möglichkeit ist, bei der Arbeit aufzuschieben. Diese Verteilung der Tageszeiten ist übrigens von der Gründung von Habr bis heute stabil.

Wie ich Habr analysiert habe, Teil 1: Trends

Der Hauptvorteil eines Kommentar-Zeitstempels ist jedoch nicht die Tageszeit, sondern die Dauer des „aktiven Lebens“ des Artikels. Ich habe berechnet, wie sich die Zeit von der Veröffentlichung des Artikels bis zu seinem Kommentar verteilt. Es stellte sich heraus, dass der mittlere Kommentar (grüne Linie) nun in etwa 20 Stunden eintrifft, d. h. Am ersten Tag nach der Veröffentlichung bleiben durchschnittlich etwas mehr als die Hälfte aller Kommentare zum Artikel übrig. Und in zwei Tagen hinterlassen sie 75 % aller Kommentare. Gleichzeitig wurden frühere Artikel noch schneller gelesen – 2010 kam beispielsweise die Hälfte der Kommentare in den ersten 6 Stunden.

Wie ich Habr analysiert habe, Teil 1: Trends

Es hat mich überrascht, dass die Kommentare länger geworden sind: Die durchschnittliche Anzahl der Zeichen in einem Kommentar hat sich im Laufe der Lebensdauer von Habr fast verdoppelt!

Wie ich Habr analysiert habe, Teil 1: Trends

Einfacheres Feedback als Kommentare sind Abstimmungen. Im Gegensatz zu vielen anderen Ressourcen können Sie bei Habré nicht nur Pluspunkte, sondern auch Minuspunkte angeben. Allerdings nutzen die Leser die letzte Gelegenheit nicht so oft: Der aktuelle Anteil der Abneigungen liegt bei etwa 15 % aller abgegebenen Stimmen. Früher gab es mehr, aber mit der Zeit sind die Leser freundlicher geworden.

Wie ich Habr analysiert habe, Teil 1: Trends

Die Texte selbst haben sich im Laufe der Zeit verändert. Beispielsweise wächst die typische Textlänge trotz der Krise seit dem Start der Website kontinuierlich an. In einem Jahrzehnt sind Texte fast zehnmal länger geworden!

Wie ich Habr analysiert habe, Teil 1: Trends

Auch der Stil der Texte hat sich (in erster Näherung) geändert. In den ersten Jahren seines Bestehens nahm beispielsweise der Anteil von Codes und Zahlen in Texten zu:

Wie ich Habr analysiert habe, Teil 1: Trends

Nachdem ich die Gesamtdynamik der Website verstanden hatte, beschloss ich zu messen, wie sich die Popularität verschiedener Themen veränderte. Themen können automatisch aus Texten ausgewählt werden, aber zunächst einmal können Sie das Rad nicht neu erfinden, sondern vorgefertigte Tags verwenden, die von den Autoren jedes Artikels angebracht werden. Ich habe in der Grafik vier typische Trends eingezeichnet. Das Thema „Google“ dominierte zunächst (vielleicht hauptsächlich aufgrund von SEO), verlor aber im Laufe der Jahre an Gewicht. Javascript ist ein beliebtes Thema und wächst weiterhin langsam, aber maschinelles Lernen hat erst in den letzten Jahren schnell an Popularität gewonnen. Linux hingegen blieb im Laufe des Jahrzehnts gleichermaßen relevant.

Wie ich Habr analysiert habe, Teil 1: Trends

Natürlich interessierte es mich, welche Themen mehr Leseraktivität hervorrufen. Ich habe die durchschnittliche Anzahl der Aufrufe, Stimmen und Kommentare in jedem Thema berechnet. Folgendes ist passiert:

  • Meistgesehene Themen: Arduino, Webdesign, Webentwicklung, Digest, Links, CSS, HTML, HTML5, Nginx, Algorithmen.
  • Die beliebtesten Themen: Vkontakte, Humor, JQuery, Opera, C, HTML, Webentwicklung, HTML5, CSS, Webdesign.
  • Die am häufigsten diskutierten Themen: Opera, Skype, Freelance, Vkontakte, Ubuntu, Arbeit, Nokia, Nginx, Arduino, Firefox.

Da ich Themen vergleiche, können Sie sie übrigens nach Häufigkeit ordnen (und die Ergebnisse mit vergleichen). ähnlicher Artikel aus 2013).

  • In all den Jahren, in denen Habr existiert, sind die beliebtesten Tags (in absteigender Reihenfolge) Google, Android, Javascript, Microsoft, Linux, PHP, Apple, Java, Python, Programmierung, Startups, Entwicklung, iOS, Startup, soziale Netzwerke
  • Im Jahr 2017 waren Javascript, Python, Java, Android, Entwicklung, Linux, C++, Programmierung, PHP, C#, iOS, maschinelles Lernen, Informationssicherheit, Microsoft und React am beliebtesten

Beim Vergleich dieser Bewertungen kann man beispielsweise auf den Siegeszug von Python und das Aussterben von PHP oder auf den „Sonnenuntergang“ der Startup-Themen und den Aufstieg des maschinellen Lernens achten.

Nicht alle Tags auf Habré haben eine so offensichtliche thematische Färbung. Hier sind zum Beispiel ein Dutzend Tags, die nur einmal vorkamen, mir aber einfach komisch vorkamen. Also: „Idee ist die treibende Kraft des Fortschritts“, „Booten von einem Disketten-Image“, „Iowa State“, „Drama“, „Superalesh“, „Dampfmaschine“, „Aktivitäten am Samstag“, „Ich habe ein Fuchs im Fleischwolf“, „es ist wie immer geworden“, „uns sind keine lustigen Tags eingefallen“. Um das Thema solcher Artikel zu bestimmen, reichen Tags nicht aus – Sie müssen eine thematische Modellierung der Texte der Artikel durchführen.

Eine detailliertere Analyse des Inhalts der Artikel erfolgt im nächsten Beitrag. Zuerst werde ich ein Modell erstellen, das die Anzahl der Seitenaufrufe für einen Artikel basierend auf seinem Inhalt vorhersagt. Zweitens möchte ich dem neuronalen Netzwerk beibringen, Texte im gleichen Stil wie die Autoren von Habr zu generieren. Also abonnieren 🙂

PS Und hier ist der Piepton Datensatz.

Source: habr.com

Kommentar hinzufügen