In [1]:
from datetime import datetime
import pandas as pd
import pandas.io.data
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
pd.set_option('max_columns', 50)
%matplotlib inline

In [2]:
run_console = False

In [3]:
if run_console:
    %qtconsole

Análisis de Registro de Derechos de Agua

Provincia de Petorca

Version 0.1

Este análisis toma como base la base de datos de Derechos de aprovechamiento de aguas registrados en DGA la cual indica Fecha de actualización: 04/08/2014. Especificamente se descargó el día 18 de Agosto de 2014, los derechos registrados para V Región de Valparaíso. Estos datos fueron depurados con la herramienta OpenRefine 2.5-r2407, con esta aplicación en primera instancia se filtraron todos los derechos de la columna "Provincia" asociados a "Petorca" obteniendo 2983 registros, después a partir de múltiples iteraciones con el software QGIS Desktop 2.2.0 se logró consolidar los diferentes Datum de Captación indicados en el registro a un sólo Datum, el WGS84 EPSG:4326, además se asoció la ubicación de la Comuna en aquellos registros que no presentan datos de coordenadas geográficas en el registro, con esto se logró geolocalizar 2971 derechos.

Con OpenRefine finalmente se procedió a terminar el depurado de los datos (eliminar espacios, formato números, agrupar columnas, etc.) y se ordenaron por "Caudal Anual Prom" y se exporta el resultado en el archivo Derechos_Concedidos_V_Region-xls-Petorca-WGS84-csv-V3.csv, después se corrigió un error de conversión de Fechas de Resolución y se exporta el resultado en el archivo Derechos_Concedidos_V_Region-xls-Petorca-WGS84-csv-V4.csv, en Corrige Fecha Resolución

Nota: Existen 12 derechos que no se pudieron procesar automaticamente, se espera más adelante incluirlos de manera manual al       dataset consolidado.

Problemas encontrados con la base de datos de Derechos de aprovechamiento de aguas registrados en DGA

  • Múltiples inconsisntecia entre el Datum declarado y el Datum real asociado a las coordenadas del registro.
  • Existen múltiples derechos que a pesar de tener un Caudal Anual Promedio alto, no declaran la ubicación de la captación.
  • No existe una columna que indica si el derecho se encuentra Vigente, ni menos la fecha de revocación.
  • No están registrados los derechos asociados a concesiones mineras, llamado "Aguas del Minero" estipuladas en el Artículo 110 del Código del Minería.

Abre el archivo con la matriz de datos depurados (dataset) y los guarda en la variable ddaa

Los derechos quedan indexados por la Fecha de Resolución Envío al Juez Inscripción C.B.R.


In [4]:
ddaa = pd.read_csv('Derechos_Concedidos_V_Region-xls-Petorca-WGS84-csv-V4.csv', index_col='Fecha de Resolución/ Envío al Juez/ Inscripción C.B.R.', dayfirst=True, parse_dates=True)

Indica la información básica del dataset (Indice ordenado por fecha)


In [5]:
# Son 2970 derechos en el registro
ddaa.sort_index().info()


