Ako som analyzoval Habr, časť 1: trendy

Keď bol Silvestrovský Olivier hotový, nemal som čo robiť a rozhodol som sa stiahnuť si všetky články z Habrahabr (a súvisiacich platforiem) do počítača a preskúmať.

Bolo tam viacero zaujímavých príbehov. Prvým z nich je vývoj formátu a tém článkov za 12 rokov existencie stránky. Napríklad dynamika niektorých tém je dosť orientačná. Pokračovanie - pod rezom.

Ako som analyzoval Habr, časť 1: trendy

Proces analýzy

Aby sme pochopili, ako sa Habr vyvíjal, bolo potrebné prejsť všetky jeho články a vytiahnuť z nich metainformácie (napríklad dátumy). Obídenie bolo jednoduché, pretože odkazy na všetky články vyzerajú ako „habrahabr.ru/post/337722/“ a čísla sú uvedené presne v poradí. S vedomím, že posledný príspevok má číslo o niečo menej ako 350 tisíc, som práve prešiel všetky možné ID dokumentu v slučke (kód Python):

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

Funkcia download_document pokúsi sa načítať stránku s príslušným ID a pokúsi sa extrahovať zmysluplné informácie z html štruktúry.

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)

V procese parsovania som objavil niekoľko nových vecí.

Po prvé, hovoria, že vytvárať viac procesov, ako je jadier v procesore, je zbytočné. V mojom prípade sa však ukázalo, že obmedzujúcim zdrojom nie je procesor, ale sieť a 100 procesov funguje rýchlejšie ako 4 alebo povedzme 20.

Po druhé, v niektorých príspevkoch boli kombinácie špeciálnych znakov - napríklad eufemizmy ako "%&#@". Ukázalo sa, že html.parser, ktorý som použil ako prvý, reaguje na kombináciu &# bolestivo, pretože to považujeme za začiatok entity html. Už som sa chystal urobiť čiernu mágiu, ale fórum navrhovalo, že stačí zmeniť parser.

Po tretie, podarilo sa mi vyložiť všetky publikácie okrem troch. Dokumenty s číslami 65927, 162075 a 275987 môj antivírus okamžite odstránil. Ide o články o reťazci javascriptu, ktorý sťahuje škodlivé pdf, SMS ransomware vo forme sady pluginov prehliadača a stránku CrashSafari.com, ktorá posiela iPhony do reštartu. Antivírus objavil ďalší článok neskôr, počas kontroly systému: príspevok 338586 o skriptoch na webovej stránke obchodu s domácimi zvieratami, ktoré používajú procesor používateľa na ťažbu kryptomeny. Prácu antivírusu teda môžeme považovať za celkom primeranú.

„Live“ články sa ukázali byť len polovičné z potenciálneho maxima – 166307 kusov. Čo sa týka zvyšku, Habr dáva možnosti „stránka je zastaraná, bola zmazaná alebo vôbec neexistovala“. No stať sa môže čokoľvek.

Po nahrávaní článkov nasledovali technické práce: napríklad dátumy publikovania bolo potrebné previesť z formátu „21. decembra 2006 o 10:47“ do štandardného formátu. datetimea "12,8 12800" zobrazení - v roku 65535. V tejto fáze sa objavilo niekoľko ďalších incidentov. Ten najzábavnejší súvisí s počtom hlasov a typmi údajov: niektoré staré príspevky mali pretečenie int a každý z nich získal XNUMX hlasov.

Ako som analyzoval Habr, časť 1: trendy

Vo výsledku mi texty článkov (bez obrázkov) zabrali 1.5 gigabajtu, komentáre s metainformáciami - ďalšie 3 a asi sto mega - metainformácie o článkoch. To sa dá úplne ponechať v RAM, čo bolo pre mňa príjemným prekvapením.

Rozbor článkov som začal nie zo samotných textov, ale z metainformácií: dátumy, tagy, huby, zobrazenia a lajky. Ukázalo sa, že vie veľa povedať.

Trendy vývoja Habrahabr

Články na stránke sú publikované od roku 2006; najintenzívnejšie - v rokoch 2008-2016.

Ako som analyzoval Habr, časť 1: trendy

Ako aktívne boli tieto články čítané v rôznych časoch, nie je také ľahké posúdiť. Texty z roku 2012 a mladšie získali viac komentárov a hodnotení, no novšie texty majú viac zobrazení a záložiek. Tieto metriky sa správali rovnako (poklesli na polovicu) iba raz, v roku 2015. Možno sa v situácii hospodárskej a politickej krízy pozornosť čitateľov presunula od IT blogov k bolestivejším témam.

Ako som analyzoval Habr, časť 1: trendy

Okrem samotných článkov som si k nim stiahol aj ďalšie komentáre. Komentárov bolo 6 miliónov, no 240 tisíc z nich bolo zakázaných („priletelo UFO a zverejnilo tu tento nápis“). Užitočnou vlastnosťou komentárov je, že majú časovú pečiatku. Preštudovaním času komentárov môžete zhruba pochopiť, kedy sa články vôbec čítajú.

Ukázalo sa, že väčšina článkov je aj písaná, aj komentovaná niekde od 10. do 20. hodiny, t.j. v typický moskovský pracovný deň. To môže znamenať, že Habr je čítaný na profesionálne účely a že je to dobrý spôsob, ako prokrastinovať v práci. Mimochodom, toto rozloženie dennej doby je stabilné od samotného založenia Habr až po súčasnosť.

