Habrastatistics: hvernig Habr lifir án geektimes

Hæ Habr.

Þessi grein er rökrétt framhald af einkunninni Bestu Habr greinarnar fyrir 2018. Og þó árið sé ekki enn búið, eins og þú veist, urðu breytingar á reglunum í sumar, í samræmi við það, þá varð áhugavert að sjá hvort þetta hefði áhrif á eitthvað.

Habrastatistics: hvernig Habr lifir án geektimes

Auk raunverulegrar tölfræði verður veitt uppfærð einkunn á greinum, auk frumkóða fyrir þá sem hafa áhuga á hvernig það virkar.

Fyrir þá sem hafa áhuga á því sem gerðist er framhaldið í skorðum. Þeir sem hafa áhuga á ítarlegri greiningu á köflum síðunnar geta líka skoðað næsta hluta.

Upphafleg gögn

Þessi einkunn er óopinber og ég hef engar innherjaupplýsingar. Eins og þú sérð auðveldlega með því að skoða veffangastikuna í vafranum þínum eru allar greinar á Habré með stöðuga númerun. Síðan er þetta spurning um tækni, við lesum einfaldlega allar greinarnar í röð í lotu (í einum þræði og með hléum, til að hlaða ekki þjóninum). Gildin sjálf voru fengin með einföldum þáttara í Python (heimildir eru tiltækar hér) og vistuð í csv skrá eitthvað á þessa leið:

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

Vinnslu

Fyrir þáttun munum við nota Python, Pandas og Matplotlib. Þeir sem ekki hafa áhuga á tölfræði geta sleppt þessum hluta og farið beint í greinarnar.

Fyrst þarftu að hlaða gagnasafninu í minni og velja gögn fyrir viðkomandi ár.

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)

Í ljós kemur að á þessu ári (þó því sé ekki enn lokið) þegar þetta er skrifað hafa 12715 greinar birst. Til samanburðar, fyrir allt árið 2018 - 15904. Almennt mikið - þetta er um 43 greinar á dag (og þetta er aðeins með jákvæðri einkunn; hversu margar greinar eru sóttar samtals sem urðu neikvæðar eða eytt, getur maður aðeins giskað á eða áætla gróflega út frá bilunum á milli auðkenna).

Við skulum velja nauðsynlega reiti úr gagnasafninu. Sem mæligildi munum við nota fjölda skoðana, athugasemda, einkunnagilda og fjölda bókamerkja.

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

Nú hefur gögnunum verið bætt við gagnasafnið og við getum notað þau. Við skulum flokka gögnin eftir degi og taka meðalgildin.

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

Nú er það áhugaverða að við getum skoðað línuritin.

Við skulum skoða fjölda rita á Habré árið 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()

Niðurstaðan er áhugaverð. Eins og þú sérð hefur Habr verið smá „pylsa“ allt árið. Ég veit ekki ástæðuna.

Habrastatistics: hvernig Habr lifir án geektimes

Til samanburðar lítur 2018 aðeins sléttari út:

Habrastatistics: hvernig Habr lifir án geektimes

Almennt séð sá ég enga verulega fækkun á fjölda birtra greina árið 2019 á línuritinu. Þar að auki, þvert á móti, virðist hún jafnvel hafa aukist lítillega frá því í sumar.

En næstu tvö línurit draga mig aðeins meira niður.

Meðalfjöldi áhorfa á hverja grein:

Habrastatistics: hvernig Habr lifir án geektimes

Meðaleinkunn fyrir hverja grein:

Habrastatistics: hvernig Habr lifir án geektimes

Eins og sjá má minnkar meðalfjöldi áhorfa lítillega yfir árið. Þetta má skýra með því að nýjar greinar hafa ekki enn verið skráðar af leitarvélum og þær finnast ekki svo oft. En lækkun meðaleinkunnar á hverja grein er óskiljanlegri. Tilfinningin er sú að lesendur hafi annað hvort einfaldlega ekki tíma til að fletta í gegnum svo margar greinar eða gefa ekki gaum að einkunnunum. Frá sjónarhóli höfundarverðlaunaáætlunarinnar er þessi þróun mjög óþægileg.

Við the vegur, þetta gerðist ekki árið 2018, og dagskráin er meira og minna jöfn.

Habrastatistics: hvernig Habr lifir án geektimes

Almennt séð hafa auðlindaeigendur eitthvað til að hugsa um.

En við skulum ekki tala um sorglega hluti. Almennt má segja að Habr „lifði af“ sumarbreytingarnar nokkuð vel og greinum á síðunni fækkaði ekki.

Einkunn

Nú reyndar einkunnin. Óskum þeim sem komust í það til hamingju. Leyfðu mér að minna þig enn og aftur á að einkunnin er óopinber, kannski hef ég misst af einhverju, og ef einhver grein ætti örugglega að vera hér, en hún er ekki, skrifaðu, ég bæti henni við handvirkt. Sem einkunn nota ég reiknaða mælikvarða, sem ég held að hafi reynst nokkuð áhugavert.

Helstu greinar eftir fjölda áhorfa

Helstu greinar eftir hlutfalli einkunna og áhorfs

Helstu greinar eftir hlutfalli athugasemda og áhorfs

Helstu umdeildustu greinar

Helstu greinar eftir einkunn

Helstu greinar eftir fjölda bókamerkja

Efst eftir hlutfalli bókamerkja og áhorfa

Helstu greinar eftir fjölda athugasemda

Og að lokum, sá síðasti Antitop eftir fjölda mislíka

Úff. Ég er með nokkra áhugaverða valkosti, en ég mun ekki leiðast lesendur.

Ályktun

Við gerð einkunnarinnar veitti ég athygli tveimur atriðum sem þóttu áhugaverð.

Í fyrsta lagi eru 60% efstu greinar af "geektimes" tegundinni. Hvort þeir verða færri á næsta ári og hvernig Habr mun líta út án greina um bjór, geim, lyf o.s.frv., veit ég ekki. Vissulega munu lesendur tapa einhverju. Látum okkur sjá.

Í öðru lagi reyndust efstu bókamerkin vera óvænt vönduð. Þetta er sálfræðilega skiljanlegt; lesendur borga kannski ekki eftir einkunninni, en ef greinin er þörf, þá verður því bætt við bókamerkin þín. Og hér er einmitt mesti samþjöppun gagnlegra og alvarlegra greina. Mér finnst að síðueigendur ættu einhvern veginn að hugsa í gegnum tenginguna á milli fjölda bókamerkja og verðlaunaforritsins ef þeir vilja auka þennan tiltekna flokk greina hér á Habré.

Eitthvað eins og þetta. Ég vona að það hafi verið upplýsandi.

Listi yfir greinar reyndist vera langur, jæja, það er líklega til hins betra. Góða lestur allir.

Heimild: www.habr.com

Bæta við athugasemd