Habrastatistics: làm thế nào Habr sống mà không có geektimes

Xin chào, Habr.

Bài viết này là sự tiếp nối hợp lý của đánh giá Những bài viết hay nhất của Habr năm 2018. Và mặc dù năm vẫn chưa kết thúc, như bạn biết đấy, vào mùa hè đã có những thay đổi trong các quy tắc, do đó, sẽ rất thú vị để xem liệu điều này có ảnh hưởng gì không.

Habrastatistics: làm thế nào Habr sống mà không có geektimes

Ngoài số liệu thống kê thực tế, xếp hạng cập nhật của các bài viết sẽ được cung cấp cũng như một số mã nguồn cho những ai quan tâm đến cách thức hoạt động của nó.

Đối với những ai quan tâm đến những gì đã xảy ra, phần tiếp theo đang bị cắt bỏ. Những người quan tâm đến việc phân tích chi tiết hơn về các phần của trang web cũng có thể xem phần tiếp theo.

Dữ liệu thô

Đánh giá này là không chính thức và tôi không có bất kỳ thông tin nội bộ nào. Như bạn có thể dễ dàng nhận thấy bằng cách nhìn vào thanh địa chỉ của trình duyệt, tất cả các bài viết trên Habré đều được đánh số liên tục. Sau đó, vấn đề về kỹ thuật, chúng tôi chỉ cần đọc tất cả các bài viết liên tiếp trong một vòng lặp (trong một luồng và có các khoảng dừng để không tải máy chủ). Bản thân các giá trị được lấy bằng một trình phân tích cú pháp đơn giản trong Python (các nguồn có sẵn đây) và được lưu trong tệp csv giống như thế này:

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

Chế biến

Để phân tích cú pháp, chúng tôi sẽ sử dụng Python, Pandas và Matplotlib. Những ai không quan tâm đến thống kê có thể bỏ qua phần này và đi thẳng vào bài viết.

Trước tiên, bạn cần tải tập dữ liệu vào bộ nhớ và chọn dữ liệu cho năm mong muốn.

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)

Hóa ra năm nay (mặc dù vẫn chưa kết thúc) tại thời điểm viết bài, đã có 12715 bài báo được xuất bản. Để so sánh, trong cả năm 2018 - 15904. Nhìn chung, rất nhiều - đây là khoảng 43 bài viết mỗi ngày (và đây chỉ là xếp hạng tích cực; tổng số bài viết được tải xuống trở nên tiêu cực hoặc bị xóa, người ta chỉ có thể đoán hoặc ước tính đại khái từ khoảng cách giữa các số nhận dạng).

Hãy chọn các trường cần thiết từ tập dữ liệu. Làm số liệu, chúng tôi sẽ sử dụng số lượt xem, nhận xét, giá trị xếp hạng và số lượng dấu trang.

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

Bây giờ dữ liệu đã được thêm vào tập dữ liệu và chúng ta có thể sử dụng nó. Hãy nhóm dữ liệu theo ngày và lấy giá trị trung bình.

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

Bây giờ phần thú vị là chúng ta có thể nhìn vào biểu đồ.

Hãy nhìn vào số lượng ấn phẩm về Habré trong năm 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()

Kết quả thật thú vị. Như bạn có thể thấy, Habr đã trở thành một “xúc xích” nhỏ trong suốt cả năm. Tôi không biết lý do.

Habrastatistics: làm thế nào Habr sống mà không có geektimes

Để so sánh, năm 2018 có vẻ mượt mà hơn một chút:

Habrastatistics: làm thế nào Habr sống mà không có geektimes

Nhìn chung, tôi không thấy số lượng bài viết được xuất bản trong năm 2019 trên biểu đồ giảm mạnh. Hơn nữa, ngược lại, nó dường như thậm chí còn tăng nhẹ kể từ mùa hè.

Nhưng hai biểu đồ tiếp theo làm tôi chán nản hơn một chút.

Số lượt xem trung bình trên mỗi bài viết:

