Come ho analizzato Habr, parte 1: tendenze

Quando ho finito l'insalata russa, non avevo niente da fare e ho deciso di scaricare sul mio computer tutti gli articoli di Habr (e piattaforme correlate) per esplorarli.

Ne sono emersi alcuni spunti interessanti. Il primo di questi è l'evoluzione del formato e dei temi degli articoli nei 12 anni di vita del sito. Ad esempio, la dinamica di alcuni argomenti è piuttosto rappresentativa. Il seguito è sotto.

Come ho analizzato Habr, parte 1: tendenze

Il processo di parsing

Per capire come si è sviluppato Habr, è stato necessario esaminare tutti i suoi articoli ed estrarre le informazioni meta (come le date). L'analisi è stata semplice, perché i link a tutti gli articoli hanno il formato "habrahabr.ru/post/337722/", con numeri assegnati in modo rigorosamente sequenziale. Sapendo che l'ultimo post aveva un numero poco inferiore a 350.000, ho semplicemente iterato su tutti gli id dei documenti (codice in Python):

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

Funzione download_document cerca di caricare la pagina con l'id corrispondente e tenta di estrarre informazioni significative dalla struttura HTML.

import requests
from bs4 import BeautifulSoup

def download_document(pid):
    """ Scarica e elabora un documento Habr e i suoi commenti """
    # esporta il documento
    r = requests.get('https://habrahabr.ru/post/' + str(pid) + '/'))
    # analizza il documento
    soup = BeautifulSoup(r.text, 'html5lib') # invece di html.parser
    doc = {}
    doc['id'] = pid
    if not soup.find("span", {"class": "post__title-text"}):
        # questo può succedere se l'articolo non esiste o è stato rimosso
        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
        # crea altri campi: hub, tag, visualizzazioni, commenti, voti, ecc.
        # ...
    # salvataggio del risultato in un file separato
    fname = r'files/' + str(pid) + '.pkl'
    with open(fname, 'wb') as f:
        pickle.dump(doc, f)

Durante il processo di parsing ho scoperto alcune nuove informazioni.

In primo luogo, si dice che creare più processi dei core nella CPU sia inutile. Ma nel mio caso, si è rivelato che la risorsa limitante non era la CPU, ma la rete, e 100 processi funzionano più veloce di 4 o, diciamo, 20.

In secondo luogo, in alcuni post ho trovato combinazioni di caratteri speciali — ad esempio, eufemismi come "%&#@". Si è scoperto che html.parser, che ho usato inizialmente, reagisce alla combinazione &# Doloroso, considerandola l'inizio dell'entità html. Stavo per mettere in atto della magia nera, ma sul forum mi hanno suggerito che è possibile semplicemente cambiare il parser.

In terzo luogo, sono riuscito a scaricare tutte le pubblicazioni, tranne tre. I documenti numeri 65927, 162075 e 275987 sono stati immediatamente rimossi dal mio antivirus. Questi articoli riguardano rispettivamente una catena di JavaScript che carica un pdf malevolo, un ransomware SMS sotto forma di set di plugin per browser, e il sito CrashSafari.com, che riavvia gli iPhone. Un altro articolo è stato scoperto più tardi dall'antivirus durante la scansione del sistema: il post 338586 riguarda script su un sito di animali domestici che utilizzano la CPU dell'utente per il mining di criptovalute. Quindi si può considerare il lavoro dell'antivirus piuttosto adeguato.

Le "vivi" articoli erano solo la metà del massimo potenziale — 166307 pezzi. Per gli altri, Habr dà opzioni come "pagina obsoleta, è stata rimossa o non esisteva affatto". Beh, può succedere.

Dopo il download degli articoli, è seguita una lavorazione tecnica: ad esempio, le date di pubblicazione dovevano essere convertite dal formato "’21 dicembre 2006 alle 10:47" in standard datetime, e "12,8k" visualizzazioni — in 12800. A questo punto sono emersi alcuni imprevisti. Il più divertente riguarda il conteggio dei voti e i tipi di dati: in alcuni vecchi post si è verificato un overflow dell'int, e hanno ricevuto 65535 voti ciascuno.

Come ho analizzato Habr, parte 1: tendenze

Di conseguenza, i testi degli articoli (senza immagini) hanno occupato 1,5 gigabyte, i commenti con metainformazioni ne hanno richiesti altri 3, e circa un centinaio di megabyte — metainformazioni sugli articoli. Tutto ciò può essere mantenuto completamente nella memoria attiva, il che è stata una piacevole sorpresa per me.

Ho iniziato ad analizzare gli articoli non dai testi stessi, ma dalle metainformazioni: date, tag, hub, visualizzazioni e "mi piace". Ho scoperto che anche queste possono rivelare molto.

Tendenze nello sviluppo di Хабрахабр

Gli articoli sul sito sono pubblicati dal 2006; il periodo più intenso è stato dal 2008 al 2016.

Come ho analizzato Habr, parte 1: tendenze

Non è così semplice valutare quanto attivamente siano state lette queste articoli in momenti diversi. I testi del 2012 e più recenti hanno ricevuto più commenti e valutazioni, ma i testi più nuovi hanno avuto più visualizzazioni e aggiunte ai segnalibri. Queste metriche hanno mostrato un comportamento simile solo una volta, nel 2015, quando entrambe sono diminuite drasticamente. Potrebbe essere che, in un contesto di crisi economica e politica, l'attenzione dei lettori sia passata dai blog IT a questioni più urgenti.

Come ho analizzato Habr, parte 1: tendenze

Oltre agli articoli stessi, ho scaricato anche i commenti ad essi. Sono stati raccolti 6 milioni di commenti, di cui 240.000 sono stati bannati ("un ufo è atterrato e ha pubblicato questo scritto qui"). Una caratteristica utile dei commenti è che è indicato il tempo in cui sono stati scritti. Analizzando il momento dei commenti, si può avere un'idea di quando vengono letti gli articoli nel complesso.

