Comment j'ai analysé Habr, partie 1 : les tendances

Une fois l'Olivier du Nouvel An terminé, je n'avais rien à faire et j'ai décidé de télécharger tous les articles de Habrahabr (et des plateformes associées) sur mon ordinateur et d'explorer.

Il y avait plusieurs histoires intéressantes. Le premier d'entre eux est l'évolution du format et des thèmes des articles au cours des 12 années d'existence du site. Par exemple, la dynamique de certains sujets est assez révélatrice. Suite - sous la coupe.

Comment j'ai analysé Habr, partie 1 : les tendances

Processus d'analyse

Pour comprendre comment Habr s'est développé, il a fallu parcourir tous ses articles et en extraire des méta-informations (par exemple, des dates). Le contournement a été facile, car les liens vers tous les articles ressemblent à "habrahabr.ru/post/337722/", et les numéros sont donnés strictement dans l'ordre. Sachant que le dernier message a un nombre légèrement inférieur à 350 mille, je viens de parcourir tous les identifiants de documents possibles en boucle (code Python):

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

Fonction download_document essaie de charger la page avec l'identifiant correspondant et essaie d'extraire des informations significatives de la structure 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)

Dans le processus d'analyse, j'ai découvert plusieurs nouvelles choses.

Premièrement, ils disent que créer plus de processus qu'il n'y a de cœurs dans le processeur est inutile. Mais dans mon cas, il s'est avéré que la ressource limitante n'est pas le processeur, mais le réseau, et 100 processus fonctionnent plus vite que 4 ou, disons, 20.

Deuxièmement, dans certains messages, il y avait des combinaisons de caractères spéciaux - par exemple, des euphémismes comme "%&#@". Il s'est avéré que html.parser, que j'ai utilisé en premier, réagit à la combinaison &# douloureusement, le considérant comme le début de l'entité html. J'allais déjà faire de la magie noire, mais le forum a suggéré que vous puissiez simplement changer l'analyseur.

Troisièmement, j'ai réussi à décharger toutes les publications, sauf trois. Les documents numérotés 65927, 162075 et 275987 ont été instantanément supprimés par mon antivirus. Il s'agit respectivement d'articles sur une chaîne javascript qui télécharge un pdf malveillant, d'un rançongiciel SMS sous la forme d'un ensemble de plugins de navigateur et du site CrashSafari.com qui envoie les iPhones en redémarrage. L'antivirus a découvert un autre article plus tard, lors d'une analyse du système : le message 338586 sur les scripts du site Web de l'animalerie qui utilisent le processeur de l'utilisateur pour extraire la crypto-monnaie. On peut donc considérer que le travail de l'antivirus est tout à fait adéquat.

Les articles "en direct" se sont avérés ne représenter que la moitié du maximum potentiel - 166307 pièces. Pour le reste, Habr propose des options "la page est obsolète, a été supprimée ou n'existait pas du tout". Eh bien, tout peut arriver.

La mise en ligne des articles a été suivie d'un travail technique : par exemple, les dates de publication ont dû être converties du format "'21 décembre 2006 à 10h47" au format standard datetime, et "12,8k" vues - en 12800. À ce stade, quelques incidents supplémentaires sont sortis. Le plus drôle a à voir avec le nombre de votes et les types de données : certains anciens messages avaient un débordement int et ont reçu 65535 votes chacun.

Comment j'ai analysé Habr, partie 1 : les tendances

En conséquence, les textes des articles (sans images) m'ont pris 1.5 gigaoctets, les commentaires avec méta-informations - 3 autres, et une centaine de mégaoctets - méta-informations sur les articles. Cela peut être entièrement conservé dans la RAM, ce qui a été une agréable surprise pour moi.

J'ai commencé l'analyse des articles non pas à partir des textes eux-mêmes, mais à partir des méta-informations : dates, tags, hubs, vues et likes. Il s'est avéré qu'elle pouvait en dire beaucoup.

Tendances de développement d'Habrahabr

Les articles du site sont publiés depuis 2006 ; le plus intensivement - en 2008-2016.

Comment j'ai analysé Habr, partie 1 : les tendances

Il n'est pas si facile d'évaluer à quel point ces articles ont été lus activement à différents moments. Les textes de 2012 et plus récents ont reçu plus de commentaires et d'évaluations, mais les textes plus récents ont plus de vues et de signets. Ces mesures se sont comportées de la même manière (divisées par deux) une seule fois, en 2015. Peut-être, dans une situation de crise économique et politique, l'attention des lecteurs s'est-elle déplacée des blogs informatiques vers des questions plus douloureuses.

Comment j'ai analysé Habr, partie 1 : les tendances

En plus des articles eux-mêmes, j'ai téléchargé plus de commentaires sur eux. Il y avait 6 millions de commentaires, cependant, 240 XNUMX d'entre eux ont été interdits ("un OVNI est arrivé et a publié cette inscription ici"). Une propriété utile des commentaires est qu'ils ont un horodatage. En étudiant l'heure des commentaires, vous pouvez approximativement comprendre quand les articles sont lus.

Il s'est avéré que la plupart des articles sont à la fois écrits et commentés entre 10 h et 20 h, c'est-à-dire lors d'une journée de travail typique à Moscou. Cela peut signifier que Habr est lu à des fins professionnelles, et que c'est un bon moyen de tergiverser au travail. Soit dit en passant, cette distribution de l'heure de la journée est stable depuis la fondation même de Habr jusqu'à nos jours.

