ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

เมื่อ Olivier ปีใหม่สิ้นสุดลง ฉันไม่มีอะไรทำ และฉันตัดสินใจดาวน์โหลดบทความทั้งหมดจาก Habrahabr (และแพลตฟอร์มที่เกี่ยวข้อง) ลงในคอมพิวเตอร์ของฉันและสำรวจ

มีเรื่องราวที่น่าสนใจหลายประการ ประการแรกคือการพัฒนารูปแบบและหัวข้อของบทความตลอด 12 ปีของการมีอยู่ของเว็บไซต์ ตัวอย่างเช่น การเปลี่ยนแปลงของบางหัวข้อค่อนข้างบ่งบอกได้ชัดเจน ความต่อเนื่อง - ภายใต้การตัด

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

กระบวนการแยกวิเคราะห์

เพื่อทำความเข้าใจว่า Habr พัฒนาอย่างไร จำเป็นต้องอ่านบทความทั้งหมดของเขาและดึงข้อมูลเมตาจากบทความเหล่านั้น (เช่น วันที่) การเลี่ยงเป็นเรื่องง่ายเนื่องจากลิงก์ไปยังบทความทั้งหมดมีลักษณะเหมือน "habrahabr.ru/post/337722/" และตัวเลขจะได้รับตามลำดับอย่างเคร่งครัด เมื่อรู้ว่าโพสต์ล่าสุดมีจำนวนน้อยกว่า 350 เล็กน้อย ฉันเพิ่งอ่าน ID เอกสารทั้งหมดที่เป็นไปได้ในลูป (รหัส Python):

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

ฟังก์ชัน download_document พยายามโหลดหน้าด้วย id ที่สอดคล้องกัน และพยายามดึงข้อมูลที่มีความหมายจากโครงสร้าง 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 ถูกลบทันทีโดยโปรแกรมป้องกันไวรัสของฉัน บทความเหล่านี้ตามลำดับ เกี่ยวกับเชนจาวาสคริปต์ที่ดาวน์โหลด pdf ที่เป็นอันตราย แรนซัมแวร์ SMS ในรูปแบบของชุดปลั๊กอินของเบราว์เซอร์ และไซต์ CrashSafari.com ที่ส่ง iPhone เข้าสู่การรีบูต Antivirus ค้นพบบทความอื่นในภายหลัง ระหว่างการสแกนระบบ: โพสต์ 338586 เกี่ยวกับสคริปต์บนเว็บไซต์ร้านขายสัตว์เลี้ยงที่ใช้ตัวประมวลผลของผู้ใช้ในการขุด cryptocurrency ดังนั้นเราจึงสามารถพิจารณาการทำงานของโปรแกรมป้องกันไวรัสได้ค่อนข้างเพียงพอ

บทความ "สด" กลายเป็นเพียงครึ่งหนึ่งของจำนวนสูงสุดที่เป็นไปได้ - 166307 ชิ้น สำหรับส่วนที่เหลือ Habr ให้ตัวเลือก "หน้านี้ล้าสมัย ถูกลบ หรือไม่มีเลย" อะไรก็เกิดขึ้นได้

การอัปโหลดบทความตามมาด้วยงานด้านเทคนิค เช่น ต้องแปลงวันที่ตีพิมพ์จากรูปแบบ "'21 ธันวาคม 2006 เวลา 10:47 น." เป็นมาตรฐาน datetimeและมุมมอง "12,8k" - ใน 12800 ในขั้นตอนนี้มีเหตุการณ์อีกสองสามเหตุการณ์เกิดขึ้น สิ่งที่สนุกที่สุดคือจำนวนโหวตและประเภทข้อมูล: โพสต์เก่าบางโพสต์มี int ล้นและได้รับการโหวต 65535 ครั้ง

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

เป็นผลให้ฉันได้รับข้อความของบทความ (ไม่มีรูปภาพ) 1.5 กิกะไบต์ความคิดเห็นพร้อมข้อมูลเมตา - อีก 3 รายการและข้อมูลเมตาเกี่ยวกับบทความประมาณหนึ่งร้อยเมกะไบต์ สิ่งนี้สามารถเก็บไว้ใน RAM ได้อย่างสมบูรณ์ซึ่งเป็นเรื่องที่น่าประหลาดใจสำหรับฉัน

ฉันเริ่มการวิเคราะห์บทความโดยไม่ได้มาจากตัวหนังสือเอง แต่จากข้อมูลเมตา: วันที่ แท็ก ฮับ มุมมอง และการถูกใจ ปรากฎว่าเธอสามารถบอกได้มากมาย

แนวโน้มการพัฒนา Habrahabr

บทความในเว็บไซต์เผยแพร่ตั้งแต่ปี 2006 อย่างเข้มข้นที่สุด - ในปี 2008-2016

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

