The R Side

Eduardo Clark
MC2@IMCO

¿Qué es R?

  • Open Source
  • Analisis de Datos
  • Comunidad cooperativa
  • Visualización de datos
  • Mineria de Datos

Extracción de bases de datos

Ejemplo: Datos del Banco Mundial para el índice internacional

  Indicador <- c("PIB", "Superficie", "Población", "PEA", "FBCF", "Índice del estado de derecho", 
      "Cambio en km2 de àrea forestal en 5 años", "Uso de fertilizantes en la agricultura", 
      "Áreas naturales protegidas", "Emisiones de CO2", "Energía eléctrica de fuentes no contaminantes", 
      "Esperanza de vida", "Mortalidad en menores de cinco años", "Food production index", 
      "Mujeres en PEA", "Relación de mujeres a hombres en primaria y secundaria", 
      "PEA con licenciatura", "Crecimiento promedio del PIB", "Variabilidad del crecimiento del PIB", 
      "Indice de precios al consumidor", "Variabilidad del crecimiento de la inflación", 
      "Reservas Líquidas / Activos totales", "Índice de corrupción", "Mecanización del campo", 
      "Trabajadores en la agricultura", "Productividad agropecuaria por Ha", "Número de vuelos", 
      "Índice de intervencionismo del Gobierno", "Índice de calidad regulatoria", 
      "Índice de efectividad del Gobierno", "Gasto en salud", "Nivel de subsidio de la salud", 
      "Gasto en educación", "Llegadas de turistas", "Ingresos por turismo", "Exportaciones", 
      "Importaciones", "Inversión extranjera directa (neta)", "Militares", "Valor agregado de la agricultura", 
      "Servicios", "Ingresos por royalties y licencias", "Gasto en investigación y desarrollo", 
      "Exportaciones de alta tecnología")

Extracción de bases de datos

Ejemplo: Datos del Banco Mundial para el índice internacional

  • Extracción de las bases

    • URLs muy similares donde solo cambia al final de la dirección el código del indicador (data.worldbank.org/indicator/AG.CON.FERT.ZS)
    • Código: AG.CON.FERT.ZS
  • Generar los URLs es tan facil como escribir una función que pegue el código al final del URL basico

    • URL = "data.worldbank.org/indicator/" + Código de Indicador
### Funcion que crea los URLs
Page.Url <- function(indicador) {
    url1 <- "http://data.worldbank.org/indicator/"
    url2 <- indicador
    url3 <- paste(url1, url2, sep = "")
    return(url3)
}

Extracción de bases de datos

Ejemplo: Datos del Banco Mundial para el índice internacional

*Ahora extraemos y estructuramos la información basandonos en el cdigo fuente del URL

GetTable <- function(url) {
    page.doc <- htmlParse(url)
    page.tabs <- readHTMLTable(page.doc)
    table <- page.tabs[1]
    table <- ldply(table)
    title <- xpathSApply(page.doc, "//*/h1[@class='page-title ']", xmlValue)
    x <- ncol(table)
    x <- as.numeric(x)
    for (i in 3:x) {
        y <- colnames(table)[i]
        tryCatch(colnames(table)[i] <- paste(title, y, sep = " "), error = function(e) NULL)
    }
    tryCatch(colnames(table)[1] <- title, error = function(e) NULL)
    table[1] <- NULL
    return(table)
}

Extracción de bases de datos

Ejemplo: Datos del Banco Mundial para el índice internacional

Despues de la extracción es ya posible analizar y visualizar los datos.

Extracción de bases de datos

GeoChart con datos del Banco Mundial

Extracción de datos

Menciones al programa oportunidades en el periódico el Universal

  • Queremos saber las menciones que ha habido al programa Oportunidades desde 2011

Hacer esto en R es fácil

  • Aunque depende la página, para este caso fue relativamente fácil debido al archivo histórico del periodico

  • Sin embargo no siempre es posible

Consiste en tres pasos básicos

  1. Generar URLs que especifiquen las búsquedas (keyword, fecha, etc..)
  2. Obtener y decodificar la información que se recibe de los URLs
  3. Extraer los parámetros deseados de cada URL y almacenar de manera ordenada

Mapas en R

M

R tiene capacidades muy poderosas para analisis de datos geospaciales La ventaja comparativa de R en mapas se encuentra en su naturaleza como un lenguaje y ambiente de analisis estadistico

  • Se pueden hacer operaciones y obtener información de los elementos de un mapa
  • R pueden hacer operaciones con puntos en un mapa como si se tratara de un plano cartesiano (distancias entre puntos, densidades, areas de poligonos, generar nuevos poligonos por intersección, etc..)

Mapas en R

Mapas tematicos sencillos

Mapa tematico de homicidios por cada 100,000 habitantes en Chihuahua (2011)

plot of chunk simpleplot

Mapas en R

Mapas tematicos sencillos

Agregemos cabeceras municipales

plot of chunk simpleplot2

Mapas en R

Mapas tematicos sencillos

Agregemos carreteras

plot of chunk simpleplot3

Mapas en R

Cualquier dato que pueda ser referenciado a coordenadas puede ser añadido al mapa

ejemplos:

  • Areas naturales protegidas
  • Areas urbanas
  • Poligonos de areas metropolitanas
  • Contaminación

Mapas en R

Usando google maps y la sección amarilla podemos encontrar lugares y añadirlos a un mapa ejemplo: Hospitales en Polanco

plot of chunk unnamed-chunk-5

Mapas en R

Usando google maps y la sección amarilla podemos encontrar lugares y añadirlos a un mapa ejemplo: Hospitales en Polanco (Hospitales I.M.S.S. en azul)

plot of chunk unnamed-chunk-6

Mapas en R

Hospitales en Polanco

Ademas podemos hacer operaciones con los resultados y hacer multiples busquedas para una misma capa; por ejemplo usando estos puntos podemo calcular que la distancia promedio entre hospitales en polanco es de 2.6 Kilometros y de 4.2 para hospitales del I.M.S.S.

Lo que ahora tenemos es una serie de puntos en un plano cartesiano por lo tanto se pueden hacer operaciones geometricas con los puntos.

Price of weed

  • Es una base de datos de auto informe en la cual compradores de marihuana ingresan información sobre sus transacciones, esta información incluye:
    • Precio de compra
    • Fecha
    • Lugar (Por lo general ciudad)
    • Calidad -Cantidad

Actualmente son alrededor de 120,000 observaciones lo que la convierte posiblemente en la base de datos de precios de marihuana mas completa del mundo.

El problema es que debido a un mal diseño web es muy dificil de extraer; solo se pueden ver 15 observaciones por pagina y no se puede descargar automaticamente.

Price of weed

El primer paso es extraer la base utilizando R

Pasos:

  1. Examinar la pagina web para encontrar los patrones y diseñar el algoritmo extractor

    -Podemos extraer cada columna de una pagina (lugar, precio, cantidad, calidad, fecha) usando el codigo fuente la pagina y juntarlo para hacer un dataframe.

    priceofweed

Price of weed

Extracción de la base de datos

-2. Tenemos que crear un algoritmo que nos lleve a las paginas que queremos:

Solo hacemos una funcion que pega valores: www.priceofweed.com/price/United-States/ + /Estado/ + .html?pg= + numero de pagina

-3. Posteriormente limpiamos, organizamos y creamos nuevas variables en la base hasta obtener un data.frame con las caracteristicas deseadas.

Price of weed

Mapa tematico

Para hacer buen analisis necesitamos muchos más datos que los que nos proporciona la base. Sin embargo hay muchas fuentes de información disponbiles en internet que nos puede ayudar.

Por ejemplo wikipedia, donde podemos obtener información para cada ubicación de compra:

  • Población
  • Condado al que pertenece
  • Coordenadas geograficas
  • Tipo de gobierno
  • Area de la ciudad
  • Densidad de población
  • Ingreso medio
  • Caracteristicas demograficas

Esto nos generaria una base de datos mucho más robusta que la original

Price of weed

Mapa tematico

Una aplicación particular de esta base es hacer un mapa de calor sobre los distintos precios a nivel condado en EE.UU.

  • Primero, mediante la extracción de información de wikipedia, le asignamos un condado a cada lugar de compra de nuestra base

  • Sacamos promedio de precio por condando

  • Graficamos el mapa de calor