Comment j'ai analysé Habr, partie 1 : les tendances

Cependant, le principal avantage d'un horodatage de commentaire n'est pas l'heure de la journée, mais la durée de la "vie active" de l'article. J'ai calculé la répartition du temps entre la publication de l'article et son commentaire. Il s'est avéré que maintenant le commentaire médian (ligne verte) arrive dans environ 20 heures, c'est-à-dire le premier jour après la publication, en moyenne, un peu plus de la moitié de tous les commentaires sur l'article sont laissés. Et en deux jours, ils laissent 75% de tous les commentaires. Dans le même temps, les articles précédents ont été lus encore plus rapidement - par exemple, en 2010, la moitié des commentaires sont venus dans les 6 premières heures.

Comment j'ai analysé Habr, partie 1 : les tendances

J'ai été surpris de constater que les commentaires se sont allongés : le nombre moyen de caractères dans un commentaire a presque doublé au cours de la durée de vie de Habr !

Comment j'ai analysé Habr, partie 1 : les tendances

Les commentaires sont plus faciles que les commentaires sont les votes. Contrairement à de nombreuses autres ressources, sur Habré, vous pouvez mettre non seulement des avantages, mais également des inconvénients. Cependant, les lecteurs n'utilisent pas si souvent la dernière opportunité: la part actuelle des aversions est d'environ 15% de tous les votes exprimés. Il y en avait plus, mais avec le temps, les lecteurs sont devenus plus gentils.

Comment j'ai analysé Habr, partie 1 : les tendances

Les textes eux-mêmes ont changé au fil du temps. Par exemple, la longueur type du texte ne cesse de croître régulièrement dès le lancement même du site, malgré les crises. En une décennie, les textes sont devenus presque dix fois plus longs !

Comment j'ai analysé Habr, partie 1 : les tendances

Le style des textes (en première approximation) a également changé. Au cours des premières années d'existence de Habr, par exemple, la part du code et des nombres dans les textes a augmenté :

Comment j'ai analysé Habr, partie 1 : les tendances

Après avoir compris la dynamique globale du site, j'ai décidé de mesurer l'évolution de la popularité des différents sujets. Les sujets peuvent être sélectionnés automatiquement à partir des textes, mais pour commencer, vous ne pouvez pas réinventer la roue, mais utilisez des balises toutes faites apposées par les auteurs de chaque article. J'ai dessiné quatre tendances typiques sur le graphique. Le thème « Google » a initialement dominé (peut-être principalement en raison du référencement), mais a perdu du poids au fil des ans. Javascript a été un sujet populaire et continue de se développer lentement, mais l'apprentissage automatique n'a commencé à gagner rapidement en popularité que ces dernières années. Linux, en revanche, est resté tout aussi pertinent tout au long de la décennie.

Comment j'ai analysé Habr, partie 1 : les tendances

Bien sûr, je me suis intéressé aux sujets qui attirent le plus l'activité des lecteurs. J'ai calculé le nombre médian de vues, de votes et de commentaires dans chaque sujet. Voici ce qui s'est passé :

  • Sujets les plus consultés : arduino, conception Web, développement Web, résumé, liens, css, html, html5, nginx, algorithmes.
  • Les sujets les plus "aimés" : vkontakte, humour, jquery, opéra, c, html, développement web, html5, css, web design.
  • Les sujets les plus discutés : opéra, skype, freelance, vkontakte, ubuntu, travail, nokia, nginx, arduino, firefox.

Au fait, puisque je compare des sujets, vous pouvez les classer par fréquence (et comparer les résultats avec article similaire de 2013).

  • Depuis toutes les années d'existence de Habr, les tags les plus populaires (par ordre décroissant) sont google, android, javascript, microsoft, linux, php, apple, java, python, programmation, startups, development, ios, startup, social networks
  • En 2017, les plus populaires étaient javascript, python, java, android, développement, linux, c++, programmation, php, c#, ios, machine learning, information security, microsoft, react

En comparant ces notes, on peut prêter attention, par exemple, à la marche victorieuse de Python et à l'extinction de php, ou encore au "sunset" des sujets startup et à l'essor du machine learning.

Toutes les balises sur Habré n'ont pas une coloration thématique aussi évidente. Par exemple, voici une douzaine de balises qui ne se sont rencontrées qu'une seule fois, mais qui m'ont semblé amusantes. Ainsi : "l'idée est le moteur du progrès", "démarrer à partir d'une image de disquette", "État de l'Iowa", "drame", "superalesh", "machine à vapeur", "choses à faire le samedi", "j'ai un renard dans un hachoir à viande", "ça s'est avéré comme toujours", "nous ne pouvions pas trouver d'étiquettes amusantes". Pour déterminer le sujet de tels articles, les balises ne suffisent pas - vous devrez effectuer une modélisation thématique sur les textes des articles.

Une analyse plus détaillée du contenu des articles sera dans le prochain billet. Tout d'abord, je vais créer un modèle qui prédit le nombre de pages vues pour un article en fonction de son contenu. Deuxièmement, je veux enseigner le réseau de neurones pour générer des textes dans le même style que les auteurs de Habr. Alors abonnez-vous 🙂

PS Et voici le bip base de données.

Source: habr.com

Ajouter un commentaire