Cum am analizat Habr, partea 1: tendințe

Când s-a terminat Revelionul Olivier, nu aveam nimic de făcut și am decis să descarc toate articolele de pe Habrahabr (și platformele aferente) pe computer și să explorez.

Au fost mai multe povești interesante. Prima dintre ele este dezvoltarea formatului și a subiectelor articolelor de-a lungul celor 12 ani de existență a site-ului. De exemplu, dinamica unor subiecte este destul de orientativă. Continuare - sub tăietură.

Cum am analizat Habr, partea 1: tendințe

Proces de analiză

Pentru a înțelege cum s-a dezvoltat Habr, a fost necesar să parcurgeți toate articolele sale și să extrageți metainformații din ele (de exemplu, date). Ocolirea a fost ușoară, deoarece linkurile către toate articolele arată ca „habrahabr.ru/post/337722/”, iar numerele sunt date strict în ordine. Știind că ultima postare are un număr puțin mai mic de 350 de mii, tocmai am trecut printr-o buclă toate codurile de document posibile (codul Python):

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

Funcție download_document încearcă să încarce pagina cu id-ul corespunzător și încearcă să extragă informații semnificative din structura html.

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)

În procesul de analiză, am descoperit câteva lucruri noi.

În primul rând, ei spun că a crea mai multe procese decât există nuclee în procesor este inutilă. Dar în cazul meu, s-a dovedit că resursa limitatoare nu este procesorul, ci rețeaua, iar 100 de procese funcționează mai repede decât 4 sau, să zicem, 20.

În al doilea rând, în unele postări existau combinații de caractere speciale - de exemplu, eufemisme precum „%&#@”. S-a dovedit ca html.parser, pe care l-am folosit prima, reacționează la combinație &# dureros, considerându-l începutul entității html. Deja aveam de gând să fac magie neagră, dar forumul a sugerat că poți doar să schimbi analizatorul.

În al treilea rând, am reușit să descarc toate publicațiile, cu excepția a trei. Documentele cu numărul 65927, 162075 și 275987 au fost șterse instantaneu de antivirusul meu. Acestea sunt articole, respectiv, despre un lanț de javascript care descarcă un pdf rău intenționat, ransomware SMS sub forma unui set de pluginuri de browser și site-ul CrashSafari.com care trimite iPhone-urile la repornire. Antivirusul a descoperit un alt articol mai târziu, în timpul unei scanări a sistemului: postați 338586 despre scripturi de pe site-ul magazinului de animale de companie care folosesc procesorul utilizatorului pentru a extrage criptomonede. Deci putem considera că activitatea antivirusului este destul de adecvată.

Articolele „în direct” s-au dovedit a fi doar jumătate din maximul potențial - 166307 bucăți. Despre restul, Habr oferă opțiuni „pagina este depășită, a fost ștearsă sau nu a existat deloc”. Ei bine, orice se poate întâmpla.

Încărcarea articolelor a fost urmată de lucrări tehnice: de exemplu, datele de publicare trebuiau convertite din formatul „21 decembrie 2006 la 10:47” la standard. datetime, și vizualizări „12,8k” - în 12800. În această etapă, au mai apărut câteva incidente. Cea mai amuzantă are de-a face cu numărul de voturi și tipurile de date: unele postări vechi au avut un int overflow și au primit 65535 voturi fiecare.

Cum am analizat Habr, partea 1: tendințe

Drept urmare, textele articolelor (fără poze) mi-au luat 1.5 gigabytes, comentarii cu metainformații - încă 3, și aproximativ o sută de megabytes - metainformații despre articole. Acest lucru poate fi păstrat complet în RAM, ceea ce a fost o surpriză plăcută pentru mine.

Am început analiza articolelor nu din textele în sine, ci din metainformații: date, etichete, hub-uri, vizualizări și aprecieri. S-a dovedit că putea spune multe.

Tendințe de dezvoltare Habrahabr

Articolele de pe site au fost publicate din 2006; cel mai intens - în 2008-2016.

Cum am analizat Habr, partea 1: tendințe

Cât de activ au fost citite aceste articole în momente diferite nu este atât de ușor de evaluat. Textele din 2012 și mai mici au primit mai multe comentarii și evaluări, dar textele mai noi au mai multe vizualizări și marcaje. Aceste valori s-au comportat la fel (s-au redus la jumătate) o singură dată, în 2015. Poate că, într-o situație de criză economică și politică, atenția cititorilor s-a mutat de la blogurile IT către probleme mai dureroase.

Cum am analizat Habr, partea 1: tendințe

Pe lângă articolele în sine, le-am descărcat mai multe comentarii. Au fost 6 milioane de comentarii, cu toate acestea, 240 de mii dintre ele au fost interzise („un OZN a zburat și a publicat această inscripție aici”). O proprietate utilă a comentariilor este că au un marcaj de timp. Studiind timpul comentariilor, puteți înțelege aproximativ când sunt citite articolele.

S-a dovedit că majoritatea articolelor sunt atât scrise, cât și comentate undeva între orele 10 și 20, adică. într-o zi de lucru tipică din Moscova. Acest lucru poate însemna că Habr este citit în scopuri profesionale și că aceasta este o modalitate bună de a amâna la locul de muncă. Apropo, această distribuție a orei este stabilă de la întemeierea lui Habr până în zilele noastre.

