Como analisei Habr, parte 1: tendências

Quando o Olivier de Ano Novo acabou, eu não tinha nada para fazer e decidi baixar todos os artigos do Habrahabr (e plataformas relacionadas) para o meu computador e explorar.

Houve várias histórias interessantes. A primeira delas é o desenvolvimento do formato e dos temas das matérias ao longo dos 12 anos de existência do site. Por exemplo, a dinâmica de alguns tópicos é bastante indicativa. Continuação - sob o corte.

Como analisei Habr, parte 1: tendências

Processo de análise

Para entender como Habr se desenvolveu, foi necessário percorrer todos os seus artigos e extrair deles metainformações (por exemplo, datas). O desvio foi fácil, porque os links para todos os artigos parecem "habrahabr.ru/post/337722/" e os números são fornecidos estritamente em ordem. Sabendo que o último post tem um número um pouco menor que 350 mil, acabei de passar por todo o ID de documento possível em um loop (código Python):

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

Função download_document tenta carregar a página com o id correspondente e tenta extrair informações significativas da estrutura 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)

No processo de análise, descobri várias coisas novas.

Primeiro, eles dizem que criar mais processos do que núcleos no processador é inútil. Mas, no meu caso, descobri que o recurso limitante não é o processador, mas a rede, e 100 processos funcionam mais rápido que 4 ou, digamos, 20.

Em segundo lugar, em algumas postagens havia combinações de caracteres especiais - por exemplo, eufemismos como "%&#@". Acontece que html.parser, que usei primeiro, reage à combinação &# dolorosamente, considerando-o o início da entidade html. Eu já ia fazer magia negra, mas o fórum sugeriu que você pode apenas mudar o analisador.

Em terceiro lugar, consegui descarregar todas as publicações, exceto três. Os documentos numerados 65927, 162075 e 275987 foram excluídos instantaneamente pelo meu antivírus. Estes são artigos, respectivamente, sobre uma cadeia de javascript que baixa um pdf malicioso, SMS ransomware na forma de um conjunto de plug-ins de navegador e o site CrashSafari.com que envia iPhones para uma reinicialização. O Antivirus descobriu outro artigo depois, durante uma varredura no sistema: post 338586 sobre scripts no site da loja de animais que usam o processador do usuário para minerar criptomoedas. Portanto, podemos considerar que o trabalho do antivírus é bastante adequado.

Os artigos "ao vivo" acabaram sendo apenas metade do máximo potencial - 166307 peças. Sobre o resto, o Habr oferece opções "a página está desatualizada, foi excluída ou não existia". Bem, tudo pode acontecer.

O upload de artigos foi seguido de trabalho técnico: por exemplo, as datas de publicação tiveram que ser convertidas do formato "'21 de dezembro de 2006 às 10h47" para o padrão datetime, e "12,8k" visualizações - em 12800. Nesta fase, mais alguns incidentes surgiram. O mais engraçado tem a ver com contagem de votos e tipos de dados: alguns posts antigos tiveram um estouro int e receberam 65535 votos cada.

Como analisei Habr, parte 1: tendências

Como resultado, os textos dos artigos (sem fotos) me ocuparam 1.5 gigabytes, comentários com metainformações - outros 3 e cerca de cem megabytes - metainformações sobre artigos. Isso pode ser totalmente mantido na RAM, o que foi uma agradável surpresa para mim.

Comecei a análise dos artigos não pelos próprios textos, mas pela metainformação: datas, tags, hubs, views e likes. Descobriu-se que ela poderia dizer muito.

Habrahabr Tendências de Desenvolvimento

Os artigos no site são publicados desde 2006; mais intensamente - em 2008-2016.

Como analisei Habr, parte 1: tendências

Quão ativamente esses artigos foram lidos em momentos diferentes não é tão fácil de avaliar. Os textos de 2012 e mais recentes receberam mais comentários e avaliações, mas os textos mais recentes têm mais visualizações e favoritos. Essas métricas se comportaram da mesma forma (reduziram pela metade) apenas uma vez, em 2015. Talvez, em uma situação de crise econômica e política, a atenção dos leitores tenha se desviado dos blogs de TI para questões mais dolorosas.

Como analisei Habr, parte 1: tendências

Além dos próprios artigos, baixei mais comentários para eles. Foram 6 milhões de comentários, porém, 240 mil deles foram banidos ("um OVNI voou e publicou esta inscrição aqui"). Uma propriedade útil dos comentários é que eles têm um carimbo de data/hora. Ao estudar o tempo dos comentários, você pode entender aproximadamente quando os artigos são lidos.

Descobriu-se que a maioria dos artigos é escrita e comentada entre 10h e 20h, ou seja, em um típico dia de trabalho em Moscou. Isso pode significar que o Habr é lido para fins profissionais e que essa é uma boa maneira de procrastinar no trabalho. A propósito, essa distribuição da hora do dia é estável desde a fundação de Habr até os dias atuais.

