Come ho analizzato Habr, parte 1: tendenze

Quando ho finito di mangiare l'insalata di Olivier, non avevo più niente da fare, così ho deciso di scaricare sul mio computer tutti gli articoli di Habrahabra (e piattaforme correlate) e di esplorarli.

Ne sono venuti fuori diversi argomenti interessanti. Il primo di questi è lo sviluppo del formato e della tematica degli articoli nei 12 anni di esistenza del sito. Ad esempio, la dinamica di alcuni temi è piuttosto significativa. La continuazione è sotto.

Come ho analizzato Habr, parte 1: tendenze

Il processo di parsing

Per capire come si è sviluppato Habr, dovevo esaminare tutti i suoi articoli ed estrarre da essi le informazioni meta (ad esempio, le date). L'ispezione è stata facile, perché i link a tutti gli articoli hanno il formato "habrahabr.ru/post/337722/", e i numeri sono assegnati rigorosamente in ordine. Sapendo che l'ultimo post ha un numero poco inferiore a 350.000, ho semplicemente eseguito un ciclo su tutti i possibili 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))

La funzione download_document cerca di caricare la pagina con l'ID corrispondente e tenta di estrarre dalle strutture HTML le informazioni sostanziali.

import requests
from bs4 import BeautifulSoup

def download_document(pid):
    """ Scarica e processa un documento di Habr e i suoi commenti """
    # download del documento
    r = requests.get('https://habrahabr.ru/post/' + str(pid) + '/')
    # parsing del documento
    soup = BeautifulSoup(r.text, 'html5lib') # invece di html.parser
    doc = {}
    doc['id'] = pid
    if not soup.find("span", {"class": "post__title-text"}):
        # questo accade se l'articolo non esisteva 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 alcuni nuovi aspetti.

In primo luogo, si dice che non ha senso creare più processi del numero di core nel processore. Ma nel mio caso è emerso che la risorsa limitante non è il processore, ma la rete, e 100 processi operano più velocemente di 4 o, diciamo, 20.

In secondo luogo, in alcuni post ho trovato combinazioni di caratteri speciali, ad esempio, eufemismi tipo "%&#@". Si è scoperto che html.parser, che ho utilizzato all'inizio, reagisce a quella combinazione &# in modo problematico, considerandola l'inizio di un'entità HTML. Stavo per fare magia nera, ma nel forum mi hanno suggerito che era possibile semplicemente cambiare il parser.

In terzo luogo, sono riuscito a scaricare tutte le pubblicazioni tranne tre. I documenti con i numeri 65927, 162075 e 275987 sono stati immediatamente rimossi dal mio antivirus. Questi articoli riguardano rispettivamente una catena di script JavaScript che carica un pdf malevolo, un ransomware SMS sotto forma di insieme di plugin per browser, e il sito CrashSafari.com, che fa riavviare gli iPhone. Un altro articolo è stato scoperto dall'antivirus in seguito, durante la scansione del sistema: il post 338586 riguardava script sul sito di un negozio di animali che utilizzano il processore dell'utente per il mining di criptovalute. Pertanto, si può considerare il lavoro dell'antivirus piuttosto adeguato.

"Gli articoli "vivi" sono risultati essere solo la metà del massimo potenziale - 166307 pezzi. Per gli altri, Habr offre opzioni come "pagina scaduta, rimossa o non esistita affatto". Beh, succede.

Dopo il download degli articoli, è seguita una fase di lavoro tecnico: ad esempio, le date di pubblicazione dovevano essere convertite dal formato "21 dicembre 2006 alle 10:47" in uno standard datetime, e "12,8k" visualizzazioni in 12800. A questo punto sono emersi altri piccoli inconvenienti. Il più divertente è stato legato al conteggio dei voti e ai tipi di dati: in alcuni post più vecchi si è verificato un overflow dell'int, e hanno ricevuto 65535 voti.

Come ho analizzato Habr, parte 1: tendenze

Di conseguenza, i testi degli articoli (senza immagini) hanno occupato 1,5 gigabyte, i commenti con le meta-informazioni altri 3, e circa un centinaio di megabyte sono stati dedicati alla meta-informazione sugli articoli. Si può mantenere tutto questo interamente in memoria RAM, il che per me è stata una piacevole sorpresa.

Ho iniziato ad analizzare gli articoli non dai testi stessi, ma dalle meta-informazioni: date, tag, hub, visualizzazioni e "mi piace". Si è rivelato che anche queste possono raccontare molto.

Trend di sviluppo di Habrhabr

Gli articoli sul sito vengono pubblicati dal 2006; in modo più intenso tra il 2008 e il 2016.

Come ho analizzato Habr, parte 1: tendenze

