Jak jsem analyzoval Habra, část 1: trendy

Když skončil Silvestrovský Olivier, neměl jsem co dělat a rozhodl jsem se stáhnout si všechny články z Habrahabr (a souvisejících platforem) do počítače a prozkoumat.

Bylo tam několik zajímavých příběhů. Prvním z nich je vývoj formátu a témat článků za 12 let existence webu. Například dynamika některých témat je docela orientační. Pokračování - pod řezem.

Jak jsem analyzoval Habra, část 1: trendy

Proces analýzy

Abychom pochopili, jak se Habr vyvíjel, bylo nutné projít všechny jeho články a vytáhnout z nich metainformace (například data). Obejití bylo snadné, protože odkazy na všechny články vypadají jako "habrahabr.ru/post/337722/" a čísla jsou uvedena přesně v pořadí. S vědomím, že poslední příspěvek má číslo o něco méně než 350 tisíc, jsem prošel všechna možná ID dokumentu ve smyčce (kód Python):

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

Funkce download_document pokusí se načíst stránku s odpovídajícím id a pokusí se extrahovat smysluplné informace z html struktury.

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 procesu analýzy jsem objevil několik nových věcí.

Zaprvé říkají, že vytvářet více procesů, než je jader v procesoru, je zbytečné. Ale v mém případě se ukázalo, že omezujícím zdrojem není procesor, ale síť a 100 procesů funguje rychleji než 4 nebo řekněme 20.

Za druhé, v některých příspěvcích byly kombinace speciálních znaků - například eufemismy jako "%&#@". Ukázalo se že html.parser, který jsem použil jako první, reaguje na kombinaci &# bolestně, protože to považujeme za začátek entity html. Už jsem se chystal udělat černou magii, ale fórum navrhlo, že stačí změnit analyzátor.

Za třetí se mi podařilo vyložit všechny publikace, kromě tří. Dokumenty s čísly 65927, 162075 a 275987 byly okamžitě odstraněny mým antivirem. Jedná se o články o řetězci javascriptu, který stahuje škodlivé pdf, SMS ransomware ve formě sady pluginů prohlížeče a webu CrashSafari.com, který posílá iPhony do restartu. Antivirus objevil další článek později, během kontroly systému: příspěvek 338586 o skriptech na webu zverimexu, které používají procesor uživatele k těžbě kryptoměny. Práci antiviru tedy můžeme považovat za zcela adekvátní.

„Live“ články se ukázaly být jen polovinou potenciálního maxima – 166307 kusů. Pokud jde o zbytek, Habr dává možnosti "stránka je zastaralá, byla smazána nebo vůbec neexistovala." No, stát se může cokoliv.

Po nahrání článků následovaly technické práce: například data publikace bylo nutné převést z formátu „21. prosince 2006 v 10:47“ do standardního datetimea "12,8 tisíc" zobrazení - v roce 12800. V této fázi se objevilo několik dalších incidentů. Ten nejzábavnější souvisí s počty hlasů a datovými typy: některé staré příspěvky měly přetečení int a každý z nich získal 65535 hlasů.

Jak jsem analyzoval Habra, část 1: trendy

Ve výsledku mi texty článků (bez obrázků) zabraly 1.5 gigabajtu, komentáře s metainformacemi - další 3 a asi sto mega - metainformace o článcích. To se dá kompletně uchovat v RAM, což pro mě bylo příjemné překvapení.

Rozbor článků jsem nezačal ze samotných textů, ale z metainformací: data, tagy, huby, názory a lajky. Ukázalo se, že mohla hodně vyprávět.

Vývojové trendy Habrahabr

Články na webu vycházejí od roku 2006; nejintenzivněji - v letech 2008-2016.

Jak jsem analyzoval Habra, část 1: trendy

Jak aktivně byly tyto články čteny v různých dobách, není tak snadné posoudit. Texty z roku 2012 a mladší získaly více komentářů a hodnocení, ale novější texty mají více zobrazení a záložek. Tyto metriky se chovaly stejně (sníženy na polovinu) pouze jednou, v roce 2015. Možná se v situaci ekonomické a politické krize pozornost čtenářů přesunula od IT blogů k bolestnějším problémům.

Jak jsem analyzoval Habra, část 1: trendy

Kromě článků samotných jsem si k nim stáhl další komentáře. Komentářů bylo 6 milionů, nicméně 240 tisíc z nich bylo zakázáno ("přiletělo UFO a zveřejnilo zde tento nápis"). Užitečnou vlastností komentářů je, že mají časové razítko. Prostudováním času komentářů můžete zhruba pochopit, kdy se články vůbec čtou.

Ukázalo se, že většina článků je jak psaná, tak komentovaná někde od 10 do 20 hodin, tzn. v typický moskevský pracovní den. To může znamenat, že Habr se čte pro profesionální účely a že je to dobrý způsob, jak odkládat práci. Mimochodem, toto rozložení denní doby je stabilní od samého založení Habra až do současnosti.