Ako som analyzoval Habr, časť 1: trendy

Hlavným prínosom časovej pečiatky komentára však nie je denná doba, ale dĺžka „aktívneho života“ článku. Počítal som, ako je rozdelený čas od zverejnenia článku po jeho komentár. Ukázalo sa, že teraz medián komentára (zelená čiara) prichádza za cca 20 hodín, t.j. v prvý deň po uverejnení zostáva v priemere o niečo viac ako polovica všetkých komentárov k článku. A za dva dni zanechajú 75% všetkých komentárov. Skoršie články sa zároveň čítali ešte rýchlejšie – napríklad v roku 2010 prišla polovica komentárov za prvých 6 hodín.

Ako som analyzoval Habr, časť 1: trendy

Prekvapilo ma, že komentáre sa predĺžili: priemerný počet znakov v komentári sa za život Habra takmer zdvojnásobil!

Ako som analyzoval Habr, časť 1: trendy

Jednoduchšia spätná väzba ako komentáre sú hlasy. Na rozdiel od mnohých iných zdrojov si na Habrého môžete dať nielen plusy, ale aj mínusy. Poslednú možnosť však čitatelia tak často nevyužívajú: aktuálny podiel nepáči sa mi je asi 15 % zo všetkých odovzdaných hlasov. Kedysi ich bolo viac, no postupom času boli čitatelia milší.

Ako som analyzoval Habr, časť 1: trendy

Samotné texty sa časom menili. Napríklad typická dĺžka textu sa od samotného spustenia stránky aj napriek krízam neprestáva neustále zväčšovať. Za desaťročie sa texty predĺžili takmer desaťkrát!

Ako som analyzoval Habr, časť 1: trendy

Zmenil sa aj štýl textov (na prvú aproximáciu). Počas prvých rokov Habrovej existencie sa napríklad zvýšil podiel kódu a čísel v textoch:

Ako som analyzoval Habr, časť 1: trendy

Po pochopení celkovej dynamiky stránky som sa rozhodol zmerať, ako sa menila obľúbenosť rôznych tém. Témy môžu byť automaticky vyberané z textov, ale na začiatok nemôžete znova vynájsť koleso, ale použiť hotové značky pripevnené autormi každého článku. Do grafu som nakreslil štyri typické trendy. Téma „Google“ spočiatku dominovala (možno najmä vďaka SEO), no v priebehu rokov stráca váhu. Javascript je populárna téma a naďalej pomaly rastie, ale strojové učenie si začalo rýchlo získavať na popularite až v posledných rokoch. Na druhej strane Linux zostal počas celého desaťročia rovnako dôležitý.

Ako som analyzoval Habr, časť 1: trendy

Samozrejme, že ma začalo zaujímať, aké témy priťahujú väčšiu čitateľskú aktivitu. Vypočítal som priemerný počet videní, hlasov a komentárov v každej téme. Tu je to, čo sa stalo:

  • Najsledovanejšie témy: arduino, webdizajn, vývoj webu, prehľad, odkazy, css, html, html5, nginx, algoritmy.
  • Najviac „lajkované“ témy: vkontakte, humor, jquery, opera, c, html, web development, html5, css, webdizajn.
  • Najdiskutovanejšie témy: opera, skype, freelance, vkontakte, ubuntu, práca, nokia, nginx, arduino, firefox.

Mimochodom, keďže porovnávam témy, môžete ich zoradiť podľa frekvencie (a porovnať výsledky s podobný článok z roku 2013).

  • Za celé roky Habrovej existencie sú najobľúbenejšie tagy (v zostupnom poradí) google, android, javascript, microsoft, linux, php, apple, java, python, programovanie, startupy, vývoj, ios, startup, sociálne siete
  • V roku 2017 boli najobľúbenejšie javascript, python, java, android, vývoj, linux, c++, programovanie, php, c#, ios, strojové učenie, informačná bezpečnosť, microsoft, reagovať

Pri porovnaní týchto hodnotení si možno dať pozor napríklad na víťazný pochod Pythonu a zánik php, alebo na „západ“ startupových tém a rozmach strojového učenia.

Nie všetky tagy na Habré majú také zjavné tematické zafarbenie. Tu je napríklad tucet tagov, ktoré sa stretli iba raz, no mne sa zdali vtipné. Takže: „myšlienka je hybnou silou pokroku“, „topánka z diskety“, „štát Iowa“, „dráma“, „superalesh“, „parný stroj“, „čo robiť v sobotu“, „mám líška na mäsovom mlynčeku“, „a dopadlo to ako vždy“, „nevedeli sme vymyslieť vtipné tagy“. Na určenie predmetu takýchto článkov tagy nestačia - budete musieť vykonať tematické modelovanie textov článkov.

Podrobnejší rozbor obsahu článkov bude v ďalšom príspevku. Najprv vytvorím model, ktorý predpovedá počet zobrazení stránky pre článok na základe jeho obsahu. Po druhé, chcem naučiť neurónovú sieť generovať texty v rovnakom štýle ako autori Habr. Tak sa prihláste 🙂

PS A tu je pípnutie súbor údajov.

Zdroj: hab.com

Pridať komentár