Habrastatistics: zkoumání nejvíce a nejméně navštěvovaných částí webu
Čau Habr.
В předchozí díl Habrova návštěvnost byla analyzována podle hlavních parametrů – počtu článků, jejich zhlédnutí a hodnocení. Otázka oblíbenosti sekcí webu však zůstala neprozkoumaná. Začalo být zajímavé se na to podívat podrobněji a najít nejoblíbenější a neoblíbenější rozbočovače. Nakonec se na efekt geektimes podívám podrobněji a zakončím to novým výběrem nejlepších článků na základě nových žebříčků.
Pro ty, které zajímá, co se stalo, je pokračování pod střihem.
Ještě jednou připomínám, že statistiky a hodnocení nejsou oficiální, nemám žádné zasvěcené informace. Také není zaručeno, že jsem někde neudělal chybu nebo něco nepřehlédl. Ale i tak si myslím, že to dopadlo zajímavě. Nejprve začneme kódem, koho to nezajímá, může první sekce přeskočit.
Sběr dat
V první verzi parseru byl brán v úvahu pouze počet zhlédnutí, komentáře a hodnocení článku. To je již dobré, ale neumožňuje provádět složitější dotazy. Je čas analyzovat tematické sekce webu; to vám umožní udělat docela zajímavý výzkum, například zjistit, jak se během několika let změnila popularita sekce „C++“.
Vylepšen byl analyzátor článků, nyní vrací huby, ke kterým článek patří, a také přezdívku autora a jeho hodnocení (zde se dá dělat spousta zajímavých věcí, ale to až později). Data jsou uložena v souboru csv, který vypadá asi takto:
2018-12-18T12:43Z,https://habr.com/ru/post/433550/,"Мессенджер Slack — причины выбора, косяки при внедрении и особенности сервиса, облегчающие жизнь",votes:7,votesplus:8,votesmin:1,bookmarks:32,
views:8300,comments:10,user:ReDisque,karma:5,subscribers:2,hubs:productpm+soft
...
Obdržíme seznam hlavních tematických center webu.
def get_as_str(link: str) -> Str:
try:
r = requests.get(link)
return Str(r.text)
except Exception as e:
return Str("")
def get_hubs():
hubs = []
for p in range(1, 12):
page_html = get_as_str("https://habr.com/ru/hubs/page%d/" % p)
# page_html = get_as_str("https://habr.com/ru/hubs/geektimes/page%d/" % p) # Geektimes
# page_html = get_as_str("https://habr.com/ru/hubs/develop/page%d/" % p) # Develop
# page_html = get_as_str("https://habr.com/ru/hubs/admin/page%d" % p) # Admin
for hub in page_html.split("media-obj media-obj_hub"):
info = Str(hub).find_between('"https://habr.com/ru/hub', 'list-snippet__tags')
if "*</span>" in info:
hub_name = info.find_between('/', '/"')
if len(hub_name) > 0 and len(hub_name) < 32:
hubs.append(hub_name)
print(hubs)
Funkce find_between a třída Str vybírají řetězec mezi dvěma značkami, použil jsem je dříve. Tematická centra jsou označena "*", takže je lze snadno zvýraznit, a můžete také odkomentovat odpovídající řádky, abyste získali sekce jiných kategorií.
Výstupem funkce get_hubs je poměrně působivý seznam, který si uložíme jako slovník. Seznam konkrétně uvádím celý, abyste mohli odhadnout jeho objem.
Zbývající náboje byly zachovány stejným způsobem. Nyní je snadné napsat funkci, která vrátí výsledek, ať už článek patří do geektimes nebo profilového centra.
Zobrazujeme počet publikovaných článků pomocí Matplotlib:
Články „geektimes“ a „geektimes only“ jsem v grafu rozdělil, protože Článek může patřit do obou sekcí současně (například „DIY“ + „microcontrollers“ + „C++“). Pro zvýraznění profilových článků na webu jsem použil označení „profil“, i když možná anglický výraz profile pro to není úplně správný.
V minulém díle jsme se ptali na „geektimes efekt“ spojený se změnou pravidel plateb za články za geektimes od letošního léta. Zobrazme články geektimes samostatně:
Výsledek je zajímavý. Přibližný poměr zhlédnutí článků geektimes k celkovému je někde kolem 1:5. Zatímco ale celkový počet zhlédnutí znatelně kolísal, sledovanost „zábavných“ článků zůstala přibližně na stejné úrovni.
Můžete si také všimnout, že celkový počet zobrazení článků v sekci „geektimes“ po změně pravidel stále klesl, ale „na oko“, maximálně o 5 % z celkových hodnot.
Je zajímavé podívat se na průměrný počet zobrazení na článek:
U „zábavných“ článků je to asi 40 % nad průměrem. To asi není překvapivé. Neúspěch na začátku dubna mi není jasný, možná se to stalo, nebo je to nějaká chyba parsování, nebo možná jeden z autorů geektimes odjel na dovolenou ;).
Mimochodem, v grafu jsou patrné ještě dva znatelné vrcholy v počtu zobrazení článků - novoroční a květnové svátky.
Náboje
Přejděme ke slíbenému rozboru hubů. Uveďme seznam 20 nejlepších center podle počtu zobrazení:
Překvapivě nejoblíbenějším centrem z hlediska názorů byla „Bezpečnost informací“; mezi 5 nejlepších lídrů patřily také „Programování“ a „Populární věda“.
Antitop zabírá Gtk a Cocoa.
Prozradím vám tajemství, jsou vidět i horní náboje zde, ačkoli počet zobrazení zde není uveden.
Hodnocení
A nakonec slíbené hodnocení. Pomocí dat analýzy hub můžeme zobrazit nejoblíbenější články pro nejoblíbenější huby pro tento rok 2019.
A nakonec, aby se nikdo neurazil, udělím hodnocení nejméně navštěvovaného hubu „gtk“. Za rok to vyšlo одна Článek, který také „automaticky“ zaujímá první řádek hodnocení.