Hvordan jeg analyserte Habr, del 1: trender

Da nyttårs Olivier var ferdig, hadde jeg ingenting å gjøre, og jeg bestemte meg for å laste ned alle artiklene fra Habrahabr (og relaterte plattformer) til datamaskinen min og gjøre litt research.

Det viste seg å være flere interessante historier. Den første av dem er utviklingen av formatet og emnene til artikler i løpet av de 12 årene siden har eksistert. For eksempel er dynamikken til noen emner ganske veiledende. Fortsetter under snittet.

Hvordan jeg analyserte Habr, del 1: trender

Parsing prosess

For å forstå hvordan Habr utviklet seg, var det nødvendig å gå gjennom alle artiklene og trekke ut metainformasjon fra dem (for eksempel datoer). Omgåelsen var enkel, fordi lenkene til alle artiklene ser ut som "habrahabr.ru/post/337722/", og tallene er spesifisert strengt i rekkefølge. Når jeg visste at det siste innlegget har et tall litt mindre enn 350 tusen, gikk jeg ganske enkelt gjennom 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))

Funksjon download_document prøver å laste siden med tilsvarende id og prøver å trekke ut meningsfull informasjon 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 løpet av parseprosessen oppdaget jeg flere nye ting.

For det første sier de at det er ubrukelig å lage flere prosesser enn kjerner i prosessoren. Men i mitt tilfelle viste det seg at den begrensende ressursen ikke er prosessoren, men nettverket, og 100 prosesser fungerer raskere enn 4 eller for eksempel 20.

For det andre, i noen innlegg var det kombinasjoner av spesialtegn - for eksempel eufemismer som "%&#@". Det viste seg at html.parser, som jeg brukte først, reagerer på kombinasjonen &# smertefullt, med tanke på at det er begynnelsen på html-enheten. Jeg var i ferd med å utføre svart magi, men forumet foreslo at jeg ganske enkelt kunne endre parseren.

For det tredje var jeg i stand til å laste ned alle unntatt tre publikasjoner. Dokumenter nummerert 65927, 162075 og 275987 ble umiddelbart slettet av antivirusprogrammet mitt. Dette er henholdsvis artikler om en kjede av javascripts som laster ned en ondsinnet pdf, en SMS-ransomware i form av et sett med plug-ins for nettlesere, og nettstedet CrashSafari.com, som sender iPhones til omstart. Antiviruset oppdaget en annen artikkel senere, under en systemskanning: post 338586 om skript på en dyrebutikks nettside som bruker brukerens prosessor til å utvinne kryptovaluta. Så vi kan vurdere arbeidet til antiviruset som ganske tilstrekkelig.

Det var bare halvparten av det potensielle maksimumet av "live" artikler - 166307 XNUMX stykker. Om resten gir Habr alternativene "siden er utdatert, ble slettet eller eksisterte ikke i det hele tatt." Alt kan skje.

Opplasting av artiklene ble fulgt av teknisk arbeid: for eksempel måtte publiseringsdatoer konverteres fra formatet "'21. desember 2006 kl. 10:47" til standard datetime, og "12,8k" visninger - kl 12800. På dette stadiet dukket det opp flere flere hendelser. Den morsomste er knyttet til stemmetelling og datatyper: noen gamle innlegg hadde en int overflow, og de fikk 65535 stemmer.

Hvordan jeg analyserte Habr, del 1: trender

Som et resultat tok tekstene til artiklene (uten bilder) meg 1.5 gigabyte, kommentarer med metainformasjon - ytterligere 3, og omtrent hundre megabyte - metainformasjon om artiklene. Dette kan holdes helt i RAM, noe som var en hyggelig overraskelse for meg.

Jeg begynte å analysere artikler ikke med selve tekstene, men med metainformasjon: datoer, tagger, hubs, views og "likes". Det viste seg at også hun kunne fortelle mye.

Habrahabr utviklingstrender

Artikler på nettstedet har blitt publisert siden 2006; mest intensivt i 2008-2016.

Hvordan jeg analyserte Habr, del 1: trender

Hvor aktivt disse artiklene ble lest på ulike tidspunkt er ikke så lett å vurdere. Tekster fra 2012 og yngre fikk mer aktive kommentarer og vurderinger, men nyere tekster har flere visninger og bokmerker. Disse beregningene oppførte seg på samme måte (de falt med det halve) bare én gang, i 2015. Kanskje, i en situasjon med økonomisk og politisk krise, har lesernes oppmerksomhet flyttet seg fra IT-blogger til mer smertefulle saker.

Hvordan jeg analyserte Habr, del 1: trender

I tillegg til selve artiklene lastet jeg også ned kommentarer til dem. Det var 6 millioner kommentarer, men 240 tusen av dem ble forbudt ("en UFO fløy inn og publiserte denne inskripsjonen her"). En nyttig funksjon av kommentarer er at de har et tidsstempel. Ved å studere tidspunktet for kommentarer, kan du omtrent forstå når artikler i det hele tatt leses.

Det viste seg at de fleste artiklene er skrevet og kommentert et sted fra klokken 10 til 20, d.v.s. på en vanlig arbeidsdag i Moskva. Dette kan bety at Habr leses i profesjonelle formål, og at det er en god måte å somle på jobben. For øvrig har denne fordelingen av tid på døgnet vært stabil helt siden grunnleggelsen av Habr og frem til i dag.

