Kuinka jäsensin Habria, osa 1: trendit

Kun uudenvuoden Olivier oli päättynyt, minulla ei ollut mitään tekemistä, ja päätin ladata kaikki artikkelit Habrahabrista (ja niihin liittyvistä alustoista) tietokoneelleni ja tutkia niitä.

Siellä oli useita mielenkiintoisia tarinoita. Ensimmäinen niistä on artikkelien muodon ja aiheiden kehittäminen sivuston 12 vuoden aikana. Esimerkiksi joidenkin aiheiden dynamiikka on varsin suuntaa-antava. Jatkoa - leikkauksen alla.

Kuinka jäsensin Habria, osa 1: trendit

Jäsennysprosessi

Ymmärtääkseen, kuinka Habr kehittyi, oli tarpeen käydä läpi kaikki hänen artikkelinsa ja poimia niistä metatietoa (esimerkiksi päivämäärät). Ohitus oli helppoa, koska linkit kaikkiin artikkeleihin näyttävät tältä "habrahabr.ru/post/337722/", ja numerot on annettu tiukasti järjestyksessä. Tietäen, että viimeisessä viestissä on hieman alle 350 tuhatta, kävin juuri läpi kaikki mahdolliset asiakirjatunnukset silmukassa (Python-koodi):

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

Toiminto download_document yrittää ladata sivun vastaavalla tunnuksella ja yrittää poimia merkityksellistä tietoa html-rakenteesta.

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)

Jäsentämisen aikana löysin useita uusia asioita.

Ensinnäkin he sanovat, että on hyödytöntä luoda enemmän prosesseja kuin prosessorissa on ytimiä. Mutta minun tapauksessani kävi ilmi, että rajoittava resurssi ei ole prosessori, vaan verkko, ja 100 prosessia toimivat nopeammin kuin 4 tai vaikkapa 20.

Toiseksi joissakin viesteissä oli erikoismerkkien yhdistelmiä - esimerkiksi eufemismejä, kuten "%&#@". Osoittautui että html.parser, jota käytin ensin, reagoi yhdistelmään &# tuskallisesti, pitäen sitä html-entiteetin alkuna. Aioin jo tehdä mustaa magiaa, mutta foorumi ehdotti, että voit vaihtaa jäsentimen.

Kolmanneksi onnistuin purkamaan kaikki julkaisut kolmea lukuun ottamatta. Viruksentorjuntani poisti välittömästi asiakirjat numeroilla 65927, 162075 ja 275987. Nämä ovat artikkeleita vastaavasti JavaScript-ketjusta, joka lataa haitallisen PDF-tiedoston, SMS-kiristysohjelmista selainlaajennusten muodossa ja CrashSafari.com-sivustosta, joka lähettää iPhonet uudelleenkäynnistykseen. Virustorjunta löysi myöhemmin järjestelmän tarkistuksen aikana toisen artikkelin: julkaisu 338586 lemmikkikaupan verkkosivustolla olevista skripteistä, jotka käyttävät käyttäjän prosessoria kryptovaluutan louhimiseen. Joten voimme pitää viruksentorjuntatyötä varsin riittävänä.

"Live"-artikkelit osoittautuivat vain puoleksi mahdollisesta maksimista - 166307 kappaletta. Muusta Habr antaa vaihtoehdot "sivu on vanhentunut, se on poistettu tai sitä ei ollut ollenkaan." No mitä tahansa voi tapahtua.

Artikkelien lataamista seurasi tekninen työ: esimerkiksi julkaisupäivämäärät piti muuntaa muodossa "'21 klo 2006:10" standardiin. datetime, ja "12,8 12800" näyttökertaa - vuonna 65535. Tässä vaiheessa paljastui vielä muutama tapaus. Hauskin niistä liittyy ääntenlaskuihin ja tietotyyppeihin: joissakin vanhoissa viesteissä oli int overflow ja kukin sai XNUMX ääntä.

Kuinka jäsensin Habria, osa 1: trendit

