Sådan analyserede jeg Habr, del 1: tendenser

Da nytårs Olivier var færdig, havde jeg intet at lave, og jeg besluttede at downloade alle artiklerne fra Habrahabr (og relaterede platforme) til min computer og udforske.

Der var flere interessante historier. Den første af dem er udviklingen af ​​artiklernes format og emner i løbet af de 12 år, siden har eksisteret. For eksempel er dynamikken i nogle emner ret vejledende. Fortsættelse - under snittet.

Sådan analyserede jeg Habr, del 1: tendenser

Parsing proces

For at forstå, hvordan Habr udviklede sig, var det nødvendigt at gennemgå alle hans artikler og udtrække metainformation fra dem (for eksempel datoer). Omgåelsen var let, fordi links til alle artikler ser ud som "habrahabr.ru/post/337722/", og tallene er angivet strengt i rækkefølge. Da jeg vidste, at det sidste indlæg har et tal lidt mindre end 350 tusind, gik jeg lige igennem alle mulige dokument-id'er i en løkke (Python-kode):

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

Funktion download_document forsøger at indlæse siden med det tilsvarende id og forsøger at udtrække meningsfuld information fra html-strukturen.

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)

I processen med at analysere opdagede jeg flere nye ting.

For det første siger de, at det er ubrugeligt at skabe flere processer, end der er kerner i processoren. Men i mit tilfælde viste det sig, at den begrænsende ressource ikke er processoren, men netværket, og 100 processer fungerer hurtigere end 4 eller f.eks. 20.

For det andet var der i nogle indlæg kombinationer af specialtegn - for eksempel eufemismer som "%&#@". Det viste det sig html.parser, som jeg brugte først, reagerer på kombinationen &# smerteligt, betragter det som begyndelsen på html-entiteten. Jeg havde allerede tænkt mig at lave sort magi, men forummet foreslog, at du bare kan ændre parseren.

For det tredje lykkedes det mig at læsse alle publikationer ud, bortset fra tre. Dokumenter med nummer 65927, 162075 og 275987 blev øjeblikkeligt slettet af mit antivirus. Det er henholdsvis artikler om en javascript-kæde, der downloader en ondsindet pdf, SMS-ransomware i form af et sæt browser-plugins og CrashSafari.com-siden, der sender iPhones til en genstart. Antivirus opdagede en anden artikel senere under en systemscanning: post 338586 om scripts på dyrebutikkens websted, der bruger brugerens processor til at mine kryptovaluta. Så vi kan overveje, at antivirusprogrammets arbejde er ret tilstrækkeligt.

"Live" artikler viste sig kun at være halvdelen af ​​det potentielle maksimum - 166307 stykker. Om resten giver Habr muligheder "siden er forældet, er blevet slettet eller eksisterede slet ikke." Alt kan ske.

Upload af artikler blev efterfulgt af teknisk arbejde: for eksempel skulle udgivelsesdatoer konverteres fra formatet "'21. december 2006 kl. 10:47" til standarden datetime, og "12,8k" visninger - i 12800. På dette stadium kom der et par flere hændelser ud. Det sjoveste har med stemmetal og datatyper at gøre: nogle gamle indlæg havde et int overflow og fik 65535 stemmer hver.

Sådan analyserede jeg Habr, del 1: tendenser

Som et resultat tog teksterne til artikler (uden billeder) mig 1.5 gigabyte, kommentarer med metainformation - yderligere 3, og omkring hundrede megabyte - metainformation om artikler. Dette kan holdes helt i RAM, hvilket var en behagelig overraskelse for mig.

Jeg startede analysen af ​​artikler ikke fra selve teksterne, men fra metainformation: datoer, tags, hubs, synspunkter og likes. Det viste sig, at hun kunne fortælle meget.

Habrahabr udviklingstendenser

Artikler på siden er blevet offentliggjort siden 2006; mest intensivt - i 2008-2016.

Sådan analyserede jeg Habr, del 1: tendenser

Hvor aktivt disse artikler blev læst på forskellige tidspunkter er ikke så let at vurdere. Tekster fra 2012 og yngre fik flere kommentarer og vurderinger, men nyere tekster har flere visninger og bogmærker. Disse målinger opførte sig på samme måde (halverede) kun én gang, i 2015. Måske, i en situation med økonomisk og politisk krise, er læsernes opmærksomhed flyttet fra it-blogs til mere smertefulde emner.

Sådan analyserede jeg Habr, del 1: tendenser

Ud over selve artiklerne downloadede jeg flere kommentarer til dem. Der var 6 millioner kommentarer, dog blev 240 tusind af dem forbudt ("en UFO fløj ind og offentliggjorde denne inskription her"). En nyttig egenskab ved kommentarer er, at de har et tidsstempel. Ved at studere tidspunktet for kommentarer kan du nogenlunde forstå, hvornår artikler overhovedet læses.

Det viste sig, at de fleste artikler både er skrevet og kommenteret et sted fra klokken 10 til 20, dvs. på en typisk arbejdsdag i Moskva. Det kan betyde, at Habr læses til professionelle formål, og at det er en god måde at udsætte på arbejdet. I øvrigt er denne fordeling af tidspunktet stabil fra selve grundlaget af Habr til i dag.

