Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Mencin:
Sistemas de Informacin Geogrfica
Instructor:
Ing. Gabriel Mantilla Saltos
Organizador:
Ms.C. Gina Andrade
Periodo
27 de Octubre 24 Noviembre 2017
Contenido
Resumen ........................................................................................................................................ 1
Introduccin .................................................................................................................................. 1
Entorno de trabajo ......................................................................................................................... 2
Descarga e Instalacin de libreras. ............................................................................................... 4
Programando en R ......................................................................................................................... 4
Creacin de vectores, matrices, dataframes, listas y arreglos multidimensionales. ...................... 6
Funciones trigonomtricas .......................................................................................................... 10
Grficos plot, pie, boxplot, barplot, hist ...................................................................................... 12
Funciones de agregacin, apply, sapply, tapply, mapply, ddply, aaply. ..................................... 13
Como crear Funciones................................................................................................................. 16
Sistemas de Informacin Geogrfica .......................................................................................... 19
Resumen
La implementacin de softwares de acceso libre en la investigacin ha tenido
un crecimiento exponencial en los ltimos 5 aos, desarrolladores comparten
su opinin en foros, tutoriales, videos prcticos en la web, permitiendo
desarrollar el software de un modo acadmico profesional siendo esta su
principal ventaja frente a su competidor potencial Python. R es un software
de comando no orientado a objetos, que esta principalmente implementando
en el anlisis estadstico, ha tenido cabida en la ciencia de los datos como la
Minera de datos, Inteligencia de Negocios, Pronsticos, Machine Learning,
Geoestadstica, Scoring de Crdito, Supervivencia, Sistemas de
Recomendacin, Investigacin Biomdica, Bioinformtica, etc. Si de
programacin nos referimos, R es un lenguaje ms divertido, verstil,
flexible para desarrolladores que dedican poco tiempo en aprenderlo a
diferencia de Matlab. La curva de aprendizaje de R a diferencia con otros
softwares de datos (Excel, SPSS, Minitab, SAS, Estadstica) es mucho ms
lenta, debido al tiempo que se invierte en acostumbrarse al software, a
reconocer errores, entender su lgica de programacin y conocer la
funcionalidad de las libreras que existen, por otro lado estos otros softwares
de datos son mucho ms fciles de implementar por sus botones predefinidos
para un tipo de anlisis especifico, su desventaja es que son limitados, donde
el desarrollador no puede profundizar, manipular incluso mejorar estas
funciones que terminan al final siendo desconocidas y difciles de
referencias.
Introduccin
R fue desarrollado por Ross Ihaka y Robert Gentleman del departamento de
estadstica de la universidad de Auckland en 1992, no obstante, si se remonta
ms hacia el pasado el software se deriva del lenguaje S, desarrollado en los
laboratorios de Bell y AT&T y ahora Alcatel en Nueva Jersey a finales de
1970, por los desarrolladores John Chambers, Rick Becker y colaboradores.
Los desarrolladores iniciales Ihaka y Gentleman combinaron fortalezas de S
y Scheme para luego con esta idea mejorar su lgica de programacin,
hacindolo un software ms funcional que ahora es conocido como R. Al
momento de trabajar, el usuario prefiere el entorno grafico de Rstudio,
siendo este si interfaz grfica, un entorno de desarrollo integrado IDE en R,
libre y de cdigo abierto, fue fundado por Joseph J. Allaire y lanzado en
febrero de 2011. Rstudio cuenta con rea de trabajo ms amigable, con
mens desplegables, rea de grficos, variables y scripts distribuidos en 4
partes de la pantalla, donde el usuario puede visualizar las salidas en una
misma ventana.
1
Entorno de trabajo
Procedemos a buscar el programa Rstudio en la ventana de bsqueda de Windows
Para entender los iconos de acceso rpido del Rstudio, la carpeta sirve para abrir un script
que este guardado en alguna carpeta que conozcamos, el diskette sirve para guardar
nuestro trabajo segn una ruta especifica. Los dos diskettes son para guardar y actualizar
nuestros scripts.
La hoja en blanco con un ms verde es para crear un nuevo tipo de archivo en los que se
2
A continuacin, mostraremos los comandos con los que iremos trabajando a lo largo del
curso.
Primero tenemos que crear un nuevo script, que es el botn R Script que vemos en la
As podemos tener nuestro trabajo guardado, en un archivo de texto plano con formato
Archivo R, que luego en otro momento al ejecutarlo podremos volver a usar de nuestros
teniendo un registro fsico de nuestro anlisis, tambin podemos guardar en bases de datos
de extensin rda, que nos facilitara el uso de datos al momento de abrir el software, mas
que se encuentran dentro de las libreras que iremos a implementar, con el tiempo
3
conoceremos los parmetros de estas funciones, y tendremos experiencia en cmo se
aplica ese mtodo. Las comillas dobles nos sirven para buscar archivos que se encuentre
dentro de una carpeta por el backslash /, para poder abrir un ejecutable es necesario usar
instalar las libreras que tienen las funciones que utilizamos en nuestros anlisis,
computadora.
1.- Es escribir library(ggplot2) en la consola y se ejecuta esta lnea con los siguientes
comandos (Ctrl+Enter).
Programando en R
El trabajo del usuario que recin est estudiando como trabajar en R, es investigar
4
objetos, es decir que no podremos crear objetos que tengan alguna propiedad o
programacin, aqu los objetos ya estn predefinidos, ejemplo si queremos crear una
es (int(50) variable) como se lo hace en C++. Basta con escribir variable=5, el R reconoce
tipo carcter o factor. Pero si la definimos as, variable=5, el R reconoce que es una
palabra porque est dentro de comillas dobles. Para limpiar la pantalla podemos ejecutar
la combinacin de teclas Ctrl+L, para ejecutar una lnea de comando Ctrl+Enter o tambin
Para buscar alguna palabra o letra en las lneas de codificacin ejecutamos Ctrl+F, donde
nos aparecer las celdas de bsqueda, o basta con hacer clic en la lupa.
Tambin podemos minimizar y maximizar las ventanas dando clic en los siguientes
NA
NaN
5
#para salir de r la orden en consola es q() y luego si o no (y/n) para guardar
q()
c(5)
c(2,8,4,3,10)
c("maria","jose","yayo","luis")
str(julanito)
rbind(4,5,6,2,3)
cbind(5,7,6,8,4,1,2,3)
#para crear una secuencia de nmeros en pasos de uno, utilizo los dos puntos :
1:10
seq(1,100,0.5)
rep(1,10)#repite el 1, 10 veces
6
paste("hola","como","estas",sep=" ")
#para crear una matriz y empiece a rellenar los datos por filas
trabajadores=data.frame(Contabilidad=c("mario","juan","marcos","eli"),sueldo=c(365,3
65,380,150),id=rep(12,4))
trabajadores$Contabilidad
trabajadores$Edad=c(35,38,41,39)
colegio=list(Alumnos=c("Maria","juan","pepe","juan","pepe","pepe","pepe"),Notas=c(2
,2,2,1,1,3,3,3,3,4,5,6,7,5,9,7,8,2,11,12,13,14,15,10,9))
clima=list(Temperatura=data.frame(minima=runif(100,20,25),maxima=runif(100,25,30
)), precipitacion=data.frame(RR=runif(100,20,30)))
clima$Temperatura$minima
colegio[[1]]
KO=matrix(0,5,5)
names(KO)=c("V1","V2","V3","V4","V5")
7
#para crear un arreglo multidimensional
vec=array(1:60,dim=c(3,4,5))
rm(colegio)
colorRampPalette(c("#ff8080","#80ffff"))(12)
round(1.45724,1)
signif(0.1236, 3)
ceiling(1.1)
floor(-3.2)
trunc(-3.2)
A%*%B
8
#para obtener los valores de la diagonal de una matriz cuadrada, diag(x)
diag(A)
det(A)
eigen(A)
t(A)
mean(runif(20,0,10))
min(1:10)
max(20:50)
sum(20:35)
cumsum(10:20)
quantile(0:100,c(0.25,0.5,0.75))
var(runif(100,0,50))
sd(runif(100,0,50))
9
sqrt(64)
log10(100)
log(10)
Funciones trigonomtricas
sin(3*pi) #funcin seno, sin(x)
exp(50)
factorial(3)
table(c("maria","maria","jose","pepe","pepe","diana","diana","diana"))
10
#para abrir bases en R, con la funcin data
data("airquality")
cut(airquality$Temp,3)
table(cut(airquality$Temp, 9))
base=data.frame(notas=1:5)
write.table(base,"archivooo.txt",row.names = F,col.names = T)
probabilidad 0.5
#para generar nmeros aleatorios de una distribucin beta, rbeta(n,shape1, shape2, ncp
= 0)
11
#para generar nmeros aleatorios de una distribucin multinomial, rmultinom(n, size,
prob)
#para generar nmeros aleatorios de una distribucin gamma, rgamma(n, shape, rate =
1, scale = 1/rate)
librera #LaplacesDemon
k)
plot(sapply(seq(0,5*pi,0.01),function(o) cos(o)),type="l")
plot(sapply(seq(0,5*pi,0.01),function(o) sin(o)),type="l")
plot(sapply(seq(0,5*pi,0.01),function(o) exp(o)),type="l")
plot(sapply(seq(0,5*pi,0.01),function(o) 1/exp(o)),type="l")
barplot(table(paste("Jugador",round(runif(100,1,5),0),sep="
")),col=c("red","blue","yellow","green","pink"))
12
#la funcin hist() es para realizar un histograma de frecuencias
seq(20,30,2))
B= c(5, 3, 1, 8, 9, 4, 6)
cols= colorRampPalette(c("#ff8080","#80ffff"))(7)
porcentajes=round(100*B/sum(B), 1)
Ventas=data.frame(matrix(rnorm(120, 1000,50),10,12))
names(Ventas)=c("ENE","FEB","MAR","ABR","MAY","JUN","JUL","AGO","SEP","
OCT","NOV","DIC")
boxplot(Ventas, col=colorRampPalette(c("#ff8080","#80ffff"))(12))
stripchart(Ventas, vertical = TRUE, method = "jitter", add = TRUE, pch = 19, col =colo
13
apply(simplify2array(list(matrix(1,4,5),matrix(1,4,5))),1:2,sum)#para sumar por celda
de cada matriz
#tapply(vector,categoras,mean)
Clima=data.frame(Temperatura=runif(120,20,25),Meses=rep(1:12,10))
tapply(Clima$Temperatura,Clima$Meses,mean)
#funcin que utiliza un vector para realizar un clculo para cada valor del vector.
#la funcin lapply retorna una lista en la salida, utilizo unlist() para convertirlo en un
vector.
#la funcin sapply sirve para recorrer una lista o un vector, basado en un ndice que
A=c(5,4,8,7,4,2,1,3,2,4,5,1,2,4,2,3,4,0,1,8)
A=list(matrix(runif(25,0,5),5,5))
rapply(A,c)
rapply(A,function(x) round(x,1))
B= matrix(runif(25,0,5),5,5)
14
as.vector(B)#as.vector(x) tambin lo convierte en vector pero el objeto x no es de tipo
lista
A=data.frame(temp=runif(24, 20,25),tri=rep(1:3,8))
split(A$temp,A$tri)
#la function do.call(function,x) donde x debe ser una lista, al cual se le aplicara una
function
do.call(c,lapply(1:10,function(x) x^2))
do.call(rbind,lapply(1:10,function(x) x^3))
library(zoo)
Guayaquil=rep(1:7,52)
library(plyr)
ldply(list(Clima=c(1,7,9,4,3)))
Clima=data.frame(Instituto=c("inamhi","inp","inp","inocar","inamhi","inamhi","inocar"
,"inp"),Ciudad=c("guayaquil","quito","guayaquil","quito","guayaquil","quito","guayaqu
il","quito"),Puntaje=c(7,5,4,6,8,9,5,4))
summarise,N=length(Puntaje),suma=sum(Puntaje),media=suma/N)
library(plyr)
A=array(1:60, dim=c(3,4,5))
15
A
B=array(1:120000, dim=c(3,4,10000))
aaply(B,3,mean,.progress = "tk")
aaply(B,3,mean,.progress = "text")
suma=function(val1,val2)
return(val1+val2)
suma(100,2000)
grafic=function(n1,m1,m2,titulo,color,tipo)
plot(runif(n1,m1,m2),main=titulo,col=color,type=tipo)
guardar=function(n1,j1,j2,nombre)
16
{
variable=data.frame(runif(n1,j1,j2))
write.table(variable,nombre,row.names = F,col.names = F)
guardar(10,0,20,"NumerosAleatorios.txt")
fungraf=function(fun,sequ)
plot(sapply(sequ,function(w) fun(w)),type="l")
fungraf(exp,seq(1,5*pi,0.01))
fungraf(sin,seq(1,5*pi,0.01))
fungraf(cos,seq(1,5*pi,0.01))
fungraf(acosh,seq(1,5*pi,0.01))
fungraf(log10,seq(1,500*pi,0.01))
#funcin que grafica nmeros aleatorios segn un ttulo especifico y color especifico
pintar=function(p1,p2,p3,titulo,color,tipo)
plot(runif(p1,p2,p3),main=titulo,col=color,type=tipo)
pintar(30,5,15,"Grafico","blue","h")
g=function(x,a)
17
rep(c(x^2-a,x^3),round(abs(a))+1)
a=seq(1,10,1)
b=seq(11,20,1)
ab=expand.grid(a,b)
multipli=function(x,y)
z=x*y
mapply(multipli,ab$Var1,ab$Var2)
A=round(runif(10,1,10),0)
which(A==1)
which.max(A)
which.min(A)
A=data.frame(x=c(1,2,5,2,5,1),y=c(4,7,5,15,1,4))
which(A$x==1 | A$y==4)
which(A$x!=4)
18
Sistemas de Informacin Geogrfica
library(ncdf4)
library(raster)
library(maptools)
library(RNetCDF)
library(raster)
library(sp)
library(gstat)
library(RStoolbox)
library(lubridate)
setwd("Intermedio Prediccion y Pronosticos")
rot=function(x) t(apply(x, 2, rev))
A=nc_open("etopo1.nc")
B=raster(rot(rot(rot(ncvar_get(A,A$var$Band1$name)))))
extent(B)=extent(min(A$dim$lon$vals),max(A$dim$lon$vals),min(A$dim$lat$vals),m
ax(A$dim$lat$vals))
plot(B)
A2=open.nc("etopo1.nc")
B2=read.nc(A2)
D=raster(rot(rot(rot(B2[[4]]))))
extent(D)=extent(min(B2[[3]]),max(B2[[3]]),min(B2[[2]]),max(B2[[2]]))
plot(D)
#como cortar una imagen raster
G=crop(D,extent(-90,-78,-6,2))
plot(G)
#como cortar una imagen raster utilizando un polgono
Ecuador=readShapeSpatial("nxprovincias.shp")
#proj4string(Ecuador)=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
proj4string(Ecuador)=CRS("+proj=utm +zone=17 +south +ellps=WGS84")
Ecuador=spTransform(Ecuador,CRS=CRS("+proj=longlat +datum=WGS84
+ellps=WGS84 +towgs84=0,0,0"))
19
K=mask(crop(D,Ecuador,snap="out"),Ecuador)
plot(K)
#tratamiento de imagenes raster
CHL=nc_open("CHL.nc")#abro un archive Netcdf
CHLA=ncvar_get(CHL,CHL$var$chlorophyll$name)#especifico la informacion que
voy a usar
#Guardo mis imagenes en una lista
CHLF=lapply(1:168, function(i) raster(t(CHLA[,,i])))#creo una lista de rasters
Fecha=seq(as.Date("2003/1/01"), by = "month", length.out = 168)
#Extraje los valores de cada raster para ese punto utilizando un radio de 500 m
CHLP=do.call(c,lapply(1:168, function(i)
extract(CHLF[[i]],puntos,buffer=500,fun=mean)))
#para convertir de raster a puntos
Puntos=data.frame(rasterToPoints(CHLF[[1]]))
20
coordinates(Puntos)=c("x","y")
gridded(Puntos)=TRUE#para llevarlos de dataframes a raster esta es la mejor opcion
Puntos=raster(Puntos)
plot(Puntos)
#para reemplazar valores faltantes
Union=cover(CHLF[[1]],CHLF[[2]])#Reemplaza los nans de x por los valores de y
par(mfrow=c(3,1))
plot(CHLF[[1]],col=rainbow(1000))
plot(CHLF[[2]],col=rainbow(1000))
plot(Union,col=rainbow(1000))
21
ncvar_put(nc,Long,long)
ncvar_put(nc,Lat,lat)
ncvar_put(nc,Time,time)
ncvar_put(nc,data,rot(Y))
nc_close(nc)
A=nc_open("CHLF.nc")
D=ncvar_get(A,A$var$chla$name)
plot(raster(D[,,1]))
#Interpolar con IDW
OBS=data.frame(rasterToPoints(CHLF[[1]]))
names(OBS)=c("x","y","data")
coordinates(OBS)=c("x","y")
proj4string(OBS)=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
Mu=mean(stack(CHLF),na.rm=T)
Mu[na.omit(Mu)]=99
Mu[is.na(Mu)]=100
Var=mean(stack(list(Mu,CHLF[[1]])),na.rm=T)#eltruco esta en el na.rm=T
plot(CHLF[[1]])
PRED=data.frame(rasterToPoints(Var,fun = function(x){x==99}))#solo los que tienen
99
names(PRED)=c("x","y","data")
coordinates(PRED)=c("x","y")
proj4string(PRED)=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0")
IDW=idw(data~1,OBS,PRED,maxdist=10000)
gridded(IDW)=T
PREDIDW=raster(IDW)
extent(PREDIDW)=extent(CHLF[[1]])
final=cover(A,PREDIDW)
plot(final)
22