Non è così semplice valutare quanto attivamente questi articoli siano stati letti nel tempo. I testi del 2012 e successivi sono stati più attivamente commentati e votati, ma i testi più recenti hanno più visualizzazioni e aggiunte ai segnalibri. Solo una volta queste metriche hanno mostrato un comportamento simile (sono diminuite della metà), nel 2015. Probabilmente, in una situazione di crisi economica e politica, l'attenzione dei lettori è 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. I commenti sono stati 6 milioni, di cui però 240.000 sono stati bannati ("un'astronave è atterrata e ha pubblicato questa scritta qui"). Una delle caratteristiche utili dei commenti è che è indicato il tempo. Studiano l'orario dei commenti, si può capire approssimativamente anche quando in generale si leggono gli articoli.

È emerso che la maggior parte degli articoli viene scritta e commentata da qualche parte tra le 10 e le 20 ore, ovvero durante una tipica giornata lavorativa a Mosca. Questo può significare che Habr viene letto per motivi professionali e che è un buon modo per procrastinare al lavoro. A proposito, questa distribuzione del tempo è stabile fin dalla fondazione di Habr fino ad oggi.

Come ho analizzato Habr, parte 1: tendenze

Tuttavia, il principale vantaggio del timestamp del commento non è l'orario della giornata, ma il periodo di "vita attiva" dell'articolo. Ho calcolato come si distribuisce il tempo dalla pubblicazione dell'articolo al suo commento. È emerso che attualmente il commento medio (linea verde) arriva dopo circa 20 ore, ovvero nel primo giorno dopo la pubblicazione vengono lasciati in media poco più della metà di tutti i commenti per l'articolo. E dopo due giorni, vengono lasciati il 75% di tutti i commenti. Prima si leggeva ancora più velocemente — 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 da quando esiste Habr è quasi raddoppiato!

Come ho analizzato Habr, parte 1: tendenze

Un feedback più semplice rispetto ai commenti sono i voti. A differenza di molte altre risorse, su Habr puoi dare non solo voti positivi, ma anche negativi. Tuttavia, i lettori non usano così spesso quest'ultima possibilità: l'attuale quota di dislike è di circa il 15% di tutti i voti espressi. Prima era di più, ma col tempo i lettori sono diventati più gentili.

Come ho analizzato Habr, parte 1: tendenze

I testi stessi sono cambiati nel tempo. Ad esempio, la lunghezza tipica dei testi continua a crescere costantemente sin dal lancio del sito, nonostante le crisi. Negli ultimi dieci anni, i testi sono diventati quasi dieci volte più lunghi!

Come ho analizzato Habr, parte 1: tendenze

Anche lo stile dei testi (in prima approssimazione) è cambiato. Nei primi anni di esistenza di Habr, ad esempio, è aumentata la quota di codice e numeri nei testi:

Come ho analizzato Habr, parte 1: tendenze

Dopo aver analizzato la dinamica generale del sito, ho deciso di misurare come è cambiata la popolarità delle varie tematiche. Le tematiche possono essere estratte automaticamente dai testi, ma per iniziare si può utilizzare tranquillamente i tag già assegnati dagli autori di ogni articolo. Ho tracciato quattro tendenze tipiche nel grafico. L'argomento "Google" inizialmente dominava (forse principalmente a causa dell'ottimizzazione SEO), ma ha perso peso ogni anno. Javascript era un argomento popolare e continua a esserlo gradualmente, mentre il machine learning ha iniziato a guadagnare rapidamente popolarità solo negli ultimi anni. Linux, invece, rimane costantemente attuale per tutto il decennio.

Come ho analizzato Habr, parte 1: tendenze

Naturalmente, mi sono chiesto quali argomenti attirino maggiormente l'attenzione dei lettori. Ho calcolato il numero mediano di visualizzazioni, voti e commenti per ciascun tema. Ecco i risultati:

  • Le tematiche più viste: arduino, web design, web development, digest, link, css, html, html5, nginx, algoritmi.
  • Le tematiche più "apprezzate": vkontakte, umorismo, jquery, opera, c, html, web development, html5, css, web design.
  • Le tematiche più discusse: opera, skype, freelance, vkontakte, ubuntu, lavoro, nokia, nginx, arduino, firefox.

A proposito, dato che sto confrontando le tematiche, possiamo realizzare un loro ranking per frequenza (e confrontare i risultati con un articolo simile del 2013).

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

Confrontando questi ranking, possiamo notare, ad esempio, il trionfo di Python e l'estinzione di php, oppure il "declino" della tematica startup e l'ascesa del machine learning.

Non tutti i tag su Habr hanno un’ovvia connotazione tematica. Ecco, per esempio, una decina di tag che sono comparsi solo una volta, ma che mi sono sembrati divertenti. Dunque: "idea motore del progresso", "caricamento da immagine floppy disk", "stato dell'Iowa", "drammaturgia", "superalessa", "motore a vapore", "cosa fare il sabato", "ho una volpe nel tritacarne", "e alla fine è uscito come sempre", "non sono riuscito a inventare tag divertenti". Per definire la tematica di tali articoli, i tag non sono sufficienti: sarà necessario effettuare una modellazione tematica sui testi degli articoli.

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

P.S. Ecco il censurato dataset.

Fonte: habr.com

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