Hoe ik Habr doorzocht, deel 1: trends

Toen de nieuwjaarsolivie was opgegeten, had ik niets meer te doen en besloot ik alle artikelen van Habrhabr (en verwante platforms) naar mijn computer te downloaden en te onderzoeken.

Ik kreeg verschillende interessante verhaallijnen. De eerste is de ontwikkeling van het formaat en de thema's van artikelen gedurende de 12 jaar dat de site bestaat. De dynamiek van sommige thema's is bijvoorbeeld behoorlijk indicatief. Meer hierover onder de kat.

Hoe ik Habr doorzocht, deel 1: trends

Het parsingproces

Om te begrijpen hoe Habr zich heeft ontwikkeld, moest ik al zijn artikelen doornemen en metadata (zoals datums) eruit halen. Het doornemen ging gemakkelijk omdat de links naar alle artikelen de vorm "habrahabr.ru/post/337722/" hebben, waarbij de nummers strikt opeenvolgend zijn. Wetende dat de laatste post een nummer vlak onder de 350.000 heeft, heb ik gewoon alle mogelijke document-id's in een loop doorlopen (code in Python):

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

Functie download_document probeert de pagina met de bijbehorende id te laden en probeert uit de html-structuur inhoudelijke informatie te halen.

import requests
from bs4 import BeautifulSoup

def download_document(pid):
    """ Download en verwerk een Habr-document en zijn opmerkingen """
    # document downloaden
    r = requests.get('https://habrahabr.ru/post/' +str(pid) + '/')
    # document parseren
    soup = BeautifulSoup(r.text, 'html5lib') # in plaats van html.parser
    doc = {}
    doc['id'] = pid
    if not soup.find("span", {"class": "post__title-text"}):
        # dit gebeurt als het artikel niet bestond of is verwijderd
        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
        # andere velden aanmaken: hubs, tags, weergaven, opmerkingen, stemmen, enz.
        # ...
    # resultaat opslaan in een apart bestand
    fname = r'files/' + str(pid) + '.pkl'
    with open(fname, 'wb') as f:
        pickle.dump(doc, f)

Tijdens het parseren ontdekte ik verschillende nieuwe dingen.

Ten eerste, men zegt dat het nut om meer processen te creƫren dan er kernen in de processor zijn, nutteloos is. Maar in mijn geval bleek dat de beperkende factor niet de processor was, maar het netwerk, en 100 processen functioneren sneller dan 4 of, laten we zeggen, 20.

Ten tweede, in sommige berichten kwamen combinaties van speciale tekens voor, bijvoorbeeld eufemismen zoals "%&#@". Het bleek dat html.parser, dat ik eerst gebruikte, pijnlijk reageert op de combinatie &# en beschouwt het als het begin van een html-entiteit. Ik was al van plan om zwarte magie te gebruiken, maar op het forum werd me verteld dat ik gewoon de parser kon wisselen.

Ten derde is het me gelukt om alle publicaties te downloaden, behalve drie. De documenten met de nummers 65927, 162075 en 275987 werden onmiddellijk verwijderd door mijn antivirussoftware. Dit betreft artikelen over een reeks JavaScript-bestanden die een kwaadaardig pdf-bestand laden, een SMS-afperser in de vorm van een set plugins voor browsers, en de website CrashSafari.com, die iPhones opnieuw opstart. Een ander artikel ontdekte de antivirus later tijdens een systeemscan: post 338586 over scripts op de website van een dierenwinkel, die de processor van de gebruiker gebruiken voor cryptocurrency-mining. Dus, we kunnen de werking van de antivirus als behoorlijk adequaat beschouwen.

"Levende" artikelen bleken slechts de helft van het potentiĆ«le maximum te zijn — 166307 stuks. Voor de andere artikelen geeft Habr opties zoals "de pagina is verouderd, verwijderd of bestond helemaal niet". Ach, het kan gebeuren.

