Como analizei Habr, parte 1: tendencias

Cando rematou o Olivier de Ano Novo, non tiña nada que facer e decidín descargar todos os artigos de Habrahabr (e plataformas relacionadas) ao meu ordenador e explorar.

Houbo varias historias interesantes. O primeiro deles é o desenvolvemento do formato e dos temas dos artigos ao longo dos 12 anos de existencia do sitio. Por exemplo, a dinámica dalgúns temas é bastante indicativa. Continuación - baixo o corte.

Como analizei Habr, parte 1: tendencias

Proceso de análise

Para entender como se desenvolveu Habr, foi necesario repasar todos os seus artigos e extraer deles metainformación (por exemplo, datas). O desvío foi sinxelo, porque as ligazóns a todos os artigos parecen "habrahabr.ru/post/337722/" e os números danse estrictamente por orde. Sabendo que a última publicación ten un número lixeiramente inferior a 350 mil, acabo de revisar todos os posibles ID do documento nun bucle (código Python):

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

Función download_document tenta cargar a páxina co ID correspondente e tenta extraer información significativa da estrutura html.

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)

Durante o proceso de análise, descubrín varias cousas novas.

En primeiro lugar, din que crear máis procesos dos núcleos que hai no procesador é inútil. Pero no meu caso, resultou que o recurso limitante non é o procesador, senón a rede, e 100 procesos funcionan máis rápido que 4 ou, por exemplo, 20.

En segundo lugar, nalgunhas publicacións había combinacións de caracteres especiais, por exemplo, eufemismos como "%&#@". Resultou que html.parser, que usei primeiro, reacciona á combinación &# penosamente, considerándoo o inicio da entidade html. Xa ía facer maxia negra, pero o foro suxeriu que podes cambiar o analizador.

En terceiro lugar, conseguín descargar todas as publicacións, agás tres. O meu antivirus eliminou instantáneamente os documentos numerados 65927, 162075 e 275987. Estes son artigos, respectivamente, sobre unha cadea de javascript que descarga un pdf malicioso, ransomware SMS en forma de conxunto de complementos de navegador e o sitio CrashSafari.com que envía iPhones a un reinicio. O antivirus descubriu outro artigo máis tarde, durante unha exploración do sistema: publica o 338586 sobre scripts no sitio web da tenda de animais que usan o procesador do usuario para minar criptomonedas. Polo tanto, podemos considerar que o traballo do antivirus é bastante adecuado.

Os artigos "en directo" resultaron ser só a metade do máximo potencial: 166307 pezas. Sobre o resto, Habr dá opcións "a páxina está desactualizada, eliminouse ou non existía en absoluto". Ben, calquera cousa pode pasar.

A carga de artigos foi seguida dun traballo técnico: por exemplo, as datas de publicación tiveron que converterse do formato "'21 de decembro de 2006 ás 10:47" ao estándar. datetime, e visualizacións "12,8k" - en 12800. Nesta fase, saíron algúns incidentes máis. O máis divertido ten que ver co reconto de votos e os tipos de datos: algunhas publicacións antigas tiñan un desbordamento de int e recibiron 65535 votos cada unha.

Como analizei Habr, parte 1: tendencias

Como resultado, os textos dos artigos (sen imaxes) leváronme 1.5 gigabytes, os comentarios con metainformación -outros 3 e uns cen megabytes- metainformación sobre artigos. Isto pódese gardar completamente na memoria RAM, o que foi unha agradable sorpresa para min.

Comecei a análise dos artigos non a partir dos propios textos, senón a partir da metainformación: datas, etiquetas, hubs, vistas e gústame. Resultou que podía contar moito.

Tendencias de desenvolvemento de Habrahabr

Os artigos do sitio publicáronse dende 2006; máis intensamente - en 2008-2016.

Como analizei Habr, parte 1: tendencias

Non é tan fácil de avaliar a forma activa que se leron estes artigos en diferentes momentos. Os textos de 2012 e máis novos recibiron máis comentarios e valoracións, pero os textos máis novos teñen máis visualizacións e marcadores. Estas métricas comportáronse do mesmo xeito (reducidas á metade) só unha vez, en 2015. Quizais, nunha situación de crise económica e política, a atención dos lectores pasou dos blogs informáticos a cuestións máis dolorosas.

Como analizei Habr, parte 1: tendencias

Ademais dos propios artigos, descargueille máis comentarios. Houbo 6 millóns de comentarios, con todo, 240 mil deles foron prohibidos ("un OVNI voou e publicou esta inscrición aquí"). Unha propiedade útil dos comentarios é que teñen un selo de tempo. Ao estudar o tempo dos comentarios, pode entender aproximadamente cando se len os artigos.

Resultou que a maioría dos artigos están escritos e comentados nalgún lugar entre as 10 e as 20 horas, é dicir. nun día de traballo típico de Moscova. Isto pode significar que Habr se le con fins profesionais e que esta é unha boa forma de procrastinar no traballo. Por certo, esta distribución da hora é estable dende a propia fundación de Habr ata a actualidade.

Como analizei Habr, parte 1: tendencias

Non obstante, o principal beneficio dunha marca de tempo de comentario non é a hora do día, senón a duración da "vida activa" do artigo. Calculei como se distribúe o tempo desde a publicación do artigo ata o seu comentario. Resultou que agora o comentario medio (liña verde) chega nunhas 20 horas, é dicir. o primeiro día despois da publicación, de media, quedan algo máis da metade de todos os comentarios sobre o artigo. E en dous días deixan o 75% de todos os comentarios. Ao mesmo tempo, os artigos anteriores foron lidos aínda máis rápido; por exemplo, en 2010, a metade dos comentarios chegou nas primeiras 6 horas.

Como analizei Habr, parte 1: tendencias

Sorprendeume que os comentarios se alargaran: o número medio de caracteres nun comentario case se duplicou ao longo da vida de Habr!

Como analizei Habr, parte 1: tendencias

Os comentarios son máis fáciles que os comentarios. A diferenza de moitos outros recursos, en Habré podes poñer non só vantaxes, senón tamén desvantaxes. Non obstante, os lectores non usan a última oportunidade con tanta frecuencia: a cota actual de non me gusta é de aproximadamente o 15% de todos os votos emitidos. Antes había máis, pero co paso do tempo, os lectores fixéronse máis amables.

Como analizei Habr, parte 1: tendencias

Os propios textos cambiaron co paso do tempo. Por exemplo, a extensión típica do texto non deixa de crecer de forma constante dende o mesmo lanzamento do sitio, a pesar das crises. Nunha década, os textos fixéronse case dez veces máis longos!

Como analizei Habr, parte 1: tendencias

Tamén cambiou o estilo dos textos (a unha primeira aproximación). Durante os primeiros anos de existencia de Habr, por exemplo, aumentou a proporción de códigos e números nos textos:

Como analizei Habr, parte 1: tendencias

Despois de comprender a dinámica xeral do sitio, decidín medir como cambiou a popularidade de varios temas. Os temas pódense seleccionar automaticamente a partir dos textos, pero para comezar, non podes reinventar a roda, senón usar etiquetas preparadas colocadas polos autores de cada artigo. Debuxei catro tendencias típicas no gráfico. O tema "Google" dominou inicialmente (quizais debido principalmente ao SEO), pero foi perdendo peso ao longo dos anos. Javascript foi un tema popular e segue crecendo lentamente, pero a aprendizaxe automática só comezou a gañar popularidade rapidamente nos últimos anos. Linux, por outra banda, mantívose igual de relevante ao longo da década.

Como analizei Habr, parte 1: tendencias

Por suposto, interesoume que temas atraen máis actividade lectora. Calculei o número medio de vistas, votos e comentarios en cada tema. Aquí está o que pasou:

  • Temas máis vistos: arduino, deseño web, desenvolvemento web, resumo, ligazóns, css, html, html5, nginx, algoritmos.
  • Os temas máis "gustados": vkontakte, humor, jquery, opera, c, html, desenvolvemento web, html5, css, deseño web.
  • Os temas máis discutidos: ópera, skype, freelance, vkontakte, ubuntu, traballo, nokia, nginx, arduino, firefox.

Por certo, xa que estou comparando temas, podes clasificalos por frecuencia (e comparar os resultados con artigo similar de 2013).

  • Durante todos os anos de existencia de Habr, as etiquetas máis populares (en orde descendente) son google, android, javascript, microsoft, linux, php, apple, java, python, programming, startups, development, ios, startup, redes sociais
  • En 2017, os máis populares foron javascript, python, java, android, desenvolvemento, linux, c++, programación, php, c#, ios, machine learning, seguridade da información, microsoft, react

Ao comparar estas valoracións, pódese prestar atención, por exemplo, á marcha vitoriosa de Python e á extinción de php, ou ao "ocaso" dos temas de inicio e o auxe da aprendizaxe automática.

Non todas as etiquetas de Habré teñen unha cor temática tan evidente. Por exemplo, aquí tes unha ducia de etiquetas que só se atoparon unha vez, pero que me pareceron divertidas. Entón: "a idea é a forza motriz do progreso", "arrancar desde unha imaxe de disquete", "Estado de Iowa", "drama", "superalesh", "máquina de vapor", "cousas que facer o sábado", "teño un raposo nunha picadora de carne", "a que resultou coma sempre", "non puidemos chegar a etiquetas divertidas". Para determinar o tema destes artigos, as etiquetas non son suficientes: terás que realizar un modelado temático sobre os textos dos artigos.

Unha análise máis detallada do contido dos artigos farase na seguinte publicación. En primeiro lugar, vou construír un modelo que prediga o número de páxinas vistas para un artigo en función do seu contido. En segundo lugar, quero ensinarlle á rede neuronal a xerar textos do mesmo estilo que os autores de Habr. Así que subscríbete 🙂

PD E aquí está o pitido conxunto de datos.

Fonte: www.habr.com

Engadir un comentario