Πώς ανέλυσα το Habr, μέρος 1: τάσεις

Όταν τελείωσε η Πρωτοχρονιά Olivier, δεν είχα τίποτα να κάνω και αποφάσισα να κατεβάσω όλα τα άρθρα από το Habrahabr (και τις σχετικές πλατφόρμες) στον υπολογιστή μου και να εξερευνήσω.

Υπήρχαν πολλές ενδιαφέρουσες ιστορίες. Το πρώτο από αυτά είναι η ανάπτυξη της μορφής και των θεμάτων των άρθρων στα 12 χρόνια ύπαρξης του ιστότοπου. Για παράδειγμα, η δυναμική ορισμένων θεμάτων είναι αρκετά ενδεικτική. Συνέχεια - κάτω από το κόψιμο.

Πώς ανέλυσα το Habr, μέρος 1: τάσεις

Διαδικασία ανάλυσης

Για να καταλάβουμε πώς αναπτύχθηκε ο Habr, ήταν απαραίτητο να διαβάσουμε όλα τα άρθρα του και να εξαγάγουμε μετα-πληροφορίες από αυτά (για παράδειγμα, ημερομηνίες). Η παράκαμψη ήταν εύκολη, επειδή οι σύνδεσμοι προς όλα τα άρθρα μοιάζουν με "habrahabr.ru/post/337722/", και οι αριθμοί δίνονται αυστηρά με τη σειρά. Γνωρίζοντας ότι η τελευταία ανάρτηση έχει έναν αριθμό ελαφρώς μικρότερο από 350 χιλιάδες, μόλις πέρασα όλα τα πιθανά αναγνωριστικά εγγράφου σε έναν βρόχο (κωδικός Python):

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 διαγράφηκαν αμέσως από το πρόγραμμα προστασίας από ιούς. Αυτά είναι άρθρα, αντίστοιχα, σχετικά με μια αλυσίδα javascript που κατεβάζει ένα κακόβουλο pdf, ransomware SMS με τη μορφή ενός συνόλου προσθηκών προγράμματος περιήγησης και τον ιστότοπο CrashSafari.com που στέλνει τα iPhone σε επανεκκίνηση. Το Antivirus ανακάλυψε ένα άλλο άρθρο αργότερα, κατά τη διάρκεια μιας σάρωσης συστήματος: ανάρτηση 338586 σχετικά με σενάρια στον ιστότοπο του καταστήματος κατοικίδιων ζώων που χρησιμοποιούν τον επεξεργαστή του χρήστη για την εξόρυξη κρυπτονομισμάτων. Επομένως, μπορούμε να θεωρήσουμε ότι η εργασία του antivirus είναι αρκετά επαρκής.

Τα "ζωντανά" άρθρα αποδείχθηκαν μόνο τα μισά από το δυνητικό μέγιστο - 166307 κομμάτια. Για τα υπόλοιπα, ο Habr δίνει επιλογές "η σελίδα είναι ξεπερασμένη, έχει διαγραφεί ή δεν υπήρχε καθόλου". Λοιπόν, όλα μπορούν να συμβούν.

Η μεταφόρτωση των άρθρων ακολουθήθηκε από τεχνική εργασία: για παράδειγμα, οι ημερομηνίες δημοσίευσης έπρεπε να μετατραπούν από τη μορφή "'21 Δεκεμβρίου 2006 στις 10:47 π.μ." στην τυπική datetime, και "12,8k" προβολές - το 12800. Σε αυτό το στάδιο, μερικά ακόμη περιστατικά σημειώθηκαν. Το πιο αστείο έχει να κάνει με την καταμέτρηση ψήφων και τους τύπους δεδομένων: ορισμένες παλιές αναρτήσεις είχαν υπερχείλιση int και έλαβαν 65535 ψήφους η καθεμία.

Πώς ανέλυσα το Habr, μέρος 1: τάσεις

Ως αποτέλεσμα, τα κείμενα άρθρων (χωρίς εικόνες) μου πήραν 1.5 gigabyte, σχόλια με μετα-πληροφορίες - άλλα 3 και περίπου εκατό megabyte - μετα-πληροφορίες για άρθρα. Αυτό μπορεί να διατηρηθεί πλήρως στη μνήμη RAM, κάτι που ήταν μια ευχάριστη έκπληξη για μένα.

Ξεκίνησα την ανάλυση των άρθρων όχι από τα ίδια τα κείμενα, αλλά από μεταπληροφορίες: ημερομηνίες, ετικέτες, κόμβους, προβολές και likes. Αποδείχθηκε ότι μπορούσε να πει πολλά.

Αναπτυξιακές τάσεις Habrahabr

Άρθρα στον ιστότοπο δημοσιεύονται από το 2006. πιο εντατικά - το 2008-2016.

Πώς ανέλυσα το Habr, μέρος 1: τάσεις

