• Artículos
  • Documentos
    • Libro de Energía Solar Fotovoltaica
  • Omnia sunt Communia!

Omnia sunt Communia!

~ Sobre software, documentación y ciencia libres

Omnia sunt Communia!

Archivos de etiqueta: open data

Spatial Data visualization with R

27 martes Nov 2012

Posted by Oscar Perpiñán Lamigueiro in R-english, R-project, visualization

≈ 1 comentario

Etiquetas

lattice, maps, open data, openstreetmap, R, spatial data, tooltip, visualization

I have published the first version of the code and main figures of the «Spatial Data» chapter of the forthcoming book «Displaying time series, spatial and space-time data with R«.

In this chapter I have included a collection of different techniques. For example, you will find a proportional symbol map with tooltips (click on this image to open the map with tooltips)

or a reference map combining data from OpenStreetMap and hill shading.

Click me!

Anuncio publicitario

Comparte / Share

  • Correo electrónico
  • Imprimir
  • Twitter
  • Facebook
  • LinkedIn
  • Pinterest
  • Más
  • Tumblr
  • Reddit

Me gusta esto:

Me gusta Cargando...

Los datos de AEMET o cómo hacer web scraping con R

31 miércoles Oct 2012

Posted by Oscar Perpiñán Lamigueiro in Datos, R-castellano

≈ 8 comentarios

Etiquetas

AEMET, HTML, open data, R, radiación solar, XML

Hace unos días AEMET cerró el acceso público a sus servidores FTP. Esta decisión contrasta con las estrategias de open data defendidas desde la Comisión Europea, o con las posiciones adoptadas por otros organismos (por ejemplo, CM-SAF o NREL-MIDC).

ACTUALIZACIÓN: La web tiempodiario ha cambiado su estructura. El código que explico ya no es de utilidad para esta web. Para descargar los datos hay que seguir el formato que indica el webmaster de la página en uno de los comentarios de este artículo.

Afortunadamente, los datos publicados por AEMET hasta el 28 de Octubre de este año han sido recopilados en la página web tiempodiario.com. Con mis limitados conocimientos de HTML y la inestimable ayuda del paquete XML, he aprendido a acceder a la información de radiación solar de manera automática con R. Expongo a continuación lo que he conseguido. Debo avisar de que no siempre funciona bien el acceso a las páginas, y es posible que se produzca un error en el bucle. Una posible solución es reiniciar el bucle a partir del enlace problemático, o añadir controles de error con try:

library(XML)
library(zoo)

mainURL <- 'http://www.tiempodiario.com'
radURL <- 'http://www.tiempodiario.com/radiacion/'

## Días disponibles en tiempodiario.com
days <- seq(as.POSIXct('2010-12-05'), as.POSIXct('2012-10-28'), by='day')


for (i in seq_along(days)){
  day <- days[i]
  dayURL <- paste(radURL, format(day, '%Y/%m/%d'), '/', sep='')

  ## Obtengo el contenido HTML de la página del día en cuestión
  content <- htmlParse(dayURL, encoding='utf8')
  ## y extraigo los enlaces a cada estación para ese día
  links <- xpathSApply(content, "//a/@href")
  linksData <- links[grep('radiacion-estacion', links)]
  ## Los nombres de las estaciones están escritos en los encabezados H2
  h2 <- xpathSApply(content, "//h2")
  namesStations <- sapply(h2[-1], function(s){
    val <- xmlValue(s)
    substr(val, 10, nchar(val))
  })
  ## pero sus códigos de identificación están en los enlaces correspondientes
  idStation <- strsplit(linksData, '/')
  idStations <- sapply(idStation, function(x)x[4])

  dayStationURL <- paste(mainURL, linksData, sep='')

  ## Accedo a la página de cada estación para ese día
  zList <- lapply(dayStationURL, function(ds){
    print(ds)
    ## Obtengo el contenido HTML de la página
    content <- htmlParse(ds, encoding='utf8')
    ## y extraigo las tablas
    tabs <- readHTMLTable(content, header=TRUE)
    ## Cada tabla codifica el índice temporal en la primera
    ## columna. A pesar de usar header=TRUE, la primera fila
    ## contiene el nombre las columnas. De ahí que tenga que usar
    ## -1 en el indexado.
    time <- tabs[[1]][-1,1]
    dayTime <- format(as.POSIXct(paste(day, time)), '%Y-%m-%d %H:%M')
    ## El nombre de la variable de cada tabla está codificado en
    ## los encabezados H2
    h2 <- getNodeSet(content, '//h2')
    tabLabels <- sapply(h2, xmlValue)
    ## Sólo me quedaré con las radiación difusa, directa y global
    radVars <- c('Radiación Difusa (DF)',
                 'Radiación Directa (DT)',
                 'Radiación Global (GL)')
    whichTabs <- which(tabLabels %in% radVars)
    ## Extraigo la información de las tablas seleccionadas. Dado
    ## que la primera fila contiene los nombres de las columnas,
    ## todo el contenido es leído como un "factor". De ahí que
    ## tenga que usar la conversión as.character y después
    ## as.numeric.
    dat <- sapply(tabs[whichTabs],
                  function(tab)as.numeric(as.character(tab[-1, 2])))
    ## Finalmente, si todo ha ido bien, construyo un objeto zoo
    ## para almacenar la serie temporal de esta estación para este
    ## día. Si algo no ha funcionado obtendré NULL.
    if (length(dat) > 0 & !is.list(dat)) {
      z <- zoo(dat, as.POSIXct(dayTime))
      names(z) <- tabLabels[whichTabs]
      } else {
        z <- NULL
        }
    z
  })
  ## El resultado de lapply será una lista de objetos zoo, uno
  ## para cada estación. Pongo los nombres de las estaciones a
  ## cada componente de esta lista y grabo el resultado como un
  ## fichero RData.
  names(zList) <- make.names(namesStations)
  save(zList, file=paste(day, 'RData', sep='.'))
  ## Este código se repetirá para cada día, de forma que obtendré
  ## un conjunto de ficheros RData, uno por día. Cada uno de ellos
  ## contiene una lista de zoo's, correspondiendo cada componente
  ## de la lista a una estación de medida.
}

