Kui uue aasta oliivisalati söömisega lÀbi sai, ei olnud mul midagi teha ja otsustasin laadida endale arvutisse kÔik artiklid HabrHabr'ist (ja seotud platvormidelt) ja neid uurida.
See tĂ”i esile mitmeid huvitavaid teemasid. Esimene neist on artiklite formaadi ja temaatika areng 12-aastase veebisaidi eksisteerimise jooksul. NĂ€iteks on mĂ”ne teema dĂŒnaamika ĂŒsna kĂ”nekas. JĂ€tkub pĂ€rast hĂŒpet.

Parsimise protsess
Selleks, et mĂ”ista, kuidas Habr on arenenud, pidin ma lĂ€bima kĂ”ik tema artiklid ja eristama neist metaandmed (nt kuupĂ€evad). Artiklite lĂ€bimine oli lihtne, sest linkide kĂ”ik artiklid on kujul "habrahabr.ru/post/337722/", ja numbrid on jĂ€rjestikused. Teades, et viimane postitus on numbrilt veidi alla 350 tuhande, lĂ€ksin ma lihtsalt lĂ€bi kĂ”ik vĂ”imalikud dokumentide id-d tsĂŒkliga (kood Pythonis):
import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
docs = p.map(download_document, np.arange(350000))Function download_document ĂŒritab laadida lehte vastava id-ga ja pĂŒĂŒab struktuurist html vĂ€lja tĂ”mmata sisulist teavet.
import requests
from bs4 import BeautifulSoup
def download_document(pid):
""" Laadi ja töötle Habr dokumenti ja selle kommentaare """
# dokumendi allalaadimine
r = requests.get('https://habrahabr.ru/post/' + str(pid) + '/')
# dokumendi parsimine
soup = BeautifulSoup(r.text, 'html5lib') # asemel html.parser
doc = {}
doc['id'] = pid
if not soup.find("span", {"class": "post__title-text"}):
# see vÔib juhtuda, kui artikkel ei eksisteeri vÔi on kustutatud
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
# loo teised vÀljad: hubid, sildid, vaatamised, kommentaarid, hÀÀled jne.
# ...
# tulemuse salvestamine eraldi faili
fname = r'files/' + str(pid) + '.pkl'
with open(fname, 'wb') as f:
pickle.dump(doc, f)Parsi protsessi kÀigus avastasin mÔned uued aspektid.
Esiteks, rÀÀgitakse, et rohkem protsesside loomine kui protsessoril tuumade arvu, on kasutult. Kuid minu puhul osutus piiravaks ressursiks mitte protsessor, vaid vÔrk, ja 100 protsessi töötavad kiiremini kui 4 vÔi nÀiteks 20.
Teiseks, mÔnedes postitustes esinesid erimÀrkide kombinatsioonid - nÀiteks eufemismid nagu "%&#@". Selgus, et html.parser, mille kasutasin alguses, reageerib kombinatsioonile &# valus, pidades seda HTML-olendi alguseks. Olin juba valmis musta maagia tegema, kuid foorumis soovitati, et saaksin lihtsalt parserit vahetada.
Kolmandaks Ă”nnestus mul eksportida kĂ”ik avaldused, vĂ€lja arvatud kolm. Dokumente numbritega 65927, 162075 ja 275987 eemaldas minu viirusetĂ”rje koheselt. Need olid artiklid vastavalt JavaScripti ahelast, mis laadib pahatahtliku PDF-faili, SMS-keerutajast, mis koosneb brauserite pluginatest ning veebisaidist CrashSafari.com, mis saadab iPhone'id taaskĂ€ivitama. Veel ĂŒhe artikli avastas viirusetĂ”rje hiljem, sĂŒsteemi skaneerimise ajal: post 338586, mis kĂ€sitles loomakoja veebisaidi skripte, mis kasutavad kasutaja protsessorit krĂŒptovaluuta kaevandamiseks. Nii et viirusetĂ”rje töö on tĂ€iesti adekvaatne.
"Elavaid" artikleid leidus ainult pool potentsiaalsest maksimumist â 166307 tĂŒkki. ĂlejÀÀnute kohta annab Habr vĂ”imalusi "leht on aegunud, kustutatud vĂ”i ei eksisteerinudki". Mis iganes, juhtub igasuguseid asju.
Artiklite eksportimisele jĂ€rgnes tehniline töö: nĂ€iteks tuli avaldamise kuupĂ€evad muuta formaadist "â21. detsember 2006 kell 10:47" standardsesse datetime, ja "12,8k" vaatamist â 12800. Selle etapi jooksul tuli esile veel mĂ”ned juhtumid. KĂ”ige naljakam on seotud hÀÀlte arvestamise ja andmetĂŒĂŒpidega: mĂ”nedes vanades postitustes toimus intide ĂŒlevool ja nad said 65535 hÀÀlt.

