O Google Trends disponibiliza séries temporais que rastreiam o histórico de consulta de palavras em diversos países desde janeiro de 2004. Em alguns casos, as pesquisas podem ser específicas para estados ou províncias e em diferentes frequências temporais. No entanto, vale destacar que o Google Trends não fornece o volume exato das pesquisas realizadas. A medida utilizada é normalizada em uma escala de 0 a 100, em que o valor máximo (100) indica o ponto mais alto da consulta para o período de tempo selecionado pelo usuário.
O procedimento mencionado é necessário pois os dados do Google Trends representam amostras de buscas realizadas pelos usuários. Ademais, há algumas informações relevantes que devem ser destacadas a respeito desses dados:
Essas e outras informações estão presentes na documentação do Google Trends e no curso preparado por eles.
Os dados do Google Trends são organizados em categorias por meio de um sistema de classificação baseado em linguagem natural. Essas categorias podem incluir temas como saúde, emprego, esportes, viagens, entre outros.
Os dados podem ser usados em diversas aplicações e em distintas áreas como mostrado por Jun, S., Yoo, H. S. and Choi, S. (2017). Um estudo usando séries do Google Trends relacionadas a busca de empregos pode ser visualizado em Gonçalves (2023, Cap. 8
Ao acessar a ferramenta do Google Trends é possível
pesquisar por um termo, por exemplo, Minas Gerais. Uma
série será produzida de acordo com os filtros presentes: recorte
geográfico, frequência temporal, categoria e tipo de pesquisa.
Além disso, o Google Trends oferece opções para compartilhamento e download dos dados em formato CSV, bem como a desagregação regional e a apresentação de assuntos e pesquisas relacionadas. Esses recursos, juntamente com outros detalhes relevantes, serão explorados a seguir, utilizando a linguagem de programação R e com o objetivo de extrair um número amplo de séries de forma automatizada.
Para realizar a extração, será utilizado o pacote gtrendsR
em que a principal função é a gtrends.
if (!require("gtrendsR")){
install.packages("gtrendsR")
library(gtrendsR)
}
## Carregando pacotes exigidos: gtrendsR
A documentação indica os argumentos da função e detalha suas
funcionalidades, sendo necessário informar pelo menos uma palavra-chave
(keyword) a ser buscada.
?gtrends
## starting httpd help server ... done
Ao realizar uma pesquisa e inserir parâmetros, como
geo="BR" para indicar a busca realizada no Brasil e
time="today 3-m" para definir o período de tempo, o objeto
serie01 irá conter a série de interesse em
interest_over_time.
serie01 <- gtrends(keyword ="Minas Gerais",
geo = "BR",
time = "today 3-m")
head(serie01$interest_over_time)
## date hits keyword geo time gprop category
## 1 2023-02-22 80 Minas Gerais BR today 3-m web 0
## 2 2023-02-23 94 Minas Gerais BR today 3-m web 0
## 3 2023-02-24 87 Minas Gerais BR today 3-m web 0
## 4 2023-02-25 73 Minas Gerais BR today 3-m web 0
## 5 2023-02-26 84 Minas Gerais BR today 3-m web 0
## 6 2023-02-27 93 Minas Gerais BR today 3-m web 0
Também é possível realizar a busca com base em uma data específica,
utilizando um intervalo definido no formato
AAAA-MM-DD AAAA-MM-DD para obter informações diferentes das
pré-definidas.
serie02 <- gtrends(keyword ="currículo",
geo = "BR",
time = "2012-01-01 2023-04-30")
head(serie02$interest_over_time)
## date hits keyword geo time gprop category
## 1 2012-01-01 22 currículo BR 2012-01-01 2023-04-30 web 0
## 2 2012-02-01 23 currículo BR 2012-01-01 2023-04-30 web 0
## 3 2012-03-01 24 currículo BR 2012-01-01 2023-04-30 web 0
## 4 2012-04-01 21 currículo BR 2012-01-01 2023-04-30 web 0
## 5 2012-05-01 23 currículo BR 2012-01-01 2023-04-30 web 0
## 6 2012-06-01 21 currículo BR 2012-01-01 2023-04-30 web 0
# gráfico
plot(serie02)
Uma observação interessante é que a grafia das palavras, com ou sem
acentuação, pode resultar em séries distintas. Veja, a seguir, o exemplo
da palavra currículo sem acento.
serie03 <- gtrends(keyword ="curriculo",
geo = "BR",
time = "2012-01-01 2023-04-30")
# gráfico
plot(ts.union(ts(serie02$interest_over_time$hits,start = c(2012,1), frequency = 12),
ts(serie03$interest_over_time$hits,start = c(2012,1), frequency = 12)),
plot.type = "single",col = c(1,2), ylab="", xlab="Mês")
legend("bottomright", legend = c("currículo","curriculo"),col = c(1,2), bty = 'n',lty = c(1,1))
Além disso, também é possível extrair séries temporais referentes às diferentes unidades da federação, por exemplo:
serie04 <- gtrends(keyword ="vaga de emprego",
geo = "BR-MG",
time = "2012-01-01 2023-04-30")
# gráfico
plot(serie04)
Uma palavra muito buscada em um período pode gerar um outlier, conforme exemplificado anteriormente. Portanto, é necessário realizar um tratamento dessas séries para fins estatísticos.
Também é possível extrair a mesma série para diferentes locais e realizar comparações entre eles. Nesse caso, o índice é construído com base nas buscas conjuntas em todos os locais. O valor 100 é atribuído ao ponto do tempo e ao local que apresenta o maior número de buscas.
serie05 <- gtrends(keyword ="vaga de emprego",
geo = c("BR-MG","BR-SP"),
time = "2012-01-01 2023-04-30")
head(serie05$interest_over_time)
## date hits keyword geo time gprop category
## 1 2012-01-01 18 vaga de emprego BR-MG 2012-01-01 2023-04-30 web 0
## 2 2012-02-01 15 vaga de emprego BR-MG 2012-01-01 2023-04-30 web 0
## 3 2012-03-01 17 vaga de emprego BR-MG 2012-01-01 2023-04-30 web 0
## 4 2012-04-01 14 vaga de emprego BR-MG 2012-01-01 2023-04-30 web 0
## 5 2012-05-01 15 vaga de emprego BR-MG 2012-01-01 2023-04-30 web 0
## 6 2012-06-01 15 vaga de emprego BR-MG 2012-01-01 2023-04-30 web 0
# gráfico
plot(serie05)
Uma limitação é que as comparações são restritas a um máximo de cinco locais ou cinco palavras.
Os dados também são agrupados em categorias usando um mecanismo de
classificação de linguagem natural, que inclui categorias como saúde,
emprego, esportes, viagens, entre outras. A lista completa dessas
categorias pode ser visualizada utilizando o pacote
gtrendsR:
data("categories")
View(categories)
Para realizar uma comparação, pode-se efetuar buscas com e sem a
categoria Jobs - 60 para a palavra-chave vaga,
por exemplo:
serie06a <- gtrends(keyword ="vaga",
geo = "BR-MG",
time = "2012-01-01 2023-04-30",
category = 0)
serie06b <- gtrends(keyword ="vaga",
geo = "BR-MG",
time = "2012-01-01 2023-04-30",
category = 60)
head(serie06a$interest_over_time)
## date hits keyword geo time gprop category
## 1 2012-01-01 41 vaga BR-MG 2012-01-01 2023-04-30 web 0
## 2 2012-02-01 41 vaga BR-MG 2012-01-01 2023-04-30 web 0
## 3 2012-03-01 42 vaga BR-MG 2012-01-01 2023-04-30 web 0
## 4 2012-04-01 36 vaga BR-MG 2012-01-01 2023-04-30 web 0
## 5 2012-05-01 36 vaga BR-MG 2012-01-01 2023-04-30 web 0
## 6 2012-06-01 30 vaga BR-MG 2012-01-01 2023-04-30 web 0
head(serie06b$interest_over_time)
## date hits keyword geo time gprop category
## 1 2012-01-01 39 vaga BR-MG 2012-01-01 2023-04-30 web 60
## 2 2012-02-01 36 vaga BR-MG 2012-01-01 2023-04-30 web 60
## 3 2012-03-01 38 vaga BR-MG 2012-01-01 2023-04-30 web 60
## 4 2012-04-01 36 vaga BR-MG 2012-01-01 2023-04-30 web 60
## 5 2012-05-01 30 vaga BR-MG 2012-01-01 2023-04-30 web 60
## 6 2012-06-01 32 vaga BR-MG 2012-01-01 2023-04-30 web 60
# gráfico
plot(ts.union(ts(serie06a$interest_over_time$hits,start = c(2012,1), frequency = 12),
ts(serie06b$interest_over_time$hits,start = c(2012,1), frequency = 12)),
plot.type = "single",col = c(1,2), ylab="", xlab="Mês")
legend("topleft", legend = c("sem categoria","com categoria"),col = c(1,2), bty = 'n',lty = c(1,1))
As próprias categorias também podem ser extraídas ao não incluir uma
keyword:
serie07 <- gtrends(geo = "BR-MG",
time = "2012-01-01 2023-04-30",
category = 60)
# gráfico
plot(serie07)
Assim como foi possível comparar diferentes localidades, também é possível comparar diferentes palavras-chave, com a limitação de até cinco palavras.
serie08 <- gtrends(keyword = c("currículo","curriculo","vaga de emprego","vaga","sine"),
geo = "BR-MG",
time = "2012-01-01 2023-04-30",
category = 60)
head(serie08$interest_over_time)
## date hits keyword geo time gprop category
## 1 2012-01-01 14 currículo BR-MG 2012-01-01 2023-04-30 web 60
## 2 2012-02-01 13 currículo BR-MG 2012-01-01 2023-04-30 web 60
## 3 2012-03-01 11 currículo BR-MG 2012-01-01 2023-04-30 web 60
## 4 2012-04-01 12 currículo BR-MG 2012-01-01 2023-04-30 web 60
## 5 2012-05-01 15 currículo BR-MG 2012-01-01 2023-04-30 web 60
## 6 2012-06-01 9 currículo BR-MG 2012-01-01 2023-04-30 web 60
# gráfico
plot(serie08)
Explorando uma outra funcionalidade, a cada extração é possível obter uma lista de 50 palavras relacionadas.
serie09 <- gtrends(keyword = c("currículo"),
geo = "BR-MG",
time = "2012-01-01 2023-04-30",
category = 0)
serie09$related_queries$value
## [1] "curriculo"
## [2] "fazer currículo"
## [3] "lattes currículo"
## [4] "modelo currículo"
## [5] "lattes"
## [6] "enviar currículo"
## [7] "modelo de currículo"
## [8] "como fazer currículo"
## [9] "objetivo currículo"
## [10] "objetivo"
## [11] "o que é currículo"
## [12] "currículo online"
## [13] "fazer um currículo"
## [14] "currículo pdf"
## [15] "curriculum"
## [16] "objetivo para currículo"
## [17] "como fazer um currículo"
## [18] "currículo primeiro emprego"
## [19] "currículo pronto"
## [20] "o que colocar no currículo"
## [21] "o que é um currículo"
## [22] "meu currículo"
## [23] "fazer curriculo"
## [24] "modelos de currículo"
## [25] "currículo vitae"
## [26] "fazer currículo online"
## [27] "jovem aprendiz"
## [28] "fazer currículo pelo celular"
## [29] "currículo online grátis"
## [30] "como fazer um curriculo"
## [31] "currículo referência de minas gerais"
## [32] "como fazer currículo pelo celular"
## [33] "fazer currículo em pdf"
## [34] "fazer currículo online grátis"
## [35] "bncc"
## [36] "objetivo profissional para currículo"
## [37] "objetivo para currículo primeiro emprego"
## [38] "curriculo simples"
## [39] "o que colocar no objetivo do currículo"
## [40] "como fazer currículo online"
## [41] "criar curriculo"
## [42] "currículo pronto word"
## [43] "criar currículo online"
## [44] "gerador de currículo"
## [45] "objetivo para currículo"
## [46] "o que colocar no currículo"
## [47] "objetivo currículo"
## [48] "objetivo"
## [49] "currículo online"
## [50] "currículo pdf"
É possível enriquecer um conjunto inicial de palavras ao expandir o grupo com termos do mesmo contexto. No entanto, é crucial realizar uma avaliação cuidadosa de cada palavra adicionada para garantir sua relevância ao contexto em estudo, alinhada com o objetivo pretendido.
palavras <- unique(c("currículo",serie09$related_queries$value)) #conjunto de palavras únicas
length(palavras)
## [1] 45
Todos os exemplos anteriores foram construídos por meio da extração de uma ou mais séries. No entanto, para obter um conjunto mais amplo de séries, existem várias abordagens possíveis como a família de funções Apply:
start_time <- Sys.time()
data01 <- sapply(palavras[1:25], function(i) gtrends(keyword = i,
geo = "BR-MG",
time = "2012-01-01 2023-04-30",
category = 60,
onlyInterest = TRUE)$interest_over_time$hits)
end_time <- Sys.time()
end_time - start_time
## Time difference of 24.38817 secs
Outra alternativa é aproveitar a computação paralela ao considerar atividades independentes. O pacote parallel oferece essa funcionalidade. Para obter mais detalhes sobre pacotes de computação paralela no R, recomenda-se consultar este link.
Um aspecto relevante é o número de núcleos disponíveis na CPU.
if (!require("parallel")){
install.packages("parallel")
library(parallel)
}
## Carregando pacotes exigidos: parallel
numCores<-detectCores()
numCores
## [1] 8
A ideia principal é criar um conjunto de instâncias paralelas do R
para execução simultânea. Para alcançar isso, é necessário criar essas
instâncias usando a função makeCluster e inserir em cada
uma delas as informações necessárias para realizar a tarefa usando a
função clusterEvalQ:
# criando cópias
cl<- makeCluster(numCores-1)
# salva objetos
save.image("partial.Rdata")
# envia dados para cada uma das cópias
clusterEvalQ(cl,{load("partial.Rdata")
library(gtrendsR)
})
## [[1]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[2]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[3]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[4]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[5]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[6]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[7]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
Realizando a extração anterior novamente, porém utilizando computação paralela:
start_time <- Sys.time()
data02 <- parSapply(cl,palavras[1:25], function(i) gtrends(keyword = i,
geo = "BR-MG",
time = "2012-01-01 2023-04-30",
category = 60,
onlyInterest = TRUE)$interest_over_time$hits)
end_time <- Sys.time()
end_time - start_time
## Time difference of 7.135392 secs
# stop cluster
stopCluster(cl)
Uma abordagem viável para construir um ranking de palavras é normalizar cada série com uma palavra única e relevante para o contexto em estudo. Para isso, é necessário extrair as séries em pares e calcular uma medida sintética que será usada para o ranking.
É válido tentar identificar a palavra com maior número de buscas no período e, preferencialmente, utilizá-la como a palavra de referência. A ideia é que essa palavra apresente o ponto máximo em comparação com todas as séries. No caso em que isso não ocorra, o ranking pode ser considerado uma aproximação, destacando um grupo de palavras mais buscadas, sem necessariamente refletir uma ordenação precisa.
O Google Trends atribui o valor <1 para buscas
menores que 1, mas não nulas. Portanto, as séries são extraídas como
tipo character. Foi decidido considerar o valor
0 nessas situações e utilizar a média dos valores das
séries extraídas. Com base nesses procedimentos, é possível criar uma
função:
f.ranking <- function(palavra, palavra_rel, geo, time, category){
# extrai o par de séries
data = gtrends(keyword = c(palavra,palavra_rel),
geo = geo,
time = time,
category = category,
onlyInterest = TRUE)$interest_over_time$hits
# seleciona a série apenas da palavra em estudo
data = data[1:(length(data)/2)]
# substitui na base os menores que 1 por zero
data[data=="<1"]=0
# transforma em numérico
data = as.numeric(data)
# computa uma médida síntese
media = mean(data,na.rm=TRUE)
return(media)
}
Cria-se novamente as cópias:
# criando cópias
cl<- makeCluster(numCores-1)
# salva objetos
save.image("partial.Rdata")
# envia dados para cada uma das cópias
clusterEvalQ(cl,{load("partial.Rdata")
library(gtrendsR)
})
## [[1]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[2]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[3]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[4]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[5]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[6]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
##
## [[7]]
## [1] "gtrendsR" "stats" "graphics" "grDevices" "utils" "datasets"
## [7] "methods" "base"
Agora, finalmente, calcula-se o ranking:
ranking <- parSapply(cl,palavras, function(i) f.ranking(palavra = i,
palavra_rel = "curriculo",
geo = "BR-MG",
time = "2012-01-01 2023-04-30",
category = 60))
Organizando e vizualizando o ranking:
# ordena
ranking <- data.frame(média = sort(ranking, decreasing = TRUE))
ranking
## média
## curriculo 58.83088235
## lattes 45.66911765
## currículo 19.41911765
## curriculum 16.27205882
## objetivo 5.90441176
## fazer curriculo 4.09558824
## lattes currículo 2.62500000
## fazer currículo 2.42647059
## como fazer um curriculo 1.94117647
## enviar currículo 1.60294118
## modelo currículo 1.54411765
## como fazer currículo 1.45588235
## objetivo currículo 1.37500000
## modelo de currículo 1.25735294
## jovem aprendiz 1.12500000
## curriculo simples 1.11764706
## currículo online 1.08088235
## fazer um currículo 1.06617647
## currículo primeiro emprego 0.85294118
## como fazer um currículo 0.83823529
## objetivo para currículo 0.82352941
## currículo pronto 0.80147059
## currículo pdf 0.67647059
## criar curriculo 0.66176471
## currículo vitae 0.63235294
## o que colocar no currículo 0.51470588
## modelos de currículo 0.51470588
## meu currículo 0.44852941
## o que é currículo 0.38970588
## fazer currículo online 0.38970588
## currículo online grátis 0.27205882
## fazer currículo online grátis 0.23529412
## fazer currículo pelo celular 0.21323529
## como fazer currículo pelo celular 0.21323529
## currículo referência de minas gerais 0.16911765
## objetivo para currículo primeiro emprego 0.15441176
## fazer currículo em pdf 0.14705882
## bncc 0.14705882
## gerador de currículo 0.14705882
## o que é um currículo 0.13235294
## objetivo profissional para currículo 0.11764706
## o que colocar no objetivo do currículo 0.11029412
## currículo pronto word 0.10294118
## como fazer currículo online 0.07352941
## criar currículo online 0.06617647
Pode-se também gerar uma núvem de palavras:
if (!require("wordcloud")){
install.packages("wordcloud")
library(wordcloud)
}
## Carregando pacotes exigidos: wordcloud
## Carregando pacotes exigidos: RColorBrewer
set.seed(32) #para reproduzir a mesma núvem
wordcloud(words = rownames(ranking),
freq = ranking$média,
scale = c(4, 1), min.freq=0, max.words = 50,
random.order = FALSE,
color = 1:nrow(ranking))
Fellows, I. (2018). wordcloud: Word Clouds. URL: link
Gonçalves, C. C. S. (2023) Produção de indicadores do mercado de trabalho com modelos de séries temporais de pesquisas repetidas Tese (Doutorado em População, Território e Estatísticas Públicas) – Escola Nacional de Ciências Estatística - Instituto Brasileiro de Geografia e Estatística, Rio de Janeiro. URL: link
Google (2022) Google Trends lessons. URL: link
Jun, S., Yoo, H. S. and Choi, S. (2017) Ten years of research change using Google Trends: From the perspective of big data utilizations and applications. Technological Forecasting and Social Change. URL:link
Massicotte, P. (2021) gtrendsr: Perform and display Google Trends queries. URL: link
R Core Team (2022) Package parallel. URL: link
Dúvidas, contribuições, comentários e sugestões podem ser direcionadas para o e-mail caio.goncalves@fjp.mg.gov.br ou diretamente no Github por meio do link
Extração
de séries do Google Trends by
Caio
Gonçalves is licensed under
Attribution-ShareAlike
4.0
International
Sugestão de citação: Gonçalves, C. Extração de séries do Google Trends. Belo Horizonte, Brasil: Rpubs, 2023. Disponível em https://rpubs.com/caiocgonc/googletrends.