Kako sam analizirao Habr, 1. dio: trendovi

Kad je novogodišnji Olivier bio gotov, nisam imao što raditi i odlučio sam skinuti sve članke s Habrahabra (i srodnih platformi) na svoje računalo i istraživati.

Bilo je nekoliko zanimljivih priča. Prvi od njih je razvoj formata i tema članaka tijekom 12 godina postojanja stranice. Primjerice, dinamika nekih tema je dosta indikativna. Nastavak - ispod reza.

Kako sam analizirao Habr, 1. dio: trendovi

Proces raščlambe

Da bismo razumjeli kako se Habr razvijao, bilo je potrebno proći kroz sve njegove članke i iz njih izvući metainformacije (primjerice, datume). Zaobilaženje je bilo jednostavno, jer poveznice na sve članke izgledaju kao "habrahabr.ru/post/337722/", a brojevi su navedeni strogo po redu. Znajući da zadnji post ima broj nešto manji od 350 tisuća, upravo sam prošao kroz sve moguće ID-ove dokumenata u petlji (Python kod):

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

Funkcija download_document pokušava učitati stranicu s odgovarajućim ID-om i pokušava izvući značajne informacije iz html strukture.

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)

U procesu parsiranja otkrio sam nekoliko novih stvari.

Prvo, kažu da je stvaranje više procesa nego što ima jezgri u procesoru beskorisno. Ali u mom slučaju pokazalo se da ograničavajući resurs nije procesor, već mreža, a 100 procesa radi brže od 4 ili, recimo, 20.

Drugo, u nekim postovima bilo je kombinacija posebnih znakova - na primjer, eufemizama poput "%&#@". Pokazalo se da html.parser, koji sam prvi koristio, reagira na kombinaciju &# bolno, smatrajući ga početkom html entiteta. Već sam namjeravao napraviti crnu magiju, ali forum je sugerirao da možete samo promijeniti parser.

Treće, uspio sam istovariti sve publikacije, osim tri. Dokumente pod brojevima 65927, 162075 i 275987 moj je antivirus odmah izbrisao. To su članci, redom, o lancu javascripta koji preuzima zlonamjerni pdf, SMS ransomwareu u obliku skupa dodataka za preglednik i stranici CrashSafari.com koja šalje iPhone u ponovno pokretanje. Antivirus je otkrio još jedan članak kasnije, tijekom skeniranja sustava: post 338586 o skriptama na web stranici trgovine kućnim ljubimcima koje koriste procesor korisnika za rudarenje kriptovalute. Stoga možemo smatrati da je rad antivirusa sasvim adekvatan.

Pokazalo se da su "živi" članci samo polovica potencijalnog maksimuma - 166307 komada. Za ostalo Habr daje opcije "stranica je zastarjela, obrisana ili uopće nije postojala." Pa svašta se može dogoditi.

Učitavanje članaka pratio je tehnički posao: na primjer, datume objave trebalo je pretvoriti iz formata "'21. prosinca 2006. u 10:47" u standardni datetime, i "12,8k" pregleda - u 12800. U ovoj fazi, izašlo je još nekoliko incidenata. Najsmješniji je onaj s prebrojavanjem glasova i vrstama podataka: neki stari postovi imali su int overflow i svaki je dobio 65535 glasova.

Kako sam analizirao Habr, 1. dio: trendovi

Kao rezultat toga, tekstovi članaka (bez slika) uzeli su mi 1.5 gigabajta, komentari s metainformacijama - još 3, i oko stotinjak megabajta - metainformacije o člancima. Ovo se može u potpunosti držati u RAM-u, što je za mene bilo ugodno iznenađenje.

U analizu članaka nisam krenuo od samih tekstova, već od metainformacija: datuma, oznaka, čvorišta, pregleda i lajkova. Ispostavilo se da može puno ispričati.

Trendovi razvoja Habrahabra

Članci na stranici objavljuju se od 2006. godine; najintenzivnije - 2008.-2016.

Kako sam analizirao Habr, 1. dio: trendovi

Nije lako procijeniti koliko su aktivno čitani ovi članci u različitim vremenima. Tekstovi iz 2012. i mlađi dobili su više komentara i ocjena, no noviji tekstovi imaju više pregleda i bookmarkova. Ove su se metrike ponašale na isti način (prepolovljene) samo jednom, 2015. Možda se u situaciji ekonomske i političke krize pažnja čitatelja preusmjerila s IT blogova na bolnija pitanja.

Kako sam analizirao Habr, 1. dio: trendovi

Osim samih članaka, preuzeo sam još komentara na njih. Bilo je 6 milijuna komentara, no 240 tisuća ih je zabranjeno ("uletio NLO i objavio ovaj natpis ovdje"). Korisno svojstvo komentara je da imaju vremensku oznaku. Proučavajući vrijeme komentara, možete otprilike shvatiti kada se članci uopće čitaju.

Pokazalo se da se većina članaka i piše i komentira negdje od 10 do 20 sati, tj. tipičnog moskovskog radnog dana. To može značiti da se Habr čita u profesionalne svrhe, te da je to dobar način za odugovlačenje na poslu. Inače, ova raspodjela doba dana je stabilna od samog osnutka Habra do danas.

Kako sam analizirao Habr, 1. dio: trendovi

Međutim, glavna prednost vremenske oznake komentara nije doba dana, već trajanje "aktivnog života" članka. Izračunao sam kako se raspoređuje vrijeme od objave članka do njegovog komentara. Pokazalo se da sada srednji komentar (zelena linija) dolazi za oko 20 sati, tj. prvog dana nakon objave u prosjeku se ostavi nešto više od polovice svih komentara na članak. I u dva dana ostave 75% svih komentara. Pritom su se raniji članci čitali čak i brže – primjerice, 2010. polovica komentara došla je u prvih 6 sati.

Kako sam analizirao Habr, 1. dio: trendovi

Iznenadilo me da su se komentari produžili: prosječan broj znakova u komentaru gotovo se udvostručio tijekom trajanja Habra!

Kako sam analizirao Habr, 1. dio: trendovi

Lakše povratne informacije od komentara su glasovi. Za razliku od mnogih drugih izvora, na Habréu možete staviti ne samo pluseve, već i minuse. No, čitatelji ne koriste tako često posljednju priliku: trenutni udio dislajkova je oko 15% svih glasova. Nekad ih je bilo više, ali s vremenom su čitatelji postali ljubazniji.

Kako sam analizirao Habr, 1. dio: trendovi

Sami tekstovi su se mijenjali kroz vrijeme. Primjerice, tipična duljina teksta ne prestaje ravnomjerno rasti od samog pokretanja stranice, unatoč krizama. U desetljeću tekstovi su postali gotovo deset puta duži!

Kako sam analizirao Habr, 1. dio: trendovi

Mijenjao se i stil tekstova (u prvom približu). U prvim godinama postojanja Habra, primjerice, porastao je udio koda i brojeva u tekstovima:

Kako sam analizirao Habr, 1. dio: trendovi

Nakon što sam shvatio ukupnu dinamiku stranice, odlučio sam izmjeriti kako se promijenila popularnost različitih tema. Teme se mogu automatski birati iz tekstova, ali za početak, ne možete ponovno izmišljati kotač, već koristiti gotove oznake koje postavljaju autori svakog članka. Na grafikonu sam nacrtao četiri tipična trenda. Tema "Google" u početku je dominirala (možda uglavnom zbog SEO-a), ali je s godinama gubila na težini. Javascript je bio popularna tema i nastavlja polagano rasti, ali strojno učenje počelo je brzo dobivati ​​na popularnosti tek posljednjih godina. Linux je, s druge strane, ostao jednako relevantan kroz cijelo desetljeće.

Kako sam analizirao Habr, 1. dio: trendovi

Naravno, počelo me zanimati koje teme privlače veću čitateljsku aktivnost. Izračunao sam srednji broj pregleda, glasova i komentara u svakoj temi. Evo što se dogodilo:

  • Najgledanije teme: arduino, web dizajn, web development, sažetak, linkovi, css, html, html5, nginx, algoritmi.
  • Najviše "sviđanih" tema: vkontakte, humor, jquery, opera, c, html, web development, html5, css, web dizajn.
  • Teme o kojima se najviše raspravlja: opera, skype, freelance, vkontakte, ubuntu, posao, nokia, nginx, arduino, firefox.

Usput, budući da uspoređujem teme, možete ih rangirati po učestalosti (i usporediti rezultate s sličan članak iz 2013).

  • Za sve godine postojanja Habra najpopularniji tagovi (silaznim redoslijedom) su google, android, javascript, microsoft, linux, php, apple, java, python, programiranje, startups, development, ios, startup, društvene mreže
  • U 2017. najpopularniji su bili javascript, python, java, android, development, linux, c++, programiranje, php, c#, ios, strojno učenje, informacijska sigurnost, microsoft, react

Kada se uspoređuju te ocjene, može se obratiti pozornost, primjerice, na pobjednički pohod Pythona i izumiranje php-a ili na "zalazak" startup tema i uspon strojnog učenja.

Nemaju sve oznake na Habréu tako očitu tematsku boju. Na primjer, ovdje je desetak oznaka koje su se susrele samo jednom, ali su mi se samo činile smiješne. Dakle: "ideja je pokretačka snaga napretka", "pokretanje s diskete", "država Iowa", "drama", "superalesh", "parni stroj", "stvari koje treba učiniti u subotu", "imam lisica u stroju za mljevenje mesa", "a ispalo je kao i uvijek", "nismo mogli smisliti smiješne oznake". Da biste odredili temu takvih članaka, oznake nisu dovoljne - morat ćete izvršiti tematsko modeliranje na tekstovima članaka.

Detaljnija analiza sadržaja članaka bit će u sljedećem postu. Prvo ću izraditi model koji predviđa broj pregleda stranice za članak na temelju njegovog sadržaja. Drugo, želim naučiti neuronsku mrežu generirati tekstove u istom stilu kao i autori Habra. Zato se pretplatite 🙂

PS A ovdje je zvučni signal skup podataka.

Izvor: www.habr.com

Dodajte komentar