Habrastatistics: exploració de les seccions més i menys visitades del lloc
Hola Habr.
В part anterior El trànsit d'Habr es va analitzar d'acord amb els paràmetres principals: el nombre d'articles, les seves vistes i puntuacions. No obstant això, la qüestió de la popularitat de les seccions del lloc va romandre sense examinar. Va ser interessant mirar-ho amb més detall i trobar els centres més populars i més impopulars. Finalment, miraré l'efecte geektimes amb més detall, i acabaré amb una nova selecció dels millors articles basats en nous rànquings.
Per a aquells que estiguin interessats en el que va passar, la continuació està sota el tall.
Permeteu-me recordar-vos una vegada més que les estadístiques i les valoracions no són oficials, no tinc cap informació privilegiada. Tampoc es garanteix que no m'he equivocat en algun lloc o que m'he perdut alguna cosa. Però tot i així, crec que va resultar interessant. Primer començarem amb el codi; els que no estiguin interessats en això poden saltar-se els primers apartats.
Recopilació de dades
A la primera versió de l'analitzador, només es va tenir en compte el nombre de visualitzacions, comentaris i puntuacions d'articles. Això ja és bo, però no permet fer consultes més complexes. És hora d'analitzar les seccions temàtiques del lloc; això us permetrà fer una investigació força interessant, per exemple, veure com ha canviat la popularitat de la secció "C++" durant diversos anys.
S'ha millorat l'analitzador d'articles, ara retorna els hubs als quals pertany l'article, així com el sobrenom de l'autor i la seva puntuació (aquí també es poden fer moltes coses interessants, però això vindrà més endavant). Les dades es guarden en un fitxer csv que s'assembla a això:
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
...
Rebrem una llista dels principals centres temàtics del lloc.
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)
La funció find_between i la classe Str seleccionen una cadena entre dues etiquetes, les vaig utilitzar més d'hora. Els centres temàtics estan marcats amb un "*" perquè es puguin ressaltar fàcilment, i també podeu descomentar les línies corresponents per obtenir seccions d'altres categories.
La sortida de la funció get_hubs és una llista força impressionant, que guardem com a diccionari. En concret us presento la llista sencera perquè pugueu estimar el seu volum.
La resta de nuclis es van conservar de la mateixa manera. Ara és fàcil escriure una funció que retorni el resultat tant si l'article pertany a geektimes com a un centre de perfils.
Mostrem el nombre d'articles publicats mitjançant Matplotlib:
Vaig dividir els articles "geektimes" i "geektimes only" al gràfic, perquè Un article pot pertànyer a les dues seccions alhora (per exemple, "DIY" + "microcontroladors" + "C++"). Vaig utilitzar la designació "perfil" per destacar articles de perfil al lloc, encara que potser el terme anglès profile per a això no és del tot correcte.
A la part anterior, van preguntar sobre l'"efecte geektimes" associat al canvi de les normes de pagament dels articles per a geektimes aquest estiu. Mostrem els articles de geektimes per separat:
El resultat és interessant. La proporció aproximada de visualitzacions d'articles de geektimes respecte al total és d'1:5. Però tot i que el nombre total de visualitzacions va fluctuar notablement, la visualització d'articles d'"entreteniment" es va mantenir aproximadament al mateix nivell.
També podeu notar que el nombre total de visualitzacions d'articles a la secció "geektimes" encara va baixar després de canviar les regles, però "a ull", no més del 5% dels valors totals.
És interessant veure el nombre mitjà de visualitzacions per article:
Per als articles d'"entreteniment" és aproximadament un 40% per sobre de la mitjana. Això probablement no és sorprenent. El fracàs de principis d'abril no em queda clar, potser és el que va passar, o és una mena d'error d'anàlisi, o potser un dels autors de geektimes se'n va anar de vacances ;).
Per cert, el gràfic mostra dos pics més notables en el nombre de visualitzacions d'articles: les vacances d'Any Nou i de maig.
Hubs
Passem a l'anàlisi promesa dels hubs. Enumerem els 20 centres principals per nombre de visualitzacions:
Sorprenentment, el centre més popular en termes de vistes va ser "Seguretat de la informació"; els 5 principals líders també incloïen "Programació" i "Ciència popular".
Antitop ocupa Gtk i Cocoa.
Us diré un secret, també es poden veure els principals hubs aquí, tot i que no s'hi mostra el nombre de visualitzacions.
Classificació
I finalment, la qualificació promesa. Utilitzant les dades d'anàlisi del concentrador, podem mostrar els articles més populars dels centres més populars per a aquest any 2019.
I finalment, perquè ningú s'ofengui, donaré la qualificació del hub menys visitat "gtk". En un any es va publicar одна L'article, que també ocupa "automàticament" la primera línia de la qualificació.