Na het downloaden van de artikelen volgde technisch werk: bijvoorbeeld, publicatiedata moesten worden omgezet van het formaat "'21 december 2006 om 10:47" naar standaard datetime, en "12,8k" weergaven naar 12800. Op dit moment kwamen er nog een paar eigenaardigheden naar voren. De meest grappige had te maken met het tellen van stemmen en datatypes: in sommige oude berichten trad een integer overflow op, en ze kregen elk 65535 stemmen.

Hoe ik Habr doorzocht, deel 1: trends

Als gevolg hiervan namen de teksten van de artikelen (zonder afbeeldingen) 1.5 gigabyte van mijn schijf in beslag, opmerkingen met metadata nog eens 3, en ongeveer honderd megabyte was metadata over de artikelen. Dit kan ik volledig in het werkgeheugen houden, wat voor mij een aangename verrassing was.

Ik begon de artikelen niet met de teksten zelf, maar met de metadata: datums, tags, hubs, weergaven en "likes". Blijkbaar kan ook deze informatie veel onthullen.

Trends in de ontwikkeling van Habrhabr

Artikelen op de site worden sinds 2006 gepubliceerd; het meest intensief tussen 2008 en 2016.

Hoe ik Habr doorzocht, deel 1: trends

Hoe actief deze artikelen op verschillende tijden werden gelezen, is niet zo eenvoudig te beoordelen. De teksten van 2012 en jonger kregen meer reacties en stemmen, maar de nieuwere teksten hebben meer weergaven en zijn vaker aan favorieten toegevoegd. Deze statistieken gedroegen zich slechts ƩƩn keer gelijk (ze daalden met de helft), in 2015. Misschien verschoof de aandacht van de lezers door de economische en politieke crisis van IT-blogs naar moeilijkere kwesties.

Hoe ik Habr doorzocht, deel 1: trends

Naast de artikelen zelf, heb ik ook de reacties gedownload. Er zijn 6 miljoen reacties, waarvan er echter 240 duizend geblokkeerd waren ("een UFO is aangekomen en heeft deze boodschap hier gepubliceerd"). Een nuttige eigenschap van reacties is dat de tijd is aangegeven. Door de tijd van de reacties te bestuderen, kun je ongeveer begrijpen wanneer de artikelen worden gelezen.

Het bleek dat het grootste deel van de artikelen en reacties ergens tussen 10 en 20 uur wordt geschreven, dat wil zeggen tijdens een typische werkdag in Moskou. Dit kan betekenen dat Habr professioneel wordt gelezen, en dat het ook een goede manier is om op het werk te procrastineren. Trouwens, deze tijdsverdeling is stabiel sinds de oprichting van Habr tot op de dag van vandaag.

Hoe ik Habr doorzocht, deel 1: trends

Echter, de belangrijkste voordelen van de tijdstempel van de reactie zijn niet de tijd van de dag, maar de "actieve levensduur" van het artikel. Ik heb berekend hoe de tijd is verdeeld van de publicatie van een artikel tot zijn eerste reactie. Het blijkt dat de mediane reactie (de groene lijn) nu ongeveer 20 uur na publicatie binnenkomt, dat wil zeggen dat in de eerste 24 uur gemiddeld iets meer dan de helft van alle reacties op een artikel wordt geplaatst. En binnen 48 uur wordt 75% van alle reacties achtergelaten. Vroeger werden artikelen zelfs nog sneller gelezen — in 2010 kwam de helft van de reacties al binnen de eerste 6 uur.

Hoe ik Habr doorzocht, deel 1: trends

Het verraste me dat reacties langer zijn geworden: het gemiddelde aantal tekens in een reactie is bijna verdubbeld sinds de oprichting van Habr!

Hoe ik Habr doorzocht, deel 1: trends

Eenvoudigere feedback dan reacties zijn stemmen. In tegenstelling tot veel andere bronnen, kun je op Habr niet alleen positieve, maar ook negatieve stemmen geven. Die laatste optie wordt echter niet zo vaak gebruikt: het huidige aandeel van dislikes is ongeveer 15% van alle gegeven stemmen. Vroeger was dit hoger, maar in de loop der jaren zijn lezers vriendelijker geworden.

Hoe ik Habr doorzocht, deel 1: trends

