Габрастистика: Хабр геэктаймсыз қалай өмір сүреді

Эй Хабр.

Бұл мақала рейтингтің логикалық жалғасы болып табылады 2018 жылғы ең жақсы Habr мақалалары. Жыл әлі аяқталмаса да, өздеріңіз білетіндей, жазда ережелерге өзгерістер енгізілді, сәйкесінше, бұл бір нәрсеге әсер етті ме деген сұрақ қызықты болды.

Габрастистика: Хабр геэктаймсыз қалай өмір сүреді

Нақты статистикаға қосымша мақалалардың жаңартылған рейтингі, сондай-ақ оның қалай жұмыс істейтініне қызығушылық танытқандар үшін кейбір бастапқы код беріледі.

Оқиғаға қызығатындар үшін жалғасы қысқартылған. Сайттың бөлімдерін егжей-тегжейлі талдауға қызығушылық танытқандар да қарай алады келесі бөлім.

Бастапқы деректер

Бұл рейтинг бейресми және менде инсайдерлік ақпарат жоқ. Браузердің мекенжай жолағына қарап оңай көруге болатындай, Habré-дегі барлық мақалаларда үздіксіз нөмірлеу бар. Содан кейін бұл техника мәселесі, біз барлық мақалаларды циклде (серверді жүктемеу үшін бір ағында және үзіліспен) оқимыз. Мәндердің өздері Python-дағы қарапайым талдаушы арқылы алынды (көздер бар осында) және csv файлында келесідей сақталды:

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

Өңдеу

Талдау үшін біз Python, Pandas және Matplotlib пайдаланамыз. Статистикаға қызықпайтындар бұл бөлімді өткізіп жіберіп, тікелей мақалаларға өте алады.

Алдымен деректер жинағын жадқа жүктеп, қажетті жылға деректерді таңдау керек.

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. Жалпы алғанда, көп нәрсе - бұл күніне шамамен XNUMX мақала (және бұл тек оң рейтингпен; теріс болған немесе жойылған қанша мақала жүктелгенін тек болжауға болады. немесе идентификаторлар арасындағы бос орындардан шамамен бағалаңыз).

Деректер жиынынан қажетті өрістерді таңдайық. Көрсеткіштер ретінде біз қараулар санын, пікірлерді, бағалау мәндерін және бетбелгілер санын қолданамыз.

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

Енді деректер деректер жиынына қосылды және біз оны пайдалана аламыз. Деректерді күндер бойынша топтастырып, орташа мәндерді алайық.

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

Енді қызықты бөлігі - біз графиктерді қарай аламыз.

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

Нәтиже қызықты. Көріп отырғаныңыздай, Хабр жыл бойы аздап «шұжық» болды. Себебін білмеймін.

Габрастистика: Хабр геэктаймсыз қалай өмір сүреді

Салыстыру үшін 2018 жыл біршама тегіс көрінеді:

Габрастистика: Хабр геэктаймсыз қалай өмір сүреді

Жалпы, мен графикте 2019 жылы жарияланған мақалалар санының күрт төмендегенін көрмедім. Оның үстіне, керісінше, жаздан бері тіпті аздап өскен сияқты.

Бірақ келесі екі график мені аздап ренжітеді.

Бір мақаланы көрудің орташа саны:

Габрастистика: Хабр геэктаймсыз қалай өмір сүреді

Бір мақаланың орташа бағасы:

Габрастистика: Хабр геэктаймсыз қалай өмір сүреді

Көріп отырғаныңыздай, көрулердің орташа саны жыл бойы аздап төмендейді. Бұл жаңа мақалалардың әлі іздеу жүйелерімен индекстелмегендігімен және олардың жиі табылмайтындығымен түсіндіруге болады. Бірақ бір мақаланың орташа рейтингінің төмендеуі түсініксіз. Оқырмандардың көп мақалаларды қарап шығуға уақыты жоқ немесе рейтингтерге мән бермейді деген сезім. Авторлық марапаттау бағдарламасы тұрғысынан бұл үрдіс өте жағымсыз.

Айтпақшы, бұл 2018 жылы болған жоқ, ал кесте азды-көпті біркелкі.

Габрастистика: Хабр геэктаймсыз қалай өмір сүреді

Жалпы, ресурс иелерінің ойлайтыны бар.

Бірақ қайғылы нәрселер туралы айтпай-ақ қояйық. Жалпы, Хабр жазда «аман қалды» деп айта аламыз және сайттағы мақалалар саны азайған жоқ.

рейтинг

Енді, шын мәнінде, рейтинг. Оған кіргендерді құттықтаймын. Рейтингтің бейресми екенін тағы бір рет еске салайын, мүмкін мен бірдеңені жіберіп алған шығармын, егер бұл жерде қандай да бір мақала болуы керек болса, бірақ олай болмаса, жазыңыз, мен оны қолмен қосамын. Рейтинг ретінде мен есептелген көрсеткіштерді қолданамын, менің ойымша, бұл өте қызықты болды.

Көру саны бойынша үздік мақалалар

Рейтинг пен көру қатынасы бойынша үздік мақалалар

Пікірлер мен көру қатынасы бойынша үздік мақалалар

Ең даулы мақалалар

Рейтинг бойынша үздік мақалалар

Бетбелгілер саны бойынша үздік мақалалар

Бетбелгілердің көріністерге қатынасы бойынша жоғары

Пікірлер саны бойынша үздік мақалалар

Және ақырында, соңғысы Ұнатпаулар саны бойынша антитоп

Уф. Менде тағы бірнеше қызықты таңдау бар, бірақ мен оқырмандарды жалықтырмаймын.

қорытынды

Рейтингті құру кезінде мен қызықты көрінген екі тармаққа назар аудардым.

Біріншіден, жоғарыдағы 60% «geektimes» жанрындағы мақалалар. Келесі жылы олардың саны аз бола ма және сыра, ғарыш, медицина және т.б. туралы мақалаларсыз Хабр қандай болады, мен білмеймін. Әрине, оқырмандар бірдеңе жоғалтады. Қарайық.

Екіншіден, жоғарғы бетбелгілер күтпеген жерден жоғары сапалы болып шықты. Бұл психологиялық тұрғыдан түсінікті, оқырмандар рейтингке назар аудармауы мүмкін, бірақ егер мақала қажет, содан кейін ол сіздің бетбелгілеріңізге қосылады. Міне, пайдалы және маңызды мақалалардың ең көп шоғырлануы. Менің ойымша, сайт иелері Хабредегі мақалалардың осы санатын көбейткісі келсе, бетбелгілер саны мен сыйақы бағдарламасы арасындағы байланыс туралы ойлануы керек.

Солай. Бұл ақпараттық болды деп үміттенемін.

Мақалалар тізімі ұзақ болып шықты, жақсырақ шығар. Барлығына бақытты оқу.

Ақпарат көзі: www.habr.com

пікір қалдыру