download.file(
url = "https://eanguianopita.github.io/docs/curso_R/Datos/bank.csv",
destfile = "bank.csv")
Gráficas con R
base
Este documento es parte del curso Introducción a la programación en R
para Ciencias Sociales
Introducción
En los siguientes ejercicios usaremos un conjunto de datos llamado “Bank Marketing Data Set” disponibles en el UC Irvine Machine Learning Repository. La base de datos contiene información sobre personas contactadas por una camapaña de marketing directo de un banco de Portugal.
Ejercicio #1
Descarga una copia de los datos desde un repositorio en internet usando el siguiente comando:
Importa el archivo que acabas de decargar usando los botones del panel Environment
. Asegurate de establecer los separadores como ;
. El nuevo objeto deberá llamarse data
en la memoria de R
.
Utiliza las funciones colnames()
, head()
y dim()
para conocer los nombres de las columnas de la base de datos, visualizar las primeras 5 filas y determinar la dimensión del dataset
, respectivamente.
# Visualizar nombres de las columnas
colnames(data)
# Visualizar primeras 5 filas del dataset
head(data, n = 5)
# Determinar la dimensión del dataset (filas y columnas)
dim(data)
Ahora cambia el nombre de la columna marital
por estado_civil
.
class(data$marital)
str(data$marital)
colnames(data)[3] <- "estado_civil"
Usa las funciones lapply()
y class()
para determinar el tipo de datos de cada columna del objeto data
. Conocer esto nos será muy útil más adelante.
lapply(data, class)
Por último, haz un resumen de los datos utilizando la función summary()
. Esta función acepta cualquier tipo de objeto como argumento y nos devuelve un resumen descriptivo de los datos de cada uno de sus elementos.
summary(data)
Ejecicio 2
Los gráficos de barras son útiles para mostrar la frecuencia con la que se observan los datos de una variable discreta. Cada barra corresponde a una de las categorías de la variable.
Usando la función plot()
genera un gráfico de barras dando como único argumento del eje X la variable education
.
plot(data$education) # Error ¿por qué?
plot(as.factor(data$education))
Ajusta la gráfica usando los argumentos main
, xlab
, ylab
y col
. El título de la gráfica debe decir “Educación de los encuestados”. Los ejes x e y deben decir, “Nivel educativo” y “Frecuencia”, respectivamente. Ingresa un vector de colores para que cada barra tenga un color distinto.
plot(x = as.factor(data$education), main = "Educacíón de los encuestados",
xlab = "Nivel educativo", ylab = "Frecuencia",
col = c("royalblue", "seagreen", "purple", "grey"))
Ahora utiliza la función barplot()
para generar una gráfica similar. Nota que la función necesita como argumento de entrada una matriz que represente una tabla de contingencia. Este tipo de tablas pueden ser generadas fácilmente con la función table()
.
<- table(as.factor(data$education)) # Genera un conteo
tab_educ
tab_educ
barplot(tab_educ,
main = "Educacíón de los encuestados",
xlab = "Nivel educativo", ylab = "Frecuencia",
col = c("royalblue", "seagreen", "purple", "grey"))
En la gráfica anterior, los datos están desordenados. Utiliza la función sort()
para ordenar la tabla de frecuencias en orden decreciente.
<- sort(tab_educ, decreasing = T)
tab_educ
tab_educ
barplot(tab_educ,
main = "Educacíón de los encuestados",
xlab = "Nivel educativo", ylab = "Frecuencia",
col = c("royalblue", "seagreen", "purple", "grey"))
Supongamos que queremos analizar la proporción de encuestados que adeudan un crédito según su nivel educativo. Utiliza la función table()
para calcular de nueva cuenta una tabla de contigencia usando las variables loan
y education
.
str(data$loan)
str(data$education)
<- table(data$loan, data$education)
tab_prestamo
tab_prestamo
barplot(tab_prestamo) # Gráfica apilada (2 categorias)
Supon ahora que deseamos graficar la proporción de encuestados por nivel educativo que cuentan con un prestamo bancario. Para tal propósito, nosotros podemos usar la función prop.table()
.
Esta función nos pide como argumento una tabla de contingencia generada por table()
y un valor para el argumento margin
. La lógica de este argumento es similar a la de la función apply()
.
- Si damos como argumento 1, las proporciones se calcularán agrupadas por renglón. Así, la suma de todos los renglones será la unidad.
- si damos como argumento 2, las proporciones se calcularán agrupadas por columna. La suma de las proporciones por columna será la unidad.
- Si no damos ningún argumento, las proporciones se calcularán usando toda la tabla como grupo. La suma de todas las celdas será la unidad.
A nosotros nos interesa obtener las proporciones por columna. Por lo tanto usaremos margin = 2
<- prop.table(tab_prestamo, margin = 2)
ptab_data
ptab_data
# Gráfica de barra por proporciones
barplot(ptab_data,
main = "Préstamos por nivel educativo",
xlab = "Nivel educativo", ylab = "Proporción",
col = c("royalblue", "grey"))
La gráfica anterior tiene un problema importante. No sabemos que representan las categorias en nuestras barras apiladas (¿qué indica el color azul y el gris?).
Para solucionar este problema nosotros podemos usar leyendas.
Ejercicio 3
Vamos a agregar una leyenda a la última gráfica que hicimos en el ejercicio anterior. Primero, necesitamos conocer las etiquetas que daremos como argumento a la función legend()
.
Determina cuantos valores únicos hay en el vector data$loan
. Cada uno de estos valores corresponderá a una etiqueta. Usa la función unique()
unique(data$loan)
En este ejercicio solo tenemos dos etiquetas: si y no. Este será el argumento de entrada de la función legend()
. Siguendo nuestro ejercicio, supongamos que la etiqueta “no” estará coloreada de “royalblue” y la etiqueta “yes” con “grey”. Estos colores están asignados al argumento fill
. El título de la leyenda debe decir “Préstamo”.
Por último, la ubicación de la leyenda sobre el gráfico posicionala en la parte superior derecha usando el argumento “topright”.
barplot(ptab_data,
main = "Préstamos por nivel educativo",
xlab = "Nivel educativo", ylab = "Proporción",
col = c("royalblue", "grey"))
legend(x = "topright", legend = c("No", "Yes"), fill = c("royalblue", "grey"),
title = "Préstamo")
Nota que estamos trabajando por capas. Primero generamos el gráfico y encima posicionamos la capa con la leyenda.
Ejercicio 4
Ahora necesitamos elaborar un histograma con las edades (age) de las personas encuestadas. Modifica la gráfica para que el título principal diga “Histograma de las edades” y las etiquetas de los ejes X e Y digan “Edad” y “Frecuencia”, respectivamente. Por último, cambia el color de las barras a morado (purple).
hist(x = data$age, main = "Histograma de Edad",
xlab = "Edad", ylab = "Frecuencia",
col = "purple")
Ejericio 5
Por último, genera una figura que contenga de forma simultánea las gráficas que generamos en los ejercicios 3 y 4. Guarda la figura en formato .png
png("Figura1.png")
par(mfrow = c(2,1))
barplot(ptab_data,
main = "Préstamos por nivel educativo",
xlab = "Nivel educativo", ylab = "Proporción",
col = c("royalblue", "grey"))
legend(x = "topright", legend = c("No", "Yes"), fill = c("royalblue", "grey"),
title = "Préstamo")
hist(x = data$age, main = "Histograma de Edad",
xlab = "Edad", ylab = "Frecuencia",
col = "purple")
dev.off()