Hogyan elemeztem a Habr-t, 1. rész: trendek

Amikor az újévi Olivier véget ért, nem volt mit csinálnom, és úgy döntöttem, hogy letöltöm a Habrahabr (és a kapcsolódó platformok) összes cikkét a számítógépemre, és felfedezem.

Volt több érdekes történet is. Ezek közül az első a cikkek formátumának és témájának fejlesztése az oldal fennállásának 12 évében. Például egyes témák dinamikája meglehetősen jelzésértékű. Folytatás - a vágás alatt.

Hogyan elemeztem a Habr-t, 1. rész: trendek

Elemzési folyamat

Ahhoz, hogy megértsük, hogyan fejlődött Habr, végig kellett nézni az összes cikkét, és ki kellett kinyerni belőlük a metainformációkat (például dátumokat). Könnyű volt a kitérő, mert az összes cikkre mutató hivatkozások úgy néznek ki, mint "habrahabr.ru/post/337722/", és a számok szigorúan sorrendben vannak megadva. Tudván, hogy az utolsó bejegyzésben valamivel kevesebb, mint 350 ezer van, most egy ciklusban végignéztem az összes lehetséges dokumentumazonosítót (Python kód):

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

Funkció download_document megpróbálja betölteni az oldalt a megfelelő azonosítóval, és megpróbál értelmes információkat kinyerni a html szerkezetből.

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)

Az elemzés során számos új dolgot fedeztem fel.

Először is azt mondják, hogy felesleges több folyamatot létrehozni, mint ahány mag a processzorban van. De az én esetemben kiderült, hogy nem a processzor a korlátozó erőforrás, hanem a hálózat, és 100 folyamat gyorsabban működik, mint 4 vagy mondjuk 20.

Másodszor, néhány bejegyzésben speciális karakterek kombinációi voltak – például olyan eufemizmusok, mint a „%&#@”. Kiderült, hogy html.parser, amit először használtam, reagál a kombinációra &# fájdalmasan, tekintve a html entitás kezdetének. Már fekete mágiát akartam csinálni, de a fórum azt javasolta, hogy csak módosítsa az elemzőt.

Harmadszor, három kivételével minden kiadványt sikerült kiraknom. A 65927, 162075 és 275987 számú dokumentumokat a vírusirtó azonnal törölte. Ezek a cikkek egy rosszindulatú pdf-et letöltő javascript-láncról, egy böngészőbővítmény-készlet formájában megjelenő SMS-ransomware-ről és a CrashSafari.com webhelyről szólnak, amely az iPhone készülékeket újraindításra küldi. A víruskereső egy másik cikket fedezett fel később, egy rendszerellenőrzés során: a 338586. számú bejegyzést az állatkereskedés webhelyén található szkriptekről, amelyek a felhasználó processzorát használják a kriptovaluta bányászására. Tehát a vírusirtó munkája teljesen megfelelőnek tekinthető.

Az "élő" cikkek csak a fele a potenciális maximumnak - 166307 darab. A többiről Habr ad lehetőséget: "az oldal elavult, törölték vagy egyáltalán nem létezett." Nos, bármi megtörténhet.

A cikkek feltöltését technikai munka követte: például a megjelenési dátumokat a "21. december 2006. 10:47" formátumról szabványra kellett konvertálni. datetime, és "12,8 ezer" megtekintés - 12800-ban. Ebben a szakaszban még néhány incidens történt. A legviccesebb a szavazatok számlálásával és az adattípusokkal kapcsolatos: néhány régi bejegyzés túlcsordult int, és egyenként 65535 szavazatot kapott.

Hogyan elemeztem a Habr-t, 1. rész: trendek

Ennek eredményeként a cikkek szövegei (kép nélkül) 1.5 gigabájtot, a metainformációt tartalmazó megjegyzések - további 3 és körülbelül száz megabájt - a cikkekről szóló metainformációkat vitték el. Ez teljesen RAM-ban tartható, ami kellemes meglepetés volt számomra.

A cikkek elemzését nem magukból a szövegekből, hanem metainformációkból indultam ki: dátumok, címkék, csomópontok, nézetek és kedvelések. Kiderült, hogy sokat tud mesélni.

Habrahabr fejlődési irányzatok

Az oldalon 2006 óta jelennek meg cikkek; legintenzívebben - 2008-2016-ban.

Hogyan elemeztem a Habr-t, 1. rész: trendek

Hogy mennyire aktívan olvasták ezeket a cikkeket különböző időpontokban, azt nem olyan könnyű felmérni. A 2012-es és fiatalabb szövegek több megjegyzést és értékelést kaptak, de az újabb szövegek több megtekintéssel és könyvjelzővel rendelkeznek. Ezek a mutatók csak egyszer, 2015-ben viselkedtek ugyanúgy (felezve). Talán a gazdasági és politikai válsághelyzetben az olvasók figyelme az informatikai blogokról a fájdalmasabb kérdésekre terelődött.

Hogyan elemeztem a Habr-t, 1. rész: trendek

Magukon a cikkeken kívül további megjegyzéseket is letöltöttem hozzájuk. 6 millió hozzászólás érkezett, de ebből 240 ezret betiltottak ("egy UFO berepült és ezt a feliratot közzétette itt"). A megjegyzések hasznos tulajdonsága, hogy van időbélyegzőjük. A megjegyzések idejét tanulmányozva nagyjából megértheti, hogy egyáltalán mikor olvassák el a cikkeket.

Kiderült, hogy a legtöbb cikk írva és kommentálva is valahol délelőtt 10-től este 20-ig, azaz. egy tipikus moszkvai munkanapon. Ez azt jelentheti, hogy a Habrt szakmai célokra olvassák, és ez jó módja annak, hogy halogatjuk a munkát. A napszaknak ez a megoszlása ​​egyébként a Habr alapításától napjainkig stabil.

