Análise de Redes: Twitter

Vitor dos Santos
11 min readSep 15, 2021

--

A análise de redes pode ser entendida como um conjunto de estratégias que proporcionam a capacidade de estimar padrões de relacionamentos de uma maneira simplificada através da utilização de grafos, permitindo descobrir características importantes de uma rede.

Existem diversos campos de estudo que podemos aplicar técnicas de análise de redes, onde podemos destacar aplicações relacionadas a redes biológicas, redes temporais, redes de rotas, redes sociais, entre outras. Neste artigo, vamos estudar sobre o Twitter, uma rede social.

A rede que vamos desenvolver será baseada na forma de interação mais básica entre usuários: o Retweet. Segundo o próprio site do Twitter, um Retweet representa a republicação de um Tweet. Com essa função, outras pessoas podem compartilhar um Tweet rapidamente com todos os seus seguidores, o que significa que uma pessoa basicamente repete o texto que outra já tinha escrito, mas aparecendo os devidos créditos.

Na rede desenvolvida, cada nó representa um usuário e uma aresta direcional de x para y é criada se o usuário y retweetar algum Tweet do usuário x. Além disso, como um usuário pode retweetar mais que um Tweet do mesmo usuário, cada aresta também terá um peso que corresponde ao número de Tweets retweetados.

Ao longo deste artigo veremos como utilizar a API do Twitter para buscar por Tweets que contém uma determinada palavra-chave, criar uma base de dados com diversas informações relevantes de um Tweet, utilizar essas informações para desenvolver um rede relacionado a Retweets e realizar uma série de inferências a partir dos dados obtidos.

Estudo de Caso: Dia da Independência do Brasil

Inicialmente, precisamos definir um determinado assunto que iremos analisar. No momento em que este artigo foi desenvolvido, o Brasil comemorou o dia de sua Independência (7 de Setembro), e esta data foi utilizado como uma forma de grupos políticos medirem forças de popularidade.

Ao criar uma rede com essa temática, será possível estabelecer os políticos e figuras públicas mais retweetados e, consequentemente, mais populares considerando a rede social do Twitter. Além disso, espera-se que na rede existam comunidades bem isoladas, visto que, pelo menos se tratando de política, dificilmente um usuário vai retweetar uma postagem de políticos com ideologias diferentes. Finalmente, também vamos adotar estratégias para a detecção da existência de bots, robôs e spam e de outras métricas relevantes para essa problemática.

Utilização da API do Twitter

Para conseguir ter acesso a API do Twitter, é necessário realizar um cadastro na plataforma de Desenvolvedor, disponível neste site. Durante o cadastro, é preciso fornecer diversas informações sobre como você pretende utilizar esses dados e qual o objetivo. Ao terminar o cadastro, ainda leva um tempo para o Twitter verificar as informações preenchidas e aprovar a sua solicitação. No meu caso, demorou apenas um dia para aprovarem a minha requisição.

Para realizar autenticação, requisições e consultas das informações relacionadas aos Tweets de interesse, utilizaremos a biblioteca chamada Twython. Além disso, todo o processamento foi desenvolvido em um notebook no Colab, que está disponibilizado no repositório do meu Github através do seguinte link. Fique à vontade para acessá-lo e realizar alternações no código.

O Twitter usa OAuth para permitir que aplicativos de terceiros acessem dados em seu nome sem exigir suas credenciais de login do Twitter. Dessa forma, inicialmente é necessário realizar a autentificação do seu usuário, que envolve informar a “Chave da API” e a “Chave secreta da API”, que são disponíveis ao iniciar um novo projeto na plataforma de Desenvolvedor do Twitter. A priori, realizar essa autentificação pode parecer intimidante quando você usa pela primeira vez, mas fornece uma maneira muito mais segura para o software fazer solicitações em seu nome do que fornecer seu nome de usuário e senha. Essa autentificação foi feita na seção 2.0 do notebook.

Se a autentificação ocorrer normalmente, você poderá utilizar as funções e requisições do Twitter e do Twython. Neste artigo, utilizaremos a API de pesquisa que permite que buscar tweets recentes de acordo com uma consulta de palavras-chave, URLs, hashtags, menções de usuários, etc. Em nossa aplicação, iremos procurar por Tweets realizados no dia 7 de setembro de 2021 e que possuem algumas palavras-chave específicas.

Criação da base de dados

Para evitar que as informações obtidas no notebook acabem sendo descartadas, decidiu-se criar uma base de dados com as informações relevantes que utilizaremos na nossa aplicação.

O primeiro passo envolve escolher qual palavra-chave será considerada para montar a nossa rede. Em geral, grupos políticos de esquerda e direita utilizam hashtags ou palavras diferentes em seus Tweets, justamente para que as suas mensagens apareçam nos assuntos mais comentados do momento. No dia em questão, duas palavras se destacaram: #7DeSetembro e Independência. Por isso, utilizaremos ambas na construção da nossa base.

De acordo com a documentação do Twitter, existe uma limitação em relação a quantidade de requisições por período de tempo. A conta de um aluno padrão (utilizada por mim) pode ter até 180 requisições considerando uma janela de 15 minutos, onde é possível obter até 100 tweets a cada requisição. Assim, podemos obter até 18 mil tweets em uma janela de 15 minutos (180 x 100 = 18.000). Se você deseja obter mais de 18 mil tweets, é necessário utilizar alguma estratégia que espere por mais 15 minutos antes de tentar obter outro conjunto de 18 mil tuítes.

Vamos construir uma base de dados com 72 mil tweets. Ou seja, precisaremos de 72 k/18 k = 4 ciclos completos de requisições. Assim, será necessário 15 * 4 = 60 minutos para criar essa base de dados. Para forçar o algoritmo a esperar esses 15 minutos, vamos realizar as 180 requisições por 4 vezes e no final de cada uma delas, utilizar a função sleep da biblioteca time passando como argumento o valor de 905 (número de segundos a esperar).

Para obter os tweets, utilizaremos a função search do Twython. Conforme mostrado na documentação do Twitter, existem diversos parâmetros que podem ser utilizados nessa função. O primeiro deles, que inclusive é o único obrigatório, é a palavra-chave que deseja-se buscar. Para a nossa base de dados, os primeiros 36 mil Tweets serão referentes a palavra #7DeSetembro e os outros 36 mil serão referentes a palavra Independência. Outro parâmetro que utilizaremos é result_type, que especifica o tipo de resultados que o usuário prefere receber, podendo ser de três tipos:

  • recent: Retorna apenas os resultados mais recentes.
  • popular: Retorna apenas os resultados mais populares (maior quantidade de curtidas e retweets)
  • mixed: Inclue resultados recentes e populares.

Das 360 requisições feitas para cada palavra-chave, utilizamos a primeira requisição para retornar os cem Tweets mais populares (result_type = “popular”) e o restante os Tweets mais recentes (result_type = recent).

Um terceiro parâmetro envolve a data que os Tweets foram criados. Nesse caso, limitados apenas aos Tweets feitos no dia 7 de Setembro de 2021. Além disso, também limitou-se o ID de pesquisa dos Tweets encontrados para evitar que haja postagens repetidas na base de dados.

Por fim, construímos a base de dados considerando as seguintes informações:

  • user: Nome do usuário que realizou o Tweet.
  • tweet_date: Hora que o Tweet foi criado.
  • text: O texto escrito no Tweet.
  • favorite_count: Indica aproximadamente a quantidade de curtidas feitas por outros usuários.
  • user_tweets_count: Numero de Tweets totais (incluindo retweets) feitos pelo usuário.
  • user_creation: Dia em que a conta do usuário foi criada.
  • location: A localização do usuário definida em seu perfil.
  • retweeted: Se o Tweet representa um Retweet.
  • retweeted_from: Usuário que originalmente criou o Tweet (apenas se é um Retweet).
  • retweet_count: Número de vezes que o Tweet original foi retweetado.

A figura abaixo mostra um exemplo das 5 primeiras amostras da base de dados. A criação desta base de dados é mostrada na seção 3 do notebook.

Figura 1: Amostras da base de dados criada.

Finalmente, criou-se um DataFrame utilizando a biblioteca pandas e salvou-se a base de dados em um arquivo csv.

Criação e análise da rede

