Habrastatistics: cómo vive Habr sin geektime

Hola Habr

Este artículo es una continuación lógica del ranking de los mejores artículos de Habr para 2018 . Y aunque el año aún no ha terminado, pero como saben, en el verano hubo cambios en las reglas, respectivamente, se hizo interesante ver si afectó algo.



Además de las estadísticas, se proporcionará una calificación actualizada de los artículos, así como algunos códigos fuente para aquellos que estén interesados ​​en cómo funciona esto.

Para aquellos que estén interesados ​​en lo que sucedió, continuaron bajo el corte. Aquellos que estén interesados ​​en un análisis más detallado de las secciones del sitio también pueden ver la siguiente parte .

Datos de origen


Esta calificación no es oficial y no tengo ningún dato interno. Como es fácil de ver, después de mirar en la barra de direcciones del navegador, todos los artículos sobre Habré tienen numeración de extremo a extremo. El siguiente es un asunto técnico, acabamos de leer todos los artículos en una fila en un ciclo (en un hilo y con pausas para no cargar el servidor). Los valores en sí se obtuvieron mediante un analizador simple en Python (el código fuente está aquí ) y se almacenaron en un archivo csv de aproximadamente este tipo:

2019-08-11T22:36Z,https://habr.com/ru/post/463197/,"Blazor + MVVM = Silverlight , ",votes:11,votesplus:17,votesmin:6,bookmarks:40,views:5300,comments:73
2019-08-11T05:26Z,https://habr.com/ru/news/t/463199/," NASA ",votes:15,votesplus:15,votesmin:0,bookmarks:2,views:1700,comments:7


Procesamiento


Para el análisis usaremos Python, Pandas y Matplotlib. Aquellos que no estén interesados ​​en las estadísticas, pueden omitir esta parte e ir inmediatamente a los artículos.

Primero debe cargar el conjunto de datos en la memoria y seleccionar los datos para el año deseado.

 import pandas as pd import datetime import matplotlib.dates as mdates from matplotlib.ticker import FormatStrFormatter from pandas.plotting import register_matplotlib_converters df = pd.read_csv("habr.csv", sep=',', encoding='utf-8', error_bad_lines=True, quotechar='"', comment='#') dates = pd.to_datetime(df['datetime'], format='%Y-%m-%dT%H:%MZ') df['datetime'] = dates year = 2019 df = df[(df['datetime'] >= pd.Timestamp(datetime.date(year, 1, 1))) & (df['datetime'] < pd.Timestamp(datetime.date(year+1, 1, 1)))] print(df.shape) 

Resulta que para este año (aunque aún no está terminado) al momento de escribir, se publicaron 12715 artículos. A modo de comparación, para todo 2018 - 15904. En general, mucho: se trata de 43 artículos por día (y esto es solo con una calificación positiva, cuántos artículos se descargan que son negativos o eliminados, solo puede adivinar o calcular las omisiones entre identificadores).

Seleccione los campos necesarios del conjunto de datos. Como métricas, utilizaremos la cantidad de vistas, comentarios, valores de calificación y la cantidad de marcadores agregados.

 def to_float(s): # "bookmarks:22" => 22.0 num = ''.join(i for i in s if i.isdigit()) return float(num) def to_int(s): # "bookmarks:22" => 22 num = ''.join(i for i in s if i.isdigit()) return int(num) def to_date(dt): return dt.date() date = dates.map(to_date, na_action=None) views = df["views"].map(to_int, na_action=None) bookmarks = df["bookmarks"].map(to_int, na_action=None) votes = df["votes"].map(to_float, na_action=None) votes_up = df["up"].map(to_float, na_action=None) votes_down = df["down"].map(to_float, na_action=None) comments = df["comments"].map(to_int, na_action=None) df['date'] = date df['views'] = views df['votes'] = votes df['bookmarks'] = bookmarks df['up'] = votes_up df['down'] = votes_down 

Ahora los datos se han agregado al conjunto de datos y podemos usarlos. Agrupe los datos por día y tome los valores promediados.

 g = df.groupby(['date']) days_count = g.size().reset_index(name='counts') year_days = days_count['date'].values grouped = g.median().reset_index() grouped['counts'] = days_count['counts'] counts_per_day = grouped['counts'].values counts_per_day_avg = grouped['counts'].rolling(window=20).mean() view_per_day = grouped['views'].values view_per_day_avg = grouped['views'].rolling(window=20).mean() votes_per_day = grouped['votes'].values votes_per_day_avg = grouped['votes'].rolling(window=20).mean() bookmarks_per_day = grouped['bookmarks'].values bookmarks_per_day_avg = grouped['bookmarks'].rolling(window=20).mean() 

Ahora, para la parte divertida, podemos ver los gráficos.

Veamos la cantidad de publicaciones sobre Habré en 2019.

 import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = (16, 8) fig, ax = plt.subplots() plt.bar(year_days, counts_per_day, label='Articles/day') plt.plot(year_days, counts_per_day_avg, 'g-', label='Articles avg/day') plt.xticks(rotation=45) ax.xaxis.set_major_formatter(mdates.DateFormatter("%d-%m-%Y")) ax.xaxis.set_major_locator(mdates.MonthLocator(interval=1)) plt.legend(loc='best') plt.tight_layout() plt.show() 

El resultado es interesante. Como puede ver, Habr ligeramente "salchicha" durante el año. No sé el motivo.



A modo de comparación, 2018 se ve un poco "más suave":



En general, no vi ninguna disminución drástica en el número de artículos publicados en 2019 en el gráfico. Además, por el contrario, parece haber crecido incluso ligeramente desde el verano.

Pero los siguientes dos gráficos me deprimen un poco más.

Vistas promedio por artículo:



Valoración media por artículo:



Como puede ver, el número promedio de visitas durante el año se reduce ligeramente. Esto puede explicarse por el hecho de que los nuevos artículos aún no han sido indexados por los motores de búsqueda, y no se encuentran tan a menudo. Pero la disminución en la calificación promedio por artículo es más incomprensible. La sensación es que los lectores simplemente no tienen tiempo para navegar por tantos artículos o no prestan atención a las calificaciones. Desde el punto de vista del programa de recompensas de los autores, esta tendencia es muy desagradable.

Por cierto, este no fue el caso en 2018, y el calendario es más o menos parejo.



En general, los propietarios de recursos tienen algo en qué pensar.

Pero no hablemos de cosas tristes. En general, podemos decir que Habr "sobrevivió" los cambios de verano con bastante éxito, y la cantidad de artículos en el sitio no disminuyó.

Calificación


Ahora, en realidad, la calificación. Felicitaciones a quienes lo golpearon. Le recuerdo una vez más que la calificación no es oficial, tal vez me perdí algo, y si algún artículo definitivamente debería estar aquí, pero no lo está, escriba, lo agregaré manualmente. Como calificación, utilizo métricas calculadas, que, me parece, han resultado ser bastante interesantes.

Artículos más vistos


Artículos principales sobre la proporción de calificaciones a vistas


Artículos principales sobre la proporción de comentarios a vistas


Los artículos más controvertidos


Artículos mejor valorados


Principales artículos favoritos


Arriba por Ver relación de marcadores


Artículos más comentados


Y finalmente, el último anti-stop por la cantidad de disgustos


Uff Tengo algunas muestras más interesantes, pero no aburriré a los lectores.

Conclusión


Al construir la calificación, llamé la atención sobre dos puntos que parecían interesantes.

En primer lugar, después de todo, el 60% de los mejores son artículos del género geektimes. Si habrá menos de ellos el próximo año y cómo se verá Habr sin artículos sobre cerveza, espacio, medicina, etc., no lo sé. Los lectores definitivamente perderán algo. A ver

En segundo lugar, la parte superior del marcador resultó ser inesperadamente de alta calidad. Esto es psicológicamente comprensible, los lectores pueden no prestar atención a la calificación y, si se necesita un artículo , lo agregarán a los marcadores. Y aquí está la mayor concentración de artículos útiles y serios. Creo que los propietarios del sitio deberían considerar de alguna manera la relación entre el número de marcadores y el programa de incentivos si desean aumentar esta categoría particular de artículos aquí en Habré.

Algo asi.Espero que haya sido informativo.

La lista de artículos es larga, pero probablemente sea la mejor. Disfruta leyendo a todos.

Source: https://habr.com/ru/post/466963/


All Articles