Hvernig ég greindi Habr, hluti 1: stefnur

Þegar nýárs Olivier var lokið hafði ég ekkert að gera og ég ákvað að hlaða niður öllum greinum frá Habrahabr (og tengdum kerfum) í tölvuna mína og skoða.

Það voru nokkrar áhugaverðar sögur. Fyrsta þeirra er þróun sniðs og efnisgreinar á þeim 12 árum sem vefurinn hefur verið til. Til dæmis er gangverk sumra viðfangsefna nokkuð leiðbeinandi. Framhald - undir högg að sækja.

Hvernig ég greindi Habr, hluti 1: stefnur

Þjálfunarferli

Til að skilja hvernig Habr þróaðist var nauðsynlegt að fara í gegnum allar greinar hans og draga meta-upplýsingar úr þeim (til dæmis dagsetningar). Framhjáhlaupið var auðvelt, vegna þess að tenglar á allar greinar líta út eins og "habrahabr.ru/post/337722/", og númerin eru gefin nákvæmlega í röð. Þar sem ég vissi að síðasta færsla er aðeins undir 350 þúsund, fór ég bara í gegnum öll möguleg skjalauðkenni í lykkju (Python kóða):

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

Virka download_document reynir að hlaða síðuna með tilheyrandi auðkenni og reynir að draga marktækar upplýsingar úr html uppbyggingunni.

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í ferli að flokka, uppgötvaði ég nokkra nýja hluti.

Í fyrsta lagi segja þeir að það sé gagnslaust að búa til fleiri ferla en kjarna eru í örgjörvanum. En í mínu tilviki kom í ljós að takmarkandi auðlindin er ekki örgjörvinn, heldur netið, og 100 ferli vinna hraðar en 4 eða til dæmis 20.

Í öðru lagi, í sumum færslum voru samsetningar af sérstöfum - til dæmis, euphemisms eins og "%&#@". Það kom í ljós að html.parser, sem ég notaði fyrst, bregst við samsetningunni &# sársaukafullt, miðað við upphaf html-einingarinnar. Ég var nú þegar að fara að gera svartagaldur, en spjallborðið lagði til að þú gætir bara skipt um parser.

Í þriðja lagi tókst mér að losa öll rit, nema þrjú. Skjöl númeruð 65927, 162075 og 275987 var samstundis eytt af vírusvörninni minni. Þetta eru greinar, hver um sig, um javascript keðju sem hleður niður illgjarnri pdf, SMS lausnarhugbúnað í formi setts af vafraviðbótum og CrashSafari.com síðuna sem sendir iPhone í endurræsingu. Vírusvörn uppgötvaði aðra grein síðar, við kerfisskönnun: færslu 338586 um forskriftir á vefsíðu gæludýrabúðanna sem nota örgjörva notandans til að grafa dulritunargjaldmiðil. Svo við getum talið að vinna vírusvarnarefnisins sé alveg fullnægjandi.

"Lifandi" greinar reyndust aðeins helmingur af hugsanlegu hámarki - 166307 stykki. Um restina gefur Habr valkosti "síðan er gamaldags, hefur verið eytt eða var alls ekki til." Jæja, allt getur gerst.

Eftir upphleðslu greina fylgdi tæknivinna: til dæmis þurfti að breyta útgáfudögum úr sniðinu "'21. desember 2006 kl. 10:47" í staðalinn datetime, og "12,8k" skoðanir - í 12800. Á þessu stigi komu nokkur fleiri atvik út. Það fyndnasta hefur að gera með atkvæðatölur og gagnategundir: Sumar gömul færslur voru með yfirfall og fengu 65535 atkvæði hver.

Hvernig ég greindi Habr, hluti 1: stefnur

Þess vegna tóku textar greina (án mynda) mig 1.5 gígabæt, athugasemdir með meta-upplýsingum - önnur 3, og um hundrað megabæti - meta-upplýsingar um greinar. Þetta er alveg hægt að geyma í vinnsluminni, sem kom mér skemmtilega á óvart.

Ég byrjaði greiningu á greinum ekki út frá textunum sjálfum, heldur út frá meta-upplýsingum: dagsetningum, merkjum, miðstöðvum, skoðunum og líkar. Það kom í ljós að hún gat sagt margt.

Habrahabr þróunarstraumar

Greinar á síðunni hafa verið birtar síðan 2006; mest ákafur - á árunum 2008-2016.

Hvernig ég greindi Habr, hluti 1: stefnur

Hversu virkt þessar greinar voru lesnar á mismunandi tímum er ekki svo auðvelt að meta. Textar frá 2012 og yngri fengu fleiri athugasemdir og einkunnir, en nýrri textar hafa fleiri áhorf og bókamerki. Þessar mælingar hegðuðu sér á sama hátt (helminguðu) aðeins einu sinni, árið 2015. Ef til vill hefur athygli lesenda færst frá upplýsingatæknibloggum í sársaukafyllri málefni í efnahags- og stjórnmálakreppu.

Hvernig ég greindi Habr, hluti 1: stefnur

Til viðbótar við greinarnar sjálfar sótti ég fleiri athugasemdir við þær. Það voru 6 milljónir athugasemda, hins vegar voru 240 þúsund þeirra bönnuð ("UFO flaug inn og birti þessa áletrun hér"). Gagnlegur eiginleiki athugasemda er að þær eru með tímastimpli. Með því að kynna þér tíma athugasemda geturðu nokkurn veginn skilið hvenær greinar eru lesnar yfirleitt.

Í ljós kom að flestar greinarnar eru bæði skrifaðar og athugasemdir einhvers staðar frá klukkan 10 til 20, þ.e. á dæmigerðum vinnudegi í Moskvu. Þetta getur þýtt að Habr sé lesið í faglegum tilgangi og að þetta sé góð leið til að fresta vinnunni. Við the vegur, þessi dreifing á tíma dags er stöðug frá upphafi Habr til dagsins í dag.

