Come ho analizzato Habr, parte 1: tendenze

Quando l'Olivier di Capodanno è finito, non avevo niente da fare e ho deciso di scaricare tutti gli articoli da Habrahabr (e relative piattaforme) sul mio computer ed esplorare.

C'erano diverse storie interessanti. Il primo è lo sviluppo del formato e degli argomenti degli articoli nel corso dei 12 anni di esistenza del sito. Ad esempio, la dinamica di alcuni argomenti è abbastanza indicativa. Continuazione - sotto il taglio.

Come ho analizzato Habr, parte 1: tendenze

Processo di analisi

Per capire come si è sviluppato Habr, è stato necessario esaminare tutti i suoi articoli ed estrarne meta-informazioni (ad esempio date). Il bypass è stato facile, perché i collegamenti a tutti gli articoli sembrano "habrahabr.ru/post/337722/" e i numeri sono indicati rigorosamente in ordine. Sapendo che l'ultimo post ha un numero leggermente inferiore a 350 mila, ho appena passato in rassegna tutti i possibili ID documento (codice 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 prova a caricare la pagina con l'id corrispondente e cerca di estrarre informazioni significative dalla struttura 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)

Nel processo di analisi, ho scoperto diverse cose nuove.

Innanzitutto, dicono che creare più processi di quanti siano i core nel processore è inutile. Ma nel mio caso, si è scoperto che la risorsa limitante non è il processore, ma la rete, e 100 processi funzionano più velocemente di 4 o, diciamo, 20.

In secondo luogo, in alcuni post c'erano combinazioni di caratteri speciali, ad esempio eufemismi come "%&#@". È venuto fuori che html.parser, che ho usato per primo, reagisce alla combinazione &# dolorosamente, considerandolo l'inizio dell'entità html. Stavo già per fare magia nera, ma il forum ha suggerito che puoi semplicemente cambiare il parser.

In terzo luogo, sono riuscito a scaricare tutte le pubblicazioni, tranne tre. I documenti numerati 65927, 162075 e 275987 sono stati immediatamente eliminati dal mio antivirus. Questi sono articoli, rispettivamente, su una catena javascript che scarica un pdf dannoso, ransomware SMS sotto forma di una serie di plug-in del browser e il sito CrashSafari.com che invia iPhone a un riavvio. Antivirus ha scoperto un altro articolo più tardi, durante una scansione del sistema: post 338586 sugli script sul sito Web del negozio di animali che utilizzano il processore dell'utente per estrarre la criptovaluta. Quindi possiamo considerare il lavoro dell'antivirus abbastanza adeguato.

Gli articoli "live" si sono rivelati solo la metà del potenziale massimo: 166307 pezzi. Per il resto, Habr offre opzioni "la pagina è obsoleta, è stata cancellata o non esisteva affatto". Beh, può succedere di tutto.

Il caricamento degli articoli è stato seguito da un lavoro tecnico: ad esempio, le date di pubblicazione dovevano essere convertite dal formato "'21 dicembre 2006 alle 10:47" allo standard datetimee "12,8k" visualizzazioni - nel 12800. In questa fase, sono emersi alcuni altri incidenti. Il più divertente ha a che fare con i conteggi dei voti e i tipi di dati: alcuni vecchi post avevano un int overflow e hanno ricevuto 65535 voti ciascuno.

Come ho analizzato Habr, parte 1: tendenze

Di conseguenza, i testi degli articoli (senza immagini) mi hanno portato 1.5 gigabyte, commenti con meta-informazioni - altri 3 e circa un centinaio di megabyte - meta-informazioni sugli articoli. Questo può essere completamente conservato nella RAM, il che è stata una piacevole sorpresa per me.

Ho iniziato l'analisi degli articoli non dai testi stessi, ma dalle meta-informazioni: date, tag, hub, visualizzazioni e Mi piace. Si è scoperto che poteva dire molto.

Tendenze di sviluppo di Habrahabr

Gli articoli sul sito sono stati pubblicati dal 2006; più intensamente - nel 2008-2016.

Come ho analizzato Habr, parte 1: tendenze

Quanto attivamente questi articoli sono stati letti in momenti diversi non è così facile da valutare. I testi del 2012 e più recenti hanno ricevuto più commenti e valutazioni, ma i testi più recenti hanno più visualizzazioni e segnalibri. Queste metriche si sono comportate allo stesso modo (dimezzate) solo una volta, nel 2015. Forse, in una situazione di crisi economica e politica, l'attenzione dei lettori si è spostata dai blog informatici a questioni più dolenti.

Come ho analizzato Habr, parte 1: tendenze

Oltre agli articoli stessi, ho scaricato altri commenti. Ci sono stati 6 milioni di commenti, tuttavia, 240mila di loro sono stati vietati ("un UFO è arrivato e ha pubblicato questa iscrizione qui"). Una proprietà utile dei commenti è che hanno un timestamp. Studiando l'ora dei commenti, puoi capire approssimativamente quando gli articoli vengono letti.

Si è scoperto che la maggior parte degli articoli sono sia scritti che commentati da qualche parte dalle 10:20 alle XNUMX:XNUMX, ad es. in una tipica giornata lavorativa di Mosca. Ciò può significare che Habr viene letto per scopi professionali e che questo è un buon modo per procrastinare sul lavoro. A proposito, questa distribuzione dell'ora del giorno è stabile dalla fondazione stessa di Habr fino ai giorni nostri.

Come ho analizzato Habr, parte 1: tendenze

Tuttavia, il vantaggio principale di un timestamp di commento non è l'ora del giorno, ma la durata della "vita attiva" dell'articolo. Ho calcolato come viene distribuito il tempo dalla pubblicazione dell'articolo al suo commento. Si è scoperto che ora il commento mediano (linea verde) arriva tra circa 20 ore, ad es. il primo giorno dopo la pubblicazione, in media, viene lasciata poco più della metà di tutti i commenti all'articolo. E in due giorni lasciano il 75% di tutti i commenti. Allo stesso tempo, gli articoli precedenti sono stati letti ancora più velocemente: ad esempio, nel 2010, la metà dei commenti è arrivata nelle prime 6 ore.

Come ho analizzato Habr, parte 1: tendenze

È stata una sorpresa per me che i commenti si siano allungati: il numero medio di caratteri in un commento è quasi raddoppiato nel corso della vita di Habr!

Come ho analizzato Habr, parte 1: tendenze

I feedback più facili dei commenti sono i voti. A differenza di molte altre risorse, su Habré puoi mettere non solo vantaggi, ma anche svantaggi. Tuttavia, i lettori non sfruttano così spesso l'ultima opportunità: l'attuale quota di antipatie è di circa il 15% di tutti i voti espressi. Prima ce n'erano 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 del testo non smette di crescere costantemente dal lancio stesso del sito, nonostante le crisi. In un decennio, 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. Durante i primi anni di esistenza di Habr, ad esempio, la quota di codici e numeri nei testi è aumentata:

Come ho analizzato Habr, parte 1: tendenze

Dopo aver compreso le dinamiche generali del sito, ho deciso di misurare come è cambiata la popolarità di vari argomenti. Gli argomenti possono essere selezionati automaticamente dai testi, ma per cominciare non puoi reinventare la ruota, ma utilizzare tag già pronti apposti dagli autori di ciascun articolo. Ho disegnato quattro tendenze tipiche sul grafico. Il tema "Google" inizialmente dominava (forse principalmente a causa della SEO), ma negli anni ha perso peso. Javascript è stato un argomento popolare e continua a crescere lentamente, ma l'apprendimento automatico ha iniziato a guadagnare rapidamente popolarità solo negli ultimi anni. Linux, d'altra parte, è rimasto ugualmente rilevante per tutto il decennio.

Come ho analizzato Habr, parte 1: tendenze

Naturalmente, mi sono interessato a quali argomenti attirano più attività dei lettori. Ho calcolato il numero medio di visualizzazioni, voti e commenti in ogni argomento. Ecco cosa è successo:

  • Argomenti più visti: arduino, web design, sviluppo web, digest, link, css, html, html5, nginx, algoritmi.
  • Gli argomenti più "apprezzati": vkontakte, umorismo, jquery, opera, c, html, sviluppo web, html5, css, web design.
  • Gli argomenti più discussi: opera, skype, freelance, vkontakte, ubuntu, work, nokia, nginx, arduino, firefox.

A proposito, dato che sto confrontando gli argomenti, puoi classificarli in base alla frequenza (e confrontare i risultati con articolo simile del 2013).

  • Per tutti gli anni di esistenza di Habr, i tag più popolari (in ordine decrescente) sono google, android, javascript, microsoft, linux, php, apple, java, python, programming, startups, development, ios, startup, social network
  • Nel 2017, i più popolari sono stati javascript, python, java, android, development, linux, c++, programming, php, c#, ios, machine learning, information security, microsoft, react

Confrontando queste valutazioni, si può prestare attenzione, ad esempio, alla marcia vittoriosa di Python e all'estinzione di php, o al "tramonto" degli argomenti di avvio e all'ascesa dell'apprendimento automatico.

Non tutti i tag su Habré hanno una colorazione tematica così evidente. Ad esempio, ecco una dozzina di tag che si sono incontrati solo una volta, ma mi sono sembrati divertenti. Quindi: "l'idea è la forza trainante del progresso", "avviare da un'immagine di floppy disk", "Iowa State", "drama", "superalesh", "steam engine", "cose ​​da fare sabato", "ho una volpe in un tritacarne", "si è scoperto come sempre", "non siamo riusciti a trovare tag divertenti". Per determinare l'oggetto di tali articoli, i tag non sono sufficienti: dovrai eseguire una modellazione tematica sui testi degli articoli.

Un'analisi più dettagliata del contenuto degli articoli sarà nel prossimo post. Per prima cosa, costruirò un modello che prevede il numero di visualizzazioni di pagina per un 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 iscriviti 🙂

PS Ed ecco il bip insieme di dati.

Fonte: habr.com

Aggiungi un commento