Por: Letícia Pires, Cientista de Dados Jr. na Sauter
O Google Trends é uma ferramenta de propriedade do Google que analisa a popularidade dos termos em vários idiomas e regiões. Por exemplo, no site você pode encontrar palavras chaves das tendências, explorar tópicos relacionados, analisar popularidade de termos e mais. É uma ferramenta muito útil se você quer fazer previsões ou entender melhor o comportamento humano. O livro “Todo mundo mente”, cita muito sobre o Google Trends, mostrando que o que as pessoas falam nem sempre é o que elas buscam no Google. Inclusive, recomendo muito essa leitura!
Dessa forma, existe a biblioteca Pytrends python que pode ser utilizada para encontrar e explorar melhor as tendências. Pytrends, segundo a documentação Pytrends PyPI, é uma API não oficial do Google Trends que pode ser usada para extrair informações úteis usando uma interface simples.
Objetivos
Sendo assim, este artigo tem como objetivo mostrar o uso da ferramenta para tópicos de crescente popularidade e principais resultados da pesquisa. No entanto, ao invés de fazer busca por termos gerais, foi utilizado um dataset com trends extraídas do Twitter.
Especificações técnicas
O código foi desenvolvido em Python, com auxílio da API do Google e como IDE utilizou-se o Google Colab.
Instalação
A primeira etapa é instalar a biblioteca pytrends através do código abaixo. A documentação você encontra no link https://pypi.org/project/pytrends/.
pip install pytrend


Implementação
Depois de instalar a biblioteca, é necessário fazer uma conexão com o Google, utilizando os seguintes comandos:
#Importando o método TrendReq do módulo de requisição do Pytrends
from pytrends.request import TrendReq
#Execute o método TrendReq passando os parâmetros de linguagem e fuso horário
pytrends = TrendReq(hl='pt-BR', tz=360)
Em seguida é necessário construir uma carga útil. Essa carga irá conter informações de solicitação que ajudam o serviço a entender quais dados se deseja obter. Abaixo, um exemplo de como construir uma carga útil:
# Contruindo lista de palavras-chave
kw_list = ["covid", "bolsonaro", "bbb"]
# Consturindo a carga útil
pytrends.build_payload (kw_list, timeframe = '2015-01-01 2021-01-01', geo = 'BR' )
No exemplo acima, o kw_list
representa uma lista de palavras para obter os dados, geo
é a localização geográfica e o timeframe
é o prazo de interesse.
Aplicando à base de dados do Twitter
Como mencionado no início, utilizarei trends extraídas do Twitter para gerar os tópicos de popularidade crescente e principais resultados da pesquisa. Por isso, inicialmente realizei algumas importações.
import pandas as pd
from pytrends.request import TrendReq
pytrends = TrendReq(hl='pt-BR', tz=360)
#Para limpeza de texto
import unicodedata
import re
#Coletando os dados
path = 'https://raw.githubusercontent.com/letpires/trends_twitter_pytrends/main/trends_twitter.csv%20-%20P%C3%A1gina1.csv'
trends = pd.read_csv(path,encoding="ISO-8859-1", decimal=",", na_values="-", engine="python")
trends.head()


É possível perceber que algumas trends vieram com caracteres especiais, por isso, optei por removê-los, utilizando a função abaixo, extraída do StackOverflow:
"""
A remoção de acentos foi baseada em uma resposta no Stack Overflow.
http://stackoverflow.com/a/517974/3464573
"""
def removerAcentosECaracteresEspeciais(palavra):
# Unicode normalize transforma um caracter em seu equivalente em latin.
nfkd = unicodedata.normalize('NFKD', palavra)
palavraSemAcento = u"".join([c for c in nfkd if not unicodedata.combining(c)])
# Usa expressão regular para retornar a palavra apenas com números, letras e espaço
return re.sub('[^a-zA-Z \\\]', '', palavraSemAcento)
Aplicando a função acima no dataframe, podemos obter o seguinte resultado:
#Aplicando a função para remover caracteres especiais
trends['trend'] = trends.apply(lambda row: removerAcentosECaracteresEspeciais(row['trend']), axis=1)
trends.head()


Em seguida, fiz a transformação dessas trends em lista, para poder passar pela API do Google:
# Convertendo para lista
df_list = trends["trend"].tolist()
df_list
Em seguida, apliquei o parâmetro related_topics para extrair as informações. Esse parâmetro retorna um dicionário contendo uma palavra chave e duas subchaves (‘rising
‘ e ‘top
‘). Para extrair tópicos com popularidade crescente, temos o resultado do rising
e para principais pesquisas tem-se os resultados do top .
A função abaixo extrai em forma de dataframe somente os principais tópicos de cada pesquisa:
def related_topics_top(trend):
#Colocando carga útil
pytrends.build_payload(kw_list=[trend], timeframe='now 1-d', geo='BR', gprop='')
related = pytrends.related_topics()
try:
#Transformando as informações me dataframe
top = pd.DataFrame.from_dict(related[trend]['top'])
return top
except Exception as e:
top = None
raise e
Como temos uma lista de palavras do Twitter, fiz uma iteração sobre cada um, através do código abaixo:
#Aplicando a função related_topics_top para cada item da lista
df_final = pd.DataFrame()
for item in df_list:
print('----ITEM:', item)
related = related_topics_top(item)
#Inserindo o 'trend' nos dataframes
related.insert(0, 'trend', item, allow_duplicates=True)
df_final = df_final.append(related.head()).reset_index(drop=True)
print('--- DF Final ---')
df_final
O resultado obtido foi o seguinte:


Esses resultados não parecem tão interessantes visto que a palavra Xama está em 2 das linhas de topic title
. Abaixo, a função para extrair somente os tópicos de popularidade crescente.
def related_topics_rising(trend):
#Colocando carga útil
pytrends.build_payload(kw_list=[trend], timeframe='now 1-d', geo='BR', gprop='')
related_rising = pytrends.related_topics()
try:
#Transformando as informações me dataframe
rising = pd.DataFrame.from_dict(related_rising[trend]['rising'])
return rising
except Exception as e:
rising = None
raise e
#Aplicando a função related_topics_rising para cada item da lista
df_final_rising = pd.DataFrame()
for item in df_list:
print('----ITEM:', item)
related2 = related_topics_rising(item)
#Inserindo o 'trend' nos dataframes
related2.insert(0, 'trend', item, allow_duplicates=True)
df_final_rising = df_final_rising.append(related2.head()).reset_index(drop=True)
print('--- DF Final ---')
df_final_rising
O resultado obtido para tópicos de popularidade crescente foram:


No conjunto de resultados “crescentes”, podemos ver que as pesquisas instantâneas de seleção inglesa e Manchester estão entre os principais tópicos crescentes relacionados ao Harry Kane.
Conclusão:
Um ponto de atenção é com relação ao uso excessivo da API Pytrends, porque o Google pode limitar seu acesso. No entanto, esse limite da taxa de soliticação não é conhecido, segundo a página Pytrendd PyPI. Quando realizei esse trabalho, tive um problema similar de requisições. Segundo o site The Data Science Publication um usuário relatou que 1400 solicitações sequenciais em um período de 4 horas o levou ao imite.
Nesse link você encontra outras pessoas que relataram o mesmo problema.
Código completo no meu Github
Curtiu? Então nos acompanhe nas redes sociais:
Instagram | LinkedIn | Facebook | Youtube
REFERÊNCIAS: