چگونه Habr را تجزیه کردم، بخش 1: روندها

وقتی اولیویه سال نو تمام شد، کاری برای انجام دادن نداشتم و تصمیم گرفتم تمام مقالات را از Habrahabr (و پلتفرم های مرتبط) در رایانه خود دانلود کنم و کاوش کنم.

چند داستان جالب بود. اولین آنها توسعه قالب و موضوعات مقالات در طول 12 سال فعالیت سایت است. به عنوان مثال، پویایی برخی از موضوعات کاملاً نشان دهنده است. ادامه - زیر برش.

چگونه Habr را تجزیه کردم، بخش 1: روندها

فرآیند تجزیه

برای درک چگونگی پیشرفت هابر، لازم بود همه مقالات او را مرور کنیم و اطلاعات فرا اطلاعاتی را از آنها استخراج کنیم (مثلاً تاریخ). دور زدن آسان بود، زیرا پیوندهای همه مقالات شبیه "habrahabr.ru/post/337722/" هستند و اعداد به طور دقیق ارائه شده اند. با دانستن اینکه آخرین پست عددی کمی کمتر از 350 هزار دارد، فقط تمام شناسه سند ممکن را در یک حلقه (کد پایتون) مرور کردم:

import numpy as np
from multiprocessing import Pool
with Pool(100) as p:
    docs = p.map(download_document, np.arange(350000))

تابع download_document سعی می کند صفحه را با شناسه مربوطه بارگذاری کند و سعی می کند اطلاعات معنی دار را از ساختار html استخراج کند.

import requests
from bs4 import BeautifulSoup

def download_document(pid):
    """ Download and process a Habr document and its comments """
    # выгрузка документа
    r = requests.get('https://habrahabr.ru/post/' +str(pid) + '/')
    # парсинг документа
    soup = BeautifulSoup(r.text, 'html5lib') # instead of html.parser
    doc = {}
    doc['id'] = pid
    if not soup.find("span", {"class": "post__title-text"}):
        # такое бывает, если статья не существовала или удалена
        doc['status'] = 'title_not_found'
    else:
        doc['status'] = 'ok'
        doc['title'] = soup.find("span", {"class": "post__title-text"}).text
        doc['text'] = soup.find("div", {"class": "post__text"}).text
        doc['time'] = soup.find("span", {"class": "post__time"}).text
        # create other fields: hubs, tags, views, comments, votes, etc.
        # ...
    # сохранение результата в отдельный файл
    fname = r'files/' + str(pid) + '.pkl'
    with open(fname, 'wb') as f:
        pickle.dump(doc, f)

در فرآیند تجزیه، چندین چیز جدید کشف کردم.

اول، آنها می گویند که ایجاد فرآیندهای بیشتر از هسته های موجود در پردازنده بی فایده است. اما در مورد من، معلوم شد که منبع محدود کننده پردازنده نیست، بلکه شبکه است و 100 پردازش سریعتر از 4 یا مثلا 20 کار می کنند.

ثانیاً، در برخی پست‌ها ترکیبی از شخصیت‌های خاص وجود داشت - به عنوان مثال، تعبیرهایی مانند "%&#@". معلوم شد که html.parser، که من اول استفاده کردم، به ترکیب واکنش نشان می دهد &# به طرز دردناکی، آن را آغازی از موجودیت html در نظر می گیریم. من قبلاً قصد داشتم جادوی سیاه انجام دهم ، اما انجمن پیشنهاد داد که می توانید تجزیه کننده را تغییر دهید.

ثالثاً من موفق شدم همه نشریات را به جز سه مورد تخلیه کنم. اسناد با شماره های 65927، 162075 و 275987 بلافاصله توسط آنتی ویروس من حذف شدند. اینها به ترتیب در مورد یک زنجیره جاوا اسکریپت است که یک فایل پی دی اف مخرب را دانلود می کند، باج افزار اس ام اس در قالب مجموعه ای از پلاگین های مرورگر و سایت CrashSafari.com که آیفون ها را به راه اندازی مجدد می فرستد. آنتی ویروس بعداً در طی یک اسکن سیستم، مقاله دیگری را کشف کرد: پست 338586 درباره اسکریپت‌هایی در وب‌سایت فروشگاه حیوانات خانگی که از پردازنده کاربر برای استخراج ارز دیجیتال استفاده می‌کنند. بنابراین می توانیم کار آنتی ویروس را کاملاً کافی بدانیم.

مقالات "زنده" فقط نیمی از حداکثر بالقوه است - 166307 قطعه. در مورد بقیه، هابر گزینه هایی را می دهد که "صفحه قدیمی است، حذف شده است یا اصلا وجود نداشته است." خوب، هر چیزی ممکن است اتفاق بیفتد.