Una vez ejecutado el código anterior obtendremos una colección de ficheros diarios. Si nos interesa tener el registro completo de una estación determinada, es posible obtenerlo recorriendo todos los ficheros:

## Ficheros que he obtenido del bucle anterior.
files <- dir(pattern='RData')

## Por ejemplo, para obtener el registro de la estación de
## Valladolid, recorro todos los ficheros con lapply, y extraigo
## de cada uno el componente que me interesa.
valladolid <- lapply(files, FUN=function(f){
                     load(f)
                     dat <- zList$Valladolid
                     })
## El resultado de lapply será una lista de objetos zoo, que puedo
## transformar en un único objeto zoo con do.call
valladolid <- do.call(rbind, valladolid)

Con otro bucle adicional se puede automatizar el paso anterior y obtener toda la colección de estaciones:

stations <- names(zList)

lapply(stations, FUN=function(name){
  datStation <- lapply(files, FUN=function(f){
    load(f)
    dat <- zList[[name]]
  })
  datStation <- do.call(rbind, datStation)
  write.zoo(datStation, sep=';', file=paste(name, '.txt', sep=''))
})

Comparte / Share

  • Correo electrónico
  • Imprimir
  • Twitter
  • Facebook
  • LinkedIn
  • Pinterest
  • Más
  • Tumblr
  • Reddit

Me gusta esto:

Me gusta Cargando...

Datos libres

30 jueves Jun 2011

Posted by Oscar Perpiñán Lamigueiro in Datos, R-castellano

≈ Comentarios desactivados en Datos libres

Etiquetas

ckan, datos, Fundación CTIC, Non-profit organization, Open content, open data, Open Knowledge Foundation, Open science data

En artículos anteriores hablaba de iniciativas que promueven la liberación de datos (por ejemplo, building a fact based world view o el microscopio del voto).

Hace poco empezaba su andadura UbiData. Esta iniciativa es la versión en español de Get the Data. Tal y como dicen sus promotores:

«is a Questions and Answers site where you can ask your data related questions, including, but not limited to where to find data relating to a particular issue, how to query Linked Data sources to get just the data set you require, what tools to use to explore a data set in a visual way, how to cleanse data or get it into a format you can work with using third party visualisation or analysis tools.»

Este proyecto colaborativo está relacionado con the Data Hub:

«the Comprehensive Knowledge Archive Network, a registry of open knowledge packages and projects (and a few closed ones). CKAN makes it easy to find, share and reuse open content and data, especially in ways that are machine automatable.»

Esta red funciona sobre la base de un software homónimo, uno entre los muchos proyectos de la Open Knowledge Foundation,

«a not-for-profit organization promoting open knowledge: any kind of data and content – sonnets to statistics, genes to geodata – that can be freely used, reused, and redistributed.»

Mi deformación profesional me hace señalar con interés el proyecto Energy public data.

También son destacables el mapa de OpenData mantenido por la Fundación CTIC, y el listado de iniciativas OpenData de las Administraciones Públicas Españolas. Otro repositorio ciertamente interesante es el DataMarket, «a data portal that provides access to statistics and structured data from various public and private sector organizations.», que además es accesible directamente desde R mediante el paquete rdatamarket. Y hay más contenedores accesibles directamente desde R, tal y como se detalla aquí.

Y como no sólo de datos vive el ser humano, aquí van unos enlaces a fuentes libres para el divertimento: música en jamendo, cultura en qomun y gráficos en OpenClipArt.

Comparte / Share

  • Correo electrónico
  • Imprimir
  • Twitter
  • Facebook
  • LinkedIn
  • Pinterest
  • Más
  • Tumblr
  • Reddit