Το πόσο ενεργά διαβάστηκαν αυτά τα άρθρα σε διαφορετικές χρονικές στιγμές δεν είναι τόσο εύκολο να αξιολογηθεί. Τα κείμενα από το 2012 και νεότερα έλαβαν περισσότερα σχόλια και βαθμολογίες, αλλά τα νεότερα κείμενα έχουν περισσότερες προβολές και σελιδοδείκτες. Αυτές οι μετρήσεις συμπεριφέρθηκαν με τον ίδιο τρόπο (μειώθηκαν στο μισό) μόνο μία φορά, το 2015. Ίσως, σε μια κατάσταση οικονομικής και πολιτικής κρίσης, η προσοχή των αναγνωστών έχει μετατοπιστεί από τα ιστολόγια πληροφορικής σε πιο επώδυνα θέματα.

Πώς ανέλυσα το Habr, μέρος 1: τάσεις

Εκτός από τα ίδια τα άρθρα, κατέβασα περισσότερα σχόλια σε αυτά. Υπήρχαν 6 εκατομμύρια σχόλια, ωστόσο, 240 χιλιάδες από αυτά απαγορεύτηκαν («ένα UFO πέταξε και δημοσίευσε αυτήν την επιγραφή εδώ»). Μια χρήσιμη ιδιότητα των σχολίων είναι ότι έχουν χρονική σήμανση. Μελετώντας την ώρα των σχολίων, μπορείτε να καταλάβετε κατά προσέγγιση πότε διαβάζονται καθόλου άρθρα.

Αποδείχθηκε ότι τα περισσότερα άρθρα γράφονται και σχολιάζονται κάπου από τις 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, opera, c, html, ανάπτυξη ιστού, html5, css, σχεδιασμός ιστοσελίδων.
  • Τα πιο συζητημένα θέματα: όπερα, skype, ελεύθερος επαγγελματίας, vkontakte, ubuntu, εργασία, nokia, nginx, arduino, firefox.

Παρεμπιπτόντως, επειδή συγκρίνω θέματα, μπορείτε να τα ταξινομήσετε κατά συχνότητα (και να συγκρίνετε τα αποτελέσματα με παρόμοιο άρθρο του 2013).

  • Για όλα τα χρόνια ύπαρξης του Habr, οι πιο δημοφιλείς ετικέτες (με φθίνουσα σειρά) είναι google, android, javascript, microsoft, linux, php, apple, java, python, προγραμματισμός, startups, ανάπτυξη, ios, startup, κοινωνικά δίκτυα
  • Το 2017, τα πιο δημοφιλή ήταν javascript, python, java, android, ανάπτυξη, linux, c++, προγραμματισμός, php, c#, ios, μηχανική εκμάθηση, ασφάλεια πληροφοριών, microsoft, react

Κατά τη σύγκριση αυτών των αξιολογήσεων, μπορεί κανείς να δώσει προσοχή, για παράδειγμα, στη νικηφόρα πορεία της Python και την εξαφάνιση της php ή στο «ηλιοβασίλεμα» των θεμάτων εκκίνησης και στην άνοδο της μηχανικής μάθησης.

Δεν έχουν όλες οι ετικέτες στο Habré έναν τόσο προφανή θεματικό χρωματισμό. Για παράδειγμα, εδώ είναι μια ντουζίνα ετικέτες που συναντήθηκαν μόνο μία φορά, αλλά μου φάνηκαν απλώς αστείες. Λοιπόν: «η ιδέα είναι η κινητήρια δύναμη της προόδου», «μπότα από εικόνα δισκέτας», «Πολιτεία της Αϊόβα», «δράμα», «superalesh», «ατμομηχανή», «πράγματα που πρέπει να κάνουμε το Σάββατο», «Έχω μια αλεπού στη μηχανή του κρέατος», «α αποδείχθηκε όπως πάντα», «δεν μπορούσαμε να βρούμε αστείες ετικέτες». Για να προσδιορίσετε το θέμα τέτοιων άρθρων, οι ετικέτες δεν αρκούν - θα πρέπει να πραγματοποιήσετε θεματική μοντελοποίηση στα κείμενα των άρθρων.

Αναλυτικότερη ανάλυση του περιεχομένου των άρθρων θα γίνει σε επόμενη ανάρτηση. Αρχικά, θα δημιουργήσω ένα μοντέλο που προβλέπει τον αριθμό των προβολών σελίδας για ένα άρθρο με βάση το περιεχόμενό του. Δεύτερον, θέλω να διδάξω στο νευρωνικό δίκτυο να δημιουργεί κείμενα στο ίδιο στυλ με τους συγγραφείς του Habr. Εγγραφείτε λοιπόν 🙂

Υ.Γ. Και εδώ είναι το ηχητικό σήμα σύνολο δεδομένων.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο