Cómo analicé Habr, parte 1: tendencias

Cuando terminó el Olivier de Año Nuevo, no tenía nada que hacer y decidí descargar todos los artículos de Habrahabr (y plataformas relacionadas) a mi computadora y explorar.

Hubo varias historias interesantes. El primero de ellos es el desarrollo del formato y temas de los artículos a lo largo de los 12 años de existencia del sitio. Por ejemplo, la dinámica de algunos temas es bastante indicativa. Continuación - debajo del corte.

Cómo analicé Habr, parte 1: tendencias

proceso de análisis

Para comprender cómo se desarrolló Habr, fue necesario revisar todos sus artículos y extraer metainformación de ellos (por ejemplo, fechas). El desvío fue fácil, porque los enlaces a todos los artículos se ven como "habrahabr.ru/post/337722/", y los números se dan estrictamente en orden. Sabiendo que la última publicación tiene un número ligeramente inferior a 350 mil, revisé todas las identificaciones de documentos posibles en un bucle (código de 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 intenta cargar la página con la identificación correspondiente e intenta extraer información significativa de la estructura 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)

En el proceso de análisis, descubrí varias cosas nuevas.

Primero, dicen que crear más procesos que núcleos en el procesador es inútil. Pero en mi caso, resultó que el recurso limitante no es el procesador, sino la red, y 100 procesos funcionan más rápido que 4 o, digamos, 20.

En segundo lugar, en algunas publicaciones había combinaciones de caracteres especiales, por ejemplo, eufemismos como "%&#@". Resultó que html.parser, que usé primero, reacciona a la combinación &# dolorosamente, considerándolo el comienzo de la entidad html. Ya iba a hacer magia negra, pero el foro sugirió que simplemente puedes cambiar el analizador.

En tercer lugar, logré descargar todas las publicaciones, excepto tres. Los documentos numerados 65927, 162075 y 275987 fueron eliminados instantáneamente por mi antivirus. Estos son artículos, respectivamente, sobre una cadena de javascript que descarga un pdf malicioso, un ransomware de SMS en forma de un conjunto de complementos de navegador y el sitio CrashSafari.com que envía iPhones a un reinicio. Antivirus descubrió otro artículo más tarde, durante un análisis del sistema: publicación 338586 sobre secuencias de comandos en el sitio web de la tienda de mascotas que utilizan el procesador del usuario para extraer criptomonedas. Por lo que podemos considerar que el trabajo del antivirus es bastante adecuado.

Los artículos "en vivo" resultaron ser solo la mitad del máximo potencial: 166307 piezas. Sobre el resto, Habr da opciones "la página está desactualizada, ha sido eliminada o no existía en absoluto". Bueno, cualquier cosa puede pasar.

La carga de artículos fue seguida por trabajo técnico: por ejemplo, las fechas de publicación tuvieron que convertirse del formato "'21 de diciembre de 2006 a las 10:47 am" al formato estándar datetime, y "12,8k" vistas - en 12800. En esta etapa, surgieron algunos incidentes más. La más divertida tiene que ver con el conteo de votos y los tipos de datos: algunas publicaciones antiguas tuvieron un desbordamiento de int y recibieron 65535 votos cada una.

Cómo analicé Habr, parte 1: tendencias

Como resultado, los textos de los artículos (sin imágenes) me ocuparon 1.5 gigabytes, los comentarios con metainformación, otros 3 y unos cien megabytes, metainformación sobre los artículos. Esto se puede guardar completamente en la memoria RAM, lo que fue una agradable sorpresa para mí.

Empecé el análisis de los artículos no a partir de los textos en sí, sino a partir de la metainformación: fechas, etiquetas, centros, vistas y me gusta. Resultó que ella podía decir mucho.

Tendencias de desarrollo de Habrahabr

Los artículos en el sitio se han publicado desde 2006; más intensamente - en 2008-2016.

Cómo analicé Habr, parte 1: tendencias

No es tan fácil evaluar qué tan activamente se leyeron estos artículos en diferentes momentos. Los textos de 2012 y anteriores recibieron más comentarios y calificaciones, pero los textos más nuevos tienen más vistas y marcadores. Estas métricas se comportaron de la misma manera (reducidas a la mitad) solo una vez, en 2015. Quizás, en una situación de crisis económica y política, la atención de los lectores se ha desplazado de los blogs de TI a temas más dolorosos.

Cómo analicé Habr, parte 1: tendencias

Además de los artículos en sí, les descargué más comentarios. Hubo 6 millones de comentarios, sin embargo, 240 mil de ellos fueron prohibidos ("un OVNI voló y publicó esta inscripción aquí"). Una propiedad útil de los comentarios es que tienen una marca de tiempo. Al estudiar la hora de los comentarios, puede comprender aproximadamente cuándo se leen los artículos.

Resultó que la mayoría de los artículos se escriben y comentan en algún lugar entre las 10 a. m. y las 20 p. m., es decir, en un típico día de trabajo de Moscú. Esto puede significar que Habr se lee con fines profesionales y que esta es una buena manera de procrastinar en el trabajo. Por cierto, esta distribución de la hora del día es estable desde la fundación misma de Habr hasta el día de hoy.

Cómo analicé Habr, parte 1: tendencias

Sin embargo, el principal beneficio de una marca de tiempo de comentario no es la hora del día, sino la duración de la "vida activa" del artículo. Calculé cómo se distribuye el tiempo desde la publicación del artículo hasta su comentario. Resultó que ahora el comentario medio (línea verde) llega en unas 20 horas, es decir. en el primer día después de la publicación, en promedio, quedan un poco más de la mitad de todos los comentarios sobre el artículo. Y en dos días dejan el 75% de todos los comentarios. Al mismo tiempo, los artículos anteriores se leyeron aún más rápido; por ejemplo, en 2010, la mitad de los comentarios se produjeron en las primeras 6 horas.

Cómo analicé Habr, parte 1: tendencias

Me sorprendió que los comentarios se hayan alargado: ¡la cantidad promedio de caracteres en un comentario casi se ha duplicado durante la vida útil de Habr!

Cómo analicé Habr, parte 1: tendencias

La retroalimentación más fácil que los comentarios son los votos. A diferencia de muchos otros recursos, en Habré puede poner no solo ventajas, sino también desventajas. Sin embargo, los lectores no aprovechan la última oportunidad con tanta frecuencia: la proporción actual de aversiones es de aproximadamente el 15% de todos los votos emitidos. Solía ​​haber más, pero con el tiempo, los lectores se han vuelto más amables.

Cómo analicé Habr, parte 1: tendencias

Los propios textos han cambiado con el tiempo. Por ejemplo, la longitud típica del texto no deja de crecer constantemente desde el mismo lanzamiento del sitio, a pesar de las crisis. ¡En una década, los textos se han vuelto casi diez veces más largos!

Cómo analicé Habr, parte 1: tendencias

El estilo de los textos (en una primera aproximación) también cambió. Durante los primeros años de existencia de Habr, por ejemplo, aumentó la proporción de códigos y números en los textos:

Cómo analicé Habr, parte 1: tendencias

Después de comprender la dinámica general del sitio, decidí medir cómo cambió la popularidad de varios temas. Los temas se pueden seleccionar automáticamente de los textos, pero para empezar, no se puede reinventar la rueda, sino usar etiquetas prefabricadas colocadas por los autores de cada artículo. He dibujado cuatro tendencias típicas en el gráfico. El tema "Google" dominó inicialmente (quizás debido principalmente al SEO), pero ha ido perdiendo peso a lo largo de los años. Javascript ha sido un tema popular y continúa creciendo lentamente, pero el aprendizaje automático ha comenzado a ganar popularidad rápidamente solo en los últimos años. Linux, por otro lado, se ha mantenido igualmente relevante a lo largo de la década.

Cómo analicé Habr, parte 1: tendencias

Por supuesto, me interesé en qué temas atraen más actividad de los lectores. Calculé la mediana del número de vistas, votos y comentarios en cada tema. Esto es lo que sucedió:

  • Temas más vistos: arduino, diseño web, desarrollo web, resumen, enlaces, css, html, html5, nginx, algoritmos.
  • Los temas más "gustados": vkontakte, humor, jquery, opera, c, html, desarrollo web, html5, css, diseño web.
  • Los temas más discutidos: opera, skype, freelance, vkontakte, ubuntu, trabajo, nokia, nginx, arduino, firefox.

Por cierto, dado que estoy comparando temas, puede ordenarlos por frecuencia (y comparar los resultados con artículo similar de 2013).

  • Durante todos los años de existencia de Habr, las etiquetas más populares (en orden descendente) son google, android, javascript, microsoft, linux, php, apple, java, python, programación, startups, desarrollo, ios, startup, redes sociales
  • En 2017, los más populares fueron javascript, python, java, android, development, linux, c++, programación, php, c#, ios, aprendizaje automático, seguridad de la información, microsoft, react

Al comparar estas calificaciones, se puede prestar atención, por ejemplo, a la marcha victoriosa de Python y la extinción de php, o al "ocaso" de los temas de inicio y el auge del aprendizaje automático.

No todas las etiquetas en Habré tienen un colorido temático tan obvio. Por ejemplo, aquí hay una docena de etiquetas que se encontraron solo una vez, pero me parecieron divertidas. Entonces: "la idea es la fuerza impulsora del progreso", "arrancar desde una imagen de disquete", "Iowa State", "drama", "superalesh", "steam engine", "cosas que hacer el sábado", "Tengo un zorro en una picadora de carne", "a resultó como siempre", "no se nos ocurrieron etiquetas graciosas". Para determinar el tema de dichos artículos, las etiquetas no son suficientes: deberá realizar un modelado temático en los textos de los artículos.

Un análisis más detallado del contenido de los artículos estará en la próxima publicación. Primero, voy a construir un modelo que prediga el número de visitas a la página de un artículo en función de su contenido. En segundo lugar, quiero enseñar a la red neuronal a generar textos con el mismo estilo que los autores de Habr. Así que suscríbete 🙂

PD Y aquí está el pitido conjunto de datos.

Fuente: habr.com

Añadir un comentario