Hvordan jeg analyserte Habr, del 1: trender

Den største fordelen med et tidsstempel for kommentar er imidlertid ikke tiden på dagen, men det "aktive livet" til artikkelen. Jeg regnet ut hvordan tiden ble fordelt fra publiseringen av en artikkel til dens kommentar. Det viste seg at nå kommer mediankommentaren (grønn linje) om ca 20 timer, d.v.s. Det første døgnet etter publisering er det i gjennomsnitt litt mer enn halvparten av alle kommentarer på en artikkel. Og innen to dager er 75 % av alle kommentarer igjen. Dessuten ble tidligere artikler lest enda raskere - for eksempel i 2010 kom halvparten av kommentarene innen de første 6 timene.

Hvordan jeg analyserte Habr, del 1: trender

Det kom som en overraskelse for meg at kommentarene har blitt lengre: gjennomsnittlig antall tegn i en kommentar har nesten doblet seg i løpet av Habr!

Hvordan jeg analyserte Habr, del 1: trender

Tilbakemeldinger som er enklere enn kommentarer er stemmer. I motsetning til mange andre ressurser, kan du på Habré sette ikke bare fordeler, men også ulemper. Leserne bruker imidlertid ikke den siste muligheten så ofte: den nåværende andelen misliker er omtrent 15 % av alle avgitte stemmer. Før var det flere, men med tiden ble leserne snillere.

Hvordan jeg analyserte Habr, del 1: trender

Selve tekstene endret seg over tid. For eksempel har den typiske tekstlengden ikke sluttet å vokse jevnt siden lanseringen av nettstedet, til tross for kriser. I løpet av et tiår har tekster blitt nesten ti ganger lengre!

Hvordan jeg analyserte Habr, del 1: trender

Stilen på tekstene (til en første tilnærming) endret seg også. I løpet av de første årene av Habrs eksistens økte for eksempel andelen kode og tall i tekster:

Hvordan jeg analyserte Habr, del 1: trender

Etter å ha forstått den generelle dynamikken til nettstedet, bestemte jeg meg for å måle hvordan populariteten til forskjellige emner endret seg. Emner kan identifiseres fra tekster automatisk, men til å begynne med kan du ikke finne opp hjulet på nytt, men bruke ferdige tagger lagt til av forfatterne av hver artikkel. Jeg har vist fire typiske trender på diagrammet. «Google»-temaet dominerte i utgangspunktet (kanskje hovedsakelig på grunn av SEO-optimalisering), men gikk ned i vekt hvert år. Javascript har vært et populært emne og fortsetter å være det, men maskinlæring har først begynt å bli raskt populær de siste årene. Linux forblir like relevant gjennom hele tiåret.

Hvordan jeg analyserte Habr, del 1: trender

Jeg ble selvfølgelig interessert i hvilke emner som tiltrekker seg mer leseraktivitet. Jeg beregnet median antall visninger, stemmer og kommentarer for hvert emne. Her er hva som skjedde:

  • Mest sett emner: arduino, webdesign, webutvikling, digest, lenker, css, html, html5, nginx, algoritmer.
  • De mest "likte" emnene: VKontakte, humor, jquery, opera, c, html, webutvikling, html5, css, webdesign.
  • De mest diskuterte emnene: opera, skype, frilansing, VKontakte, ubuntu, arbeid, nokia, nginx, arduino, firefox.

Forresten, siden jeg sammenligner emner, kan jeg rangere dem etter frekvens (og sammenligne resultatene med lignende artikkel fra 2013).

  • I løpet av årene av Habrs eksistens har de mest populære taggene (i synkende rekkefølge) vært google, android, javascript, microsoft, linux, php, apple, java, python, programmering, oppstart, utvikling, ios, oppstart, sosiale nettverk
  • I 2017 var de mest populære javascript, python, java, android, utvikling, linux, c++, programmering, php, c#, ios, maskinlæring, informasjonssikkerhet, microsoft, react

Når du sammenligner disse rangeringene, kan du for eksempel være oppmerksom på den seirende marsjen til Python og utryddelsen av php, eller til "nedgangen" av oppstartstemaet og fremveksten av maskinlæring.

Ikke alle tagger på Habré har en så åpenbar tematisk fargelegging. Her er for eksempel et dusin tagger som bare dukket opp én gang, men som bare virket morsomme for meg. Så: "ideen er motoren for fremskritt", "oppstart fra et diskettbilde", "staten Iowa", "drama", "superalesha", "dampmotor", "hva skal jeg gjøre på lørdag", "jeg ha en rev i kvernen», «og det ble som alltid», «vi klarte ikke å finne på morsomme tagger». For å bestemme emnet for slike artikler, er ikke tagger nok - du må utføre emnemodellering på tekstene til artiklene.

En mer detaljert analyse av innholdet i artiklene kommer i neste innlegg. Først skal jeg bygge en modell som forutsier antall visninger en artikkel vil få basert på innholdet. For det andre vil jeg lære det nevrale nettverket å generere tekster i samme stil som forfatterne av Habr. Så abonner :)

P.S. Og her er den, signert datasett.

Kilde: www.habr.com

Legg til en kommentar