Hvernig ég greindi Habr, hluti 1: stefnur

Hins vegar er helsti ávinningurinn af tímastimpli athugasemda ekki tími dagsins, heldur lengd „virks lífs“ greinarinnar. Ég reiknaði út hvernig tíminn dreifist frá birtingu greinarinnar til athugasemdar hennar. Í ljós kom að nú kemur miðgildi athugasemd (græn lína) eftir um 20 klukkustundir, þ.e. á fyrsta degi eftir birtingu er að meðaltali rúmlega helmingur allra athugasemda við greinina skilinn eftir. Og á tveimur dögum skilja þeir eftir 75% allra athugasemda. Á sama tíma voru fyrri greinar lesnar enn hraðar - til dæmis árið 2010 kom helmingur athugasemda á fyrstu 6 klukkustundunum.

Hvernig ég greindi Habr, hluti 1: stefnur

Það kom mér á óvart að athugasemdir hafa lengt: meðalfjöldi stafa í athugasemd hefur næstum tvöfaldast á ævi Habr!

Hvernig ég greindi Habr, hluti 1: stefnur

Auðveldari endurgjöf en athugasemdir eru atkvæði. Ólíkt mörgum öðrum auðlindum, á Habré geturðu sett ekki aðeins plús, heldur einnig mínus. Hins vegar nota lesendur ekki síðasta tækifærið svo oft: núverandi hlutur mislíkar er um 15% allra greiddra atkvæða. Áður voru fleiri, en með tímanum hafa lesendur orðið ljúfari.

Hvernig ég greindi Habr, hluti 1: stefnur

Textarnir sjálfir hafa breyst með tímanum. Dæmigerð lengd textans hættir til dæmis ekki að vaxa jafnt og þétt frá því að vefurinn var opnaður, þrátt fyrir kreppurnar. Á áratug hafa textar orðið næstum tífalt lengri!

Hvernig ég greindi Habr, hluti 1: stefnur

Stíll textanna (að fyrstu nálgun) breyttist líka. Á fyrstu árum tilveru Habr, til dæmis, jókst hlutur kóða og númera í textum:

Hvernig ég greindi Habr, hluti 1: stefnur

Eftir að hafa skilið almenna gangverki síðunnar ákvað ég að mæla hvernig vinsældir ýmissa greina breyttust. Hægt er að velja efni sjálfkrafa úr texta, en til að byrja með er ekki hægt að finna upp hjólið aftur, heldur nota tilbúin merki sem höfundar hverrar greinar setja á. Ég hef teiknað fjórar dæmigerðar stefnur á töfluna. „Google“ þemað var upphaflega ráðandi (kannski aðallega vegna SEO), en hefur verið að léttast í gegnum árin. Javascript hefur verið vinsælt viðfangsefni og heldur áfram að vaxa hægt, en vélanám hefur tekið ört vaxandi vinsældum aðeins á undanförnum árum. Linux hefur aftur á móti haldist jafn viðeigandi allan áratuginn.

Hvernig ég greindi Habr, hluti 1: stefnur

Auðvitað fékk ég áhuga á hvaða efni laða að meiri virkni lesenda. Ég reiknaði út meðalfjölda skoðana, atkvæða og athugasemda í hverju efni. Hér er það sem gerðist:

  • Mest skoðað efni: arduino, vefhönnun, vefþróun, digest, tenglar, css, html, html5, nginx, reiknirit.
  • Mest "líkaði" viðfangsefnin: vkontakte, húmor, jquery, ópera, c, html, vefþróun, html5, css, vefhönnun.
  • Mest ræddu efnin: ópera, skype, freelance, vkontakte, ubuntu, vinna, nokia, nginx, arduino, firefox.

Við the vegur, þar sem ég er að bera saman efni, geturðu raðað þeim eftir tíðni (og borið saman niðurstöðurnar við svipuð grein frá 2013).

  • Í öll ár Habr tilveru eru vinsælustu merkin (í lækkandi röð) google, android, javascript, microsoft, linux, php, apple, java, python, forritun, gangsetning, þróun, ios, gangsetning, samfélagsnet
  • Árið 2017 voru vinsælustu javascript, python, java, android, þróun, linux, c++, forritun, php, c#, ios, vélanám, upplýsingaöryggi, microsoft, react

Þegar þessar einkunnir eru bornar saman má til dæmis gefa gaum að sigurgöngu Python og útrýmingu php, eða „sólsetri“ ræsingarefna og uppgangi vélanáms.

Ekki eru öll merki á Habré með svo augljósa þemalitun. Til dæmis, hér eru tugir merkja sem hittust aðeins einu sinni, en fannst mér bara fyndið. Svo: "hugmynd er drifkraftur framfara", "ræstu af disklingamynd", "Iowa State", "drama", "superalesh", "gufuvél", "hlutir sem þarf að gera á laugardag", "ég hef refur í kjötkvörn“, „a það kom út eins og alltaf“, „við komumst ekki upp með skemmtileg merki“. Til að ákvarða efni slíkra greina eru merki ekki nóg - þú verður að framkvæma þemalíkanagerð á texta greinanna.

Nánari greining á innihaldi greinanna verður í næstu færslu. Í fyrsta lagi ætla ég að smíða líkan sem spáir fyrir um fjölda flettinga fyrir grein út frá innihaldi hennar. Í öðru lagi vil ég kenna tauganetinu að búa til texta í sama stíl og höfundar Habr. Svo gerast áskrifandi 🙂

PS Og hér er pípið gagnasafn.

Heimild: www.habr.com

Bæta við athugasemd