Artiklite tekstid (ilma piltideta) vĂ”tsid mul 1,5 gigabaiti, kommentaarid koos metaandmetega veel 3, ja umbes sada megabaiti â artiklite metaandmed. Sellise mahuga saan tĂ€iesti töötlemismĂ€lus hakkama, mis oli minu jaoks meeldiv ĂŒllatus.
Alustasin artiklite analĂŒĂŒsi mitte tekstidest, vaid metaandmetest: kuupĂ€evadest, siltidest, hubidest, vaatamistest ja "meeldimistest". Selgus, et ka need vĂ”ivad palju rÀÀkida.
Habrahi arengutrendid
Artikleid avaldatakse saidil alates 2006. aastast; kĂ”ige intensiivsemalt â aastatel 2008â2016.

Need to assess how actively these articles have been read over different periods is not so straightforward. Texts from 2012 and earlier were commented on and rated more actively, while newer texts have more views and saves. These metrics only dropped equally (by half) once, in 2015. Itâs possible that, amid economic and political crises, readers' attention shifted from IT blogs to more pressing issues.

Besides the articles themselves, I also extracted the comments. There are 6 million comments, although 240 thousand of them were banned ("a UFO landed and posted this message here"). A useful feature of comments is that their timestamps are provided. By studying the timing of comments, one can roughly understand when articles are being read.
It turned out that most articles are written and commented on between 10 AM and 8 PM, i.e., during a typical Moscow working day. This could mean that Habr is read for professional purposes and that it serves as a good procrastination method at work. Notably, this time distribution has remained stable from Habr's inception to today.

Kuid peamine kasu kommentaaride ajatempli funktsioonist ei ole kellaaeg, vaid artikli "aktiivse elu" kestus. Olen arvutanud, kuidas ajavahemik avaldamise ja kommentaari vahel jaotub. Selgus, et praegu on mediaan-kommentaar (roheline joon) umbes 20 tunni pĂ€rast, st esimesel pĂ€eval pĂ€rast avaldamist jÀÀb keskmiselt rohkem kui pool kĂ”ikidest artikli kommentaaridest. Kahe pĂ€eva jooksul jĂ€etakse 75% kĂ”ikidest kommentaaridest. Varem loeti artikleid veelgi kiiremini â nĂ€iteks 2010. aastal tulid pooled kommentaaridest juba esimesel 6 tunnil.

Oli ĂŒllatav, et kommentaarid on pikenemas: kommentaari keskmine mĂ€rkide arv on Kopli ehk Habr ajaloo jooksul peaaegu kaks korda suurenenud!

Lihtsam tagasiside kui kommentaarid on hÀÀled. Erinevalt paljusid teistest ressurssidest, saab Habr'is anda mitte ainult plussid, vaid ka miinused. Siiski kasutatakse viimast vÔimalust mitte nii sageli: praegune mitte-meeldivate hÀÀlte osakaal on umbes 15% kÔigist antud hÀÀltest. Varem oli see suurem, kuid aja jooksul on lugejad muutunud lahkemaks.

Aja jooksul on muutunud ka tekstid endid. NĂ€iteks ei lakka tekstide tĂŒĂŒpiline pikkus pidevalt kasvamast kohe pĂ€rast saidi kĂ€ivitamist, hoolimata kriisidest. KĂŒmne aasta jooksul on tekstid muutunud peaaegu kĂŒmme korda pikemaks!

