- Open Source
- Analisis de Datos
- Comunidad cooperativa
- Visualización de datos
- Mineria de Datos
Eduardo Clark
MC2@IMCO
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 las bases
Generar los URLs es tan facil como escribir una función que pegue el código al final del URL basico
### Funcion que crea los URLs
Page.Url <- function(indicador) {
url1 <- "http://data.worldbank.org/indicator/"
url2 <- indicador
url3 <- paste(url1, url2, sep = "")
return(url3)
}
*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)
}
Despues de la extracción es ya posible analizar y visualizar los datos.
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
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
Mapa tematico de homicidios por cada 100,000 habitantes en Chihuahua (2011)
Agregemos cabeceras municipales
Agregemos carreteras
Cualquier dato que pueda ser referenciado a coordenadas puede ser añadido al mapa
ejemplos:
Usando google maps y la sección amarilla podemos encontrar lugares y añadirlos a un mapa ejemplo: Hospitales en Polanco
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)
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.
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.
Pasos:
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.
-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.
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:
Esto nos generaria una base de datos mucho más robusta que la original
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