Habrastatistics: hur Habr lever utan geektimes

Hej Habr.

Den här artikeln är en logisk fortsättning på betyget De bästa Habr-artiklarna för 2018. Och även om året inte är över än, som ni vet, skedde det på sommaren förändringar i reglerna, därför blev det intressant att se om detta påverkade något.

Habrastatistics: hur Habr lever utan geektimes

Utöver själva statistiken kommer ett uppdaterat betyg av artiklar att tillhandahållas, samt lite källkod för den som är intresserad av hur det fungerar.

För den som är intresserad av vad som hänt är fortsättningen under klippet. De som är intresserade av en mer detaljerad analys av delar av sajten kan också titta nästa del.

Rå data

Detta betyg är inofficiellt och jag har ingen insiderinformation. Som du enkelt kan se genom att titta i adressfältet i din webbläsare har alla artiklar på Habré kontinuerlig numrering. Sedan är det en fråga om teknik, vi läser helt enkelt alla artiklar i rad i en cykel (i en tråd och med pauser, för att inte ladda servern). Värdena i sig erhölls av en enkel parser i Python (källor finns tillgängliga här) och sparat i en csv-fil ungefär så här:

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

Bearbetning

För att analysera kommer vi att använda Python, Pandas och Matplotlib. De som inte är intresserade av statistik kan hoppa över denna del och gå direkt till artiklarna.

Först måste du ladda datauppsättningen i minnet och välja data för önskat å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)

Det visar sig att i år (även om det ännu inte är färdigt) i skrivande stund har 12715 2018 artiklar publicerats. Som jämförelse, för hela 15904 - 43. Generellt sett mycket - det handlar om XNUMX artiklar per dag (och detta är bara med ett positivt betyg; hur många totalt nedladdade artiklar som blev negativa eller raderades kan man bara gissa eller grovt uppskatta från luckorna mellan identifierare).

Låt oss välja de nödvändiga fälten från datamängden. Som mätvärden kommer vi att använda antalet visningar, kommentarer, betygsvärden och antalet bokmärken.

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

Nu har data lagts till i datasetet och vi kan använda det. Låt oss gruppera data efter dag och ta medelvärdena.

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

Nu är det intressanta att vi kan titta på graferna.

Låt oss titta på antalet publikationer om Habré under 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()

Resultatet är intressant. Som ni ser har Habr varit en liten "korv" under hela året. Jag vet inte orsaken.

Habrastatistics: hur Habr lever utan geektimes

Som jämförelse ser 2018 lite smidigare ut:

Habrastatistics: hur Habr lever utan geektimes

Generellt sett såg jag ingen drastisk minskning av antalet publicerade artiklar under 2019 på grafen. Dessutom verkar det tvärtom ha ökat något sedan sommaren.

Men de följande två graferna trycker ner mig lite mer.

Genomsnittligt antal visningar per artikel:

Habrastatistics: hur Habr lever utan geektimes

Genomsnittligt betyg per artikel:

Habrastatistics: hur Habr lever utan geektimes

Som du kan se minskar det genomsnittliga antalet visningar något under hela året. Detta kan förklaras av att nya artiklar ännu inte har indexerats av sökmotorer, och de hittas inte så ofta. Men nedgången i medelbetyg per artikel är mer obegriplig. Känslan är att läsarna antingen helt enkelt inte har tid att titta igenom så många artiklar eller inte uppmärksammar betygen. Ur författarbelöningsprogrammets synvinkel är denna trend mycket obehaglig.

Det hände för övrigt inte 2018, och schemat är mer eller mindre jämnt.

Habrastatistics: hur Habr lever utan geektimes

Generellt sett har resursägare något att tänka på.

Men låt oss inte prata om sorgliga saker. I allmänhet kan vi säga att Habr "överlevde" sommarförändringarna ganska framgångsrikt, och antalet artiklar på webbplatsen minskade inte.

Betyg

Nu, faktiskt, betyget. Grattis till de som kom in i det. Låt mig återigen påminna dig om att betyget är inofficiellt, jag kanske har missat något, och om någon artikel definitivt borde finnas här, men det är den inte, skriv, jag lägger till den manuellt. Som betyg använder jag uträknade mått, vilket jag tycker visade sig vara ganska intressant.

Toppartiklar efter antal visningar

Toppartiklar efter betyg till visningsförhållande

Toppartiklar efter förhållande mellan kommentarer och visningar

Topp mest kontroversiella artiklar

Toppartiklar efter betyg

Toppartiklar efter antal bokmärken

Överst efter förhållandet mellan bokmärken och visningar

Toppartiklar efter antal kommentarer

Och slutligen den sista Antitop efter antal ogillar

Usch. Jag har några fler intressanta urval, men jag kommer inte att tråka ut läsarna.

Slutsats

När jag konstruerade betyget uppmärksammade jag två punkter som verkade intressanta.

För det första är 60% av toppen artiklar i genren "geektimes". Om det blir färre av dem nästa år, och hur Habr kommer att se ut utan artiklar om öl, rymd, medicin etc. vet jag inte. Definitivt kommer läsarna att förlora något. Låt oss se.

För det andra visade sig de bästa bokmärkena vara av oväntat hög kvalitet. Detta är psykologiskt förståeligt, läsare kanske inte uppmärksammar betyget, men om artikeln behövs, så läggs den till i dina bokmärken. Och här finns just den största koncentrationen av användbara och seriösa artiklar. Jag tycker att sajtägarna på något sätt borde tänka igenom sambandet mellan antalet bokmärken och belöningsprogrammet om de vill utöka just denna kategori av artiklar här på Habré.

Något som det här. Jag hoppas att det var informativt.

Listan med artiklar visade sig vara lång, ja, det är förmodligen till det bättre. Trevlig läsning alla.

Källa: will.com

Lägg en kommentar