Neste tutorial serão usados os seguintes pacotes:
- tuber: Para coletar os dados do Youtube, este será o foco desse tutorial;
- dplyr: Usado na manipulação dos dados obtidos, para melhor entendimento desse pacote recomendamos https://www.youtube.com/watch?v=jTQkMHYxwew
- lubridate: Trabalhar com data;
- ggplot2: Visualização dos dados
Criando sua chave API e um OAuth Key.
O primeiro passo será criar uma conta no Google Cloud (https://cloud.google.com). Após criar sua conta, siga o passo a passo desse video https://www.youtube.com/watch?v=pP4zvduVAqo e em seguida crie sua OAuth Key
Autenticando sua chaves
Depois de obtida as chaves, devemos autenticar o pc/notebook que esta sendo utilizado. Para isso, utilizaremos a função yt_oauth().
app_id <- "ID_cliente"
app_secret <- "Chave secreta do cliente"
yt_oauth(app_id, app_secret, token='')
Deverá aparecer uma página pedindo para fazer login com sua conta Gmail e, se tudo der certo, aparecerá a seguinte:
Obtendo os dados
A partir de agora esses dados estão disponíveis para acesso e manipulação, e esse post focará em algumas funções capazes de acessar esses dados disponiveis.
yt_search()
smartcities <- yt_search(term = 'Smart cities', published_after = "2019-05-15T00:00:00Z", max_results = 20)
Neste primeiro exemplo estão sendo procurados todos os videos com as palavras Smart cities
depois da seguinte data 15 de Junho de 2019, e são mostrados somente os 20 primeiros videos, caso tenha.
Uma importante coluna gerada em smartcities é o video_id, pois nele podemos facilmente achar o video de interesse, como será mostrado em sequência. As outras colunas contem informações de fácil compreenção para leitor.
get_stats
infos <- get_stats(video_id = smartcities$video_id[2])
## Error in get_stats(video_id = smartcities$video_id[2]): Must specify a video ID.
class(smartcities$video_id[2])
## [1] "factor"
Todas os resultados em smartcities são factor, então faça as devidas alterações seja, transformando em character ou numeric.
id <- as.character(smartcities$video_id[2])
infos <- get_stats(video_id = id)
class(infos)
## [1] "list"
Obtendo estatísticas e fazendo análise descritiva de um canal
Agora será construído um script capaz de pegar todas as informações básicas de um video (número de vizualizações, likes, e dislikes, quando foi feito o upload). Como exemplo, será usado o canal Estatística é com R https://www.youtube.com/channel/UCmbNWlpq8o3dpqY6c9HDGXg .
1º passo: Obter todas as infos do canal.
canal <- yt_search(term = "",
type = "video",
channel_id = 'UCmbNWlpq8o3dpqY6c9HDGXg')
Para achar channel_id, basta ir na pagina do mesmo e pegar tudo que vem após de /channel/…., nesse caso foi UCmbNWlpq8o3dpqY6c9HDGXg
2º passo: Coletar o id, salvo no objeto id.
id <- NULL
for (i in canal$video_id){
id <- c(id,i)
}
3º passo: Extração
nrow <- dim(canal)[1] # Vendo quantos videos tem em um canal
ncol <- length(get_stats(video_id=id[1])) # Vendo quantas informações são fornecidas
# Criando um matriz para armazenar as estatisticas que no momento não tem nada
estatisticas <- matrix(1:ncol,ncol=ncol,nrow=nrow)
# Para cada video estou armazenado as estisticas com a funcao get_stats()
for (j in 1:nrow){
infos <- unlist(get_stats(video_id=id[j]))
estatisticas[j,] <- infos
}
# Transforamndo de matriz para data frame
estatisticas <- as.data.frame(estatisticas)
# Colocando nome nas colunas
nome <- names(unlist(get_stats(video_id=id[1])))
colnames(estatisticas) <- nome
# Juntando a base estatistica com canal
estatisticas <- merge(estatisticas, canal, by.y="video_id", by.x="id")
# Selecionando somente as colunas estatisticas,title e viewCount ate publishedAt
estatisticas <- select(estatisticas,title, viewCount:publishedAt)
# Manipulando as datas
estatisticas$publishedAt <- as_date(estatisticas$publishedAt)
4º passo (opicional): Exportar para csv ou qualquer outra extensão
write.csv2(estatisticas,"youtubeR.csv")
Apesar desse passo ser opcional, aconselha-se fazê-lo
Usando ggplot2
Gráfico 1
base <- estatisticas
base$viewCount <- as.numeric(as.character(estatisticas$viewCount))
base$title <- as.character(estatisticas$title)
base <- arrange(base, viewCount)
fig1 <- ggplot(base,aes(x=reorder(title,viewCount),y=viewCount))+
geom_bar(stat="identity") +
coord_flip()+
labs(y = "Número de visualizações", x = "Nome do video")
fig1
Gráfico 2
##Diferença de dias
hoje <- today("GMT")
base$diferenca <- hoje-base$publishedAt
base$diferenca <- as.numeric(base$diferenca)
base <- select(base,title,viewCount,views_por_dias,diferenca,everything())
#Views por dias
base$views_por_dias <- base$viewCount/base$diferenca
base <- arrange(base, views_por_dias)
fig2 <- ggplot(base,aes(x=reorder(title,views_por_dias),y=views_por_dias))+
geom_bar(stat="identity") +
coord_flip()+
labs(y = "Número de visualizações por dia", x = "Nome do video")
fig2
Problemas http
As vezes pode ocorrer um erro ao utilizar a função yt_search() (error http 401), caso isto aconteça vá na pasta em que seu script esta salvo e delete os seguintes arquivos: .gitignore e .httr-oauth
Outro possível erro é o error http 403, nesse caso não há muito o que ser feito. Como esse é um serviço 0800 o próprio Google limita o número de acessos, mas fique calmo que depois de 24:00 do horario pacifico (pacific time) o próprio libera novamente o acesso.
Autoria: Gabriel Mizuno e Luciane Alcoforado