Jak jsem analyzoval Habra, část 1: trendy

Hlavním přínosem časového razítka komentáře však není denní doba, ale délka „aktivního života“ článku. Počítal jsem, jak je rozdělen čas od zveřejnění článku po jeho komentář. Ukázalo se, že nyní medián komentáře (zelená čára) přichází za cca 20 hodin, tzn. první den po zveřejnění zbývá v průměru o něco více než polovina všech komentářů k článku. A za dva dny zanechají 75 % všech komentářů. Dřívější články se přitom četly ještě rychleji – například v roce 2010 přišla polovina komentářů za prvních 6 hodin.

Jak jsem analyzoval Habra, část 1: trendy

Překvapilo mě, že se komentáře prodloužily: průměrný počet znaků v komentáři se za dobu existence Habra téměř zdvojnásobil!

Jak jsem analyzoval Habra, část 1: trendy

Snazší zpětná vazba než komentáře jsou hlasy. Na rozdíl od mnoha jiných zdrojů můžete na Habré dávat nejen plusy, ale i mínusy. Poslední možnost ale čtenáři tak často nevyužívají: aktuální podíl nelíbí se asi 15 % všech odevzdaných hlasů. Dřív jich bylo víc, ale postupem času jsou čtenáři laskavější.

Jak jsem analyzoval Habra, část 1: trendy

Samotné texty se postupem času měnily. Například typická délka textu se od samotného spuštění webu i přes krize nepřestává neustále zvětšovat. Za deset let se texty prodloužily téměř desetkrát!

Jak jsem analyzoval Habra, část 1: trendy

Změnil se i styl textů (k první aproximaci). Během prvních let Habrovy existence se například zvýšil podíl kódu a čísel v textech:

Jak jsem analyzoval Habra, část 1: trendy

Po pochopení celkové dynamiky webu jsem se rozhodl změřit, jak se měnila oblíbenost různých témat. Témata mohou být automaticky vybírána z textů, ale pro začátek nemůžete znovu vynalézt kolo, ale použít hotové štítky, které připevnili autoři každého článku. Do grafu jsem nakreslil čtyři typické trendy. Téma „Google“ zpočátku dominovalo (možná hlavně díky SEO), ale v průběhu let postupně ubývá. Javascript je populární téma a nadále se pomalu rozrůstá, ale strojové učení začalo rychle získávat na popularitě až v posledních letech. Na druhou stranu Linux zůstal po celé desetiletí stejně relevantní.

Jak jsem analyzoval Habra, část 1: trendy

Samozřejmě jsem se začal zajímat o to, jaká témata přitahují větší čtenářskou aktivitu. Počítal jsem medián počtu zobrazení, hlasů a komentářů v každém tématu. Co se stalo:

  • Nejprohlíženější témata: arduino, web design, web development, digest, odkazy, css, html, html5, nginx, algoritmy.
  • Nejvíce „lajkovaná“ témata: vkontakte, humor, jquery, opera, c, html, vývoj webu, html5, css, webdesign.
  • Nejdiskutovanější témata: opera, skype, freelance, vkontakte, ubuntu, práce, nokia, nginx, arduino, firefox.

Mimochodem, protože porovnávám témata, můžete je seřadit podle frekvence (a porovnat výsledky s podobný článek z roku 2013).

  • Za všechny roky Habrovy existence jsou nejoblíbenější tagy (v sestupném pořadí) google, android, javascript, microsoft, linux, php, apple, java, python, programování, startupy, vývoj, ios, startup, sociální sítě
  • V roce 2017 byly nejoblíbenější javascript, python, java, android, vývoj, linux, c++, programování, php, c#, ios, strojové učení, informační bezpečnost, microsoft, reagovat

Při porovnávání těchto hodnocení si lze dát pozor například na vítězný pochod Pythonu a zánik php nebo na „západ“ startupových témat a rozmach strojového učení.

Ne všechny tagy na Habré mají tak zjevné tématické zabarvení. Tady je například tucet tagů, které se potkaly jen jednou, ale prostě mi přišly vtipné. Takže: „nápad je hnací silou pokroku“, „bota z diskety“, „stát Iowa“, „drama“, „superalesh“, „parní stroj“, „co dělat v sobotu“, „mám liška v mlýnku na maso“, „a dopadlo to jako vždy“, „nemohli jsme vymyslet vtipné tagy“. K určení předmětu takových článků tagy nestačí - budete muset provést tematické modelování textů článků.

Podrobnější rozbor obsahu článků bude v příštím příspěvku. Nejprve vytvořím model, který předpovídá počet zobrazení stránky pro článek na základě jeho obsahu. Za druhé chci neuronovou síť naučit generovat texty ve stejném stylu jako autoři Habra. Tak se přihlašte 🙂

PS A tady je pípnutí datový soubor.

Zdroj: www.habr.com

Přidat komentář