Овај чланак је логичан наставак рејтинга Најбољи Хабр чланци за 2018. И иако година још није готова, као што знате, у лето је дошло до промена у правилима, па је постало занимљиво видети да ли је ово на било шта утицало.
Поред стварне статистике, биће обезбеђена ажурирана оцена чланака, као и неки изворни код за оне које занима како то функционише.
За оне које занима шта се десило, наставак је испод реза. Они који су заинтересовани за детаљнију анализу делова сајта такође могу погледати следећи део.
Необрађени подаци
Ова оцена је незванична, а ја немам инсајдерске информације. Као што можете лако да видите гледајући у адресну траку вашег претраживача, сви чланци на Хабреју имају континуирано нумерисање. Онда је ствар технике, ми једноставно читамо све чланке редом у петљи (у једној нити и са паузама, да не бисмо учитавали сервер). Саме вредности су добијене једноставним парсером у Питхон-у (извори су доступни овде) и сачували у цсв датотеци отприлике овако:
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
Прерада
За рашчлањивање користићемо Питхон, Пандас и Матплотлиб. Они које не занима статистика могу прескочити овај део и прећи директно на чланке.
Прво морате учитати скуп података у меморију и одабрати податке за жељену годину.
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)
Испоставило се да је ове године (иако још није завршена) у време писања објављено 12715 чланака. Поређења ради, за целу 2018 - 15904. Генерално, много - ово је око 43 чланка дневно (и то само са позитивном оценом; колико је укупно преузето чланака који су негативни или су избрисани, може се само нагађати или грубо проценити на основу празнина међу идентификаторима).
Хајде да изаберемо потребна поља из скупа података. Као метрику користићемо број прегледа, коментара, вредности оцена и број обележивача.
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
Сада су подаци додати скупу података и можемо их користити. Хајде да групишемо податке по данима и узмемо просечне вредности.
Резултат је занимљив. Као што видите, Хабр је био мала "кобасица" током целе године. Не знам разлог.
Поређења ради, 2018. изгледа мало глаткије:
Генерално, на графикону нисам видео драстичан пад броја објављених чланака у 2019. Штавише, напротив, чини се да се чак и незнатно повећао од лета.
Али следећа два графикона ме мало више депримирају.
Просечан број прегледа по чланку:
Просечна оцена по чланку:
Као што видите, просечан број прегледа се незнатно смањује током године. Ово се може објаснити чињеницом да нови чланци још нису индексирани од стране претраживача и не налазе се тако често. Али пад просечне оцене по чланку је више несхватљив. Осећај је да читаоци или једноставно немају времена да прегледају толико чланака или не обраћају пажњу на оцене. Са становишта програма награђивања аутора, овај тренд је веома непријатан.
Иначе, 2018. године то се није догодило, а распоред је мање-више уједначен.
Генерално, власници ресурса имају о чему да размишљају.
Али да не причамо о тужним стварима. Генерално, можемо рећи да је Хабр прилично успешно „преживео“ летње промене, а број чланака на сајту се није смањио.
Оцењивање
Сада, заправо, рејтинг. Честитам онима који су у то ушли. Још једном да вас подсетим да је оцена незванична, можда сам нешто пропустио, а ако би неки чланак свакако требало да буде овде, а није, напишите, додаћу ручно. Као оцену користим израчунате метрике, за које мислим да су се показале прилично интересантне.
Уф. Имам још неколико занимљивих избора, али нећу досадити читаоцима.
Закључак
Приликом конструисања рејтинга, обратио сам пажњу на две тачке које су се чиниле интересантним.
Прво, 60% врха су чланци жанра „геектимес“. Да ли ће их следеће године бити мање и како ће Хабр изгледати без чланака о пиву, свемиру, медицини итд., не знам. Дефинитивно ће читаоци нешто изгубити. Хајде да видимо.
Друго, испоставило се да су врхунски обележивачи неочекивано високог квалитета. Ово је психолошки разумљиво, читаоци можда не обраћају пажњу на оцену, али ако је чланак нужна, онда ће бити додат у ваше обележиваче. И ту је управо највећа концентрација корисних и озбиљних чланака. Мислим да би власници сајтова требало некако да размисле о вези између броја обележивача и програма награђивања ако желе да повећају ову конкретну категорију чланака овде на Хабреу.
Овако нешто. Надам се да је било информативно.
Испоставило се да је списак чланака дугачак, па, вероватно је на боље. Срећно читање свима.