Tämän seurauksena artikkelien tekstit (ilman kuvia) veivät minulta 1.5 gigatavua, kommentit metatiedoilla - vielä 3 ja noin sata megatavua - metatietoa artikkeleista. Tämä voidaan säilyttää kokonaan RAM-muistissa, mikä oli minulle miellyttävä yllätys.

Aloitin artikkelien analysoinnin en itse teksteistä, vaan metatiedoista: päivämäärät, tagit, keskittimet, näkymät ja tykkäykset. Kävi ilmi, että hän osasi kertoa paljon.

Habrahabrin kehitystrendit

Sivuston artikkeleita on julkaistu vuodesta 2006 lähtien; intensiivisimmin - vuosina 2008-2016.

Kuinka jäsensin Habria, osa 1: trendit

Sitä, kuinka aktiivisesti näitä artikkeleita eri aikoina luettiin, ei ole niin helppo arvioida. Tekstit vuodelta 2012 ja sitä nuoremmat saivat enemmän kommentteja ja arvioita, mutta uudemmissa teksteissä on enemmän näkymiä ja kirjanmerkkejä. Nämä mittarit käyttäytyivät samalla tavalla (puolittuivat) vain kerran, vuonna 2015. Ehkä taloudellisen ja poliittisen kriisitilanteessa lukijoiden huomio on siirtynyt IT-blogeista kipeämpiin aiheisiin.

Kuinka jäsensin Habria, osa 1: trendit

Itse artikkeleiden lisäksi latasin niihin lisää kommentteja. Kommentteja oli 6 miljoonaa, mutta niistä 240 tuhatta kiellettiin ("UFO lensi sisään ja julkaisi tämän kirjoituksen täällä"). Kommenttien hyödyllinen ominaisuus on, että niissä on aikaleima. Kommentointiaikaa tutkimalla voi karkeasti ymmärtää, milloin artikkeleita ylipäätään luetaan.

Kävi ilmi, että suurin osa artikkeleista on sekä kirjoitettu että kommentoitu jossain kello 10-20, ts. tavallisena Moskovan työpäivänä. Tämä voi tarkoittaa, että Habria luetaan ammatillisiin tarkoituksiin, ja tämä on hyvä tapa viivytellä työtä. Muuten, tämä vuorokaudenajan jakautuminen on vakaa Habrin perustamisesta nykypäivään.

Kuinka jäsensin Habria, osa 1: trendit

Kommentin aikaleiman tärkein etu ei kuitenkaan ole vuorokaudenaika, vaan artikkelin "aktiivisen elämän" kesto. Laskin kuinka aika jakautuu artikkelin julkaisusta sen kommentointiin. Kävi ilmi, että nyt mediaanikommentti (vihreä viiva) tulee noin 20 tunnissa, ts. ensimmäisenä päivänä julkaisun jälkeen artikkeliin jätetään keskimäärin hieman yli puolet kaikista kommenteista. Ja kahdessa päivässä he jättävät 75% kaikista kommenteista. Samalla aikaisemmat artikkelit luettiin entistä nopeammin - esimerkiksi vuonna 2010 puolet kommenteista tuli ensimmäisen 6 tunnin aikana.

Kuinka jäsensin Habria, osa 1: trendit

Minulle tuli yllätyksenä, että kommentit ovat pidentyneet: kommentin keskimääräinen merkkimäärä on lähes kaksinkertaistunut Habrin eliniän aikana!

Kuinka jäsensin Habria, osa 1: trendit

Helpompi palaute kuin kommentit ovat ääniä. Toisin kuin monet muut resurssit, Habreen voit laittaa paitsi plussat myös miinukset. Lukijat eivät kuitenkaan käytä viimeistä tilaisuutta niin usein: ei-tykkäyksiä on tällä hetkellä noin 15 % kaikista annetuista äänistä. Ennen niitä oli enemmän, mutta ajan myötä lukijoista on tullut ystävällisempiä.

Kuinka jäsensin Habria, osa 1: trendit

Itse tekstit ovat muuttuneet ajan myötä. Esimerkiksi tekstin tyypillinen pituus ei lakkaa kasvamasta tasaisesti heti sivuston käynnistämisestä, kriiseistä huolimatta. Vuosikymmenessä tekstit ovat pidentyneet lähes kymmenen kertaa!

