Habrastatistics: skúmanie najviac a najmenej navštevovaných častí stránky
Ahoj Habr.
В predchádzajúca časť Habrova návštevnosť bola analyzovaná podľa hlavných parametrov – počtu článkov, ich videní a hodnotení. Otázka obľúbenosti sekcií stránok však zostala nepreskúmaná. Začalo byť zaujímavé pozrieť sa na to podrobnejšie a nájsť najobľúbenejšie a najnepopulárnejšie huby. Na záver sa na efekt geektimes pozriem podrobnejšie a skončím novým výberom najlepších článkov na základe nových rebríčkov.
Pre tých, ktorých zaujíma, čo sa stalo, pokračovanie je pod strihom.
Ešte raz pripomínam, že štatistiky a hodnotenia nie sú oficiálne, nemám žiadne zasvätené informácie. Taktiež nie je zaručené, že som niekde neurobil chybu alebo niečo neprehliadol. Ale aj tak si myslím, že to dopadlo zaujímavo. Najprv začneme kódom, koho to nezaujíma, môže prvé časti preskočiť.
Zber dát
V prvej verzii analyzátora sa bral do úvahy iba počet zobrazení, komentárov a hodnotenia článkov. To je už dobré, ale neumožňuje vám to robiť zložitejšie otázky. Je čas analyzovať tematické sekcie stránky; to vám umožní urobiť celkom zaujímavý výskum, napríklad zistiť, ako sa zmenila popularita sekcie „C++“ v priebehu niekoľkých rokov.
Analyzátor článkov bol vylepšený, teraz vracia huby, do ktorých článok patrí, ako aj prezývku autora a jeho hodnotenie (aj tu sa dá urobiť veľa zaujímavého, ale to príde neskôr). Údaje sa uložia do súboru csv, ktorý vyzerá 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
...
Dostaneme zoznam hlavných tematických centier stránky.
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)
Funkcia find_between a trieda Str vyberajú reťazec medzi dvoma značkami, použil som ich skôr. Tematické centrá sú označené „*“, takže sa dajú ľahko zvýrazniť a môžete tiež odkomentovať príslušné riadky, aby ste získali sekcie iných kategórií.
Výstupom funkcie get_hubs je pomerne pôsobivý zoznam, ktorý si uložíme ako slovník. Zoznam uvádzam konkrétne celý, aby ste vedeli odhadnúť jeho objem.
Zvyšné náboje boli zachované rovnakým spôsobom. Teraz je ľahké napísať funkciu, ktorá vráti výsledok, či už článok patrí do geektimes alebo profilového centra.
Zobrazujeme počet publikovaných článkov pomocou Matplotlib:
Články „geektimes“ a „geektimes only“ som v grafe rozdelil, pretože Článok môže patriť do oboch sekcií súčasne (napríklad „urob si sám“ + „mikroovládače“ + „C++“). Označenie „profil“ som použil na zvýraznenie profilových článkov na stránke, aj keď možno anglický výraz profile pre to nie je úplne správny.
V predchádzajúcej časti sa pýtali na “geektimes effect” spojený so zmenou pravidiel platby za články pre geektimes toto leto. Ukážme články geektimes oddelene:
Výsledok je zaujímavý. Približný pomer zobrazení geektimes článkov k celkovému je niekde okolo 1:5. No kým celkový počet videní značne kolísal, sledovanosť „zábavných“ článkov zostala približne na rovnakej úrovni.
Môžete si tiež všimnúť, že celkový počet zobrazení článkov v sekcii „geektimes“ po zmene pravidiel stále klesol, ale „od oka“, nie o viac ako 5 % z celkových hodnôt.
Je zaujímavé pozrieť sa na priemerný počet zobrazení na článok:
V prípade „zábavných“ článkov je to asi 40 % nad priemerom. To asi nie je prekvapujúce. Neúspech zo začiatku apríla je pre mňa nepochopiteľný, možno sa tak stalo, alebo je to nejaká chyba pri parsovaní, alebo možno jeden z autorov geektimes odišiel na dovolenku ;).
Mimochodom, v grafe sú ešte dva badateľné vrcholy v počte zobrazení článkov – novoročné a májové sviatky.
Náboje
Prejdime k sľúbenému rozboru hubov. Uveďme zoznam 20 najlepších centier podľa počtu zobrazení:
Prekvapivo najpopulárnejším centrom z hľadiska názorov bola „Bezpečnosť informácií“; medzi 5 najlepších lídrov patrili aj „Programovanie“ a „Populárna veda“.
Antitop zaberá Gtk a Cocoa.
Poviem ti tajomstvo, vidno aj vrchné náboje tu, aj keď počet zobrazení tam nie je uvedený.
Hodnotenie
A na záver sľúbené hodnotenie. Pomocou údajov analýzy rozbočovačov môžeme zobraziť najobľúbenejšie články pre najpopulárnejšie rozbočovače pre tento rok 2019.
A nakoniec, aby sa nikto neurazil, dám hodnotenie najmenej navštevovaného hubu „gtk“. Do roka to vyšlo одна článok, ktorý tiež „automaticky“ zaberá prvý riadok hodnotenia.