<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2970 entries, 1913-12-11 00:00:00 to 2014-06-23 00:00:00
Data columns (total 48 columns):
N°                                            2970 non-null int64
LOCATION                                      2970 non-null object
Código de 
Expediente                        2970 non-null object
Uso del Agua                                  263 non-null object
Naturaleza del 
Agua                         2966 non-null object
Ejercicio del Derecho                         2970 non-null object
Caudal 
Anual
Prom                          2970 non-null float64
Unidad de Caudal                              2970 non-null object
Nombre Solicitante                            2970 non-null object
N° 
Solicitud                                2970 non-null int64
Región,Provincia,Comuna                       2970 non-null object
Unidad de Resolución/ Oficio/ C.B.R.          2965 non-null object
N° Resolución/ 
Oficio/ Fojas | 
N° CBR     2970 non-null object
Tipo Derecho                                  2970 non-null object
Clasificación 
Fuente                        2966 non-null object
Cuenca                                        2945 non-null object
SubCuenca                                     525 non-null object
SubSubCuenca                                  518 non-null object
Fuente                                        489 non-null object
Enero                                         2970 non-null object
Febrero                                       2970 non-null object
Marzo                                         2970 non-null object
Abril                                         2970 non-null object
Mayo                                          2970 non-null object
Junio                                         2970 non-null object
Julio                                         2970 non-null object
Agosto                                        2970 non-null object
Septiembre                                    2970 non-null object
Octubre                                       2970 non-null object
Noviembre                                     2970 non-null object
Diciembre                                     2970 non-null object
Caudal Ecológico
(l/s)                       2970 non-null object
¿Caudal Ecológico Promedio?                   2970 non-null object
UTM 
Norte 
Captación
(m)                  2970 non-null float64
UTM 
Este 
Captación
(m)                   2970 non-null float64
Huso                                          2970 non-null object
Datum                                         2970 non-null object
Latitud 
Captación                           2970 non-null object
Longitud 
Captación                          2970 non-null object
Datum2                                        2970 non-null object
Referencia a puntos conocidos de captación    826 non-null object
C.B.R.                                        1946 non-null object
Fojas                                         742 non-null object
N° CBR                                        2970 non-null int64
Año                                           2970 non-null int64
Código Expediente
Antiguo                    1183 non-null object
¿Posee 
más de un 
punto de captación?      14 non-null object
SIN_LOC                                       2970 non-null bool
dtypes: bool(1), float64(3), int64(4), object(40)

Lista los nombres de las columnas disponibles del dataset


In [6]:
# Corrige Nombres de Columnas eliminando caracter especial \r
ddaa.columns = map(lambda s: s.replace('\r', ''), ddaa.columns.values)
ddaa.columns


Out[6]:
Index([u'N°', u'LOCATION', u'Código de \nExpediente', u'Uso del Agua', u'Naturaleza del \nAgua', u'Ejercicio del Derecho', u'Caudal \nAnual\nProm', u'Unidad de Caudal', u'Nombre Solicitante', u'N° \nSolicitud', u'Región,Provincia,Comuna', u'Unidad de Resolución/ Oficio/ C.B.R.', u'N° Resolución/ \nOficio/ Fojas | \nN° CBR', u'Tipo Derecho', u'Clasificación \nFuente', u'Cuenca', u'SubCuenca', u'SubSubCuenca', u'Fuente', u'Enero', u'Febrero', u'Marzo', u'Abril', u'Mayo', u'Junio', u'Julio', u'Agosto', u'Septiembre', u'Octubre', u'Noviembre', u'Diciembre', u'Caudal Ecológico\n(l/s)', u'¿Caudal Ecológico Promedio?', u'UTM \nNorte \nCaptación\n(m)', u'UTM \nEste \nCaptación\n(m)', u'Huso', u'Datum', u'Latitud \nCaptación', u'Longitud \nCaptación', u'Datum2', u'Referencia a puntos conocidos de captación', u'C.B.R.', u'Fojas', u'N° CBR', u'Año', u'Código Expediente\nAntiguo', u'¿Posee \nmás de un \npunto de captación?', u'SIN_LOC'], dtype='object')

Lista los primeros 25 derechos de agua de mayor a menor ordenados por Caudal Anual Promedio.


In [7]:
ddaa.sort(u'Caudal \nAnual\nProm', ascending=False).head(25)[[u'Nombre Solicitante',u'Caudal \nAnual\nProm']]


Out[7]:
Nombre Solicitante Caudal Anual Prom
Fecha de Resolución/ Envío al Juez/ Inscripción C.B.R.
1913-12-11 GILLET Y CIA. 3500.0000
1915-02-15 CARLOS ZADARTU Y OTROS 3000.0000
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 1000.0000
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 800.0000
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 800.0000
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 800.0000
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 800.0000
2003-01-30 ASOCIACION DE CANALISTAS CANAL CHINCOLCO 664.0833
2001-10-10 SOCIEDAD AGRICOLA Y GANADERA EL SOBRANTE LIMITADA 661.0833
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 500.0000
1993-06-30 FISCO, DIRECCION DE OBRAS HIDRAULICAS 320.0000
2003-01-30 ASOCIACION DE CANALISTAS CANAL CHINCOLCO 303.4167
1982-11-23 RESERVA FISCO 300.0000
2001-10-10 SOCIEDAD AGRICOLA Y GANADERA EL SOBRANTE LIMITADA 229.6667
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 200.0000
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 200.0000
1958-12-03 SOC.AGRICOLA LTDA. EL INGENIERO 180.0000
2003-01-30 ASOCIACION DE CANALISTAS CANAL CHINCOLCO 169.6667
1998-08-26 EMPRESA DE OBRAS SANITARIAS DE VALPARAISO S.A. 150.0000
2004-06-30 AGRICOLA ALTOS DE POLCURA LTDA. 150.0000
1966-02-11 HERNAN VUGINIG FUENZALIDA 150.0000
2010-01-05 COMPAÑIA AGRICOLA Y MINERA LOS ANGELES S.A. 105.0000
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 100.0000
1982-04-29 AGRICOLA CHINCHORRO LIMITADA 100.0000
1999-11-16 HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST 100.0000

In [8]:
# Verifica en el dataset posible restricción de 100 mil celdas de Google Fusion Table
# Habría que sacar 15 columnas
(len(ddaa.columns) - 15)*len(ddaa) < 100000


Out[8]:
True

In [9]:
# Número total de columnas del dataset
len(ddaa.columns)


Out[9]:
48

Gráfico de Serie de tiempo derechos inscritos desde 1913-11-12 a 2014-06-23


In [10]:
plot1 = ddaa[u'Caudal \nAnual\nProm'].plot(figsize=(10, 10), style=['p'], title='Serie de tiempo derechos inscritos')
plot1.set_ylabel("Caudal Anual Promedio Lt/s")


Out[10]:
<matplotlib.text.Text at 0x955a250>

Gráfico de Serie de tiempo derechos inscritos desde 1973 a 2014


In [11]:
ddaa['1973':][u'Caudal \nAnual\nProm'].plot(figsize=(10, 10), style=['p'])


Out[11]:
<matplotlib.axes._subplots.AxesSubplot at 0x97104d0>

Tabla número de derechos según Ejercicio del Derecho


In [12]:
ddaa[u'Ejercicio del Derecho'].value_counts()


Out[12]:
Permanente y Continuo            2857
Perm. y Cont. y Provisionales      50
Permanente y Discontinuo           26
Eventual y Continuo                13
Eventual y Discontinuo             11
Permanente y Alternado             11
Eventual y Alternado                2
dtype: int64

Gráfico derechos según Ejercicio del Derecho


In [13]:
ddaa.groupby(u'Ejercicio del Derecho').sum()[u'Caudal \nAnual\nProm'].plot(kind='pie', figsize=(10, 10), title=u'Distribución Ejercicio del Derecho')


Out[13]:
<matplotlib.axes._subplots.AxesSubplot at 0x976aa30>

DataFrame donde reemplaza valores nulos (NaN) por sin información (S/I)


In [14]:
# "S/I" Corresponde a datos no declarados en el registro de la solicitud
ddaa_si = ddaa.where((pd.notnull(ddaa)), 'S/I')

Tabla número de derechos según Uso del Agua


In [15]:
ddaa_si[u'Uso del Agua'].value_counts()


Out[15]:
S/I                                 2707
Riego                                247
Bebida/Uso Domestico/Saneamiento      16
dtype: int64

In [16]:
ddaa_si.groupby(u'Uso del Agua').sum()[u'Caudal \nAnual\nProm'].plot(kind='pie', figsize=(10, 10), title=u'Distribución Uso del Agua Declarado en Solicitudes')


Out[16]:
<matplotlib.axes._subplots.AxesSubplot at 0x97fcf50>

Tabla número de derechos según Naturaleza del Agua


In [17]:
ddaa_si[u'Naturaleza del \nAgua'].value_counts()


Out[17]:
Subterranea                2765
Superficial y Corriente     165
Superficial                  36
S/I                           4
dtype: int64

In [18]:
ddaa_si.groupby(u'Naturaleza del \nAgua').sum()[u'Caudal \nAnual\nProm'].plot(kind='pie', figsize=(10, 10), title=u'Distribución Naturaleza del Agua Declarado en Solicitudes')


Out[18]:
<matplotlib.axes._subplots.AxesSubplot at 0x97fcdd0>

Tabla número de derechos según Nombre Solicitante


In [19]:
ddaa[u'Nombre Solicitante'].value_counts().head(25)


Out[19]:
AGRICOLA PALTUNCHO LTDA                             50
AGRICOLA PETORCA S.A.                               48
MARTIN IGNACIO HENRIQUEZ LARRAIN                    45
HUMBERTO EINAR JUAN BENEDETTI ROSENQVIST            36
AGRICOLA RIO TINTO S.A.                             34
SOCIEDAD AGRICOLA LOS GRANEROS LIMITADA             34
AGRICOLA PULLACON LIMITADA                          32
AGRO FRUTILLAR LIMITADA                             31
COMPAÑIA AGRICOLA Y MINERA LOS ANGELES S.A.         23
AGRICOLA OLIVOS DE HUAQUEN S.A.                     21
COOPERATIVA CAMPESINA SANTA VICTORIA LTDA.          20
EMPRESA DE OBRAS SANITARIAS DE VALPARAISO S.A.      20
AGRICOLA LA MARTINA LIMITADA                        19
JUAN WENKE WILLIAMS                                 18
AGRICOLA EL SOBRANTE LIMITADA.                      18
AGRICOLA GRANADA FR LIMITADA                        16
AGRICOLA CHALACO S.A.                               16
MIGUEL LUIS PIZARRO VILLALOBOS                      16
AGRICOLA Y FORESTAL SANTA LAURA Y COMPAÑIA LTDA.    15
CIA. MINERA CERRO NEGRO S.A.                        15
AGRICOLA EL ROBLE LIMITADA                          14
AGRICOLA LAS MERCEDES MG LIMITADA                   13
AGRICOLA RINCONADA DE LOS ALAMOS S.A.               13
SERGIO RENATO OLMOS JIMENEZ                         13
JUAN PABLO JAVIER FERNANDEZ PEREZ                   11
dtype: int64

Agrupa derechos de los 20 solicitantes ordenados por Caudal Anual Promedio


In [20]:
grp_solic = ddaa.groupby(u'Nombre Solicitante')
caudales_solic = grp_solic[u'Caudal \nAnual\nProm'].sum()
caudales_solic_desc = caudales_solic.order(ascending=False).head(20)

In [21]:
# Estadísticos básicos
ddaa[u'Caudal \nAnual\nProm'].describe()


Out[21]:
count    2970.000000
mean       10.633136
std        94.568023
min         0.010000
25%         1.000000
50%         2.000000
75%         6.000000
max      3500.000000
dtype: float64

In [22]:
# Sumatoria Caudal Anual Promedio
ddaa[u'Caudal \nAnual\nProm'].sum()


Out[22]:
31580.414399999881

Gráfico distribución derechos de los 20 solicitantes ordenados por Caudal Anual Promedio


In [23]:
caudales_solic_desc.plot(kind='pie', figsize=(10, 10), title=u'Distribución derechos de los 20 solicitantes ordenados por Caudal Anual Promedio')


Out[23]:
<matplotlib.axes._subplots.AxesSubplot at 0x98afa30>

In [24]:
# Agrupa datos por año solicitud
grp_year = ddaa.groupby(lambda x: x.year)

In [25]:
# Sumatoria caudales por año
caudales_year = grp_year[u'Caudal \nAnual\nProm'].sum()

In [26]:
# Gráfico de barra suma caudales de derechos otorgados por año
caudales_year.plot(kind='bar', figsize=(15, 15), title=u'Serie de tiempo Caudales Anual Promedio de derechos otorgados por año')


Out[26]:
<matplotlib.axes._subplots.AxesSubplot at 0x9b08e10>

In [27]:
# %qtconsole

In [27]: