Habrastatistiko: kiel Habr vivas sen geektempoj

Hej Habr.

Ĉi tiu artikolo estas logika daŭrigo de la takso La plej bonaj Habr-artikoloj por 2018. Kaj kvankam la jaro ankoraŭ ne finiĝis, kiel vi scias, somere okazis ŝanĝoj en la reguloj, do fariĝis interese vidi ĉu tio tuŝis ion.

Habrastatistiko: kiel Habr vivas sen geektempoj

Krom la reala statistiko, ĝisdatigita takso de artikoloj estos provizita, same kiel iom da fontkodo por tiuj kiuj interesiĝas pri kiel ĝi funkcias.

Por tiuj, kiuj interesiĝas pri tio, kio okazis, la daŭrigo estas sub la tranĉo. Tiuj, kiuj interesiĝas pri pli detala analizo de sekcioj de la retejo, ankaŭ povas rigardi sekva parto.

Fontaj datumoj

Ĉi tiu takso estas neoficiala, kaj mi ne havas ajnajn internajn informojn. Kiel vi povas facile vidi rigardante la adresbreton de via retumilo, ĉiuj artikoloj pri Habré havas kontinuan numeradon. Tiam temas pri tekniko, ni simple legas ĉiujn artikolojn en vico en buklo (en unu fadeno kaj kun paŭzoj, por ne ŝargi la servilon). La valoroj mem estis akiritaj per simpla analizilo en Python (fontoj estas haveblaj tie) kaj konservite en csv-dosiero ion tian:

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

Procezo

Por analizado ni uzos Python, Pandas kaj Matplotlib. Tiuj, kiuj ne interesiĝas pri statistiko, povas preterlasi ĉi tiun parton kaj iri rekte al la artikoloj.

Unue vi devas ŝargi la datumaron en memoron kaj elekti datumojn por la dezirata jaro.

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)

Montriĝas, ke ĉi-jare (kvankam ĝi ankoraŭ ne estas finita) en la momento de la skribado estas publikigitaj 12715 2018 artikoloj. Por komparo, por la tuta 15904 - 43. Ĝenerale, multe - ĉi tio estas ĉirkaŭ XNUMX artikoloj tage (kaj ĉi tio estas nur kun pozitiva takso; kiom da totalaj artikoloj estas elŝutitaj kiuj malaperis aŭ estis forigitaj, oni povas nur diveni. aŭ proksimume takso de la interspacoj inter identigiloj).

Ni elektu la necesajn kampojn el la datumaro. Kiel metrikon ni uzos la nombron da vidoj, komentoj, taksaj valoroj kaj la nombro da legosignoj.

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

Nun la datumoj estis aldonitaj al la datumaro kaj ni povas uzi ĝin. Ni grupigu la datumojn tage kaj prenu la averaĝajn valorojn.

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()

Nun la interesa parto estas, ke ni povas rigardi la grafikaĵojn.

Ni rigardu la nombron da publikaĵoj pri 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()

La rezulto estas interesa. Kiel vi povas vidi, Habr estis iom "kolbaso" dum la tuta jaro. Mi ne scias la kialon.

Habrastatistiko: kiel Habr vivas sen geektempoj

Por komparo, 2018 aspektas iom pli glata:

Habrastatistiko: kiel Habr vivas sen geektempoj

Ĝenerale, mi ne vidis drastan malkreskon en la nombro da publikigitaj artikoloj en 2019 sur la grafikaĵo. Cetere, male, ĝi ŝajnas eĉ iomete pliiĝis ekde la somero.

Sed la sekvaj du grafikaĵoj deprimas min iom pli.

Meza nombro da vidoj per artikolo:

Habrastatistiko: kiel Habr vivas sen geektempoj

Meza takso per artikolo:

Habrastatistiko: kiel Habr vivas sen geektempoj

Kiel vi povas vidi, la averaĝa nombro da vidoj iomete malpliiĝas dum la jaro. Ĉi tio povas esti klarigita per la fakto, ke novaj artikoloj ankoraŭ ne estis indeksitaj de serĉiloj, kaj ili ne troviĝas tiom ofte. Sed la malpliiĝo de averaĝa taksado por artikolo estas pli nekomprenebla. La sento estas, ke legantoj aŭ simple ne havas tempon por trarigardi tiom da artikoloj aŭ ne atentas la taksojn. El la vidpunkto de la aŭtora rekompenca programo, ĉi tiu tendenco estas tre malagrabla.

Cetere, ĉi tio ne okazis en 2018, kaj la horaro estas pli-malpli egala.

Habrastatistiko: kiel Habr vivas sen geektempoj

Ĝenerale, posedantoj de rimedoj havas ion pri kio pensi.

Sed ni ne parolu pri malgajaj aferoj. Ĝenerale, ni povas diri, ke Habr "travivis" la somerajn ŝanĝojn sufiĉe sukcese, kaj la nombro da artikoloj en la retejo ne malpliiĝis.

Taksado

Nun, fakte, la takso. Gratulon al tiuj, kiuj eniris ĝin. Mi rememorigu vin, ke la takso estas neoficiala, eble mi maltrafis ion, kaj se iu artikolo certe devus esti ĉi tie, sed ĝi ne estas, skribu, mi aldonos ĝin permane. Kiel takso, mi uzas kalkulitajn metrikojn, kiuj laŭ mi montriĝis sufiĉe interesaj.

Ĉefaj artikoloj laŭ nombro da vidoj

Ĉefaj artikoloj laŭ taksado al vidoj

Ĉefaj artikoloj laŭ komentoj al vidoj

Plej polemikaj artikoloj

Ĉefaj artikoloj laŭ taksado

Ĉefaj artikoloj laŭ nombro da legosignoj

Supro laŭ proporcio de legosignoj al vidoj

Ĉefaj artikoloj laŭ nombro da komentoj

Kaj fine, la lasta Antitop laŭ nombro da malŝatoj

Uf. Mi havas kelkajn pli interesajn elektojn, sed mi ne enuigos la legantojn.

konkludo

Konstruante la takson, mi atentis du punktojn, kiuj ŝajnis interesaj.

Unue, 60% de la supro estas artikoloj de la "geektimes" ĝenro. Ĉu venontjare estos malpli da ili, kaj kia aspektos Habr sen artikoloj pri biero, spaco, medicino ktp., mi ne scias. Legantoj certe perdos ion. Ni vidu.

Due, la supraj legosignoj montriĝis neatendite altkvalitaj. Ĉi tio estas psikologie komprenebla; legantoj eble ne atentas la takson, sed se la artikolo bezonata, tiam ĝi estos aldonita al viaj legosignoj. Kaj jen ĝuste la plej granda koncentriĝo de utilaj kaj seriozaj artikoloj. Mi pensas, ke la retejposedantoj devus iel pripensi la rilaton inter la nombro da legosignoj kaj la rekompenca programo, se ili volas pliigi ĉi tiun apartan kategorion de artikoloj ĉi tie sur Habré.

Io tia. Mi esperas, ke ĝi estis informa.

La listo de artikoloj montriĝis longa, nu, verŝajne estas por pli bone. Feliĉan legadon al ĉiuj.

fonto: www.habr.com

Aldoni komenton