Hogyan elemeztem a Habr-t, 1. rész: trendek

A megjegyzések időbélyegének fő előnye azonban nem a napszak, hanem a cikk „aktív életének” időtartama. Kiszámoltam, hogyan oszlik el az idő a cikk megjelenésétől a kommentálásig. Kiderült, hogy most kb 20 óra múlva jön a medián komment (zöld vonal), i.e. a megjelenést követő első napon átlagosan a cikkhez fűzött megjegyzések valamivel több mint fele maradt meg. És két nap alatt az összes megjegyzés 75%-át hagyják. Ugyanakkor a korábbi cikkeket még gyorsabban olvasták – például 2010-ben a kommentek fele az első 6 órában érkezett.

Hogyan elemeztem a Habr-t, 1. rész: trendek

Meglepő volt számomra, hogy a megjegyzések meghosszabbodtak: a Habr élettartama alatt majdnem megduplázódott egy megjegyzés átlagos karakterszáma!

Hogyan elemeztem a Habr-t, 1. rész: trendek

A megjegyzéseknél egyszerűbb visszajelzés a szavazás. Sok más forrástól eltérően a Habrén nemcsak pluszokat, hanem mínuszokat is tehet. Az olvasók azonban nem élnek túl gyakran az utolsó lehetőséggel: a nemtetszések aránya jelenleg az összes leadott szavazat 15 százaléka. Régebben több is volt, de idővel kedvesebbek lettek az olvasók.

Hogyan elemeztem a Habr-t, 1. rész: trendek

Maguk a szövegek is változtak az idők során. Például a szöveg tipikus hossza a válságok ellenére sem szűnik meg folyamatosan az oldal indulásától kezdve. Egy évtized alatt a szövegek majdnem tízszer hosszabbak lettek!

Hogyan elemeztem a Habr-t, 1. rész: trendek

A szövegek stílusa is (első közelítés szerint) megváltozott. Habr fennállásának első éveiben például megnőtt a kód és a számok aránya a szövegekben:

Hogyan elemeztem a Habr-t, 1. rész: trendek

Miután megértettem az oldal általános dinamikáját, úgy döntöttem, hogy megmérem, hogyan változott a különböző témák népszerűsége. A témák automatikusan kiválaszthatók a szövegekből, de először nem lehet újra feltalálni a kereket, hanem kész címkéket kell használni, amelyeket az egyes cikkek szerzői ragasztanak. Négy tipikus trendet rajzoltam a diagramra. Kezdetben a "Google" téma dominált (talán elsősorban a SEO-nak köszönhetően), de az évek során egyre fogy. A Javascript népszerű téma volt, és lassan növekszik, de a gépi tanulás csak az elmúlt években kezdett gyorsan népszerűvé válni. Ezzel szemben a Linux egyformán releváns maradt az évtized során.

Hogyan elemeztem a Habr-t, 1. rész: trendek

Természetesen elkezdett érdekelni, hogy milyen témák vonzzák nagyobb olvasói aktivitást. Kiszámoltam az egyes témákban a megtekintések, szavazatok és hozzászólások mediánszámát. Íme, mi történt:

  • Legnézettebb témák: arduino, webdesign, webfejlesztés, kivonat, linkek, css, html, html5, nginx, algoritmusok.
  • A legtöbbet "lájkolt" témák: vkontakte, humor, jquery, opera, c, html, webfejlesztés, html5, css, webdesign.
  • A legtöbbet vitatott témák: opera, skype, szabadúszó, vkontakte, ubuntu, munka, nokia, nginx, arduino, firefox.

Egyébként mivel összehasonlítom a témákat, gyakoriság szerint rangsorolhatod őket (és összehasonlíthatod az eredményeket a hasonló cikk 2013-ból).

  • Habr fennállásának minden évében a legnépszerűbb címkék (csökkenő sorrendben) a google, android, javascript, microsoft, linux, php, apple, java, python, programozás, indítások, fejlesztés, ios, startup, közösségi hálózatok
  • 2017-ben a legnépszerűbbek a javascript, python, java, android, fejlesztés, linux, c++, programozás, php, c#, ios, gépi tanulás, információbiztonság, microsoft, react voltak

Ezen értékelések összevetésekor fel lehet figyelni például a Python győzelmes menetelésére és a php kihalására, vagy a startup témák "naplementére" és a gépi tanulás térnyerésére.

Nem minden Habré címkének van ilyen nyilvánvaló tematikus színezése. Például itt van egy tucat címke, amelyek csak egyszer találkoztak, de nekem csak viccesnek tűntek. Tehát: "az ötlet a haladás hajtóereje", "indítás hajlékonylemezről", "Iowa állam", "dráma", "szuperalesh", "gőzgép", "dolgok szombaton", "van róka a húsdarálóban", "a kiderült, mint mindig", "nem tudtunk vicces cédulákat kitalálni". Az ilyen cikkek tárgyának meghatározásához a címkék nem elegendőek - tematikus modellezést kell végeznie a cikkek szövegén.

A cikkek tartalmának részletesebb elemzése a következő bejegyzésben lesz. Először is fel fogok építeni egy modellt, amely megjósolja egy cikk oldalmegtekintéseinek számát a tartalma alapján. Másodszor, meg akarom tanítani a neurális hálózatot, hogy a Habr szerzőivel azonos stílusú szövegeket generáljon. Szóval iratkozz fel 🙂

PS És itt a hangjelzés adatkészlet.

Forrás: will.com

Hozzászólás