Me gusta esto:

Me gusta Cargando...

Omnia sunt communia!

“As we enjoy great advantages from the inventions of others, we should be glad of an opportunity to serve others by any invention of ours, and this we should do freely and generously”

RSS Feed RSS - Entradas

Introduce tu correo electrónico para suscribirte a este blog y recibir avisos de nuevas entradas.

Únete a otros 91 suscriptores

Posts Más Vistos

  • Libro de Energía Solar Fotovoltaica
  • Vector fields with streamlines
View Oscar Perpiñán Lamigueiro's profile on LinkedIn
profile for Oscar Perpiñán on Stack Exchange, a network of free, community-driven Q&A sites
Citations for Oscar Perpinan

@oscarperpinan

Mis tuits

Enlaces

  • Displaying time series, spatial and space-time data with R
  • Introducción a R

Top Clicks

  • oscarperpinan.github.com/…
  • r-bloggers.com/2023/05/3d…

Etiquetas

actuar anarquía autocontención ayuda mutua bloch ciencia circuitos eléctricos común cooperación CRAN creative commons data data.table data analysis ecología emacs Energía energía solar fotovoltaica entropía EOI esperanza exergía forecast fotovoltaica galeano github GNU General Public License información investigación jorge riechmann kropotkin latex lattice lewis mumford libro lyx map maps memoir meteorological data movimientos sociales nestoria nicolas georgescu roegen NWP open data openstreetmap orgmode pensar photovoltaics pobreza R R-project radiación solar raster rasterVis reproducible research siar small multiples software libre solar solar radiation sp spatial spatial data spplot tecnología time series trellis tufte uned utopía Vector field visualización visualization WRF

RSS R-bloggers

  • Simulating confounders, colliders and mediators by @ellis2013nz
  • Introduction to Mixed-effects Models in R workshop
  • Learn to ‘Make an outstanding Shiny App’ with us
  • Sorting, Ordering, and Ranking: Unraveling R’s Powerful Functions
  • Galton and Watson voluntarily skipping some generations
  • {attachment} v0.4.0: Breaking changes and configuration file for a better experience
  • Sharing the Big Book of R upgrade proposal
  • The do.call() function in R: Unlocking Efficiency and Flexibility
  • Version 1.0.0 of NIMBLE released, providing automatic differentiation, Laplace approximation, and HMC sampling
  • Checking normality in R

RSS dataanalytics

  • Se ha producido un error; es probable que la fuente esté fuera de servicio. Vuelve a intentarlo más tarde.

RSS Solar Energy (Elsevier)

  • Se ha producido un error; es probable que la fuente esté fuera de servicio. Vuelve a intentarlo más tarde.

RSS Progress in Photovoltaics

  • Se ha producido un error; es probable que la fuente esté fuera de servicio. Vuelve a intentarlo más tarde.

RSS Madridmasd

  • Cambio Climático, Gobiernos y Empresas; Casi todas sus promesas son mentira
  • Proyectos estratégicos para la recuperación y transformación económica (PERTE)
  • ¿En quién confiar? Debate sobre IA, ética y comunicación en el congreso de medios de comunicación
  • La Civilización perdida bajo los suelos y vegetación de Latinoamérica.
  • IMDEA Software e IMDEA Networks trabajan para desplegar en la Comunidad de Madrid “MadQCI”: la mayor red cuántica de Europa
  • Etnografía y Paleoecología de los Paisajes Precolombinos: El Papel del Fuego en las Culturas Aborígenes del SO de América del Norte (tribus Karuk y Yurok)
  • Homenaje a Manuel Espadas Burgos
  • Super Mario World
  • Taller doctoral en Historia de las Relaciones Internacionales 2023 en la Universidad de Padua
  • Directiva Europea de Protección de Suelos: Dos décadas de “vistas” y “consideraciones” y otras desconsideraciones
Licencia Creative Commons
Salvo indicación en contra todos los contenidos están publicados por Oscar Perpiñán Lamigueiro bajo una Licencia Creative Commons Reconocimiento-No Comercial-Compartir Igual 3.0 Unported.

Crea un blog o un sitio web gratuitos con WordPress.com.

Privacidad y cookies: este sitio utiliza cookies. Al continuar utilizando esta web, aceptas su uso.
Para obtener más información, incluido cómo controlar las cookies, consulta aquí: Política de cookies
  • Seguir Siguiendo
    • Omnia sunt Communia!
    • Únete a 91 seguidores más
    • ¿Ya tienes una cuenta de WordPress.com? Inicia sesión.
    • Omnia sunt Communia!
    • Personalizar
    • Seguir Siguiendo
    • Regístrate
    • Iniciar sesión
    • Denunciar este contenido
    • Ver sitio web en el Lector
    • Gestionar las suscripciones
    • Contraer esta barra
A %d blogueros les gusta esto: