Kiel mi analizis Habr, parto 1: tendencoj

Kiam la Novjara Olivier estis finita, mi havis nenion por fari, kaj mi decidis elŝuti ĉiujn artikolojn de Habrahabr (kaj rilataj platformoj) al mia komputilo kaj esplori.

Estis pluraj interesaj rakontoj. La unua el ili estas la evoluo de la formato kaj temoj de artikoloj dum la 12 jaroj de ekzisto de la retejo. Ekzemple, la dinamiko de iuj temoj estas sufiĉe indika. Daŭrigo - sub la tranĉo.

Kiel mi analizis Habr, parto 1: tendencoj

Analiza procezo

Por kompreni kiel Habr evoluis, necesis trarigardi ĉiujn siajn artikolojn kaj ĉerpi el ili meta-informojn (ekzemple, datoj). La pretervojo estis facila, ĉar ligiloj al ĉiuj artikoloj aspektas kiel "habrahabr.ru/post/337722/", kaj la nombroj estas donitaj strikte en ordo. Sciante, ke la lasta afiŝo havas nombron iomete malpli ol 350 mil, mi ĵus trarigardis ĉiujn eblajn dokumentidentigilojn en buklo (Python-kodo):

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

funkcio download_document provas ŝargi la paĝon kun la responda identigilo kaj provas ĉerpi signifajn informojn el la html-strukturo.

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)

En la procezo de analizado, mi malkovris plurajn novajn aferojn.

Unue, ili diras, ke krei pli da procezoj ol estas kernoj en la procesoro estas senutila. Sed en mia kazo, montriĝis, ke la limiga rimedo ne estas la procesoro, sed la reto, kaj 100 procezoj funkcias pli rapide ol 4 aŭ, ekzemple, 20.

Due, en kelkaj afiŝoj estis kombinaĵoj de specialaj signoj - ekzemple eŭfemismoj kiel "%&#@". Montriĝis ke html.parser, kiun mi uzis unue, reagas al la kombinaĵo &# dolore, konsiderante ĝin la komenco de la html ento. Mi jam intencis fari nigran magion, sed la forumo sugestis, ke vi povas simple ŝanĝi la analizilon.

Trie, mi sukcesis malŝarĝi ĉiujn eldonaĵojn, krom tri. Dokumentoj numeritaj 65927, 162075 kaj 275987 estis tuj forigitaj de mia antiviruso. Ĉi tiuj estas artikoloj, respektive, pri Javaskripto-ĉeno, kiu elŝutas malican pdf, SMS-ransomware en la formo de aro da retumilo-kromaĵoj, kaj la CrashSafari.com-ejo, kiu sendas iPhone-ojn en rekomencon. Antiviruso malkovris alian artikolon poste, dum sistema skanado: afiŝu 338586 pri skriptoj en la retejo de dorlotbestoj, kiuj uzas la procesoron de la uzanto por minigi kriptan moneron. Do ni povas konsideri, ke la laboro de la antivirus estas sufiĉe taŭga.

"Vivaj" artikoloj montriĝis nur duono de la ebla maksimumo - 166307 pecoj. Pri la resto, Habr donas eblojn "la paĝo estas malaktuala, estis forigita aŭ tute ne ekzistis." Nu, ĉio povas okazi.

La alŝuto de artikoloj estis sekvita de teknika laboro: ekzemple, eldondatoj devis esti konvertitaj de la formato "'21 decembro 2006 je 10:47" al la normo. datetime, kaj "12,8k" vidoj - en 12800. En ĉi tiu etapo, kelkaj pliaj okazaĵoj aperis. La plej amuza rilatas al balotkalkuloj kaj datumtipoj: iuj malnovaj afiŝoj havis int-superfluon kaj ricevis po 65535 voĉojn.

Kiel mi analizis Habr, parto 1: tendencoj

Rezulte, la tekstoj de artikoloj (sen bildoj) prenis al mi 1.5 gigabajtojn, komentojn kun metainformoj - pliajn 3, kaj ĉirkaŭ cent megabajtojn - metainformojn pri artikoloj. Ĉi tio povas esti tute konservita en RAM, kio estis agrabla surprizo por mi.

Mi komencis la analizon de artikoloj ne el la tekstoj mem, sed el metainformoj: datoj, etikedoj, naboj, vidoj kaj ŝatoj. Montriĝis, ke ŝi povis rakonti multon.

Habrahabr Evoluaj Tendencoj

Artikoloj en la retejo estas publikigitaj ekde 2006; plej intense - en 2008-2016.

Kiel mi analizis Habr, parto 1: tendencoj

Kiel aktive ĉi tiuj artikoloj estis legitaj en malsamaj tempoj, ne estas tiel facile taksi. Tekstoj de 2012 kaj pli junaj ricevis pli da komentoj kaj rangigoj, sed pli novaj tekstoj havas pli da vidoj kaj legosignoj. Ĉi tiuj metrikoj kondutis same (duonigitaj) nur unufoje, en 2015. Eble, en situacio de ekonomia kaj politika krizo, la atento de legantoj transiris de IT-blogoj al pli doloraj aferoj.

Kiel mi analizis Habr, parto 1: tendencoj

Krom la artikoloj mem, mi elŝutis pli da komentoj al ili. Estis 6 milionoj da komentoj, tamen 240 mil el ili estis malpermesitaj ("nifo enflugis kaj publikigis ĉi tiun surskribon ĉi tie"). Utila eco de komentoj estas, ke ili havas tempomarkon. Studante la tempon de komentoj, vi povas proksimume kompreni kiam artikoloj estas legitaj.

Montriĝis, ke la plej multaj el la artikoloj estas kaj skribitaj kaj komentataj ie de la 10-a ĝis la 20-a, t.e. en tipa Moskva labortago. Ĉi tio povas signifi, ke Habr estas legita por profesiaj celoj, kaj ke ĉi tio estas bona maniero prokrasti ĉe la laboro. Cetere, ĉi tiu distribuo de la tempo de la tago estas stabila de la fondo mem de Habr ĝis la nuntempo.

Kiel mi analizis Habr, parto 1: tendencoj

Tamen, la ĉefa avantaĝo de komenta tempomarko ne estas la horo de la tago, sed la daŭro de la "aktiva vivo" de la artikolo. Mi kalkulis kiel la tempo estas distribuata de la publikigo de la artikolo ĝis ĝia komento. Montriĝis, ke nun la meza komento (verda linio) venas post ĉirkaŭ 20 horoj, t.e. en la unua tago post publikigo, averaĝe restas iom pli ol duono de ĉiuj komentoj pri la artikolo. Kaj en du tagoj ili lasas 75% de ĉiuj komentoj. Samtempe, pli fruaj artikoloj estis legitaj eĉ pli rapide - ekzemple, en 2010, duono de la komentoj venis en la unuaj 6 horoj.

Kiel mi analizis Habr, parto 1: tendencoj

Surprizis min, ke komentoj plilongiĝis: la averaĝa nombro da signoj en komento preskaŭ duobliĝis dum la vivdaŭro de Habr!

Kiel mi analizis Habr, parto 1: tendencoj

Pli facila reago ol komentoj estas voĉoj. Male al multaj aliaj rimedoj, sur Habré oni povas meti ne nur plusojn, sed ankaŭ minusojn. Tamen la legantoj ne tiom ofte uzas la lastan ŝancon: la nuna parto de malŝatoj estas ĉirkaŭ 15% de ĉiuj voĉdonoj. Antaŭe estis pli, sed kun la tempo, legantoj fariĝis pli afablaj.

Kiel mi analizis Habr, parto 1: tendencoj

La tekstoj mem ŝanĝiĝis laŭlonge de la tempo. Ekzemple, la tipa longeco de la teksto ne ĉesas kreski senĉese ekde la lanĉo mem de la retejo, malgraŭ la krizoj. En jardeko, tekstoj fariĝis preskaŭ dekoble pli longaj!

