Habrastatistika: kaip Habras gyvena be geektime

Sveiki, Habr.

Šis straipsnis yra logiškas reitingo tęsinys Geriausi 2018 m. Habr straipsniai. Ir nors metai dar nesibaigė, kaip žinia, vasarą buvo pasikeitimų taisyklėse, atitinkamai pasidarė įdomu pasižiūrėti, ar tai ką nors paveikė.

Habrastatistika: kaip Habras gyvena be geektime

Be faktinės statistikos, bus pateiktas atnaujintas straipsnių įvertinimas, taip pat tam tikras šaltinio kodas tiems, kurie domisi, kaip tai veikia.

Tiems, kurie domisi tuo, kas nutiko, tęsinys yra po ranka. Tie, kurie domisi detalesne svetainės sekcijų analize, taip pat gali pasižiūrėti kita dalis.

Neapdoroti duomenys

Šis įvertinimas yra neoficialus ir neturiu jokios viešai neatskleistos informacijos. Kaip nesunkiai matote pažvelgę ​​į naršyklės adreso juostą, visi straipsniai apie Habré turi nuolatinę numeraciją. Tada tai yra technikos reikalas, mes tiesiog skaitome visus straipsnius iš eilės iš eilės (vienoje temoje ir su pauzėmis, kad neapkrautų serverio). Pačios reikšmės buvo gautos naudojant paprastą Python analizatorių (galimi šaltiniai čia) ir išsaugotas csv faile maždaug taip:

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

apdorojimas

Analizuodami naudosime Python, Pandas ir Matplotlib. Tie, kurie nesidomi statistika, gali praleisti šią dalį ir eiti tiesiai į straipsnius.

Pirmiausia reikia įkelti duomenų rinkinį į atmintį ir pasirinkti norimų metų duomenis.

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)

Pasirodo, šiais metais (nors jis dar nebaigtas) rašymo metu buvo paskelbta 12715 2018 straipsnių. Palyginimui, už visus 15904 metus - 43. Apskritai daug - tai apie XNUMX straipsniai per dieną (ir tai tik su teigiamu įvertinimu; kiek iš viso atsisiunčiama straipsnių, kurie buvo neigiami arba buvo ištrinti, galima tik spėlioti arba apytiksliai įvertinti iš identifikatorių spragų).

Iš duomenų rinkinio išsirinkime reikiamus laukus. Kaip metriką naudosime peržiūrų skaičių, komentarus, įvertinimo reikšmes ir žymių skaičių.

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

Dabar duomenys buvo įtraukti į duomenų rinkinį ir galime juos naudoti. Sugrupuokime duomenis pagal dienas ir imkime vidutines reikšmes.

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

Dabar įdomi dalis yra ta, kad galime pažvelgti į grafikus.

Pažiūrėkime į Habré publikacijų skaičių 2019 m.

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

Rezultatas įdomus. Kaip matote, Habras visus metus buvo šiek tiek „dešrelė“. Aš nežinau priežasties.

Habrastatistika: kaip Habras gyvena be geektime

Palyginimui, 2018 m. atrodo šiek tiek sklandžiau:

Habrastatistika: kaip Habras gyvena be geektime

Apskritai 2019 metais grafike nepastebėjau drastiško publikuotų straipsnių sumažėjimo. Be to, priešingai, atrodo, kad nuo vasaros jis net šiek tiek padidėjo.

Tačiau kiti du grafikai mane šiek tiek labiau slegia.

Vidutinis vieno straipsnio peržiūrų skaičius:

Habrastatistika: kaip Habras gyvena be geektime

Vidutinis straipsnio įvertinimas:

Habrastatistika: kaip Habras gyvena be geektime

Kaip matote, vidutinis peržiūrų skaičius per metus šiek tiek mažėja. Tai galima paaiškinti tuo, kad naujų straipsnių paieškos sistemos dar neindeksavo ir jų ne taip dažnai randama. Tačiau vieno straipsnio vidutinio įvertinimo mažėjimas yra labiau nesuprantamas. Toks jausmas, kad skaitytojai arba tiesiog neturi laiko peržvelgti tiek straipsnių, arba nekreipia dėmesio į reitingus. Autoriaus atlygio programos požiūriu ši tendencija labai nemaloni.

Beje, tai neįvyko 2018 m., o grafikas daugmaž tolygus.

Habrastatistika: kaip Habras gyvena be geektime

Apskritai išteklių savininkai turi apie ką pagalvoti.

Bet nekalbėkime apie liūdnus dalykus. Apskritai galima teigti, kad Habras gana sėkmingai „išgyveno“ vasaros pokyčius, o straipsnių svetainėje nemažėjo.

Įvertinimas

Dabar, tiesą sakant, įvertinimas. Sveikiname tuos, kurie į jį pateko. Dar kartą priminsiu, kad įvertinimas neoficialus, gal kažką praleidau, o jei koks straipsnis tikrai turėtų būti, bet taip nėra, rašykite, pridėsiu rankiniu būdu. Kaip įvertinimą naudoju apskaičiuotus rodiklius, kurie, mano nuomone, pasirodė gana įdomūs.

Populiariausi straipsniai pagal peržiūrų skaičių

Populiariausi straipsniai pagal įvertinimo ir peržiūrų santykį

Populiariausi straipsniai pagal komentarų ir peržiūrų santykį

Labiausiai prieštaringi straipsniai

Populiariausi straipsniai pagal įvertinimą

Populiariausi straipsniai pagal žymių skaičių

Į viršų pagal žymių ir peržiūrų santykį

Populiariausi straipsniai pagal komentarų skaičių

Ir galiausiai, paskutinis Antitop pagal nepatikimų skaičių

Ach. Turiu dar keletą įdomių pasirinkimų, bet skaitytojų nenuobodysiu.

išvada

Kurdamas reitingą atkreipiau dėmesį į du dalykus, kurie atrodė įdomūs.

Pirma, 60% viršūnių yra „geektimes“ žanro straipsniai. Ar kitais metais jų bus mažiau, o kaip Habras atrodys be straipsnių apie alų, kosmosą, mediciną ir pan., nežinau. Tikrai skaitytojai kažką praras. Pažiūrėkime.

Antra, geriausios žymės pasirodė netikėtai kokybiškos. Tai psichologiškai suprantama, skaitytojai gali nekreipti dėmesio į įvertinimą, bet jei į straipsnį reikia, tada jis bus įtrauktas į jūsų žymes. O čia būtent didžiausia naudingų ir rimtų straipsnių koncentracija. Manau, kad svetainių savininkai turėtų kažkaip pagalvoti apie ryšį tarp žymių skaičiaus ir atlygio programos, jei nori padidinti šią konkrečią straipsnių kategoriją čia, apie Habré.

Kažkas panašaus į tai. Tikiuosi buvo informatyvu.

Straipsnių sąrašas pasirodė ilgas, na, tai tikriausiai į gerąją pusę. Malonaus skaitymo visiems.

Šaltinis: www.habr.com

Добавить комментарий