Habrastatistics: hvordan Habr lever uden nørdetider

Hej Habr.

Denne artikel er en logisk fortsættelse af vurderingen De bedste artikler fra Habr for 2018. Og selvom året ikke er omme endnu, men som bekendt skete der ændringer i reglerne i sommeren, så det blev interessant at se, om det fik noget ud af det.

Habrastatistics: hvordan Habr lever uden nørdetider

Udover selve statistikken vil der også være en opdateret vurdering af artikler, samt nogle kilder til dem, der er interesserede i, hvordan det fungerer.

For dem, der er interesseret i, hvad der skete, fortsatte under skæringen. De, der er interesseret i en mere detaljeret analyse af sektionerne på siden, kan også kigge på næste del.

Indledende data

Denne vurdering er uofficiel, og jeg har ingen insiderdata. Da det er nemt at se ved at se på adresselinjen i browseren, har alle artikler på Habré løbende nummerering. Så er det et spørgsmål om teknik, bare i en cyklus læser vi alle artiklerne i træk (i én tråd og med pauser for ikke at indlæse serveren). Selve værdierne blev opnået af en simpel Python-parser (der er kilder her) og gemt i en csv-fil som denne:

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

Behandling

Til parsing vil vi bruge Python, Pandas og Matplotlib. De, der ikke er interesserede i statistik, kan springe denne del over og gå direkte til artiklerne.

Først skal du indlæse datasættet i hukommelsen og vælge data for det ønskede å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 viser sig, at der i år (selv om det ikke er slut endnu) i skrivende stund er publiceret 12715 artikler. Til sammenligning, for hele 2018 - 15904. Generelt meget - det drejer sig om 43 artikler om dagen (og det er kun med en positiv vurdering, hvor mange artikler der er indlæst i alt, der er blevet negative eller er blevet slettet, man kan kun gætte eller groft estimere ved udeladelser blandt identifikatorer).

Vælg de påkrævede felter fra datasættet. Som målinger vil vi bruge antallet af visninger, kommentarer, vurderingsværdier og antallet af bogmærker.

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 er dataene blevet tilføjet til datasættet, og vi kan bruge dem. Lad os gruppere dataene efter dage og tage gennemsnitsværdierne.

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 er den sjove del, vi kan se på diagrammerne.

Lad os se antallet af publikationer på Habré i 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 er interessant. Som du kan se, var Habr lidt "pølse" i løbet af året. Jeg kender ikke årsagen.

Habrastatistics: hvordan Habr lever uden nørdetider

Til sammenligning ser 2018 lidt "glattere" ud:

Habrastatistics: hvordan Habr lever uden nørdetider

Generelt så jeg ikke noget drastisk fald i antallet af publicerede artikler i 2019 på diagrammet. Desuden ser den tværtimod ud til at være vokset lidt siden sommeren.

Men de næste to grafer trykker mig lidt mere.

Gennemsnitlige visninger pr. artikel:

Habrastatistics: hvordan Habr lever uden nørdetider

Gennemsnitlig bedømmelse pr. artikel:

Habrastatistics: hvordan Habr lever uden nørdetider

Som du kan se, er det gennemsnitlige antal visninger i løbet af året en smule reduceret. Dette kan forklares med, at nye artikler endnu ikke er blevet indekseret af søgemaskiner, og de findes ikke så ofte. Men faldet i den gennemsnitlige vurdering pr. artikel er mere uforståeligt. Følelsen er, at læserne enten simpelthen ikke har tid til at se så mange artikler eller ikke er opmærksomme på vurderingerne. Set fra forfatteropmuntringsprogrammets synspunkt er denne tendens meget ubehagelig.

Sådan var det i øvrigt ikke i 2018, og tidsplanen er mere eller mindre jævn.

Habrastatistics: hvordan Habr lever uden nørdetider

Generelt har ressourceejere noget at tænke over.

Men lad os ikke tale om triste ting. Generelt kan vi sige, at Habr "overlevede" sommerændringerne ganske vellykket, og antallet af artikler på webstedet er ikke faldet.

Rating

Nu faktisk vurderingen. Tillykke til dem, der kom ind i det. Lad mig igen minde dig om, at vurderingen er uofficiel, måske er jeg gået glip af noget, og hvis en artikel helt sikkert skulle være her, men det er den ikke, så skriv, jeg tilføjer den manuelt. Som vurdering bruger jeg beregnede metrics, som jeg synes viste sig at være ret interessant.

Topartikler efter antal visninger

Topartikler efter forhold mellem rating og visninger

Topartikler efter forhold mellem kommentarer og visninger

Top mest kontroversielle artikler

Topartikler efter vurdering

Topartikler efter antal bogmærker

Top efter bogmærker i forhold til visninger

Topartikler efter antal kommentarer

Og endelig den sidste Antitop efter antallet af dislikes

Uff. Jeg har et par mere interessante udvalg, men jeg vil ikke kede læserne.

Konklusion

Da jeg konstruerede vurderingen, var jeg opmærksom på to punkter, der virkede interessante.

For det første er 60% af toppen trods alt artikler af "geektimes"-genren. Om der bliver færre af dem næste år, og hvordan Habr kommer til at se ud uden artikler om øl, rum, medicin og så videre - det ved jeg ikke. Læserne vil bestemt gå glip af noget. Lad os se.

For det andet viste bogmærke-toppen sig at være af uventet høj kvalitet. Dette er psykologisk forståeligt, læserne kan ikke være opmærksomme på vurderingen, og hvis artiklen er nødvendig, så føjes det til bogmærkerne. Og her er blot den største koncentration af nyttige og seriøse artikler. Jeg synes, at webstedsejerne på en eller anden måde skal tænke over sammenhængen mellem antallet af bogmærker og belønningsprogrammet, hvis de vil øge netop denne kategori af artikler her på Habré.

Sådan noget. Jeg håber det var informativt.

Listen over artikler viste sig at være lang, ja, det er nok for det bedste. God læsning alle sammen.

Kilde: www.habr.com

Tilføj en kommentar