Habrastatistics: làm thế nào Habr sống mà không có geektimes

Đánh giá trung bình mỗi bài viết:

Habrastatistics: làm thế nào Habr sống mà không có geektimes

Như bạn có thể thấy, số lượt xem trung bình giảm nhẹ trong suốt cả năm. Điều này có thể được giải thích là do các bài viết mới vẫn chưa được các công cụ tìm kiếm lập chỉ mục và chúng không được tìm thấy thường xuyên. Nhưng sự sụt giảm xếp hạng trung bình trên mỗi bài viết thì khó hiểu hơn. Có cảm giác là người đọc đơn giản là không có thời gian để xem qua quá nhiều bài báo hoặc không chú ý đến xếp hạng. Theo quan điểm của chương trình khen thưởng tác giả, xu hướng này rất khó chịu.

Nhân tiện, điều này đã không xảy ra vào năm 2018 và lịch trình ít nhiều đều đồng đều.

Habrastatistics: làm thế nào Habr sống mà không có geektimes

Nói chung, chủ sở hữu tài nguyên có điều gì đó để suy nghĩ.

Nhưng đừng nói về những chuyện buồn. Nhìn chung, có thể nói rằng Habr đã “sống sót” sau những thay đổi trong mùa hè khá thành công và số lượng bài viết trên trang này không hề giảm.

Đánh giá

Bây giờ, thực sự, đánh giá. Xin chúc mừng những người đã tham gia vào nó. Hãy để tôi nhắc bạn một lần nữa rằng xếp hạng là không chính thức, có thể tôi đã bỏ sót điều gì đó và nếu bài viết nào đó chắc chắn nên có ở đây, nhưng không phải vậy, hãy viết, tôi sẽ thêm nó theo cách thủ công. Để xếp hạng, tôi sử dụng các số liệu được tính toán mà tôi nghĩ hóa ra khá thú vị.

Các bài viết hàng đầu theo số lượt xem

Các bài viết hàng đầu theo tỷ lệ xếp hạng trên lượt xem

Các bài viết hàng đầu theo tỷ lệ bình luận trên lượt xem

Top bài viết gây tranh cãi nhất

Các bài viết hàng đầu theo xếp hạng

Các bài viết hàng đầu theo số lượng dấu trang

Top theo tỷ lệ dấu trang so với lượt xem

Các bài viết hàng đầu theo số lượng bình luận

Và cuối cùng, cái cuối cùng Antitop theo số lượt không thích

Ờ. Tôi còn một vài lựa chọn thú vị nữa nhưng sẽ không làm độc giả nhàm chán.

Kết luận

Khi xây dựng xếp hạng, tôi chú ý đến hai điểm có vẻ thú vị.

Thứ nhất, 60% trong số top là các bài viết thuộc thể loại “geektimes”. Liệu năm tới có ít chúng hơn hay không và Habr sẽ trông như thế nào nếu không có các bài viết về bia, không gian, y học, v.v., tôi không biết. Chắc chắn độc giả sẽ mất đi điều gì đó. Hãy xem nào.

Thứ hai, các dấu trang hàng đầu hóa ra lại có chất lượng cao đến không ngờ. Điều này có thể hiểu được về mặt tâm lý; người đọc có thể không chú ý đến đánh giá, nhưng nếu bài viết là cần thiết, sau đó nó sẽ được thêm vào dấu trang của bạn. Và đây chính xác là nơi tập trung nhiều nhất các bài viết hữu ích và nghiêm túc. Tôi nghĩ chủ sở hữu trang web bằng cách nào đó nên suy nghĩ về mối liên hệ giữa số lượng dấu trang và chương trình phần thưởng nếu họ muốn tăng danh mục bài viết cụ thể này ở đây trên Habré.

Một cái gì đó như thế này. Tôi hy vọng nó có nhiều thông tin.

Danh sách các bài viết hóa ra rất dài, có lẽ như vậy sẽ tốt hơn. Chúc mọi người đọc vui vẻ.

Nguồn: www.habr.com

Thêm một lời nhận xét