Cuando terminé de comer la ensalada Olivier de Año Nuevo, no tenía nada que hacer, así que decidí descargar todos los artículos de Habr Habra (y plataformas relacionadas) y explorarlos.
Resultaron varios temas interesantes. El primero de ellos es la evolución del formato y la temática de los artículos a lo largo de los 12 años de existencia del sitio. Por ejemplo, la dinámica de ciertos temas es bastante reveladora. Continuación a continuación.

El proceso de análisis
Para entender cómo ha evolucionado Habr, era necesario revisar todos sus artículos y extraer de ellos la metainformación (por ejemplo, las fechas). La exploración fue fácil, porque los enlaces a todos los artículos tienen el formato "habrahabr.ru/post/337722/", y los números se asignan estrictamente en orden. Sabiendo que el último post tiene un número justo por debajo de 350 mil, simplemente revisé todos los posibles ID de documentos con un ciclo (código en Python):
import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
docs = p.map(download_document, np.arange(350000))La función download_document intenta cargar la página con el ID correspondiente y extraer información relevante de la estructura HTML.
import requests
from bs4 import BeautifulSoup
def download_document(pid):
""" Descarga y procesa un documento de Habr y sus comentarios """
# descarga del documento
r = requests.get('https://habrahabr.ru/post/' + str(pid) + '/')
# análisis del documento
soup = BeautifulSoup(r.text, 'html5lib') # en lugar de html.parser
doc = {}
doc['id'] = pid
if not soup.find("span", {"class": "post__title-text"}):
# esto ocurre si el artículo no existía o fue eliminado
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
# crear otros campos: hubs, etiquetas, vistas, comentarios, votos, etc.
# ...
# guardar el resultado en un archivo separado
fname = r'files/' + str(pid) + '.pkl'
with open(fname, 'wb') as f:
pickle.dump(doc, f)Durante el análisis, descubrí algunas cosas nuevas.
Primero, dicen que tener más procesos que núcleos en el procesador es inútil. Pero en mi caso resultó que el recurso limitante no era el procesador, sino la red, y 100 procesos funcionan más rápido que 4 o, digamos, 20.
En segundo lugar, en algunas publicaciones encontré combinaciones de caracteres especiales, como eufemismos tipo "%&#@". Resultó que html.parser, que utilicé al principio, reacciona a la combinación &# de manera dolorosa, considerándola el inicio de una entidad HTML. Ya iba a hacer magia negra, pero en el foro me sugirieron que simplemente cambiara de analizador.
En tercer lugar, logré descargar todas las publicaciones, excepto tres. Los documentos con los números 65927, 162075 y 275987 fueron eliminados de inmediato por mi antivirus. Estos artículos se refieren, respectivamente, a una cadena de JavaScript que carga un PDF malicioso, a un ransomware SMS en forma de conjunto de plugins para navegadores, y al sitio CrashSafari.com, que reinicia los iPhones. Un artículo más, el post 338586 sobre scripts en el sitio de una tienda de mascotas que usa el procesador del usuario para minar criptomonedas, fue detectado por el antivirus más tarde, durante un escaneo del sistema. Así que se puede considerar que el funcionamiento del antivirus es bastante adecuado.
Solo la mitad de los artículos resultaron ser 'vivos', es decir, 166307 en total. Para los demás, Habr ofrece las opciones de 'página obsoleta, eliminada o no existente en absoluto'. Bueno, a veces pasan cosas así.
Tras la descarga de los artículos, seguí con el trabajo técnico: por ejemplo, las fechas de publicación tenían que convertirse del formato '21 de diciembre de 2006 a las 10:47' al estándar, datetime, y '12,8k' visualizaciones a 12800. En esta etapa, surgieron algunos otros inconvenientes. El más divertido está relacionado con el conteo de votos y tipos de datos: en algunos posts antiguos ocurrió un desbordamiento de entero, y recibieron 65535 votos.

Como resultado, los textos de los artículos (sin imágenes) ocuparon 1.5 gigabytes, los comentarios con metainformación otros 3, y alrededor de cien megabytes fueron para la metainformación sobre los artículos. Todo esto se puede mantener completamente en la memoria RAM, lo que fue una agradable sorpresa para mí.
Empecé el análisis de los artículos no por los textos en sí, sino por la metainformación: fechas, etiquetas, hubs, visualizaciones y 'me gusta'. Resultó que también puede contar mucho.
Tendencias en el desarrollo de Habrhabr
Los artículos en el sitio se publican desde 2006; el período más intenso fue entre 2008 y 2016.

No es tan sencillo evaluar cuán activamente se leyeron estos artículos en diferentes momentos. Los textos de 2012 y más recientes recibieron más comentarios y calificaciones, pero los textos más nuevos tienen más visualizaciones y guardados en favoritos. Estas métricas se comportaron de la misma manera (cayeron a la mitad) solo una vez, en 2015. Quizás, en la situación de crisis económica y política, la atención de los lectores se desplazó de los blogs de TI a cuestiones más sensibles.

