Curso: Visualización de Datos con enfoque reproducible de Data Science


De R a la web: Caso Univariado.

En este ejercicio publicaremos en la web una gráfica hecha en R. El gráfico será estático y tendrá los elementos principales.

  1. Preparando RStudio
  1. Preparando el gráfico
library(htmltab)

url= "https://es.wikipedia.org/wiki/Elecciones_parlamentarias_de_Per%C3%BA_de_2016" 

xpathTabla='//*[@id="mw-content-text"]/div/table[6]/tbody/tr/td/table/tbody'


congreso = htmltab(doc = url, 
                   which = xpathTabla) 

str(congreso)
## 'data.frame':    130 obs. of  6 variables:
##  $ Distrito Electoral  : chr  "Amazonas(al 100,00%)" "Amazonas(al 100,00%)" "Áncash(al 100,00%)" "Áncash(al 100,00%)" ...
##  $ Escaños             : chr  "2" "2" "5" "5" ...
##  $ Congresistas electos: chr  "2" "1" "2" "1" ...
##  $ Congresistas electos: chr  "Marita Herrera Arévalo" "Miguel Antonio Castro Grández" "Eloy Ricardo Narváez Soto" "María Elena Foronda Farro" ...
##  $ Partido             : chr  "Fuerza Popular" "Fuerza Popular" "Alianza para el Progreso" "Frente Amplio" ...
##  $ Votos               : chr  "15 312" "12 939" "20 941" "9 094" ...
congresoOK=congreso[,-c(3)] # eliminé
# de:
table(congresoOK$Partido)
## 
##           Acción Popular Alianza para el Progreso          Alianza Popular 
##                        5                        9                        5 
##            Frente Amplio           Fuerza Popular   Peruanos por el Kambio 
##                       20                       73                       18
# a:

##guardar valores
TableFA=table(congresoOK$Partido)

# get vectors for columns:
VALUES=names(TableFA)
FREQUENCIES=as.vector(TableFA)

# A data frame from those vectors:
congresoOK_DF=data.frame(partido=VALUES,   
                         conteo=FREQUENCIES)
# obtuviste:
congresoOK_DF
##                    partido conteo
## 1           Acción Popular      5
## 2 Alianza para el Progreso      9
## 3          Alianza Popular      5
## 4            Frente Amplio     20
## 5           Fuerza Popular     73
## 6   Peruanos por el Kambio     18
  1. Decidir escala de medicion: la variable partido está en escala nominal.

  1. Decidir tipo de gráfico:

    • Si es Nominal: Barras y “Chupetin” (Lollipop), pero reordenando eje X por altura en eje Y. Evitar gráficos circulares (Pieplot).
    • Si es Ordinal: Las anteriores y de “Cajas y Bigotes” (Boxplot). Nunca reordenar eje X.
    • Si es numerica: Boxplot e Histograma.

Aqui tenemos la solución inicial usando la biblioteca ggplot2:

# verificado si funciona:

library(ggplot2)
base=ggplot(congresoOK_DF,aes(x=partido,y=conteo))
base + geom_bar(stat = 'identity')

Para reordenar, como se sugirió, hacemos:

# REORDENANDO
congresoOK_DF_Ord=congresoOK_DF[order(-congresoOK_DF$conteo),]

#POSICIONES ORDENADAS
WHERE=congresoOK_DF_Ord$partido


base=ggplot(congresoOK_DF_Ord,aes(x=partido,y=conteo))
barp=base + geom_bar(stat = 'identity') + 
            scale_x_discrete(limits=WHERE) # NECESARIO
barp

  1. Colorear. Mientras menos color mejor.
barp= base + geom_bar(stat='identity',
                      fill ='white', color='black') + 
             scale_x_discrete(limits=WHERE)

barp=barp + theme_classic()

barp

  1. Titular: Los titulos de los ejes salen por defecto, hay que modificar. Decidir título, tal que el gráfico sea la respuesta.
text1="¿Tenemos un Congreso competitivo?"
text2="Partidos"
text3="Conteo"
text4="Fuente: Wikipedia"

barp= barp + labs(title=text1,
            x =text2, 
            y = text3,
            caption = text4) 
barp

  1. Corregir detalles:
library(stringr)
barp= barp + theme(plot.caption = element_text(hjust = 0),
                   plot.title = element_text(hjust = 0.5,size=15),
                   axis.text.x = element_text(angle=45,hjust = 1)) + 
             scale_x_discrete(limits=WHERE,
                              labels=function(x) str_wrap(x, width = 10))

barp

  1. Decidir si se necesita anotaciones:
barp= barp + annotate("segment", 
                      x = 0, y = 66,xend = 6.5, yend = 66,
                      linetype=2,
                      colour = "blue") 

barp
barp= barp + annotate("text", label = "UMBRAL DE MAYORIA ABSOLUTA",
                      x = 4, y = 70, 
                      size = 3, 
                      colour = "grey") +
             annotate("text", label = "PARTIDO\nOPOSITOR",
                      x = 1, y = 40, 
                      size = 3,fontface =2,
                      colour = "grey40") +
             annotate("text", label = "PARTIDO\nDE\nGOBIERNO",
                      x = 3, y = 10, 
                      size = 3,fontface =2,
                      colour = "grey40")

barp 
barp + geom_text(aes(label=conteo),
                 vjust='bottom',nudge_y=1,
                 size=3,
                 color='gray')

  1. Crear cuenta en RPubs
  1. Usando Zotero
  1. Preparar reporte


AUSPICIO:

RECONOCIMIENTO

EL Dr. Magallanes agradece a la Pontificia Universidad Católica del Perú, por su apoyo en la participación en la Escuela ALACIP.

El autor reconoce el apoyo que el eScience Institute de la Universidad de Washington le ha brindado desde el 2015 para desarrollar su investigación en Ciencia de Datos.