Habrastatistics: explora as seccións máis e menos visitadas do sitio
Ola Habr.
В parte anterior O tráfico de Habr analizouse segundo os principais parámetros: o número de artigos, as súas opinións e valoracións. Non obstante, a cuestión da popularidade das seccións do sitio permaneceu sen examinar. Fíxose interesante ver isto con máis detalle e atopar os centros máis populares e impopulares. Por último, verei o efecto geektimes con máis detalle, rematando cunha nova selección dos mellores artigos baseada en novas clasificacións.
Para os que estean interesados no que pasou, a continuación está baixo o corte.
Permítanme recordarlle unha vez máis que as estatísticas e as valoracións non son oficiais, non teño información privilegiada. Tampouco está garantido que non cometín un erro nalgún lugar ou que me perdín algo. Pero aínda así, creo que resultou interesante. Comezaremos primeiro co código os que non estean interesados poden saltar as primeiras seccións.
Recollida de datos
Na primeira versión do analizador, só se tivo en conta o número de visualizacións, comentarios e valoracións dos artigos. Isto xa é bo, pero non permite facer consultas máis complexas. É hora de analizar as seccións temáticas do sitio, isto permitirache facer unha investigación bastante interesante, por exemplo, ver como cambiou a popularidade da sección "C++" ao longo de varios anos.
Mellorouse o analizador de artigos, agora devolve os centros aos que pertence o artigo, así como o alcume do autor e a súa valoración (aquí tamén se poden facer moitas cousas interesantes, pero iso virá máis tarde). Os datos gárdanse nun ficheiro csv que se parece a isto:
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
...
Recibiremos unha lista dos principais centros temáticos do sitio.
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)
A función find_between e a clase Str seleccionan unha cadea entre dúas etiquetas, useinas antes. Os centros temáticos están marcados cun "*" para que se poidan resaltar facilmente, e tamén podes descomentar as liñas correspondentes para obter seccións doutras categorías.
A saída da función get_hubs é unha lista bastante impresionante, que gardamos como dicionario. En concreto presento a lista na súa totalidade para que poidades estimar o seu volume.
Do mesmo xeito conserváronse os núcleos restantes. Agora é fácil escribir unha función que devolva o resultado se o artigo pertence a geektimes ou a un centro de perfil.
Mostramos o número de artigos publicados usando Matplotlib:
Dividín os artigos "geektimes" e "geektimes only" no gráfico, porque Un artigo pode pertencer ás dúas seccións ao mesmo tempo (por exemplo, "DIY" + "microcontroladores" + "C++"). Usei a designación "perfil" para resaltar artigos de perfil no sitio, aínda que quizais o termo en inglés perfil para isto non sexa totalmente correcto.
Na parte anterior preguntamos polo "efecto geektimes" asociado ao cambio nas regras de pago dos artigos para os geektimes a partir deste verán. Imos mostrar os artigos de geektimes por separado:
O resultado é interesante. A proporción aproximada de visualizacións dos artigos de Geektimes co total é de aproximadamente 1:5. Pero aínda que o número total de visualizacións variou notablemente, a visualización de artigos de "entretemento" mantívose aproximadamente ao mesmo nivel.
Tamén podes notar que o número total de visualizacións de artigos na sección "geektimes" aínda diminuíu despois de cambiar as regras, pero "a ollos", non máis do 5% dos valores totais.
É interesante ver o número medio de visitas por artigo:
Para artigos de "entretemento" é un 40% por riba da media. Isto probablemente non sexa sorprendente. O fallo de principios de abril non me queda claro, quizais iso foi o que pasou, ou sexa algún tipo de erro de análise, ou quizais un dos autores de geektimes marchou de vacacións ;).
Por certo, o gráfico mostra dous picos máis notables no número de visualizacións de artigos: as vacacións de ano e maio.
Hubs
Pasemos á análise prometida dos hubs. Enumeremos os 20 principais centros segundo o número de visualizacións:
Sorprendentemente, o centro máis popular en termos de vistas foi "Seguridade da información" os 5 principais líderes tamén incluíron "Programación" e "Ciencia popular".
Antitop ocupa Gtk e Cocoa.
Vouche contar un segredo, tamén se poden ver os principais hubs aquí, aínda que alí non se mostra o número de visualizacións.
Clasificación
E por último, a valoración prometida. Usando os datos de análise do centro, podemos mostrar os artigos máis populares para os centros máis populares para este ano 2019.
E por último, para que ninguén se ofenda, darei a clasificación do hub menos visitado "gtk". Nun ano publicouse одна O artigo, que tamén ocupa "automáticamente" a primeira liña da clasificación.