بارگذاری مقالات با کارهای فنی دنبال شد: به عنوان مثال، تاریخ انتشار باید از قالب "'21 دسامبر 2006 در ساعت 10:47 صبح" به استاندارد تبدیل شود. datetime، و "12,8k" بازدید - در 12800. در این مرحله، چند حادثه دیگر رخ داد. خنده دارترین مورد مربوط به تعداد آرا و انواع داده ها است: برخی از پست های قدیمی سرریز int داشتند و هر کدام 65535 رای دریافت کردند.

چگونه Habr را تجزیه کردم، بخش 1: روندها

در نتیجه، متون مقالات (بدون عکس) 1.5 گیگابایت، نظرات با متا اطلاعات - 3 دیگر، و حدود صد مگابایت - متا اطلاعات در مورد مقاله ها از من گرفتند. این را می توان به طور کامل در رم نگه داشت که برای من یک سورپرایز خوشایند بود.

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

روند توسعه حبرهبر

مقالات این سایت از سال 2006 منتشر شده است. به شدت - در 2008-2016.

چگونه Habr را تجزیه کردم، بخش 1: روندها

ارزیابی فعالانه این مقالات در زمان های مختلف چندان آسان نیست. متن‌های مربوط به سال 2012 و جوان‌تر نظرات و رتبه‌بندی‌های بیشتری دریافت کردند، اما متون جدیدتر بازدیدها و نشانک‌های بیشتری دارند. این معیارها فقط یک بار، در سال 2015، به همین صورت عمل کردند (نصف شد). شاید در شرایط بحران اقتصادی و سیاسی توجه خوانندگان از وبلاگ های فناوری اطلاعات به موضوعات دردناک تری معطوف شده باشد.

چگونه Habr را تجزیه کردم، بخش 1: روندها

علاوه بر خود مقالات، نظرات بیشتری را برای آنها دانلود کردم. 6 میلیون کامنت وجود داشت، با این حال، 240 هزار مورد از آنها ممنوع شد ("یک بشقاب پرنده وارد شد و این کتیبه را در اینجا منتشر کرد"). یک ویژگی مفید نظرات این است که دارای مهر زمانی هستند. با مطالعه زمان نظرات، تقریباً می توانید بفهمید که اصلاً چه زمانی مقالات خوانده می شوند.

معلوم شد که اکثر مقاله ها از ساعت 10 صبح تا 20 شب هم نوشته شده و هم نظر داده می شود. در یک روز کاری معمولی مسکو. این ممکن است به این معنی باشد که هابر برای اهداف حرفه ای خوانده می شود و این روش خوبی برای به تعویق انداختن کار است. ضمناً این توزیع زمان از همان بنیان هابر تا به امروز پایدار است.

چگونه Habr را تجزیه کردم، بخش 1: روندها

با این حال، مزیت اصلی مهر زمانی نظر، زمان روز نیست، بلکه مدت زمان «عمر فعال» مقاله است. من محاسبه کردم که زمان از انتشار مقاله تا نظر آن چگونه توزیع می شود. معلوم شد که الان کامنت میانه (خط سبز) حدود 20 ساعت دیگه میاد یعنی. در روز اول پس از انتشار، به طور متوسط، کمی بیش از نیمی از تمام نظرات در مورد مقاله باقی می ماند. و در دو روز 75 درصد از کل نظرات را می گذارند. در همان زمان، مقالات قبلی حتی سریعتر خوانده می شدند - به عنوان مثال، در سال 2010، نیمی از نظرات در 6 ساعت اول آمده بودند.

چگونه Habr را تجزیه کردم، بخش 1: روندها

برای من تعجب آور بود که نظرات طولانی شده اند: میانگین تعداد کاراکترهای یک نظر در طول عمر Habr تقریبا دو برابر شده است!

چگونه Habr را تجزیه کردم، بخش 1: روندها

بازخورد آسان‌تر از نظرات، رای است. بر خلاف بسیاری از منابع دیگر، در Habré می توانید نه تنها نکات مثبت، بلکه منفی را نیز قرار دهید. با این حال، خوانندگان اغلب از آخرین فرصت استفاده نمی‌کنند: سهم کنونی دوست نداشتن‌ها حدود 15 درصد از کل آرا است. قبلا بیشتر بود، اما با گذشت زمان، خوانندگان مهربان تر شدند.

چگونه Habr را تجزیه کردم، بخش 1: روندها

خود متون در طول زمان تغییر کرده اند. به عنوان مثال، با وجود بحران‌ها، از زمان راه‌اندازی سایت، طول متن به طور پیوسته از رشد خود باز نمی‌ماند. در یک دهه، متن ها تقریبا ده برابر طولانی شده اند!

چگونه Habr را تجزیه کردم، بخش 1: روندها

سبک متون (به تقریب اول) نیز تغییر کرد. به عنوان مثال، در طول اولین سال های وجود هابر، سهم کد و اعداد در متون افزایش یافت:

چگونه Habr را تجزیه کردم، بخش 1: روندها

پس از درک پویایی کلی سایت، تصمیم گرفتم نحوه تغییر محبوبیت موضوعات مختلف را بسنجم. موضوعات را می توان به طور خودکار از متون انتخاب کرد، اما برای شروع، شما نمی توانید چرخ را دوباره اختراع کنید، بلکه از برچسب های آماده ای استفاده کنید که توسط نویسندگان هر مقاله اضافه شده است. من چهار روند معمولی را در نمودار ترسیم کرده ام. موضوع «گوگل» در ابتدا غالب بود (شاید عمدتاً به دلیل سئو)، اما در طول سال ها وزن خود را کاهش داده است. جاوا اسکریپت یک موضوع محبوب بوده و به آرامی به رشد خود ادامه می دهد، اما یادگیری ماشینی تنها در سال های اخیر به سرعت محبوبیت پیدا کرده است. از سوی دیگر، لینوکس در طول دهه به همان اندازه مرتبط باقی مانده است.

چگونه Habr را تجزیه کردم، بخش 1: روندها

البته به این موضوع علاقه مند شدم که چه موضوعاتی باعث جذب بیشتر خواننده می شود. من میانگین تعداد بازدید، آرا و نظرات در هر موضوع را محاسبه کردم. این چیزی است که اتفاق افتاد:

  • موضوعات پربازدید: آردوینو، طراحی وب، توسعه وب، خلاصه، پیوندها، css، html، html5، nginx، الگوریتم ها.
  • بیشترین موضوعات "پسندیده": vkontakte، طنز، جی کوئری، اپرا، c، html، توسعه وب، html5، css، طراحی وب.
  • موضوعات مورد بحث: اپرا، اسکایپ، مستقل، vkontakte، اوبونتو، کار، نوکیا، nginx، آردوینو، فایرفاکس.

ضمنا، از آنجایی که من موضوعات را با هم مقایسه می کنم، می توانید آنها را بر اساس فراوانی رتبه بندی کنید (و نتایج را با مقاله مشابه در سال 2013).

  • در تمام سال‌های عمر هابر، محبوب‌ترین برچسب‌ها (به ترتیب نزولی) گوگل، اندروید، جاوا اسکریپت، مایکروسافت، لینوکس، پی‌اچ‌پی، اپل، جاوا، پایتون، برنامه‌نویسی، استارت‌آپ‌ها، توسعه، ios، استارت‌آپ، شبکه‌های اجتماعی هستند.
  • در سال 2017 محبوب ترین ها عبارت بودند از جاوا اسکریپت، پایتون، جاوا، اندروید، توسعه، لینوکس، c++، برنامه نویسی، php، c#، ios، یادگیری ماشین، امنیت اطلاعات، مایکروسافت، واکنش

هنگام مقایسه این رتبه‌بندی‌ها، می‌توان به عنوان مثال به راهپیمایی پیروزمندانه پایتون و انقراض php توجه کرد یا به «غروب آفتاب» موضوعات راه‌اندازی و افزایش یادگیری ماشینی.

همه برچسب‌ها در هابره چنین رنگ‌بندی موضوعی واضحی ندارند. به عنوان مثال، در اینجا ده ها برچسب وجود دارد که فقط یک بار ملاقات کردند، اما فقط برای من خنده دار به نظر می رسید. بنابراین: "ایده موتور پیشرفت است"، "بوت از تصویر فلاپی دیسک"، "ایالت آیووا"، "درام"، "superalesh"، "موتور بخار"، "کارهایی که باید در روز شنبه انجام شود"، "من دارم یک روباه در چرخ گوشت، "مثل همیشه معلوم شد"، "برچسب های خنده دار را نمی توان اختراع کرد". برای تعیین موضوع چنین مقالاتی، برچسب ها کافی نیستند - شما باید مدل سازی موضوعی را روی متون مقالات انجام دهید.

تحلیل دقیق تری از محتوای مقالات در پست بعدی ارائه خواهد شد. ابتدا، من قصد دارم مدلی بسازم که تعداد بازدیدهای صفحه را برای یک مقاله بر اساس محتوای آن پیش بینی کند. دوم اینکه من می خواهم به شبکه عصبی یاد بدهم که متن هایی را به همان سبک نویسندگان هابر تولید کند. پس مشترک شوید 🙂

PS و اینجا بوق است مجموعه داده.

منبع: www.habr.com

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