Gráficas básicas.

Antes de retomar nuestro análisis de la base de usuarios de Twitter, vamos a explorar algunas de las muchas opciones que nos ofrece la función plot( ). De manera muy general, esta función toma dos argumentos de entrada: la información del eje de las abscisas (eje x) y la información del eje de las ordenadas (eje y). Por default, R nos da una gráfica que no es precisamente muy bonita ni elegante, pero que nos permite hacer una exploración visual preliminar. Podemos personalizar muchas cosas en la gráfica con las opciones de la función: xlab =" " y ylab =" " para los nombre de los ejes, main =" " para el título de la gráfica, col =" " para el color, type =" " para el tipo de líneas o puntos que queremos, pch = para el tipo de símbolo, cex = para el tamaño del símbolo y lwd = para la anchura de las líneas. Veamos algunos ejemplos, graficando una función sencilla como y = sin(x).

x <- seq(0,6.3,0.1)                 # Creamos las coordenadas x y y a graficar.
y <- sin(x)
plot(x,y)                           # Gráfica estándard.

plot(x,y,pch=20)                    # Cambiamos el tipo de símbolo con pch.

plot(x,y,pch=20,cex=2,col="red")    # Cambiamos el tamaño de los puntos con cex y el color con col.

plot(x,y,type="l")                  # Cambiamos el tipo con type (l para línea).

plot(x,y,type="b",col="blue")       # Usamos type = "b" para puntos unidos con líneas.

plot(x,y,type="b",pch=20,
     xlab="eje x",
     ylab="sin(x)",
     main="Gráfica de la función seno") # Agregamos etiquetas a los ejes y título.

Podemos graficar una segunda función en el mismo panel con la función points( ), que toma exactamente los mismos argumentos y opciones que plot( ). Si queremos graficar con líneas en vez de puntos, usamos la función lines( ). Podemos agregar una leyenda con la función legend( ), en la cual hay que especificar dónde queremos que ésta aparezca, el vector de caracteres con las etiquetas, así como el tipo y color de puntos o líneas que queremos para las mismas. Lo ilustramos aquí con un ejemplo.

z <- cos(x)                                     # Creamos un vector para la función coseno.
plot(x,y,pch=20,col="blue")                     # Dos graficas de puntos superpuestas.
points(x,z,pch=20,col="red")
legend("bottomleft",legend=c("seno","coseno"),
       pch=c(20,20),col=c("blue","red"))

plot(x,y,type="l",lwd=2,col="darkgreen")          # Dos graficas de puntos superpuestas. 
lines(x,z,pch=20, lwd=2,col="darkviolet")         # Usamos lwd para cambiar la anchura de las líneas.
legend("bottomleft",legend=c("seno","coseno"),
       lty=c(1,1),col=c("darkgreen","darkviolet"))

Referimos al lector al sitio https://www.r-graph-gallery.com/42-colors-names.html para consultar los nombres de los colores que trae R por default, así como al sitio http://www.sthda.com/english/wiki/r-plot-pch-symbols-the-different-point-shapes-available-in-r para consultar los tipos de símbolos.

Diagrama de dispersión.

Retomemos la base que empezamos a analizar en la lección anterior. Intuitivamente, podríamos pensar que existe una correlación entre el número de seguidores y el número de amigos en los usuarios de Twitter. Recordemos que si una cuenta A sigue a una cuenta B, decimos que A es seguidor de B y que B es amigo de A. El número de seguidores y de amigos de cada cuenta en nuestra base aparecen en las columnas followers_count y friends_count respectivamente.

# Cargamos la bas de datos.
id <- "1Hmz0OJLJM0kF0eSnBSYOESVMJM5GeH7N"
datos <- read.csv(sprintf("https://docs.google.com/uc?id=%s&export=download", id))
# Gráfica de dispersión sencilla.
plot(datos$friends_count, datos$followers_count)

# La misma gráfica pero en escala logarítmica, mediante la opción log = "xy".
plot(datos$friends_count, datos$followers_count,log="xy",
     xlab="número de amigos", ylab="número de seguidores",
     main="Amigos vs Seguidores")
## Warning in xy.coords(x, y, xlabel, ylabel, log): 14 x values <= 0 omitted
## from logarithmic plot
## Warning in xy.coords(x, y, xlabel, ylabel, log): 51 y values <= 0 omitted
## from logarithmic plot

Podemos usar la función par(mfrow=c(n,m)) para crear un arreglo de gráficas de n filas por m columnas. Con la opción mar=c( , , , ), que es un vector de cuatro entradas, establecemos los márgenes en el siguiente orden: abajo, izquierda, arriba y derecha. Usamos esta función para hacer cuatro diagramas de dispersión con la información de la base de datos.

Nota: al hacer estos diagramas, estamos recibiendo unos warnings; esto ocurre porque estamos graficando en escala logarítmica y hay algunas cuentas con, por ejemplo, cero seguidores. El warning surge cuando R no sabe qué hacer con log(0). Por default, estos puntos son omitidos de la gráfica.

par(mfrow=c(2,2),mar=c(2,1,2,1))
plot(datos$friends_count, datos$followers_count,log="xy",
     main="Amigos vs Seguidores")
plot(datos$statuses_count, datos$followers_count,log="xy",
     main="Tuits vs Seguidores")
plot(datos$favourites_count, datos$followers_count,log="xy",
     main="Likes vs Seguidores")
plot(datos$listed_count, datos$followers_count,log="xy",
     main="Listas vs Seguidores")

Histogramas.

Con la función hist( ) creamos un histograma de un vector de datos. Por ejemplo, podemos usarla para crear un histograma del número de seguidores de los usuarios de Twitter de nuestra base de datos. Al hacerlo veremos una barra muy alta hasta la izquierda y muchas barras muy bajas, casi imperceptibles, a la derecha de la primera. Esto ocurre porque el número de seguidores probablemente sigue una distribución de cola pesada, es decir, hay unas pocas cuentas con muchos seguidores, mientras que la gran mayoría de las cuentas tienen muy pocos seguidores, en comparación. Para poderlo visualizar de una manera que nos sea más clara, haremos el histograma del logaritmo del número de seguidores.

Nota: la función hist( ) tiene muchas opciones, podemos especificar el número de barras, el tamaño de los bins, el color de las barras y muchas cosas más. Invitamos al lector a explorar estas opciones mediante help(hist).

# Histograma en escala normal.
hist(datos$followers_count)

# El mismo histograma en escala logarítmica.
hist(log(datos$followers_count),
     xlab = "Número de seguidores (log)",
     ylab = "Conteos",
     main = "Histograma del número de followers",
     col = "purple")

# Histogramas para el número de seguidores, amigos, favoritos y listas.
par(mfrow=c(2,2),mar=c(2,1,2,1))
hist(log(datos$followers_count),
     xlab = "",
     ylab = "",
     main = "Histograma del número de followers",
     col = "purple")
hist(log(datos$friends_count),
     xlab = "",
     ylab = "",
     main = "Histograma del número de followers",
     col = "red")
hist(log(datos$statuses_count),
     xlab = "",
     ylab = "",
     main = "Histograma del número de followers",
     col = "blue")
hist(log(datos$listed_count),
     xlab = "",
     ylab = "",
     main = "Histograma del número de followers",
     col = "orange")

En la siguiente lección vamos a introducir la biblioteca tidyverse (en realidad es un conjunto de bibliotecas), que nos servirá, junto con lo que hemos visto en esta lección para hacer un análisis exploratorio descriptivo bastante completo de bases de datos relativamente grandes y complejas.