Conforme mencionado no início do artigo, vamos criar uma rede de Retweets, onde cada nó representa um usuário e uma aresta direcional de X para Y é criada se o usuário Y retweetar uma postagem do usuário X. Como um usuário pode retweetar diversos tweets de um mesmo usuário, adicionaremos um peso para cada aresta que corresponde ao número de retweets realizados.

Para criar essa rede, faremos um grafo bi-direcional utilizando o Network X. A partir da base de dados, precisamos filtrar apenas as amostras que foram retweetadas, ou seja, cujo o valor da coluna “retweeted” seja verdadeiro. Em seguida, percorremos por cada amostra e criaremos o grafo. Também vamos computar algumas informações para fazer uma análise de possíveis bots, como extrair o ano em que a conta foi criada, o número de dias que cada conta possui e o número de postagens. Finalmente, também vamos analisar as características dos usuários que retweetaram os dois políticos que possuem a maior porcentagem de intenção de votos da eleição de 2022: Luís Inácio Lula da Silva e Jair Messias Bolsonaro. A rede construída teve 44936 nós e 57484 arestras. Agora, faremos diversas análise sobre algumas métricas relevantes.

O diâmetro da rede é igual a 4, o que representa que é preciso apenas de 4 conexões para chegar de qualquer nó inicial para qualquer outro nó da rede. A priori, esse valor pode parecer muito baixo em função da nossa aplicação, visto que dificilmente haverá um usuário que faça o retweet de políticos com eixos ideológicos diferentes. Porém, se tivermos pelo menos um usuário que retweete postagens de um político e algum jornal ou figura pública mais neutra, já temos um caminho possível para conectar os dois políticos passando por esse jornal.

Uma segunda métrica interessante é a modularidade, que mede a força da divisão de uma rede em módulos (também chamados de grupos, clusters ou comunidades). Redes com um alto valor de modularidade têm conexões densas entre os nós dentro dos módulos, mas conexões esparsas entre nós em módulos diferentes, reforçando a ideia de que os módulos estão bem definidos. Nessa rede, a modularidade é igual a 0.778 (valor máximo é igual a 1), o que reforça que existem comunidades bem definidas e, que inclusive podem ser interpretadas como ideologias políticas distintas.

Um parâmetro extremamente importante nessa rede envolve o grau de saída de um nó. Nesta aplicação, essa métrica representa a quantidade de usuários que retweetaram pelo menos uma postagem do nó em análise. Assim, quanto maior o grau de saída de um nó, maior a influência, popularidade e engajamento dele. Na figura abaixo, tem-se os nós com os maiores valores do grau de saída.

Figura 2: Nós e seus respectivos valores de grau de saída.

Percebe-se um alto engajamento para os usuários realpfigueiredo, LulaOficial e aramagem, todos com mais que 2500 retweets em um período de aproximadamente 3 horas (tempo aproximado dos Tweets da base de dados). O atual presidente, ficou em 7 lugar em engajamento.

Para visualizar e plotar as conexões da rede, vamos utilizar o programa chamado Gephi, uma ferramenta open-source e gratuita que ajuda a realizar a visualização e a exploração de grafos e redes. As seguintes modificações foram realizadas para melhorar a visualização da rede:

  • Configurou-se uma cor distinta para cada comunidade detectada, ficando mais fácil de distinguir clusters.
  • Aumentou-se o tamanho de cada nó em função do grau de saída. Assim, nós maiores possuem uma maior influência visto que foram mais retweetados.
  • Adicionou-se um filtro para mostrar os nomes apenas dos nós com um grau de saída maior do que 480.

Finalmente, a figura abaixo mostra a rede final:

Figura 3: Rede de Retweets gerada.

É interessante notar que os usuários aramagem e jairbolsonaro ficaram alocados em uma mesma comunidade, o que mostra uma forte tendência de que um usuário retweete postagens de ambos.

Análise de spam, bot e robôs

Um tipo de manipulação de mídia social envolve contas que criam muito pouco conteúdo original e realizam diversos retweets consecutivos, dando a impressão de que uma determinada postagem ou assunto está sendo bastante discutido, quando, na verdade, tem-se um número de pessoas limitado compartilhando o tema. Esse processo também é conhecido como “spam”.

