Una vez instalada y cargada la paquetería, procedemos a efectuar nuestro análisis, en este caso trataremos de conocer de forma indirecta las preferencias de cierta audiencia en particular. De esta forma, los pasos a seguir son los siguientes:
- Buscar los videos relacionados con la audiencia de interés a través de términos clave como por ejemplo: Obama, Trump, EPN, etc.
- Identificar a los usuarios que efectuaron un comentario sobre alguno de los videos hallados en el punto anterior.
- Hallar las Playlist a las que los usuarios detectados en el paso 2, le han dado "Me gusta".
- Detectar los videos que están contenidos en cada Playlist y extraer el titulo (en este caso se trabaja con los títulos de los videos, pero se puede trabajar con la categoría, los tags, etc.) de cada uno de los videos.
- Elaborar un gráfico de nube de palabras como el que se muestra a continuación:
Pasando ahora al código que se emplea para tal análisis, debemos en primer lugar autenticarnos para tener acceso a las API's de YouTube mediante el siguiente código:
yt_oauth("TU_ID_DE_CLIENTE.apps.googleusercontent.com",
"TU_CLIENT_SECRET")
Para obtener tus credenciales, lee el siguiente enlace: https://developers.google.com/youtube/registering_an_application
# Buscamos el tópico que nos interesa:
videos = yt_search('TÚ_TÓPICO')
# Generamos la lista de usuarios que han comentado el video
LISTA = list()
for (i in 1:length(videos)){
LISTA[[i]] = get_comment_threads(c(video_id = videos[i,1]))
}
# Dado que no todos los videos asociados al termino que buscamos tienen comentarios, se debe efectuar una "limpieza" de los elementos nulos de la lista:
LISTA = LISTA[sapply(LISTA, length)>0]
# Se juntan las bases de datos de la lista en una sola base de datos
data = do.call('rbind', LISTA)
## Listar a usuarios que interactuaron con videos de "TÚ_TÓPICO" de interés
# Nombres de usuario
NOMBRES = data.frame(table(data$authorDisplayName))
names(NOMBRES) = c('USUARIO','Frec')
NOMBRES = NOMBRES[order(-NOMBRES$Frec),]
#### Generar las ID's playlist a las que los usuarios han dado like
PLAY_L = list()
for (i in 1:length(ID_canal)){
PLAY_L[[i]] = list_channel_resources(filter = c(channel_id = ID_canal[i]),
part = "contentDetails")$items[[1]]$contentDetails$relatedPlaylists$likes
}
PLAY_L = unlist(PLAY_L[sapply(PLAY_L, length)>0])
#### Todos los ID's videos en cada playlist
VIDS_L = list()
for (i in 1:length(PLAY_L)){
VIDS_L[[i]] = get_playlist_items(filter = c(playlist_id = PLAY_L[i]),
max_results = 500)$contentDetails.videoId[which(!is.na(vids$contentDetails.videoId))]
}
VIDS_L = VIDS_L[sapply(VIDS_L, length)>0]
ID_VIDS = unlist(VIDS_L)
ID_VIDS = ID_VIDS[!is.na(ID_VIDS)]
#### Título de todos los videos
TIT_VID = list()
for (i in 1:length(ID_VIDS)){
TIT_VID[[i]] = get_video_details(video_id=ID_VIDS[i])$title
}
TIT_VID = unlist(TIT_VID)
Hasta este punto, ya hemos generado los títulos de los videos que son de agrado para nuestra audiencia de interés. Por lo que podemos efectuar la limpieza de nuestra base con el paquete "tm" (del cual haremos uso en algún blog futuro) y con el paquete "wordcloud" generar el gráfico de nube de palabras.
Otras alternativas al análisis aquí propuesto, es analizar los comentarios sobre los videos, las tendencias, las geolocalizaciones, así como otras estadísticas más que nos ofrecen las API's de YouTube en conjunto con el paquete "tuber".
yt_oauth("TU_ID_DE_CLIENTE.apps.googleusercontent.com",
"TU_CLIENT_SECRET")
Para obtener tus credenciales, lee el siguiente enlace: https://developers.google.com/youtube/registering_an_application
# Buscamos el tópico que nos interesa:
videos = yt_search('TÚ_TÓPICO')
# Generamos la lista de usuarios que han comentado el video
LISTA = list()
for (i in 1:length(videos)){
LISTA[[i]] = get_comment_threads(c(video_id = videos[i,1]))
}
LISTA = LISTA[sapply(LISTA, length)>0]
# Se juntan las bases de datos de la lista en una sola base de datos
data = do.call('rbind', LISTA)
## Listar a usuarios que interactuaron con videos de "TÚ_TÓPICO" de interés
# Nombres de usuario
NOMBRES = data.frame(table(data$authorDisplayName))
names(NOMBRES) = c('USUARIO','Frec')
NOMBRES = NOMBRES[order(-NOMBRES$Frec),]
#### Generar las ID's playlist a las que los usuarios han dado like
PLAY_L = list()
for (i in 1:length(ID_canal)){
PLAY_L[[i]] = list_channel_resources(filter = c(channel_id = ID_canal[i]),
part = "contentDetails")$items[[1]]$contentDetails$relatedPlaylists$likes
}
PLAY_L = unlist(PLAY_L[sapply(PLAY_L, length)>0])
#### Todos los ID's videos en cada playlist
VIDS_L = list()
for (i in 1:length(PLAY_L)){
VIDS_L[[i]] = get_playlist_items(filter = c(playlist_id = PLAY_L[i]),
max_results = 500)$contentDetails.videoId[which(!is.na(vids$contentDetails.videoId))]
}
VIDS_L = VIDS_L[sapply(VIDS_L, length)>0]
ID_VIDS = unlist(VIDS_L)
ID_VIDS = ID_VIDS[!is.na(ID_VIDS)]
#### Título de todos los videos
TIT_VID = list()
for (i in 1:length(ID_VIDS)){
TIT_VID[[i]] = get_video_details(video_id=ID_VIDS[i])$title
}
TIT_VID = unlist(TIT_VID)
Hasta este punto, ya hemos generado los títulos de los videos que son de agrado para nuestra audiencia de interés. Por lo que podemos efectuar la limpieza de nuestra base con el paquete "tm" (del cual haremos uso en algún blog futuro) y con el paquete "wordcloud" generar el gráfico de nube de palabras.
Otras alternativas al análisis aquí propuesto, es analizar los comentarios sobre los videos, las tendencias, las geolocalizaciones, así como otras estadísticas más que nos ofrecen las API's de YouTube en conjunto con el paquete "tuber".
No hay comentarios.:
Publicar un comentario