Además de los propios artículos, también descargué los comentarios a ellos. Se generaron 6 millones de comentarios, aunque 240 mil de ellos resultaron estar bloqueados ("un OVNI aterrizó y publicó este mensaje aquí"). Una característica útil de los comentarios es que se indica el tiempo. Al estudiar el tiempo de los comentarios, se puede entender aproximadamente cuándo se leen los artículos en general.
Resultó que la mayor parte de los artículos se escriben y comentan en algún lugar entre las 10 y las 20 horas, es decir, en una jornada laboral típica en Moscú. Esto puede significar que Habr se lee por motivos profesionales y que es una buena forma de procrastinar en el trabajo. Por cierto, esta distribución del tiempo del día ha sido constante desde la fundación de Habr hasta hoy.

Sin embargo, el principal beneficio de la marca de tiempo del comentario no es la hora del día, sino la duración de la "vida activa" del artículo. He calculado cómo se distribuye el tiempo desde la publicación del artículo hasta su comentario. Resultó que ahora el comentario mediano (línea verde) llega aproximadamente 20 horas después, es decir, en las primeras 24 horas después de la publicación, se deja en promedio un poco más de la mitad de todos los comentarios al artículo. Y en dos días se dejan el 75% de todos los comentarios. Anteriormente, los artículos se leían aún más rápido: en 2010, la mitad de los comentarios llegaba ya en las primeras 6 horas.

Me sorprendió que los comentarios se hayan alargado: el número promedio de caracteres en un comentario ha crecido casi el doble desde que existe Habr.

Una retroalimentación más sencilla que los comentarios son los votos. A diferencia de muchos otros recursos, en Habr se pueden otorgar no solo 'me gusta', sino también 'no me gusta'. Sin embargo, los lectores no utilizan esta última opción tan a menudo: la proporción actual de votos negativos es de alrededor del 15% de todos los votos dados. Antes era mayor, pero con el tiempo los lectores se han vuelto más amables.

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

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

Después de analizar la dinámica general del sitio, decidí medir cómo ha cambiado la popularidad de varios temas. Los temas se pueden extraer automáticamente de los textos, pero para empezar no hay necesidad de reinventar la rueda, sino que se pueden utilizar las etiquetas ya establecidas por los autores de cada artículo. He representado cuatro tendencias típicas en el gráfico. El tema "Google" dominaba inicialmente (posiblemente en gran medida debido a la optimización SEO), pero ha ido perdiendo peso con los años. Javascript fue un tema popular y continúa en gradual ascenso, mientras que el aprendizaje automático comenzó a ganar popularidad de manera rápida solo en los últimos años. Linux, por su parte, se ha mantenido igualmente relevante a lo largo de toda la década.

Por supuesto, me surgió la curiosidad de saber qué temas atraen más actividad de los lectores. Conté el número mediano de vistas, votos y comentarios en cada tema. Esto es lo que encontré:
- Los temas más vistos: arduino, diseño web, desarrollo web, noticias, enlaces, css, html, html5, nginx, algoritmos.
- Los temas más "likables": vk, humor, jquery, opera, c, html, desarrollo web, html5, css, diseño web.
- Los temas más discutidos: opera, skype, freelance, vk, ubuntu, trabajo, nokia, nginx, arduino, firefox.
Por cierto, dado que estoy comparando temas, se puede hacer su clasificación por frecuencia (y comparar los resultados con ).
- A lo largo de los años de existencia de Habr, las etiquetas más populares (en orden decreciente) han sido 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, desarrollo, linux, c++, programación, php, c#, ios, aprendizaje automático, seguridad informática, microsoft, react.
Al comparar estas clasificaciones, se puede notar, por ejemplo, el creciente triunfo de Python y la extinción de php, o el "declive" de la temática de startups y el auge del aprendizaje automático.
No todos los etiquetas en Habr tienen un matiz temático tan obvio. Aquí, por ejemplo, hay una docena de etiquetas que solo aparecieron una vez, pero que me parecieron divertidas. Así que: "la idea es el motor del progreso", "carga desde la imagen del disquete", "estado de Iowa", "dramaturgia", "super Alekha", "motor de vapor", "qué hacer el sábado", "tengo un zorro en la picadora", "y resultó como siempre", "no pude inventar etiquetas graciosas". Para determinar la temática de tales artículos, no son suficientes las etiquetas; hay que realizar un modelado temático sobre los textos de los artículos.
Un análisis más detallado del contenido de los artículos será en el siguiente post. Primero, tengo la intención de construir un modelo que pronostique la cantidad de vistas de un artículo según su contenido. En segundo lugar, quiero enseñar a la red neuronal a generar textos en el mismo estilo que los autores de Habr. Así que, suscríbete 🙂
P.D. Aquí está el dataset .
Fuente: habr.com