Tekstide stiil (esmases lÀhenemises) on samuti muutunud. NÀiteks esimestel aastatel Hub'i olemasolu jooksul suurenes tekstides koodi ja numbrite osakaal:

PĂ€rast saidi ĂŒldise dĂŒnaamika uurimist otsustasin mÔÔta, kuidas erinevate teemade populaarsus on muutunud. Teemasid saab tekstidest automaatselt vĂ€lja tuua, kuid esmalt ei tasu jalgratast uuesti leiutada, vaid kasutada autorite igas artiklis mĂ€rgitud olemasolevaid sĂŒmboleid. Nelja tĂŒĂŒpilise trendi tĂ”in graafikule. Teema "Google" domineeris algselt (vĂ”ib-olla peamiselt SEO-optimeerimise tĂ”ttu), kuid kaotas iga aastaga kaalu. Javascript oli populaarne teema ja jĂ€tkab aeglaselt, ent masinĂ”pe hakkas kiiresti populaarsust koguma alles viimastel aastatel. Linux on aga terve kĂŒmnendi vĂ€ltel sama relevantne jÀÀnud.

Muidugi, mind huvitas, millised teemad toovad rohkem lugejate tÀhelepanu. Ma arvestasin iga teema mediaanvaatamiste, hÀÀlte ja kommentaaride arvu. Siin on tulemused:
- KÔige vaadatumad teemad: arduino, veebidisain, veebiarendus, uudiskiri, lingid, css, html, html5, nginx, algoritmid.
- KÔige 'meelditumad' teemad: vk, humor, jquery, opera, c, html, veebiarendus, html5, css, veebidisain.
- KÔige arutatumad teemad: opera, skype, vabakutseline, vk, ubuntu, töö, nokia, nginx, arduino, firefox.
Ăldsegi, kuna ma vĂ”rrelen teemasid, vĂ”iks nende sageduse alusel teha reitingu (ja vĂ”rrelda tulemusi ).
- Kogu Hubi eksisteerimise aja jooksul on kÔige populaarsemad sildid (langemise jÀrjekorras) olnud google, android, javascript, microsoft, linux, php, apple, java, python, programmeerimine, idufirmad, arendus, ios, idufirma, sotsiaalmeedia.
- 2017. aastal olid kÔige populaarsemad javascript, python, java, android, arendus, linux, c++, programmeerimine, php, c#, ios, masinÔpe, info turvalisus, microsoft, react.
VÔrreldes neid reitinguid vÔib tÀhele panna nÀiteks Pythoni vÔidukÀiku ja PHP vÀljasuremist, vÔi "startuppide" teema "kaha" ning masinÔppe tÔusu.
KĂ”ik sildid Habras ei oma nii selget temaatilist varjundit. Siin on nĂ€iteks tosin silti, mida olen kohanud vaid ĂŒks kord, aga mis lihtsalt tundusid mulle lĂ”busad. Nii et: "idee on progressi liikumapanev jĂ”ud", "laadimine diskette kujutisest", "Iowa osariik", "dramatuuria", "superalesha", "aurumootor", "mida teha laupĂ€eval", "mul on rebane hakklihamasinas", "aga vĂ€lja tuli nagu alati", "naljakaid silte vĂ€lja mĂ”elda ei Ă”nnestunud". Selliste artiklite temaatika mÀÀramiseks pole siltidest piisavalt â tuleb teostada temaatilist modelleerimist artiklite tekstide ĂŒle.
TĂ€psem analĂŒĂŒs artiklite sisust tuleb jĂ€rgmises postituses. Esiteks plaanin ehitada mudeli, mis prognoosib artikli vaatamiste arvu sĂ”ltuvalt selle sisust. Teiseks tahaks Ă”petada nĂ€rvivĂ”rku genereerima tekste samu stiile jĂ€rgides nagu Habra autoritel. Nii et jĂ€lgige mind đ
P.S. Ja siin on peidetud .
Allikas: habr.com
