Habrastatistics: چگونه Habr بدون geektime زندگی می کند

هی هابر

این مقاله ادامه منطقی رتبه بندی است بهترین مقالات Habr برای سال 2018. و اگرچه سال هنوز تمام نشده است ، همانطور که می دانید ، در تابستان تغییراتی در قوانین ایجاد شد ، بر این اساس ، جالب شد که ببینیم آیا این روی چیزی تأثیر می گذارد یا خیر.

Habrastatistics: چگونه Habr بدون geektime زندگی می کند

علاوه بر آمار واقعی، رتبه بندی به روز شده مقالات و همچنین برخی از کدهای منبع برای کسانی که علاقه مند به نحوه عملکرد آن هستند ارائه خواهد شد.

برای کسانی که به اتفاقی که افتاده علاقه مند هستند، ادامه در زیر برش است. کسانی که علاقه مند به تجزیه و تحلیل دقیق تر بخش های سایت هستند نیز می توانند نگاه کنند قسمت بعدی.

داده های خام

این رتبه بندی غیر رسمی است و من هیچ اطلاعات داخلی ندارم. همانطور که با نگاه کردن به نوار آدرس مرورگر خود به راحتی می توانید متوجه شوید، تمام مقالات در هابره دارای شماره گذاری مداوم هستند. سپس مسئله تکنیک است، ما به سادگی تمام مقالات را پشت سر هم در یک چرخه می خوانیم (در یک رشته و با مکث، تا سرور بارگیری نشود). خود مقادیر توسط یک تجزیه کننده ساده در پایتون به دست آمده اند (منابع موجود هستند اینجا) و در یک فایل 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 مقاله در روز است (و این فقط با یک رتبه مثبت است؛ تعداد کل مقالاتی که دانلود شده اند که منفی شده یا حذف شده اند، فقط می توان حدس زد. یا تقریباً از روی شکاف بین شناسه ها تخمین زده شود).

بیایید فیلدهای لازم را از مجموعه داده انتخاب کنیم. به عنوان معیار از تعداد بازدیدها، نظرات، مقادیر رتبه بندی و تعداد نشانک ها استفاده خواهیم کرد.

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

نتیجه جالب است. همانطور که می بینید، هابر در طول سال کمی "سوسیس" بوده است. دلیلش را نمی دانم.

Habrastatistics: چگونه Habr بدون geektime زندگی می کند

برای مقایسه، سال 2018 کمی روان تر به نظر می رسد:

Habrastatistics: چگونه Habr بدون geektime زندگی می کند

به طور کلی، من کاهش شدیدی در تعداد مقالات منتشر شده در سال 2019 در نمودار مشاهده نکردم. علاوه بر این، برعکس، به نظر می رسد که از تابستان حتی اندکی افزایش یافته است.

اما دو نمودار بعدی من را کمی بیشتر افسرده می کند.

میانگین تعداد بازدید از هر مقاله:

Habrastatistics: چگونه Habr بدون geektime زندگی می کند

میانگین امتیاز در هر مقاله:

Habrastatistics: چگونه Habr بدون geektime زندگی می کند

همانطور که می بینید، میانگین تعداد بازدیدها در طول سال اندکی کاهش می یابد. این را می توان با این واقعیت توضیح داد که مقالات جدید هنوز توسط موتورهای جستجو نمایه نشده اند و اغلب یافت نمی شوند. اما کاهش میانگین رتبه در هر مقاله غیرقابل درک تر است. احساس این است که خوانندگان یا به سادگی وقت ندارند این همه مقاله را مرور کنند یا به رتبه بندی ها توجه نمی کنند. از دیدگاه برنامه جایزه نویسنده، این روند بسیار ناخوشایند است.

اتفاقاً در سال 2018 این اتفاق نیفتاد و برنامه کم و بیش یکنواخت است.

Habrastatistics: چگونه Habr بدون geektime زندگی می کند

به طور کلی، صاحبان منابع چیزی برای فکر کردن دارند.

اما بیایید در مورد چیزهای غم انگیز صحبت نکنیم. به طور کلی می توان گفت که هابر از تغییرات تابستانی با موفقیت "زنده ماند" و تعداد مقالات در سایت کاهش پیدا نکرد.

رتبه

اکنون، در واقع، امتیاز. به کسانی که وارد آن شدند تبریک می گویم. اجازه دهید یک بار دیگر به شما یادآوری کنم که رتبه‌بندی غیر رسمی است، شاید من چیزی را از دست داده‌ام، و اگر حتماً مقاله‌ای باید اینجا باشد، اما اینطور نیست، بنویسید، من آن را به صورت دستی اضافه می‌کنم. به عنوان رتبه بندی، از معیارهای محاسبه شده استفاده می کنم که فکر می کنم بسیار جالب بود.

مقالات برتر بر اساس تعداد بازدید

مقالات برتر بر اساس نسبت رتبه به بازدید

مقالات برتر بر اساس نسبت نظرات به بازدیدها

بحث برانگیزترین مقالات

مقالات برتر بر اساس رتبه بندی

مقالات برتر بر اساس تعداد نشانک ها

بالا بر اساس نسبت نشانک ها به بازدیدها

مقالات برتر بر اساس تعداد نظرات

و در نهایت، آخرین Antitop بر حسب تعداد نپسندیدن

اوه من چند انتخاب جالب دیگر دارم، اما خوانندگان را خسته نمی کنم.

نتیجه

هنگام ساخت رتبه به دو نکته توجه کردم که جالب به نظر می رسید.

اولاً، 60٪ از برترین ها مقالات ژانر "geektimes" هستند. نمی دانم که آیا در سال آینده تعداد آنها کمتر خواهد بود یا خیر، و Habr بدون مقالاتی در مورد آبجو، فضا، دارو و غیره چگونه خواهد بود. خوانندگان قطعا چیزی را از دست خواهند داد. اجازه بدید ببینم.

ثانیاً، نشانک های برتر به طور غیرمنتظره ای از کیفیت بالایی برخوردار بودند. این از نظر روانشناسی قابل درک است؛ خوانندگان ممکن است به رتبه بندی توجه نکنند، اما اگر مقاله مورد نیاز است، سپس به نشانک های شما اضافه می شود. و اینجا دقیقاً بیشترین غلظت مقالات مفید و جدی است. من فکر می‌کنم اگر می‌خواهند این دسته خاص از مقاله‌ها را در هابره افزایش دهند، باید به نوعی به ارتباط بین تعداد نشانک‌ها و برنامه پاداش فکر کنند.

چیزی شبیه به این. امیدوارم آموزنده بوده باشه

لیست مقالات طولانی بود، خوب، احتمالاً برای بهتر شدن است. خواندن همه مبارک.

منبع: www.habr.com

اضافه کردن نظر