ความกระตือรือร้นในการอ่านบทความเหล่านี้ในเวลาต่างๆ นั้นไม่ง่ายนักที่จะประเมิน ข้อความตั้งแต่ปี 2012 และอายุน้อยกว่าได้รับความคิดเห็นและการให้คะแนนมากกว่า แต่ข้อความที่ใหม่กว่ามีมุมมองและบุ๊กมาร์กมากกว่า เมตริกเหล่านี้ทำงานในลักษณะเดียวกัน (ลดลงครึ่งหนึ่ง) เพียงครั้งเดียวในปี 2015 บางทีในสถานการณ์วิกฤตเศรษฐกิจและการเมือง ความสนใจของผู้อ่านได้เปลี่ยนจากบล็อกไอทีไปสู่ประเด็นที่เจ็บปวดมากขึ้น

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

นอกจากบทความแล้ว ฉันยังดาวน์โหลดความคิดเห็นเพิ่มเติมอีกด้วย มีความคิดเห็น 6 ล้านความคิดเห็น อย่างไรก็ตาม 240 รายการถูกแบน ("ยูเอฟโอบินเข้ามาและเผยแพร่คำจารึกนี้ที่นี่") คุณสมบัติที่มีประโยชน์ของความคิดเห็นคือพวกเขามีการประทับเวลา เมื่อศึกษาเวลาแสดงความคิดเห็น คุณจะเข้าใจได้อย่างคร่าว ๆ ว่าเมื่อใดที่บทความถูกอ่าน

ปรากฎว่าบทความส่วนใหญ่มีทั้งเขียนและแสดงความคิดเห็นระหว่าง 10 น. ถึง 20 น. เช่น ในวันทำงานปกติของมอสโก นี่อาจหมายความว่า Habr อ่านเพื่อจุดประสงค์ทางอาชีพ และนี่เป็นวิธีที่ดีในการผัดวันประกันพรุ่งในที่ทำงาน อย่างไรก็ตาม การกระจายเวลาของวันมีความเสถียรตั้งแต่รากฐานของ Habr จนถึงปัจจุบัน

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

อย่างไรก็ตาม ประโยชน์หลักของการประทับเวลาความคิดเห็นไม่ใช่ช่วงเวลาของวัน แต่เป็นช่วงเวลาของ "ชีวิตที่ใช้งานอยู่" ของบทความ ฉันคำนวณการกระจายเวลาจากการตีพิมพ์บทความไปยังความคิดเห็น ปรากฎว่าตอนนี้ความคิดเห็นค่ามัธยฐาน (เส้นสีเขียว) เข้ามาประมาณ 20 ชั่วโมง นั่นคือ ในวันแรกหลังการตีพิมพ์ โดยเฉลี่ยแล้ว ความคิดเห็นทั้งหมดบนบทความจะเหลืออยู่มากกว่าครึ่งเล็กน้อย และในสองวันพวกเขาแสดงความคิดเห็น 75% ของทั้งหมด ในขณะเดียวกัน บทความก่อนหน้านี้ก็อ่านได้เร็วยิ่งขึ้น เช่น ในปี 2010 ความคิดเห็นครึ่งหนึ่งมาจาก 6 ชั่วโมงแรก

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

ฉันแปลกใจมากที่ความคิดเห็นมีความยาวมากขึ้น: จำนวนอักขระเฉลี่ยในความคิดเห็นเพิ่มขึ้นเกือบสองเท่าตลอดอายุของ Habr!

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

คำติชมที่ง่ายกว่าความคิดเห็นคือการโหวต ไม่เหมือนกับแหล่งข้อมูลอื่น ๆ บนHabré คุณสามารถใส่ข้อดีและข้อเสียได้ด้วย อย่างไรก็ตาม ผู้อ่านไม่ได้ใช้โอกาสสุดท้ายบ่อยนัก: ส่วนแบ่งการไม่ชอบในปัจจุบันอยู่ที่ประมาณ 15% ของการโหวตทั้งหมด เคยมีมากขึ้น แต่เมื่อเวลาผ่านไปผู้อ่านก็ใจดีขึ้น

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

ข้อความเองก็เปลี่ยนไปตามกาลเวลา ตัวอย่างเช่น ความยาวทั่วไปของข้อความไม่ได้หยุดเพิ่มขึ้นอย่างต่อเนื่องจากการเปิดตัวเว็บไซต์ แม้ว่าจะเกิดวิกฤตก็ตาม ในทศวรรษ ข้อความยาวขึ้นเกือบสิบเท่า!

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

รูปแบบของข้อความ (เป็นการประมาณครั้งแรก) ก็เปลี่ยนไปเช่นกัน ตัวอย่างเช่น ในช่วงปีแรก ๆ ของการดำรงอยู่ของ Habr ส่วนแบ่งของรหัสและตัวเลขในข้อความเพิ่มขึ้น:

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