Sådan analyserede jeg Habr, del 1: tendenser

Den største fordel ved et kommentartidsstempel er dog ikke tidspunktet på dagen, men varigheden af ​​artiklens "aktive liv". Jeg har beregnet, hvordan tiden er fordelt fra artiklens udgivelse til dens kommentar. Det viste sig, at nu kommer mediankommentaren (grøn linje) om cirka 20 timer, dvs. den første dag efter offentliggørelsen er der i gennemsnit lidt mere end halvdelen af ​​alle kommentarer til artiklen tilbage. Og på to dage efterlader de 75 % af alle kommentarer. Samtidig blev tidligere artikler læst endnu hurtigere – for eksempel i 2010 kom halvdelen af ​​kommentarerne i løbet af de første 6 timer.

Sådan analyserede jeg Habr, del 1: tendenser

Det kom som en overraskelse for mig, at kommentarer er blevet længere: det gennemsnitlige antal tegn i en kommentar er næsten fordoblet i løbet af Habr!s levetid!

Sådan analyserede jeg Habr, del 1: tendenser

Nemmere feedback end kommentarer er stemmer. I modsætning til mange andre ressourcer kan du på Habré ikke kun sætte plusser, men også minusser. Læserne bruger dog ikke den sidste mulighed så ofte: Den nuværende andel af dislikes er omkring 15 % af alle afgivne stemmer. Tidligere var der flere, men med tiden er læserne blevet venligere.

Sådan analyserede jeg Habr, del 1: tendenser

Selve teksterne har ændret sig over tid. For eksempel stopper den typiske længde af teksten ikke med at vokse støt fra selve lanceringen af ​​siden, på trods af kriserne. På et årti er tekster blevet næsten ti gange længere!

Sådan analyserede jeg Habr, del 1: tendenser

Teksternes stil (til en første tilnærmelse) ændrede sig også. I løbet af de første år af Habrs eksistens steg andelen af ​​kode og tal i tekster for eksempel:

Sådan analyserede jeg Habr, del 1: tendenser

Efter at have forstået webstedets overordnede dynamik besluttede jeg at måle, hvordan populariteten af ​​forskellige emner ændrede sig. Emner kan automatisk vælges fra tekster, men til at begynde med kan du ikke genopfinde hjulet, men bruge færdige tags påsat af forfatterne til hver artikel. Jeg har tegnet fire typiske tendenser på diagrammet. "Google"-temaet dominerede i starten (måske primært på grund af SEO), men har tabt sig gennem årene. Javascript har været et populært emne og fortsætter med at vokse langsomt, men maskinlæring er først begyndt at vinde popularitet i de senere år. Linux er på den anden side forblevet lige så relevant gennem årtiet.

Sådan analyserede jeg Habr, del 1: tendenser

Jeg blev selvfølgelig interesseret i, hvilke emner der tiltrækker mere læseraktivitet. Jeg beregnede det gennemsnitlige antal visninger, stemmer og kommentarer i hvert emne. Her er hvad der skete:

  • Mest sete emner: arduino, webdesign, webudvikling, digest, links, css, html, html5, nginx, algoritmer.
  • De mest "likede" emner: vkontakte, humor, jquery, opera, c, html, webudvikling, html5, css, webdesign.
  • De mest diskuterede emner: opera, skype, freelance, vkontakte, ubuntu, arbejde, nokia, nginx, arduino, firefox.

Forresten, da jeg sammenligner emner, kan du rangere dem efter frekvens (og sammenligne resultaterne med lignende artikel fra 2013).

  • I alle årene af Habrs eksistens er de mest populære tags (i faldende rækkefølge) google, android, javascript, microsoft, linux, php, apple, java, python, programmering, startups, udvikling, ios, startup, sociale netværk
  • I 2017 var de mest populære javascript, python, java, android, udvikling, linux, c++, programmering, php, c#, ios, machine learning, informationssikkerhed, microsoft, react

Når man sammenligner disse vurderinger, kan man for eksempel være opmærksom på Pythons sejrsmarch og udryddelsen af ​​php, eller til "solnedgangen" af opstartsemner og fremkomsten af ​​maskinlæring.

Ikke alle tags på Habré har så tydelig en tematisk farvelægning. For eksempel er her et dusin tags, der kun mødtes én gang, men som bare virkede sjove for mig. Så: "idé er drivkraften bag fremskridt", "start fra et diskettebillede", "Iowa State", "drama", "superalesh", "dampmaskine", "ting at gøre på lørdag", "Jeg har en ræv i en kødhakker", "a det blev som altid", "vi kunne ikke finde på sjove tags". For at bestemme emnet for sådanne artikler er tags ikke nok - du bliver nødt til at udføre tematisk modellering på artiklernes tekster.

En mere detaljeret analyse af indholdet af artiklerne kommer i næste indlæg. Først vil jeg bygge en model, der forudsiger antallet af sidevisninger for en artikel baseret på dens indhold. For det andet vil jeg lære det neurale netværk at generere tekster i samme stil som forfatterne til Habr. Så abonner 🙂

PS Og her er bippet datasæt.

Kilde: www.habr.com

Tilføj en kommentar