Cum am analizat Habr, partea 1: tendințe

Cu toate acestea, principalul beneficiu al unui marcaj temporal de comentariu nu este ora din zi, ci durata „vieții active” a articolului. Am calculat cum este distribuit timpul de la publicarea articolului până la comentariul acestuia. S-a dovedit că acum comentariul median (linia verde) vine în aproximativ 20 de ore, adică. în prima zi după publicare, în medie, puțin mai mult de jumătate din toate comentariile la articol sunt lăsate. Și în două zile lasă 75% din toate comentariile. În același timp, articolele anterioare au fost citite și mai repede - de exemplu, în 2010, jumătate din comentarii au venit în primele 6 ore.

Cum am analizat Habr, partea 1: tendințe

Mi-a fost o surpriză faptul că comentariile s-au prelungit: numărul mediu de caractere dintr-un comentariu aproape sa dublat de-a lungul vieții Habr!

Cum am analizat Habr, partea 1: tendințe

Feedback-ul mai ușor decât comentariile sunt voturi. Spre deosebire de multe alte resurse, pe Habré poți pune nu doar plusuri, ci și minusuri. Cu toate acestea, cititorii nu folosesc atât de des ultima oportunitate: ponderea actuală a antipatiilor este de aproximativ 15% din toate voturile exprimate. Au fost mai multe, dar cu timpul, cititorii au devenit mai amabili.

Cum am analizat Habr, partea 1: tendințe

Textele în sine s-au schimbat de-a lungul timpului. De exemplu, lungimea tipică a textului nu încetează să crească constant încă de la lansarea site-ului, în ciuda crizelor. Într-un deceniu, textele au devenit de aproape zece ori mai lungi!

Cum am analizat Habr, partea 1: tendințe

S-a schimbat și stilul textelor (la o primă aproximare). În primii ani de existență ai lui Habr, de exemplu, ponderea codului și a numerelor în texte a crescut:

Cum am analizat Habr, partea 1: tendințe

După ce am înțeles dinamica generală a site-ului, am decis să măsoare modul în care s-a schimbat popularitatea diferitelor subiecte. Subiectele pot fi selectate automat din texte, dar, pentru început, nu puteți reinventa roata, ci folosiți etichete gata făcute aplicate de autorii fiecărui articol. Am desenat patru tendințe tipice pe grafic. Tema „Google” a dominat inițial (poate în principal datorită SEO), dar a slăbit de-a lungul anilor. Javascript a fost un subiect popular și continuă să crească încet, dar învățarea automată a început să câștige rapid popularitate abia în ultimii ani. Linux, pe de altă parte, a rămas la fel de relevant de-a lungul deceniului.

Cum am analizat Habr, partea 1: tendințe

Desigur, am devenit interesat de ce subiecte atrag mai multă activitate de cititor. Am calculat numărul mediu de vizualizări, voturi și comentarii la fiecare subiect. Iată ce s-a întâmplat:

  • Cele mai vizualizate subiecte: arduino, web design, dezvoltare web, digest, link-uri, css, html, html5, nginx, algoritmi.
  • Cele mai „apreciate” subiecte: vkontakte, umor, jquery, opera, c, html, dezvoltare web, html5, css, web design.
  • Cele mai discutate subiecte: opera, skype, freelance, vkontakte, ubuntu, work, nokia, nginx, arduino, firefox.

Apropo, din moment ce compar subiecte, le puteți clasa în funcție de frecvență (și compara rezultatele cu articol similar din 2013).

  • Pentru toți anii de existență ai lui Habr, cele mai populare etichete (în ordine descrescătoare) sunt google, android, javascript, microsoft, linux, php, apple, java, python, programare, startup-uri, dezvoltare, ios, startup, rețele sociale
  • În 2017, cele mai populare au fost javascript, python, java, android, dezvoltare, linux, c++, programare, php, c#, ios, machine learning, securitatea informațiilor, microsoft, react

Când comparăm aceste evaluări, se poate acorda atenție, de exemplu, marșului victorios al lui Python și dispariția php-ului, sau „apusului” subiectelor de pornire și ascensiunii învățării automate.

Nu toate etichetele de pe Habré au o colorare tematică atât de evidentă. De exemplu, iată o duzină de etichete care s-au întâlnit o singură dată, dar mi s-au părut amuzante. Deci: „ideea este forța motrice a progresului”, „pornire de pe o imagine de pe dischetă”, „Statul Iowa”, „dramă”, „superalesh”, „motor cu aburi”, „lucruri de făcut sâmbătă”, „am o vulpe într-o mașină de tocat carne”, „a ieșit ca întotdeauna”, „nu am putut găsi etichete amuzante”. Pentru a determina subiectul unor astfel de articole, etichetele nu sunt suficiente - va trebui să efectuați modelări tematice pe textele articolelor.

O analiză mai detaliată a conținutului articolelor va fi în următoarea postare. În primul rând, voi construi un model care prezice numărul de vizualizări de pagină pentru un articol pe baza conținutului acestuia. În al doilea rând, vreau să învăț rețeaua neuronală să genereze texte în același stil ca și autorii lui Habr. Așa că abonați-vă 🙂

PS Și aici este bip-ul set de date.

Sursa: www.habr.com

Adauga un comentariu