Letras del Folklore Argentino: ¿A qué le cantan?
El siguiente es un análisis exploratorio para resolver una curiosidad: ¿A qué le canta el folclore Argentino?. El Objetivo es, inicialmente, extraer las palabras y frases más utilizadas. Luego trataremos de ampliar el análisis tratando de agrupar las canciones en distintas categorías, descubrir temáticas en común, agrupar autores por estilo, etc.
Conjunto de Datos
library(dplyr)
library(tidytext)
library(wordcloud)
library(RColorBrewer)
library(ggplot2)
knitr::opts_chunk$set(echo = TRUE)
dat <- readr::read_csv("../../static/data/analisis-letras-folclore/datosCanciones.csv")
# Un poco de Limpieza Extra: Hay 7 Canciones que tienen 2 canciones adentro
# http://www.mifolkloreargentino.com.ar/letras-de-canciones-de-la-yunta/al-jardin-de-la-republica
dat <- dat %>% filter(!grepl("Letra y Música:",letra))
Los datos fueron extraidos de http://www.mifolkloreargentino.com.ar/:
- Cantidad de Artistas: 132
- Cantidad de Canciones: 3665
Hay que tener en cuenta que el Universo de canciones a analizar no es exhaustivo, está acotado a lo disponible en la fuente de datos. Otra consideración importante es que si varios artistas cantan la misma canción, las palabras y frases de dicha canción serán contabilizadas todas las veces. Algunos ejemplos de las canciones:
dat %>%
slice(sample(1:nrow(dat), 10)) %>%
select(artista, nombre_cancion) %>%
head(10)
## # A tibble: 10 x 2
## artista nombre_cancion
## <chr> <chr>
## 1 Atahualpa Yupanqui Zambita de alto verde
## 2 Jorge Cafrune La familia de Juanito Laguna
## 3 Luciano Pereyra Parecido a mí
## 4 Chaqueño Palavecino Mataco Diaz
## 5 Cuti y Roberto Carabajal Cambalache
## 6 Antonio Tormo Cuando no me quieras
## 7 Mercedes Sosa Venas abiertas
## 8 Jorge Cafrune Zamba de un cantor
## 9 Jorge Cafrune Albahaca sin carnaval
## 10 Tamara Castro Coplitas de pie quebrado
Pre-Análisis
¿Quiénes son los autores con más canciones en el conjunto de datos?
dat %>%
group_by(artista) %>%
summarise(canciones = n()) %>%
arrange(desc(canciones)) %>%
head(10)
## # A tibble: 10 x 2
## artista canciones
## <chr> <int>
## 1 Jorge Cafrune 283
## 2 Chaqueño Palavecino 252
## 3 Horacio Guarany 199
## 4 Mercedes Sosa 182
## 5 Soledad Pastorutti 172
## 6 Antonio Tarrago Ros 162
## 7 Peteco Carabajal 147
## 8 Los Nocheros 124
## 9 Abel Pintos 123
## 10 Los Tekis 111
¿Cuál es la canción más repetida en el conjunto de datos?
dat %>%
group_by(nombre_cancion) %>%
summarise(cantidad = n()) %>%
arrange(desc(cantidad)) %>%
head(10)
## # A tibble: 10 x 2
## nombre_cancion cantidad
## <chr> <int>
## 1 Añoranzas 7
## 2 Chacarera de un triste 7
## 3 De Simoca 7
## 4 Entre a mi pago sin golpear 7
## 5 Canción del jangadero 6
## 6 Guitarrero 6
## 7 Kilometro 11 6
## 8 Amargura 5
## 9 Balderrama 5
## 10 Chakay manta 5
¿Qué palabra es más cantada en el Folclore Argentino?
# TidyText no tiene por defecto un diccionario de Stop Words en Español -.-"
stopWords <- scan("http://www.webmining.cl/wp-content/uploads/2011/03/stopwords.es.txt", character())
customStopWords <- strsplit("ay am do re rem mi mi7 mim fa sol la la7 lam si si7 vas pa vos bis has estribillo", " ")[[1]]
stopWords <- c(stopWords, customStopWords)
tidyText <- dat %>%
unnest_tokens(palabra, letra) %>%
filter(!(palabra %in% stopWords))
top <- tidyText %>%
count(palabra, sort = TRUE) %>%
head(15)
ggplot(top, aes(x=reorder(palabra, n), y = n)) +
geom_col() +
coord_flip() +
theme_minimal() +
labs(title = "15 Palabras más usadas en el Folklore Argentino",
subtitle = "El gráfico contabiliza cuántas veces la palabra aparece en la letra de alguna canción. \nAnálisis en base a más de 3600 canciones.",
caption = "Fuente: Open Data Córdoba - blog.opendatacordoba.org",
x = "Palabra", y = "Cantidad de veces usada")
Amor es la palabra más cantada… Qué belleza!
wordsCloud <- tidyText %>%
count(palabra, sort = TRUE) %>%
select(palabra, n) %>%
head(50)
wordcloud2::wordcloud2(wordsCloud, minRotation = -pi/6, maxRotation = pi/6)
¿En cuántas canciones aparece la palabra amor?
cancionesAmor <- dat %>%
select(nombre_cancion, letra) %>%
distinct() %>%
filter(grepl("amor", letra)) %>%
nrow()
cancionesAmor
## [1] 1429
En 1429 canciones aparece la palabra Amor!