หลังจากทำความเข้าใจไดนามิกโดยรวมของไซต์แล้ว ฉันตัดสินใจวัดว่าความนิยมของหัวข้อต่างๆ เปลี่ยนไปอย่างไร หัวข้อสามารถเลือกได้โดยอัตโนมัติจากข้อความ แต่สำหรับผู้เริ่มต้น คุณไม่สามารถสร้างวงล้อใหม่ได้ แต่ใช้แท็กสำเร็จรูปที่ติดโดยผู้เขียนบทความแต่ละบทความ ฉันได้วาดสี่แนวโน้มทั่วไปในแผนภูมิ ธีม "Google" เริ่มครอบงำ (อาจเป็นเพราะ SEO เป็นหลัก) แต่ได้ลดน้อยลงในช่วงหลายปีที่ผ่านมา Javascript เป็นหัวข้อยอดนิยมและยังคงเติบโตอย่างช้าๆ แต่แมชชีนเลิร์นนิงเริ่มได้รับความนิยมอย่างรวดเร็วในช่วงไม่กี่ปีที่ผ่านมาเท่านั้น ในทางกลับกัน Linux ยังคงมีความเกี่ยวข้องเท่าเทียมกันตลอดทศวรรษที่ผ่านมา

ฉันแยกวิเคราะห์ Habr ได้อย่างไร ตอนที่ 1: แนวโน้ม

แน่นอน ฉันเริ่มสนใจว่าหัวข้อใดที่ดึงดูดกิจกรรมของผู้อ่านได้มากกว่ากัน ฉันคำนวณจำนวนการดู คะแนนโหวต และความคิดเห็นในแต่ละหัวข้อ นี่คือสิ่งที่เกิดขึ้น:

  • หัวข้อที่มีคนดูมากที่สุด: arduino, การออกแบบเว็บ, การพัฒนาเว็บ, ไดเจสต์, ลิงก์, css, html, html5, nginx, อัลกอริทึม
  • หัวข้อที่ "ชอบ" มากที่สุด: vkontakte, อารมณ์ขัน, jquery, โอเปร่า, c, html, การพัฒนาเว็บ, html5, css, การออกแบบเว็บ
  • หัวข้อที่มีการกล่าวถึงมากที่สุด: โอเปร่า, สไกป์, ฟรีแลนซ์, vkontakte, อูบุนตู, งาน, โนเกีย, nginx, arduino, firefox

อย่างไรก็ตาม เนื่องจากฉันกำลังเปรียบเทียบหัวข้อ คุณจึงสามารถจัดอันดับตามความถี่ได้ (และเปรียบเทียบผลลัพธ์ด้วย บทความที่คล้ายกันจากปี 2013).

  • ตลอดระยะเวลาหลายปีที่ Habr ดำรงอยู่ แท็กยอดนิยม (เรียงลำดับจากมากไปหาน้อย) คือ google, android, javascript, microsoft, linux, php, apple, java, python, การเขียนโปรแกรม, การเริ่มต้น, การพัฒนา, ios, การเริ่มต้น, เครือข่ายสังคม
  • ในปี 2017 ความนิยมสูงสุด ได้แก่ javascript, python, java, android, development, linux, c++, การเขียนโปรแกรม, php, c#, ios, การเรียนรู้ของเครื่อง, ความปลอดภัยของข้อมูล, microsoft, react

เมื่อเปรียบเทียบการให้คะแนนเหล่านี้ เราสามารถให้ความสนใจ ตัวอย่างเช่น การเดินขบวนของ Python ที่ได้รับชัยชนะและการสูญพันธุ์ของ php หรือ "พระอาทิตย์ตกดิน" ของหัวข้อเริ่มต้นและการเพิ่มขึ้นของการเรียนรู้ของเครื่อง

ไม่ใช่แท็กทั้งหมดบนHabréที่มีสีเฉพาะเรื่องที่ชัดเจน ตัวอย่างเช่น ต่อไปนี้คือแท็กโหลที่พบเพียงครั้งเดียวแต่ดูตลกสำหรับฉัน ดังนั้น: "ความคิดคือแรงผลักดันของความก้าวหน้า", "บูตจากอิมเมจฟล็อปปี้ดิสก์", "รัฐไอโอวา", "ละคร", "superalesh", "เครื่องจักรไอน้ำ", "สิ่งที่ต้องทำในวันเสาร์", "ฉันมี สุนัขจิ้งจอกในเครื่องบดเนื้อ", "กลายเป็นเหมือนเคย", "เราคิดแท็กตลกไม่ออก" ในการกำหนดหัวข้อของบทความดังกล่าว แท็กไม่เพียงพอ - คุณจะต้องดำเนินการสร้างแบบจำลองใจความในข้อความของบทความ

การวิเคราะห์เนื้อหาของบทความโดยละเอียดเพิ่มเติมจะอยู่ในโพสต์ถัดไป ก่อนอื่น ฉันจะสร้างแบบจำลองที่คาดการณ์จำนวนการดูหน้าเว็บสำหรับบทความตามเนื้อหา ประการที่สอง ฉันต้องการสอนโครงข่ายประสาทเทียมในการสร้างข้อความในรูปแบบเดียวกับผู้เขียน Habr ดังนั้นสมัครสมาชิก🙂

PS และนี่คือเสียงบี๊บ ชุดข้อมูล.

ที่มา: will.com

เพิ่มความคิดเห็น