Kiel mi analizis Habr, parto 1: tendencoj

Ankaŭ la stilo de la tekstoj (al unua aproksimado) ŝanĝiĝis. Dum la unuaj jaroj da la ekzisto de Habr, ekzemple, la parto de kodo kaj nombroj en tekstoj pliiĝis:

Kiel mi analizis Habr, parto 1: tendencoj

Post kompreni la ĝeneralan dinamikon de la retejo, mi decidis mezuri kiel ŝanĝiĝis la populareco de diversaj temoj. Temoj povas esti aŭtomate elektitaj el tekstoj, sed por komenci, vi ne povas reinventi la radon, sed uzi pretajn etikedojn fiksitajn de la aŭtoroj de ĉiu artikolo. Mi desegnis kvar tipajn tendencojn sur la diagramo. La temo "Guglo" komence regis (eble ĉefe pro SEO), sed malkreskis tra la jaroj. Javascript estis populara temo kaj daŭre kreskas malrapide, sed maŝinlernado komencis rapide populari nur en la lastaj jaroj. Linukso, aliflanke, restis same grava dum la jardeko.

Kiel mi analizis Habr, parto 1: tendencoj

Kompreneble, mi interesiĝis pri kiuj temoj altiras pli da leganta agado. Mi kalkulis la mezan nombron da vidoj, voĉoj kaj komentoj en ĉiu temo. Jen kio okazis:

  • Plej viditaj temoj: Arduino, TTT-dezajno, TTT-disvolviĝo, Digest, Ligiloj, Css, html, html5, nginx, algoritmoj.
  • La plej "ŝatataj" temoj: vkontakte, humuro, jquery, opero, c, html, TTT-evoluigo, html5, css, TTT-dezajno.
  • La plej diskutitaj temoj: opero, skajpo, sendependa, vkontakte, ubuntu, laboro, nokia, nginx, arduino, firefox.

Cetere, ĉar mi komparas temojn, vi povas rangigi ilin laŭ ofteco (kaj kompari la rezultojn kun simila artikolo de 2013).

  • Dum ĉiuj jaroj de ekzisto de Habr, la plej popularaj etikedoj (en malkreskanta ordo) estas google, android, javascript, mikrosofto, linukso, php, apple, java, python, programado, ekentreprenoj, evoluo, ios, startup, sociaj retoj
  • En 2017, la plej popularaj estis javascript, python, java, android, evoluo, linukso, c++, programado, php, c#, ios, maŝinlernado, informa sekureco, mikrosofto, reagi

Komparante ĉi tiujn taksojn, oni povas atenti, ekzemple, al la venka marŝo de Python kaj la formorto de php, aŭ al la "sunsubiro" de startaj temoj kaj la pliiĝo de maŝinlernado.

Ne ĉiuj etikedoj sur Habré havas tian evidentan teman kolorigon. Ekzemple, jen deko da etikedoj, kiuj renkontis nur unufoje, sed nur ŝajnis al mi amuzaj. Do: "la ideo estas la mova forto de progreso", "boot de disketo", "Iovaa Ŝtato", "dramo", "superalesh", "vapormaŝino", "aferoj por fari sabate", "mi havas vulpo en viandmuelilo", "a ĝi rezultis kiel ĉiam", "ni ne povis elpensi amuzajn etikedojn". Por determini la temon de tiaj artikoloj, etikedoj ne sufiĉas - vi devos efektivigi teman modeladon sur la tekstoj de la artikoloj.

Pli detala analizo de la enhavo de la artikoloj estos en la sekva afiŝo. Unue, mi konstruos modelon, kiu antaŭdiras la nombron da paĝaj vidoj por artikolo surbaze de ĝia enhavo. Due, mi volas instrui al la neŭrala reto generi tekstojn en la sama stilo kiel la aŭtoroj de Habr. Do abonu 🙂

PS Kaj jen la bipo datumaro.

fonto: www.habr.com

Aldoni komenton