Ook de teksten zelf zijn in de loop der tijd veranderd. Bijvoorbeeld, de typische lengte van een tekst blijft gestaag groeien sinds de lancering van de website, ondanks de crises. In een decennium zijn teksten bijna tien keer langer geworden!

Hoe ik Habr doorzocht, deel 1: trends

De stijl van de teksten is (in eerste benadering) ook veranderd. In de eerste jaren van het bestaan van Habr is bijvoorbeeld het aandeel van code en cijfers in de teksten toegenomen:

Hoe ik Habr doorzocht, deel 1: trends

Nadat ik de algemene dynamiek van de site had onderzocht, besloot ik te meten hoe de populariteit van verschillende onderwerpen was veranderd. Onderwerpen kunnen automatisch uit teksten worden gehaald, maar in eerste instantie kunnen we beter gebruik maken van de kant-en-klare tags die door de auteurs van elk artikel zijn geplaatst. Vier typische trends heb ik in de grafiek weergegeven. Het onderwerp "Google" was aanvankelijk dominant (mogelijk vooral vanwege SEO-optimalisatie), maar verloor elk jaar aan invloed. Javascript was een populair onderwerp en blijft gestaag toenemen, terwijl machine learning pas in de laatste jaren snel aan populariteit begon te winnen. Linux blijft echter het hele decennium consistent relevant.

Hoe ik Habr doorzocht, deel 1: trends

Natuurlijk was ik benieuwd welke onderwerpen de meeste lezers aantrekken. Ik heb het mediane aantal views, stemmen en reacties per onderwerp berekend. Dit is wat eruit kwam:

  • De meest bekeken onderwerpen: arduino, webdesign, webontwikkeling, nieuws, links, css, html, html5, nginx, algoritmes.
  • De meest "likebare" onderwerpen: vkontakte, humor, jquery, opera, c, html, webontwikkeling, html5, css, webdesign.
  • De meest besproken onderwerpen: opera, skype, freelance, vkontakte, ubuntu, werk, nokia, nginx, arduino, firefox.

Trouwens, aangezien ik de onderwerpen vergelijk, kunnen we hun ranking op frequentie maken (en de resultaten vergelijken met een vergelijkbaar artikel uit 2013).

  • Gedurende alle jaren van het bestaan van Habr zijn de populairste tags (in volgorde van afnemende populariteit) google, android, javascript, microsoft, linux, php, apple, java, python, programmeren, startups, ontwikkeling, ios, startup, sociale netwerken geworden.
  • In 2017 waren de meest populaire onderwerpen javascript, python, java, android, ontwikkeling, linux, c++, programmeren, php, c#, ios, machine learning, informatiebeveiliging, microsoft, react.

Bij het vergelijken van deze rankings valt bijvoorbeeld het triomfantelijke optreden van Python en het uitsterven van php op, of de "ondergang" van de startupcultuur en de opkomst van machine learning.

Niet alle tags op Habr hebben zo'n duidelijke thematische kleur. Hier zijn bijvoorbeeld een tiental tags die slechts ƩƩn keer zijn voorgekomen, maar me gewoon grappig leken. Dus: "idee als motor van vooruitgang", "opstarten vanaf een schijfkopie", "staat Iowa", "dramaturgie", "superaljesha", "stoommachine", "wat te doen op zaterdag", "ik heb een vos in de vleesmolen", "en zoals altijd gebeurd", "het lukte niet om grappige tags te bedenken". Om het thema van dergelijke artikelen te bepalen, zijn tags niet genoeg — er zal thematische modellering van de teksten van de artikelen moeten plaatsvinden.

Een gedetailleerdere analyse van de inhoud van artikelen vindt u in de volgende post. Ten eerste ben ik van plan om een model te bouwen dat het aantal weergaven van een artikel voorspelt op basis van de inhoud ervan. Ten tweede wil ik de neural netwerken leren teksten te genereren in dezelfde stijl als die van de auteurs van Habr. Dus volg ons šŸ™‚

P.S. En hier is de geblikte dataset.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster