Habrastatistics: jak Habr żyje bez geektimes

Hej Habr.

Ten artykuł jest logiczną kontynuacją oceny Najlepsze artykuły Habr na rok 2018. I choć rok się jeszcze nie skończył, jak wiadomo, latem nastąpiły zmiany w przepisach, więc ciekawie było sprawdzić, czy to coś wpłynęło.

Habrastatistics: jak Habr żyje bez geektimes

Oprócz aktualnych statystyk udostępniona zostanie zaktualizowana ocena artykułów, a także kod źródłowy dla zainteresowanych tym, jak to działa.

Dla tych, którzy są zainteresowani tym, co się stało, kontynuacja jest obcięta. Osoby zainteresowane bardziej szczegółową analizą sekcji witryny mogą również zajrzeć następna część.

Surowe dane

Ta ocena jest nieoficjalna i nie mam żadnych poufnych informacji. Jak łatwo zobaczyć, patrząc na pasek adresu przeglądarki, wszystkie artykuły na Habré mają ciągłą numerację. W takim razie to kwestia techniki, po prostu czytamy wszystkie artykuły z rzędu w pętli (w jednym wątku i z przerwami, żeby nie obciążać serwera). Same wartości zostały uzyskane za pomocą prostego parsera w Pythonie (źródła dostępne tutaj) i zapisane w pliku csv mniej więcej tak:

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

Przetwarzanie

Do parsowania użyjemy Pythona, Pand i Matplotlib. Osoby, które nie interesują się statystykami, mogą pominąć tę część i przejść od razu do artykułów.

Najpierw należy załadować zbiór danych do pamięci i wybrać dane dla żądanego roku.

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)

Okazuje się, że w tym roku (choć jeszcze się nie zakończył) w chwili pisania tego tekstu opublikowano 12715 2018 artykułów. Dla porównania za cały 15904 rok – 43. Ogólnie dużo – to około XNUMX artykułów dziennie (i to tylko z oceną pozytywną; ile ogółem pobrano artykułów, które wyszły negatywnie lub zostały usunięte, można się tylko domyślać lub w przybliżeniu oszacowanie na podstawie luk między identyfikatorami).

Wybierzmy niezbędne pola ze zbioru danych. Jako metryki wykorzystamy liczbę wyświetleń, komentarzy, wartości ocen i liczbę zakładek.

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 dane zostały dodane do zbioru danych i możemy z nich korzystać. Pogrupujmy dane według dni i przyjmijmy wartości średnie.

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

Interesujące jest to, że możemy spojrzeć na wykresy.

Przyjrzyjmy się liczbie publikacji na temat Habré w 2019 roku.

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

Wynik jest interesujący. Jak widać Habr przez cały rok był małą „kiełbaską”. Nie znam powodu.

Habrastatistics: jak Habr żyje bez geektimes

Dla porównania rok 2018 wygląda nieco płynniej:

Habrastatistics: jak Habr żyje bez geektimes

Generalnie na wykresie nie zaobserwowałem drastycznego spadku liczby opublikowanych artykułów w 2019 roku. Wręcz przeciwnie, wydaje się, że od lata nawet nieznacznie wzrosła.

Ale kolejne dwa wykresy przygnębiają mnie trochę bardziej.

Średnia liczba wyświetleń na artykuł:

Habrastatistics: jak Habr żyje bez geektimes

Średnia ocena na artykuł:

Habrastatistics: jak Habr żyje bez geektimes

Jak widać, średnia liczba wyświetleń nieznacznie maleje w ciągu roku. Można to wytłumaczyć faktem, że nowe artykuły nie zostały jeszcze zaindeksowane przez wyszukiwarki i nie znajdują ich tak często. Jednak spadek średniej oceny artykułu jest bardziej niezrozumiały. Odnosi się wrażenie, że czytelnicy albo po prostu nie mają czasu na przeglądanie tak wielu artykułów, albo nie zwracają uwagi na oceny. Z punktu widzenia autorskiego programu nagradzania jest to tendencja bardzo nieprzyjemna.

Swoją drogą w 2018 roku tak się nie stało i harmonogram jest mniej więcej równy.

Habrastatistics: jak Habr żyje bez geektimes

Ogólnie rzecz biorąc, właściciele zasobów mają nad czym myśleć.

Ale nie mówmy o smutnych rzeczach. Ogólnie można powiedzieć, że Habr „przeżył” letnie zmiany całkiem pomyślnie, a liczba artykułów na stronie nie spadła.

ocena

A właściwie ocena. Gratuluję tym, którzy się w to wpakowali. Przypominam jeszcze raz, że ocena jest nieoficjalna, może coś przeoczyłem, a jeśli jakiś artykuł na pewno powinien się tu znaleźć, a go nie ma, to napisz, dodam go ręcznie. Jako ocenę posługuję się wyliczonymi metrykami, które moim zdaniem okazały się całkiem interesujące.

Najpopularniejsze artykuły według liczby wyświetleń

Najpopularniejsze artykuły według współczynnika ocen do wyświetleń

Najpopularniejsze artykuły według współczynnika komentarzy do wyświetleń

Najbardziej kontrowersyjne artykuły

Najpopularniejsze artykuły według ocen

Najpopularniejsze artykuły według liczby zakładek

Na górze pod względem stosunku zakładek do wyświetleń

Najpopularniejsze artykuły według liczby komentarzy

I wreszcie ostatni Antitop według liczby ocen negatywnych

Uch. Mam jeszcze kilka ciekawszych propozycji, ale nie będę zanudzać czytelników.

wniosek

Konstruując ocenę zwróciłem uwagę na dwa punkty, które wydały mi się interesujące.

Po pierwsze, 60% najlepszych to artykuły z gatunku „geektimes”. Czy w przyszłym roku będzie ich mniej i jak będzie wyglądał Habr bez artykułów o piwie, kosmosie, medycynie itp. – nie wiem. Zdecydowanie czytelnicy coś stracą. Zobaczmy.

Po drugie, topowe zakładki okazały się nieoczekiwanie wysokiej jakości. Jest to zrozumiałe z psychologicznego punktu widzenia, czytelnicy mogą nie zwracać uwagi na ocenę, ale na artykuł jest potrzebny, zostanie on dodany do Twoich zakładek. I tutaj jest właśnie największa koncentracja przydatnych i poważnych artykułów. Myślę, że właściciele witryn powinni w jakiś sposób przemyśleć związek między liczbą zakładek a programem nagród, jeśli chcą zwiększyć liczbę artykułów w tej konkretnej kategorii na Habré.

Coś takiego. Mam nadzieję, że było to pouczające.

Lista artykułów okazała się długa, cóż, chyba na lepsze. Miłego czytania wszystkim.

Źródło: www.habr.com

Dodaj komentarz