Archivos de la categoría R

Cartografía digitalizada de España por sección censal

Por si no lo sabéis tenemos disponible en la web del INE un mapa de España por sección censal que podéis descargaros y realizar mapas con R de una forma que es más que conocida para los lectores del blog:

#mapas con secciones censales
library(maptools)
ub_shp = "/Users/raulvaquerizo/Desktop/R/mapas/cartografia_censo2011_nacional/SECC_CPV_E_20111101_01_R_INE.shp"
seccion_censal = readShapeSpatial(ub_shp)
barcelona = seccion_censal[seccion_censal$NMUN=="Barcelona",]
plot(barcelona)

Barcelona_mapa_seccion_censal

A ver si me animo y preparo una BBDD para que podáis acceder desde QGIS a una serie de mapas como este, además de los mapas por código postal. Aunque necesitaría un poco de ayuda técnica (ahí lo dejo). Saludos.
 

Adyacencia de polígonos con el paquete spdep de R

Cuando trabajamos con zonificación o geolocalización la adyacencia entre los elementos del estudio es relevante. En este caso quería trabajar con la adyacencia entre los polígonos que componen un archivo de datos espaciales shapefile y para entender mejor como podemos obtener la adyancecia entre polígonos creo que lo mejor es hacer un ejemplo con un mapa, en este caso un mapa de municipios de Barcelona. El primer paso es disponer del objeto con los datos espaciales, de esto ya he escrito mucho en el blog y por eso no me detengo mucho:

ub="./Desktop/R/mapas/ESP_adm4.rds"

#Creamos los objetos de R
espania = readRDS(ub)
barcelona = espania[espania$NAME_2=="Barcelona",]
plot(barcelona)
#Marcamos el centro de cada poligono
points(coordinates(barcelona))

adyacencia poligonos con R 1

Leemos el objeto con los datos municipales de España y hacemos un subset para quedarnos sólo con Barcelona y realizamos un mapa municipal de la provincia de Barcelona sencillamente usando plot. Podemos identificar todos los centroides de los polígonos que componen este objeto con la función coordinates, ahora lo que necesitamos identificar es la adyacencia entre estos puntos, la adyacencia entre los municipos de Barcelona. En mi caso localicé el paquete spdep de R, muy adecuado para trabajar con ponderaciones.

Os pongo paso por paso el código de R y luego comento como voy buscando REFERENCIAS para crear las adyacencias Sigue leyendo Adyacencia de polígonos con el paquete spdep de R

Resolución del juego de modelos con R

Hace mucho planteé un juego de identificación de modelos con R y ya se me había olvidado daros la solución. Pensando en el Grupo de Usuarios de R y en hacer algo parecido en una presentación recordé que había que solucionar el ejercicio. Lo primero es la creación de los datos, se me ocurrió una función sencilla y una nube de puntos alrededor de ella:

#Variable independiente
indep = runif(500,100,500)
#Función para crear la variable dependiente
foo = function(x){ mean(x)*(1-sin(-0.006042*x))
}
dep = sapply(indep,foo)

dep=dep+(runif(length(dep),-100,100))
datos = data.frame(cbind(indep,dep))
plot(datos)

juego_modelos1

Seleccionamos los datos de entrenamiento y test:

#Datos de entrenamiento y test
indices = sample(1:length(dep),length(dep)/2) 
entrenamiento = datos[indices,]
test = datos[-indices,]

El más sencillo de todos era el caso de la regresión lineal y fue el que puse de ejemplo:

#REgresión lineal
modelo.1=lm(dep ~ indep,entrenamiento)
plot(test)
points(test$indep,predict(modelo.1,test),col="red")

juego_modelos2

Una línea que pasa por la media de la nube de puntos. Otro de los casos menos complicados es el árbol de regresión Sigue leyendo Resolución del juego de modelos con R

Reunión del Grupo de Usuarios de R de Madrid 12/05/2016

Nueva reunión del Grupo de Usuarios de R de Madrid en MediaLab Prado. No está publicado en la web por temas de cerrar definitivamente las agendas. De momento las propuestas son:

• Iñaki Úcar: "Presentación de simmer (Discrete Event Simulation in R)". Iñaki nos presentará simmer. Un paquete que ha creado para poder realizar análisis y simulaciones de eventos discretos (DES) en R. Con este paquete se pueden realizar simulaciones para el estudio de la evolución de sistemas teniendo en cuenta diferentes tipos de gestión de colas.

• Luz Frías: "Presentación de caRtociudad". Luz nos presentará las posibilidades del paquete caRtociudad que permite interaccionar con las APIs de cartociudad.es. Con él se puede realizar geocodificación de direcciones, obtener mapas estáticos y consultar datos administrativos sobre puntos del territorio español.

Dos presentaciones muy interesantes para este jueves. Nos vemos por allí, saludos.

Valor atípico o pocos registros. Animación con R

outlier¿Cómo influye un solo punto en una recta de regresión? Evidentemente cuanto menos observaciones tengo más puede "descolocar" la recta de regresión. Sin embargo, cuantos más puntos tengo más complicado es encontrar ese punto con una recta de regresión, sin analizar los residuos podríamos hasta pasarlo por alto, aunque puede ser que nos interese ese punto. El código de R que genera la animación es:

library(animation)
saveGIF(
  for (i in c(100,50,25,10,5,1)){
    x <- seq(-500,500, by = i )
    y=sin(x)+x/100
    y[10]=y[10]+10
    plot (y,x,main=paste("Regresión lineal con ",1000/i," observaciones"))
    reg <- lm(y~x)
    points( fitted.values(reg),x, type="l", col="red", lwd=2)},
  interval = .85, ,movie.name="/Users/raulvaquerizo/Desktop/R/animaciones/outlier.gif")

Reunión del Grupo de Usuarios de R de Madrid 14/04/2016

Nueva reunión del Grupo de Usuarios de R de Madrid este jueves día 14 de abril de 2016, para más detalles:

http://madrid.r-es.org/34-jueves-14-de-abril-2016/

La agenda de la reunión será:

  • Pedro Concejero: “Análisis de datos de accidentes de tráfico – DGT“.
  • Miguel Ángel Gómez: “Análisis de Sentimiento – Aplicación a noticias Financieras”
  • Carlos J. Gil Bellosta: “Posibilidades de interacción entre R y Python a través del nuevo paquete feather”

Si el tiempo me lo permite por allí estaré. Saludos

TwitteR con R. El hashtag #rstats

El objetivo de la entrada es empezar a analizar tweets con R y que mejor comienzo que usar el hashtag #rstats para ver usuarios que más lo utilizan. [no me gusta conjugar el verbo retwitear] El primer paso es crear una app con Twitter, para ello nos dirigimos a https://apps.twitter.com/ y creamos una aplicación. Crearla es muy sencillo, sólo necesitamos una descripción y un nombre. La aplicación será la que permitirá a R interaccionar con Twitter mediante OAuth y para realizar esta interacción entre la aplicación y nuestra sesión de R es imprescindible:

  • Consumer key
  • Consumer secret
  • Access Token
  • Access Token secret

Para obtener estos 4 elementos una vez creada nuestra aplicación pulsamos el botón Test OAuth de la parte superior derecha de la pantalla y nos aparecerán. Y con estos elementos comenzamos a trabajar en R mediante el paquete twitteR:

#install.packages("twitteR")
#install.packages("base64enc")
library(twitteR)
library(base64enc)

consumer_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
consumer_secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
access_token="81414758-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
access_secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

setup_twitter_oauth(consumer_key, consumer_secret, access_token=access_token, access_secret=access_secret)

Recuerdo, consumer_key consumer_secret access_token y access_secret lo hemos obtenido cuando creamos nuestra aplicación en Twitter que va a interactuar con R mediante OAuth y por ello usamos la función setup_twitter_oauth para que twitteR pueda obtener información de nuestra aplicación. Ya estamos en disposición de leer tweets:

rstats<-searchTwitter("#rstats", n=9999, since='2015-11-01')
datos <- do.call("rbind", lapply(rstats, as.data.frame))
names(datos)

La función searchTwitter será la que más uséis cuando trabajéis con R, en este caso buscamos el hashtag #rstats, limitamos la búsqueda a 9999 tweets desde el 01 de noviembre de 2015. Se genera una lista que transformamos en un data.frame mediante la función  do.call y ahora es más sencillo trabajar con estos datos (también podemos emplear twListToDF) Otro ejemplo, si deseamos ver los tweets del del usuario @r_vaquerizo hacemos:

vaquerizo <- userTimeline('r_vaquerizo',n=100)
vaquerizo2 <- do.call("rbind", lapply(vaquerizo, as.data.frame))

Pero volvamos con #rstats, ya tenemos un data frame y deseamos saber que usuarios son los que más han empleado el hashtag:

usuarios <-subset(datos,isRetweet==FALSE)$screenName
usuarios<-sort(table(usuarios),decreasing=T)
head(usuarios)
usuarios[1:30]

El manejo de estos datos es más sencillo, eliminamos los retweet y nos quedamos sólo con los nombres de los usuarios que han escrito el tweet, los tabulamos y ordenamos. Podemos hacer un head para ver los primeros o ver directamente los 30 iniciales. Evidentemente RBloggers está a la cabeza.

A ver si puedo ir poniendo algunas cosas que voy haciendo y si alguien está interesado en algún proyecto concreto que se ponga en contacto conmigo. Saludos.

Creacion de ranking con R

Captura de pantalla 2015-12-20 a las 18.23.04

Hasta la fecha si necesitaba crear un ranking o un orden con R realizaba la tarea del siguiente modo:

nombres<-c("grupo_1","grupo_2")
grupo<-sample( nombres, 10, replace=TRUE, prob=c( 0.5, 0.5) )
dataset <- data.frame(grupo)
dataset$importes <- runif(10,100,30000)

#Creación del ranking de las variables agrupadas
dataset$ranking = ave(dataset$importes,dataset$grupo,
                      FUN= function(x) rank(x, ties.method = "first"))

Es una agrupación de factores a la que asignamos el orden con rank, con ties.method="first" esta agrupación se lleva a cabo desde el primer nivel del factor. El resultado se puede comprobar Sigue leyendo Creacion de ranking con R