È emerso che la maggior parte degli articoli viene scritta e commentata tra le 10 e le 20 ore, quindi durante una tipica giornata lavorativa a Mosca. Questo può significare che Habr viene letto per scopi professionali e che è un buon modo per procrastinare al lavoro. A proposito, questa distribuzione nel corso della giornata è rimasta costante sin dalla fondazione di Habr fino ad oggi.

Come ho analizzato Habr, parte 1: tendenze

Tuttavia, il principale beneficio del timestamp del commento non è l'ora del giorno, ma il periodo di "vita attiva" dell'articolo. Ho calcolato come è distribuito il tempo dalla pubblicazione dell'articolo fino al suo commento. Risulta che attualmente il commento mediano (linea verde) arriva circa dopo 20 ore, ovvero nei primi giorni dalla pubblicazione vengono lasciati in media poco più della metà di tutti i commenti all'articolo. E entro due giorni vengono lasciati il 75% di tutti i commenti. In passato, gli articoli venivano letti ancora più velocemente: ad esempio, nel 2010 metà dei commenti arrivava già nelle prime 6 ore.

Come ho analizzato Habr, parte 1: tendenze

Per me è stata una sorpresa scoprire che i commenti si sono allungati: il numero medio di caratteri in un commento è quasi raddoppiato nel tempo di esistenza di Habr!

Come ho analizzato Habr, parte 1: tendenze

Un feedback più semplice dei commenti sono i voti. A differenza di molti altri portali, su Habr è possibile non solo dare voti positivi, ma anche negativi. Tuttavia, questa ultima possibilità non viene utilizzata così frequentemente: l'attuale quota di dislike è di circa il 15% di tutti i voti espressi. In passato era più alta, ma col tempo i lettori sono diventati più benevoli.

Come ho analizzato Habr, parte 1: tendenze

I testi stessi sono cambiati nel tempo. Ad esempio, la lunghezza tipica dei testi continua a crescere in modo costante sin dal lancio del sito, nonostante le crisi. Nel corso di un decennio, i testi sono diventati quasi dieci volte più lunghi!

Come ho analizzato Habr, parte 1: tendenze

Anche lo stile dei testi (a grandi linee) è cambiato. Negli primi anni di vita di Habr, ad esempio, è aumentata la proporzione di codice e numeri nei testi:

Come ho analizzato Habr, parte 1: tendenze

Analizzando la dinamica generale del sito, ho deciso di misurare come è cambiata la popolarità di vari argomenti. Gli argomenti possono essere estratti automaticamente dai testi, ma per iniziare si può sfruttare i tag già esistenti, assegnati dagli autori di ogni articolo. Ho tracciato quattro tendenze tipiche nel grafico. L'argomento 'Google' dominava inizialmente (probabilmente in gran parte a causa dell'ottimizzazione SEO), ma ha perso rilevanza di anno in anno. Javascript era un argomento popolare e continua a crescere gradualmente, mentre l'apprendimento automatico ha iniziato a guadagnare popolarità solo negli ultimi anni. Linux, invece, rimane costantemente rilevante per tutto il decennio.

Come ho analizzato Habr, parte 1: tendenze

Naturalmente, sono curioso di sapere quali argomenti attirano più attenzione da parte dei lettori. Ho calcolato la mediana delle visualizzazioni, dei voti e dei commenti per ciascun argomento. Ecco i risultati:

  • Gli argomenti più visti: arduino, web design, sviluppo web, rassegna, link, css, html, html5, nginx, algoritmi.
  • Gli argomenti più "likabili": vk, umorismo, jquery, opera, c, html, sviluppo web, html5, css, web design.
  • Gli argomenti più discussi: opera, skype, freelance, vk, ubuntu, lavoro, nokia, nginx, arduino, firefox.

A proposito, dato che sto confrontando gli argomenti, posso fare una classifica della loro frequenza (e confrontare i risultati con un articolo simile del 2013).

  • Negli anni della sua esistenza, i tag più popolari su Habr (in ordine decrescente) sono stati google, android, javascript, microsoft, linux, php, apple, java, python, programmazione, startup, sviluppo, ios, startup, social media.
  • Nel 2017, i più popolari erano javascript, python, java, android, sviluppo, linux, c++, programmazione, php, c#, ios, machine learning, sicurezza informatica, microsoft, react.

Confrontando queste classifiche, si può notare, ad esempio, il trionfo di Python e l'estinzione di PHP, oppure il "declino" dei temi startup e l'ascesa dell'apprendimento automatico.

Non tutti i tag su Habr hanno una coloritura tematica così evidente. Ecco, ad esempio, una dozzina di tag che sono apparsi solo una volta, ma mi sono sembrati divertenti. Quindi: "l'idea è il motore del progresso", "caricamento dell'immagine da dischetto", "stato dell'Iowa", "drammaturgia", "superalesha", "motore a vapore", "cosa fare di sabato", "ho una volpe nel tritacarne", "è venuto come sempre", "non sono riuscito a inventare tag divertenti". Per determinare la tematica di tali articoli, i tag non sono sufficienti: sarà necessario effettuare una modellazione tematica sui testi degli articoli.

Un'analisi più dettagliata dei contenuti degli articoli sarà nel prossimo post. Innanzitutto, ho intenzione di costruire un modello che prevede il numero di visualizzazioni di un articolo in base al suo contenuto. In secondo luogo, voglio insegnare a una rete neurale a generare testi nello stesso stile dei autori di Habr. Quindi, iscrivetevi 🙂

P.S. Ecco il dataset mascherato dataset.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster