Facultad de Derecho y Ciencia Politica

Escuela de Ciencia Política

Guia de Clase de ESTADISTICA


Profesor: Dr. José Manuel MAGALLANES, Ph.D


Exploración Categórica NOMINAL de tablas web

Aqui veras como descargar data de una tabla que está en la web. El proceso es sencillo, pero requiere concentración. El ejemplo aqui esta planteado usando GoogleChrome.

Vamos a ver una data sobre muertos en guerras en wikipedia:

  1. Leer Datos

Guarda el link de wiki en un objeto de R, aqui el objeto se llama LINKGUERRAS:

LINKGUERRAS = "https://en.wikipedia.org/wiki/List_of_wars_by_death_toll" 

Visita ese link, y ve con el mouse a cada tabla (son 3). Elije la opcion inspeccionar usando el boton derecho:

Si ya has encontrado la tabla en los codigos, copia el XPATH (usando el boton derecho del mouse):

Has eso para cada una de las tres tablas:

library(htmltab) #instalemos primero 


ancient = htmltab(doc = LINKGUERRAS, 
               which ='//*[@id="mw-content-text"]/div/table[4]') # aqui va XPATH

medieval = htmltab(doc = LINKGUERRAS, 
               which ='//*[@id="mw-content-text"]/div/table[6]') # aqui va XPATH
## Warning: Columns [Notes] seem to have no data and are removed. Use
## rm_nodata_cols = F to suppress this behavior
modern = htmltab(doc = LINKGUERRAS, 
               which ='//*[@id="mw-content-text"]/div/table[7]') # aqui va XPATH
## Warning: Columns [Notes] seem to have no data and are removed. Use
## rm_nodata_cols = F to suppress this behavior
  1. Identificando nombres de variables:

Mira las columas que tienes:

names(ancient)
## [1] "War"        "Deathrange" "Date"       "Combatants" "Location"  
## [6] "Notes"
names(medieval)
## [1] "War"        "Deathrange" "Date"       "Combatants" "Location"
names(modern)
## [1] "War"        "Deathrange" "Date"       "Combatants" "Location"

Quieres combinar los tres en uno solo. Eso se puede hacer si todas las columnas tienen nombres identicos.

  1. Sub conjuntos necesitados:

Quedate con estas columnas:

guerras1=ancient[,c("War","Location")]
guerras2=medieval[,c("War","Location")]
guerras3=modern[,c("War","Location")]

Cada data frame tiene ahora 2 columnas cada uno.

  1. Juntando sub conjuntos

Usa la funcion rbind para poner las tablas una debajo de la otra:

guerras=rbind(guerras1,guerras2,guerras3)

El dataframe guerras tiene todo:

str(guerras)
## 'data.frame':    166 obs. of  2 variables:
##  $ War     : chr  "Conquests of Cyrus the Great" "Greco–Persian Wars" "Samnite Wars" "Wars of Alexander the Great" ...
##  $ Location: chr  "Middle East" "Greece" "Italy" "Middle East / North Africa / Central Asia / India" ...

Ahora a analizar la columna Location (la unica que vale la pena y es nominal).

Practica calificada:

  1. Mejore el gráfico de barras mostrado alterando el codigo entregado; en concreto, ordene las barras segun tamaño de fallecidos y mejorando el texto del eje X. Use solo los paises/zonas con 3 o más guerras.
library(ggplot2)
mititulo="Ubicacion de las Guerras en la historia"
misubtitulo="Solo con mas 25000 muertos"
base = ggplot(data=guerrasTable,aes(x=Paises,
                                    y=Conteo))
bar1 = base + geom_bar(stat='identity')
bar1 = bar1 + labs(x="Pais/zona", y="Cantidad",
                   title=mititulo, 
                   subtitle = misubtitulo,
                   caption = "Fuente: Wikipedia")
bar1= bar1 + theme(axis.text.x = 
                     element_text(angle = 0,
                                  size=10,
                                  hjust = 1))
bar1 + theme(axis.text.x = element_text(angle = 25,size=5,hjust = 1))

  1. Cual es el código para calcular la moda de la columna pais/zona?

  2. Cual es el indice de HH para la columna pais/zona?

  3. Cual es el indice de Representatividad Efectiva (Laakso - Taagepera)