Habrastatistics: ako Habr žije bez geektimes

Ahoj Habr.

Tento článok je logickým pokračovaním hodnotenia Najlepšie habrovské články za rok 2018. A hoci sa rok ešte neskončil, ako viete, v lete došlo k zmenám v pravidlách, preto bolo zaujímavé zistiť, či to niečo ovplyvnilo.

Habrastatistics: ako Habr žije bez geektimes

Okrem aktuálnych štatistík bude poskytnuté aj aktualizované hodnotenie článkov a tiež nejaký zdrojový kód pre tých, ktorých zaujíma, ako to funguje.

Pre tých, ktorých zaujíma, čo sa stalo, pokračovanie je pod strihom. Kto má záujem o podrobnejší rozbor sekcií stránky, môže sa tiež pozrieť ďalšia časť.

Surové údaje

Toto hodnotenie je neoficiálne a nemám žiadne dôverné informácie. Ako ľahko zistíte pri pohľade na panel s adresou vášho prehliadača, všetky články na Habré majú priebežné číslovanie. Potom je to už otázka techniky, jednoducho čítame všetky články za sebou v cykle (v jednom vlákne a s prestávkami, aby sme nezaťažili server). Samotné hodnoty boli získané jednoduchým analyzátorom v Pythone (zdroje sú k dispozícii tu) a uložiť do súboru csv niečo takéto:

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

spracovanie

Na analýzu použijeme Python, Pandas a Matplotlib. Koho nezaujímajú štatistiky, môže túto časť preskočiť a prejsť rovno k článkom.

Najprv musíte načítať súbor údajov do pamäte a vybrať údaje pre požadovaný rok.

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)

Ukazuje sa, že tento rok (hoci ešte nie je ukončený) v čase písania tohto článku vyšlo 12715 2018 článkov. Pre porovnanie za celý rok 15904 - 43. Vo všeobecnosti veľa - to je asi XNUMX článkov za deň (a to len s kladným hodnotením; koľko je celkovo stiahnutých článkov, ktoré dopadli negatívne alebo boli vymazané, možno len hádať alebo hrubý odhad z medzier medzi identifikátormi).

Vyberme potrebné polia z množiny údajov. Ako metriku použijeme počet zobrazení, komentáre, hodnoty hodnotenia a počet záložiek.

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

Teraz boli údaje pridané do súboru údajov a môžeme ich použiť. Zoskupme údaje podľa dní a zoberme priemerné hodnoty.

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

Teraz je zaujímavé, že sa môžeme pozrieť na grafy.

Pozrime sa na počet publikácií o Habrém v roku 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()

Výsledok je zaujímavý. Ako vidíte, Habr bol počas celého roka taký malý „klobásák“. Neviem dôvod.

Habrastatistics: ako Habr žije bez geektimes

Pre porovnanie, rok 2018 vyzerá o niečo hladšie:

Habrastatistics: ako Habr žije bez geektimes

Vo všeobecnosti som na grafe nevidel žiadny drastický pokles počtu publikovaných článkov v roku 2019. Navyše, naopak, zdá sa, že od leta dokonca mierne vzrástla.

Ale ďalšie dva grafy ma deprimujú o niečo viac.

Priemerný počet zobrazení na článok:

Habrastatistics: ako Habr žije bez geektimes

Priemerné hodnotenie na článok:

Habrastatistics: ako Habr žije bez geektimes

Ako vidíte, priemerný počet videní počas roka mierne klesá. Dá sa to vysvetliť tým, že nové články ešte neboli indexované vyhľadávačmi a ani sa tak často nenachádzajú. Pokles priemerného hodnotenia na článok je však nepochopiteľnejší. Pocit je taký, že čitatelia buď jednoducho nemajú čas prezerať si toľko článkov, alebo nevenujú pozornosť hodnoteniam. Z pohľadu programu odmeňovania autorov je tento trend veľmi nepríjemný.

Mimochodom, v roku 2018 sa tak nestalo a harmonogram je viac-menej vyrovnaný.

Habrastatistics: ako Habr žije bez geektimes

Vo všeobecnosti majú vlastníci zdrojov o čom premýšľať.

Nehovorme však o smutných veciach. Vo všeobecnosti sa dá povedať, že Habr letné zmeny „prežil“ celkom úspešne a počet článkov na stránke neklesol.

Hodnotenie

Teraz vlastne hodnotenie. Gratulujem tým, ktorí sa do toho dostali. Ešte raz pripomeniem, že hodnotenie je neoficiálne, možno mi niečo uniklo a ak by tu nejaký článok určite mal byť, ale nie je, napíšte, doplním ručne. Ako hodnotenie používam vypočítané metriky, ktoré sa podľa mňa ukázali ako celkom zaujímavé.

Najlepšie články podľa počtu zobrazení

Najlepšie články podľa pomeru hodnotenia k počtu zobrazení

Najlepšie články podľa pomeru komentárov k počtu zobrazení

Najlepšie najkontroverznejšie články

Najlepšie články podľa hodnotenia

Najlepšie články podľa počtu záložiek

Najvyššie podľa pomeru záložiek k zobrazeniam

Najlepšie články podľa počtu komentárov

A na záver posledná Antitop podľa počtu nepáči sa mi

Fuj. Mám ešte niekoľko zaujímavých výberov, ale nebudem čitateľov nudiť.

Záver

Pri konštrukcii hodnotenia som venoval pozornosť dvom bodom, ktoré sa mi zdali zaujímavé.

Po prvé, 60 % top tvoria články žánru „geektimes“. Či ich bude budúci rok menej a ako bude Habr vyzerať bez článkov o pive, vesmíre, medicíne atď., neviem. Čitatelia určite niečo stratia. Pozrime sa.

Po druhé, najlepšie záložky sa ukázali byť nečakane vysokej kvality. To je psychologicky pochopiteľné, čitatelia nemusia venovať pozornosť hodnoteniu, ale článku je potrebné, potom sa pridá do vašich záložiek. A práve tu je najväčšia koncentrácia užitočných a serióznych článkov. Myslím si, že majitelia stránok by si mali nejako premyslieť súvislosť medzi počtom záložiek a programom odmeňovania, ak chcú zvýšiť túto konkrétnu kategóriu článkov tu na Habré.

Niečo také. Dúfam, že to bolo informatívne.

Zoznam článkov sa ukázal byť dlhý, no, pravdepodobne je to k lepšiemu. Príjemné čítanie všetkým.

Zdroj: hab.com

Pridať komentár