O grau de entrada de um nó representa a quantidade de arestas que estão apontando na direção do nó. Em nossa aplicação, essa métrica representa a quantidade de tweets de usuários diferentes que o nó retweetou. E, se esse valor for muito alto, é um indicativo de que o usuário pode ser uma fonte de spam, visto que está recompartilhando muitas postagens em um pequeno período de tempo. A figura abaixo mostra os nós com a maior quantidade de retweets em um período de aproximadamente 3 horas.

Figura 4: Usuários e quantidade de retweets realizados.

Os dois primeiros usuários realizaram 30 retweets em 180 minutos, dando uma média de 1 retweet a cada 6 minutos. Analisando com mais detalhes as arestras do primeiro nó, tem-se as seguintes conexões:

Figura 5: Arestras de um determinado usuário.

O usuário em questão retweetou 15 postagens do usuário “SigaGazetaBr”, o que representa um valor consideravelmente alto considerando o pequeno tempo analisado.

Uma segunda problemática em relação a manipulação de informações são os robôs. De uma maneira simplista, esses robôs são controlados por software e compartilham postagens com uma frequência muito alta, novamente dando a impressão de que um determinado assunto está sendo bastante comentado. Esses robôs, ou bots, deveriam ser utilizados para responder questões específicas de usuários de uma maneira rápida. Porém, quanto utilizados para repostar desinformação ou a favor de um determinado assunto ou pessoa, já podemos ter problemas.

Uma maneira simples de detectar robôs e bots é através da análise da quantidade de postagens por dia que ele faz, visto que, geralmente, esses valores são elevados. Felizmente, conseguimos obter ambas as informações utilizando a API e, através de um simples processamento, é possível computar a relação posts/dia. A imagem abaixo mostra as contas com os maiores valores dessa relação.

Figura 6: Maiores usuários com alta relação de posts/dia.

O primeiro usuário teve uma média de 2206 tweets/retweets por dia! Algo absurdamente alto para uma pessoa real compartilhar. Além disso, os próprios nomes dos cinco maiores usuários já mostram que essa análise realmente faz sentido, visto que todos eles possuem a palavra “bot” no próprio nome.

Uma outra análise interessante que pode-se fazer é plotar o ano em que os usuários que retweetaram algum post foram criados, conforme mostrado na figura abaixo.

Figura 7: Histograma informando o ano de criação dos usuários da base.

É interessante notar a quantidade de usuários criados no ano de 2021, sendo muito maior do que os anos posteriores. Percebe-se que essa tendência se repete considerando os candidatos a eleição de 2022 mencionado anteriores. Além disso, também fica evidente que no período analisado na base de dados, existiram mais retweets relacionados a tweet(s) de Lula do que de Bolsonaro, indicando um maior engajamento do ex-presidente.

A rede mostrada na Figura 3 foi colocada em produção e pode ser vista através desse link:

https://vitorgaboardi.github.io/network_analysis/twitter/

Detalhes sobre como colocar em produção pode ser visto neste artigo. Finalmente, um vídeo resumindo o que foi feito neste artigo por ser visto através deste link:

https://www.loom.com/share/b6d11b66ca0e4cbaac055ae2cba92ee4

Conclusão

Neste artigo, mostrou-se como obter dados do Twitter utilizando a API do Twitter. Além disso, também estudamos como processar esses dados, estratégias para conseguir obter uma grande quantidade de requisições e criar uma base de dados.

Posteriormente, criamos uma rede de retweets considerando dois determinados temas e construímos um grafo onde cada nó representa um usuário e conexões direcionais serão feitas se um usuário retweetar outro.

Também estudamos diferentes métricas, onde, nessa rede, quanto maior for o grau de saída de um usuário, maior é a quantidade de pessoas que retweetaram ele. Assim, quanto maior essa métrica, mais engajamento esse usuário possui.

Finalmente, também fizemos uma análise referente a detecção de spam e bots, onde conseguimos desenvolver estratégias para detectá-los.

--

--

Vitor dos Santos
Vitor dos Santos

Written by Vitor dos Santos

PhD student on Computer Science at Dublin City University. Interested on Computer Vision, Deep Learning and Data Science.

No responses yet