Nombres Más Populares en EUA Cada Año, Análisis en R.

In [1]:
# Muestra la fecha de última ejecución del proyecto
print(paste0("Última ejecución: ", date()))
[1] "Última ejecución: Tue Oct 22 14:29:01 2019"

Contenido

  1. Introducción
  2. Preparación
  3. Nombres de Mujeres
  4. Nombres de Hombres
  5. Coméntanos
















Introducción

Utilizando las bases de datos de la Administración del Seguro Social, analizamos los nombres más usados en US en cada año desde 1880 hasta 2017 y crearemos interesantes gráficos dinámicos.
Será interesante desvelar la existencia de coincidencias entre los nombres más populares y sucesos socio-culturales como el éxito de algún álbum musical o alguna producción cinematográfica.
Con los ejercicios de este proyecto podremos practicar el uso de variables, dataframes, ciclos y visualizaciones dinámicas con ggplot2 y plotly.



Descarga aquí la base de datos:

Social Security

Regresar al inicio



Preparación del Proyecto

Importamos las librerías que usaremos en el proyecto. La librería dplyr nos permitirá realizar manipulación de dataframes mientras que las librerías ggplot2 y plotly nos permitirán crear interesantes visualizaciones.

In [2]:
# Con este comando desactivamos la impresión de mensaje relacionados con la librerías
#options(warn=-1)
suppressMessages(library(dplyr))
suppressMessages(library(plotly))

library(dplyr)
library(ggplot2)
library(plotly)
library(RColorBrewer)
library(htmlwidgets)

Establecemos el directorio de trabajo en donde se encuentran los archivos con los datos

In [3]:
setwd("/home/pakin/Documents/names")

Importamos los 139 archivos (uno por cada año)

In [4]:
temp = list.files(pattern="*.txt")

myfiles = lapply(temp, read.csv, header = FALSE)

#head(myfiles)

Regresar al inicio


Nombres de Mujeres

Filtramos el dataframe eligiendo sólo el primer renglón y los registros de mujeres

In [5]:
pop_names <- filter(data.frame(myfiles[1]), V2 == "F")[1, c(1, 3)]

Con el siguiente ciclo for procesamos todos los archivos de datos tomando la primera fila (con la frecuencia máxima) y filtrándolo por la variable correspondiente al sexo de la persona. El resultado lo integramos en un sólo dataframe llamado pop_names.

In [6]:
for(i in 2:length(myfiles)){

  pop_names <- rbind(pop_names, filter(data.frame(myfiles[i]), V2 == "F")[1 , c(1,3)])
  
}

Establecemos niveles (categorías) para la variable tipo factor V1 (nombres)

In [7]:
pop_names$V1 <- factor(pop_names$V1, levels = unique(pop_names$V1))

Creamos una serie con los años desde 1880 hasta 2017

In [8]:
Year <- seq(1880, 2017, 1)

Creamos un sólo dataframe con nombre, frecuencia y año

In [9]:
pop_names <- cbind(pop_names, Year)

Renombramos las columnas y el resultado es un dataframe en donde cada renglón contiene la información del nombre con mayor frecuencia el correspondiente año.

In [10]:
names(pop_names) <- c("NOMBRE", "FRECUENCIA", "AÑO")
head(pop_names, 10)
A data.frame: 10 × 3
NOMBREFRECUENCIAAÑO
<fct><int><dbl>
Mary 70651880
Mary 69191881
Mary 81481882
Mary 80121883
Mary 92171884
Mary 91281885
Mary 98891886
Mary 98881887
Mary117541888
Mary116481889

Observemos la estructra del dataframe

In [11]:
str(pop_names)
'data.frame':	138 obs. of  3 variables:
 $ NOMBRE    : Factor w/ 10 levels "Mary","Linda",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ FRECUENCIA: int  7065 6919 8148 8012 9217 9128 9889 9888 11754 11648 ...
 $ AÑO       : num  1880 1881 1882 1883 1884 ...

Generamos un gráfico de barras utilizando la librería ggplot2 añadiendo algunos estéticos y temas.

In [12]:
p <- ggplot(pop_names, aes(x = AÑO, y = FRECUENCIA)) +
  
    geom_bar(aes(fill = NOMBRE), stat = "identity") +

    labs(title = "Nombres Femeninos Más Usados en US por Año") +

    theme(plot.title = element_text(hjust = 0)) +

    scale_x_continuous(breaks = seq(1880, 2015, by = 10)) +

    scale_y_continuous(breaks = seq(0, 100000, by = 10000)) +

    scale_fill_brewer(palette = "Set3") +

    theme(legend.text = element_text(size = 10)) +

    theme(legend.position = c(0, 0.7)) +

    theme(legend.background = element_rect(size=0.1, linetype = "solid", colour = "darkblue"))
In [13]:
p <- ggplotly(p)
In [14]:
setwd("/home/pakin/Documents/desarrolloWeb/PakinV4/me/images")
In [15]:
htmlwidgets::saveWidget(p, "nombresm.html")
In [16]:
setwd("/home/pakin/Documents/pakin/images")
In [17]:
htmlwidgets::saveWidget(p, "nombresm.html")

Increíblemente, el nombre Mary se mantuvo durante 75 años como el nombre más usado. También observamos que el uso del nombre Linda explota desde 1947, coincidiendo con la llegada de la canción Linda (Ray Noble & Buddy Clark, Columbia Records) a la revista Billboard el 21 de marzo de 1947 y alcanzando el número uno durante varios meses. Sobre el nombre Jennifer, existen diferentes análisis de por qué fue el nombre más popular durante aproximadamente 15 años, solo hay que buscarlo en Google. El nombre más popular recientemente es Emma.

Regresar al inicio


Nombres de Hombres

Realizamos el mismo proceso ahora para nombres masculinos.

In [18]:
pop_names_m <- filter(data.frame(myfiles[1]), V2 == "M")[1, c(1, 3)]
In [19]:
for(i in 2:length(myfiles)){

  pop_names_m <- rbind(pop_names_m, filter(data.frame(myfiles[i]), V2 == "M")[1, c(1,3)])
  
}
In [20]:
pop_names_m$V1 <- factor(pop_names_m$V1, levels = unique(pop_names_m$V1))
In [21]:
Year <- seq(1880, 2017, 1)
In [22]:
pop_names_m <- cbind(pop_names_m, Year)
In [23]:
names(pop_names_m) <- c("NOMBRE", "FRECUENCIA", "AÑO")
head(pop_names_m, 10)
str(pop_names_m)
A data.frame: 10 × 3
NOMBREFRECUENCIAAÑO
<fct><int><dbl>
John96551880
John87691881
John95571882
John88941883
John93881884
John87561885
John90261886
John81101887
John92471888
John85481889
'data.frame':	138 obs. of  3 variables:
 $ NOMBRE    : Factor w/ 8 levels "John","Robert",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ FRECUENCIA: int  9655 8769 9557 8894 9388 8756 9026 8110 9247 8548 ...
 $ AÑO       : num  1880 1881 1882 1883 1884 ...
In [24]:
p <- ggplot(pop_names_m, aes(x = AÑO, y = FRECUENCIA)) +
  
    geom_bar(aes(fill = NOMBRE), stat = "identity") +

    labs(title = "Nombres Masculinos Más Usados en US por Año") +

    scale_x_continuous(breaks = seq(1880, 2015, by = 10)) +

    scale_y_continuous(breaks = seq(0, 100000, by = 10000)) +

    scale_fill_brewer(palette = "Set1") +

    theme(plot.title = element_text(hjust = 0)) +

    theme(legend.text = element_text(size = 10)) +

    theme(legend.position = c(0, 0.7)) +

    theme(legend.background = element_rect(size = 0.1, linetype = "solid", colour = "darkblue"))
In [25]:
p <- ggplotly(p)
In [26]:
setwd("/home/pakin/Documents/desarrolloWeb/PakinV4/me/images")
In [27]:
htmlwidgets::saveWidget(p, "nombresh.html")
In [28]:
setwd("/home/pakin/Documents/pakin/images")
In [29]:
htmlwidgets::saveWidget(p, "nombresh.html")

Sin ser una sorpresa, el nombre más popular durante 45 años fue John. La popularidad en el uso del nombre James, coincide con el estreno de la película "El regreso de Frank James" el 6 de agosto de 1940 y protagonizada por Henry Fonda. El nombre de Micheal se mantuvo durante unos 43 años como el más popular. El nombre de Jacob comienza a ser popular a partir de 1999, coincidiendo con el estreno de la película "Jakob the Liar", protagonizada por Robin Williams. Recientemente el nombre más popular es Liam.

Regresar al inicio


Síguenos en Facebook


Pakin en Facebook

Esperamos con gusto tus comentarios y sugerencias para incrementar y mejorar este proyecto: