Académique Documents
Professionnel Documents
Culture Documents
APLICADA
FACULTAD DE CIENCIAS
DEBER N° 1
Realizado por:
Mónica Pulluquitín
Nivel: 7° “A”
Riobamba-Ecuador.
El método del Número de Curva del SCS es una técnica desarrollada por el SCS para
estimar la infiltración. Considera todas las pérdidas netas menos la evaporación real.
Matemáticamente, la ecuación parte de lo siguiente.
“S” se expresa en función del Número de Curva (CN), mediante la siguiente ecuación:
Respecto al tipo de suelo hay que clasificarlo en uno de los cuatros grupos hidrológicos
existentes. Estos grupos van desde A hasta D, representando el grupo A un potencial de
escurrimiento mínimo y el D un potencial de escurrimiento alto. Para asignar a un suelo
un grupo determinado hay que considerar su composición, su textura y la profundidad del
nivel freático. La información necesaria para obtener el Número de Curva es la siguiente:
Paso 1. Clasificar la leyenda geológica a grupos hidrológicos del suelo, según la Tabla 1
o 2.
Tabla 1. Grupos hidrológicos del suelo (SCS, 1964 en Bradbury et al., 2000)
Paso 2. Clasificar los usos del suelo de acuerdo a la leyenda de usos que aparece en las
tablas originales del SCS y asignar a cada uso un código de uso del suelo, que se llamará
“Landuse”. La conversión propuesta aparece en la Tabla 3.
Lo que tenemos que hacer es crear en ArcGis los mapas con la información consignada
en las anteriores tablas.
Una aplicación práctica para calcular el número de curva de una cuenca con
Arcgis y HEC GEOHMS partiendo de lo indicado en la explicación de la teoría
del Método de Curva del Número de Curva del SCS. Para realizar el cálculo del número
de curva del SCS necesitamos tres insumos: Modelo digital de elevación corregido, el
tipo hidrológico de suelo y el uso del suelo.
Paso 1. Construir el mapa del tipo hidrológico de suelo de acuerdo a la metodología del
SCS. De acuerdo a las características de permeabilidad le asignamos un tipo que va desde
“A” hasta “D”.
Paso 2. Construir el mapa de usos del suelo, esto puede ser algo un poco complicado,
porque usos del suelo para los Estados Unidos puede diferir de los diferentes países. El
uso del suelo se debe reclasificar de acuerdo a la siguiente tabla.
A todo lo que sea agua le damos una calificación de “1”, a la cobertura relacionada con
medio residencial le damos una calificación de “2”, a los bosques le damos una
calificación de “3” y a los cultivos una calificación “4”. Esta reclasificación facilita las
cosas en relación con la tabla original del SCS. El resultado de la reclasificación es el
siguiente.
Paso 3. Intersectar los shapefiles de usos y tipos de suelo en ArcGIS. Se obtiene así un
shapefile de polígonos, llamado CN_Poly, en el que cada polígono tiene una única
combinación de tipo y uso de suelo.
Paso 4. Crear y rellenar los siguientes campos en la tabla de atributos del CN_Poly:
SoilCode, Pcta, Pctb, Pctc, Pctd y Landuse. El primero (SoilCode) es el código para
identificar el tipo de suelo, los cuatro siguientes indican el porcentaje de cada tipo de
suelo y el último es un código para indicar el uso del suelo. La ventaja de este método
está en que se puede considerar que un tipo de suelo está formado por una combinación
de distintos grupos del suelo. La tabla de atributos de CN_Poly se verá de la siguiente
forma.
Paso 5. Crear la tabla NCLookUp en ArcGis que se guarda como archivo “.dbf”.
Paso 6. Calcular el raster del Número de Curva con el HEC-GeoHMS. Para realizar este
paso debemos tener instalado el HEC-GeoHMS. Seleccionamos la opción “Utility”
seguido de “Generate CN Grid”.
Se nos abre una ventana donde se debe ingresar el modelos digital de elevación corregido
(para este caso se denomina Fil), el Shape “CN_Poly” y la tabla “NCLookUp” creados
anteriormente.
Ing. Carlos Rosero FACULTAD DE CIENCIAS ESPOCH
INFORMÁTICA
APLICADA
Si revisamos la tabla de atributos del shape CN_Poly, observamos una nueva columna con el
calor del número de curva.
Finalmente, el número de curva de una subcuenca será el sumatorio del nuevo campo
creado, para todos los polígonos que pertenezcan a la subcuenca y divido entre el área de
esa subcuenca:
Objetos en R
En términos genéricos, todos los elementos que maneja R son objetos: un valor numérico
es un objeto, un vector es un objeto, una función es un objeto, una base de datos es un
objeto, un gráfico es un objeto.
Para realizar un uso eficiente de R es preciso entender y aprender a manipular bien las
distintas clases de objetos que maneja el programa. En esta sección nos vamos a ocupar
particularmente de aquellos objetos que R utiliza para representar datos: valores, vectores,
matrices, dataframes, series temporales y listas.
R utiliza, de hecho, programación orientada a objetos. Ello significa que una misma
función hace cosas distintas según la clase del objeto que recibe como argumento,
pudiendo incluso no hacer nada (o producir un error) si se le pasan argumentos de una
clase inadecuada.
A modo de ejemplo, veamos como la función plot() puede mostrar distintos gráficos
según la clase del objeto a representar. Para ello supongamos que el siguiente vector
representa el número de personas atendidas mensualmente en el servicio de urgencias de
un centro de salud durante el pasado año (datos de enero a diciembre):
atendidos <- c(728,632,596,689,745,865,694,583,657,643,794,887)
atendidos
## [1] 728 632 596 689 745 865 694 583 657 643 794 887
class(atendidos)
## [1] "numeric"
La función class() nos devuelve la clase del objeto atendidos, que como vemos
es numeric. Podemos obtener una representación gráfica de este vector simplemente
mediante:
plot(atendidos)
Ahora convertimos estos datos en serie temporal mediante la función ts(), indicando que
esta serie comienza en enero del año 2009 y que tiene una frecuencia de 12 observaciones
por año (esto es, una por mes):
Como podemos ver, la clase del objeto atendidos2 es ts (time series). Podemos comprobar
que si aplicamos la misma función plot() a atendidos2, el gráfico obtenido es distinto que
cuando se aplica a atendidos, aún cuando los datos sean exactamente los mismos:
plot(atendidos2)
La función plot como muchas otras funciones en R, primero comprueba cuál es la clase del
objeto sobre el que debe actuar, y en función de ello se comporta de una manera u otra.
x=1
class(x)
## [1] "numeric"
y="a"
class(y)
## [1] "character"
Además de estas dos clases fundamentales R dispone de otras clases más específicas; por
ejemplo integer para números enteros, complex para números complejos, logical para
variables lógicas o matrix para matrices.
Coerción
En R es posible “forzar” (“coerce”) la conversión de una clase de datos en otra, mediante
comandos de la forma as.class. Por ejemplo:
x="1"
x
## [1] "1"
class(x)
## [1] "character"
y=as.integer(x)
y
## [1] 1
class(y)
## [1] "integer"
z=as.character(y)
z
## [1] "1"
class(z)
## [1] "character"
edad = c(22, 34, 29, 25, 30, 33, 31, 27, 25, 25)
edad
## [1] 22 34 29 25 30 33 31 27 25 25
class(edad)
## [1] "numeric"
Como comando de asignación de nombres a vectores puede utilizarse además el símbolo <-
:
edad <- c(22, 34, 29, 25, 30, 33, 31, 27, 25, 25)
o también el símbolo -> si bien en este caso debemos invertir la posición del nombre del
vector y sus valores:
c(22, 34, 29, 25, 30, 33, 31, 27, 25, 25) -> edad
letras=c("a","b","c","d","e")
letras
## [1] "a" "b" "c" "d" "e"
class(letras)
## [1] "character"
mezcla=c(1,2,3,"a","b","c")
mezcla
## [1] "1" "2" "3" "a" "b" "c"
class(mezcla)
## [1] "character"
Longitud de un vector
La función length() devuelve la longitud (número de elementos) del vector:
x=c(1,4,5,2,4,5,4,3,2,2,3,2,2,4,4,5,5,6,6,7)
length(x)
## [1] 20
Valores perdidos
Los valores perdidos constituyen una clase particular de dato, que se codifica siempre
como NA independientemente de que la variable sea numérica o alfanumérica. Con carácter
general cualquier operación que involucre a un valor perdido dará como resultado
también NA. A modo de ejemplo, si el vector peso recoge los pesos de 5 personas,
habiéndose perdido el cuarto valor, se codificaría como:
peso=c(77,68,85,NA,73)
mean(peso)
## [1] NA
Si, en cualquier caso, deseamos calcular la media de los pesos efectivamente disponibles,
utilizaríamos la opción eliminar valores perdidos o NA remove que se declara
como na.rm=TRUE:
mean(peso, na.rm=TRUE)
## [1] 75.75
0/0
## [1] NaN
log(-1)
## [1] NaN
x=c(1,2,0)
y=c(2,4,0)
x/y
## [1] 0.5 0.5 NaN
edad = c(22, 34, 29, 25, 30, 33, 31, 27, 25, 25)
edad[3]
## [1] 29
edad[5]
## [1] 30
letras[4]
## [1] "d"
edad[2:5]
## [1] 34 29 25 30
edad[c(1,3,7)]
## [1] 22 29 31
edad = c(22, 34, 29, 25, 30, 33, 31, 27, 25, 25)
La siguiente función nos devuelve las posiciones de los valores de este vector que son
mayores que 25:
which(edad>25)
## [1] 2 3 5 6 7 8
esto es, los valores del vector edad mayores que 25 son los que ocupan las posiciones 2, 3,
5, 6, 7 y 8.
Podemos asignar estas posiciones a una nueva variable:
mayores25=which(edad>25)
edad[mayores25]
## [1] 34 29 30 33 31 27
edad[edad>25]
## [1] 34 29 30 33 31 27
Se puede realizar también la selección de valores de un vector condicionando por los valores
de otro vector. Por ejemplo, si las diez edades del ejemplo anterior corresponden a personas
cuyo sexo viene dado por:
edad[sexo=="M"]
## [1] 22 25 30 31 27
Si además el tiempo (en minutos) que cada una de estas personas se ha pasado al teléfono
durante el último día es:
podemos seleccionar el sexo de aquellos que han hablado más de 13 minutos diarios
mediante:
sexo[tiempo>13]
## [1] "M" "M" "M"
BIBLIOGRAFIA