Como analisei Habr, parte 1: tendências

No entanto, o principal benefício de um carimbo de data/hora de comentário não é a hora do dia, mas a duração da "vida ativa" do artigo. Calculei como é distribuído o tempo desde a publicação do artigo até o seu comentário. Descobriu-se que agora o comentário mediano (linha verde) chega em cerca de 20 horas, ou seja, no primeiro dia após a publicação, em média, um pouco mais da metade de todos os comentários do artigo são deixados. E em dois dias eles deixam 75% de todos os comentários. Ao mesmo tempo, os artigos anteriores foram lidos ainda mais rápido - por exemplo, em 2010, metade dos comentários veio nas primeiras 6 horas.

Como analisei Habr, parte 1: tendências

Foi uma surpresa para mim que os comentários aumentaram: o número médio de caracteres em um comentário quase dobrou ao longo da vida do Habr!

Como analisei Habr, parte 1: tendências

Feedback mais fácil do que comentários são votos. Ao contrário de muitos outros recursos, no Habré você pode colocar não apenas vantagens, mas também desvantagens. No entanto, os leitores não usam a última oportunidade com tanta frequência: a parcela atual de desgostos é de cerca de 15% de todos os votos expressos. Costumava haver mais, mas com o tempo, os leitores se tornaram mais gentis.

Como analisei Habr, parte 1: tendências

Os próprios textos mudaram ao longo do tempo. Por exemplo, a extensão típica do texto não para de crescer desde o próprio lançamento do site, apesar das crises. Em uma década, os textos se tornaram quase dez vezes mais longos!

Como analisei Habr, parte 1: tendências

O estilo dos textos (em uma primeira aproximação) também mudou. Durante os primeiros anos de existência do Habr, por exemplo, a participação do código e dos números nos textos aumentou:

Como analisei Habr, parte 1: tendências

Depois de entender a dinâmica geral do site, decidi medir como a popularidade de vários tópicos mudou. Os tópicos podem ser selecionados automaticamente a partir dos textos, mas para começar, você não pode reinventar a roda, mas usar tags prontas afixadas pelos autores de cada artigo. Desenhei quatro tendências típicas no gráfico. O tema "Google" inicialmente dominou (talvez principalmente devido ao SEO), mas foi perdendo peso ao longo dos anos. O Javascript tem sido um tópico popular e continua a crescer lentamente, mas o aprendizado de máquina começou a ganhar popularidade rapidamente apenas nos últimos anos. O Linux, por outro lado, permaneceu igualmente relevante ao longo da década.

Como analisei Habr, parte 1: tendências

Claro, fiquei interessado em quais tópicos atraem mais atividade do leitor. Calculei o número médio de visualizações, votos e comentários em cada tópico. Aqui está o que aconteceu:

  • Tópicos mais vistos: arduino, web design, desenvolvimento web, resumo, links, css, html, html5, nginx, algoritmos.
  • Os tópicos mais "curtidos": vkontakte, humor, jquery, ópera, c, html, desenvolvimento web, html5, css, web design.
  • Os tópicos mais discutidos: opera, skype, freelance, vkontakte, ubuntu, work, nokia, nginx, arduino, firefox.

A propósito, como estou comparando tópicos, você pode classificá-los por frequência (e comparar os resultados com artigo semelhante de 2013).

  • Por todos os anos de existência do Habr, as tags mais populares (em ordem decrescente) são google, android, javascript, microsoft, linux, php, apple, java, python, programação, startups, desenvolvimento, ios, startup, redes sociais
  • Em 2017, os mais populares foram javascript, python, java, android, development, linux, c++, Programming, php, c#, ios, machine learning, information security, microsoft, react

Ao comparar essas classificações, pode-se prestar atenção, por exemplo, à marcha vitoriosa do Python e à extinção do php, ou ao "pôr do sol" dos tópicos de inicialização e à ascensão do aprendizado de máquina.

Nem todas as tags no Habré têm uma coloração temática tão óbvia. Por exemplo, aqui estão uma dúzia de tags que se encontraram apenas uma vez, mas pareceram engraçadas para mim. Assim: "a ideia é a força motriz do progresso", "inicializar a partir de uma imagem de disquete", "Iowa State", "drama", "superalesh", "motor a vapor", "coisas para fazer no sábado", "tenho uma raposa em um moedor de carne", "acabou como sempre", "não conseguimos inventar etiquetas engraçadas". Para determinar o assunto de tais artigos, as tags não são suficientes - você terá que realizar modelagem temática nos textos dos artigos.

Uma análise mais detalhada do conteúdo dos artigos estará no próximo post. Primeiro, vou construir um modelo que prevê o número de visualizações de página de um artigo com base em seu conteúdo. Em segundo lugar, quero ensinar a rede neural a gerar textos no mesmo estilo dos autores do Habr. Então inscreva-se 🙂

PS E aqui está o bipe conjunto de dados.

Fonte: habr.com

Adicionar um comentário