Kuinka jäsensin Habria, osa 1: trendit

Myös tekstien tyyli (ensimmäisen likiarvon mukaan) muuttui. Esimerkiksi Habrin olemassaolon ensimmäisten vuosien aikana koodin ja numeroiden osuus teksteistä kasvoi:

Kuinka jäsensin Habria, osa 1: trendit

Ymmärryttyään sivuston yleisen dynamiikan päätin mitata kuinka eri aiheiden suosio muuttui. Aiheet voidaan valita automaattisesti teksteistä, mutta aluksi et voi keksiä pyörää uudelleen, vaan käyttää valmiita tunnisteita, jotka jokaisen artikkelin kirjoittajat ovat kiinnittäneet. Olen piirtänyt kaavioon neljä tyypillistä trendiä. "Google" -teema hallitsi alun perin (ehkä lähinnä hakukoneoptimoinnin vuoksi), mutta se on laihtunut vuosien mittaan. Javascript on ollut suosittu aihe ja kasvaa edelleen hitaasti, mutta koneoppiminen on alkanut saada nopeasti suosiota vasta viime vuosina. Linux sen sijaan on pysynyt yhtä tärkeänä koko vuosikymmenen ajan.

Kuinka jäsensin Habria, osa 1: trendit

Tietysti kiinnostuin siitä, mitkä aiheet houkuttelevat lukijaa enemmän. Laskin kunkin aiheen näyttökertojen, äänien ja kommenttien mediaanimäärän. Tässä on mitä tapahtui:

  • Katsotuimmat aiheet: arduino, web-suunnittelu, web-kehitys, tiivistelmä, linkit, css, html, html5, nginx, algoritmit.
  • Eniten "tykätyt" aiheet: vkontakte, huumori, jquery, ooppera, c, html, web-kehitys, html5, css, web-suunnittelu.
  • Keskustelujen aiheet: ooppera, skype, freelance, vkontakte, ubuntu, työ, nokia, nginx, arduino, firefox.

Muuten, koska vertaan aiheita, voit luokitella ne tiheyden mukaan (ja verrata tuloksia vastaava artikkeli vuodelta 2013).

  • Habrin kaikkien olemassaolon vuosien ajan suosituimmat tunnisteet (laskevassa järjestyksessä) ovat google, android, javascript, microsoft, linux, php, Apple, java, python, ohjelmointi, käynnistykset, kehitys, ios, käynnistys, sosiaaliset verkostot
  • Vuonna 2017 suosituimmat olivat javascript, python, java, android, kehitys, linux, c++, ohjelmointi, php, c#, ios, koneoppiminen, tietoturva, microsoft, react

Näitä arvioita vertaillessa voi kiinnittää huomiota esimerkiksi Pythonin voittomarssiin ja php:n sukupuuttoon tai startup-aiheiden "auringonlaskuun" ja koneoppimisen nousuun.

Kaikilla Habrén tunnisteilla ei ole niin ilmeistä temaattista väritystä. Esimerkiksi tässä on tusina tunnistetta, jotka tapasivat vain kerran, mutta näyttivät minusta vain hauskoilta. Joten: "idea on edistyksen liikkeellepaneva voima", "käynnistys levykkeeltä", "Iowan osavaltio", "draama", "superalesh", "höyrykone", "tekemistä lauantaina", "minulla on kettu lihamyllyssä", "a osoittautui kuten aina", "hauskoja tunnisteita ei voitu keksiä". Tunnisteet eivät riitä tällaisten artikkeleiden aiheen määrittämiseen - sinun on suoritettava temaattinen mallinnus artikkeleiden teksteistä.

Tarkempi analyysi artikkeleiden sisällöstä on seuraavassa postauksessa. Ensin aion rakentaa mallin, joka ennustaa artikkelin näyttökertojen määrän sen sisällön perusteella. Toiseksi haluan opettaa hermoverkon luomaan tekstejä samalla tyylillä kuin Habrin kirjoittajat. Joten tilaa 🙂

PS Ja tässä piippaus tietojoukko.

Lähde: will.com

Lisää kommentti