Denue

Funciones para utilizar datos del DENUE en estudios de Uso de Suelo.

El DENUE es una fuente de información muy importante para construir bases de datos de Uso de Suelo observado en México. Contiene información básica sobre las unidades económicas clasiificadas de acuerdo al sistema SCIAN. Esta clave nos permite extraer de forma fácil diferentes tipos de unidades.

Este módulo permite operar sobre la base del DENUE para obtener datos que sirvan para modelar el uso de suelo.

La clase Denue es la interfaz directa para interactuar con la base de datos.


source

Denue

 Denue (datos:geopandas.geodataframe.GeoDataFrame=None)

Clase para guardar una capa del DENUE para procesarla.

Lo primero que podemos hacer es crear una instancia de la clase a partir de un archivo con datos del DENUE. El módulo descargas provee funcionalidades para descargar estos archivos.

Por lo pronto vamos a trabajar con una base de ejemplo que contiene datos para la Zona Metropolitana de la Ciudad de México en el año 2022.

# Nos aseguramos de tener los datos
pth = descarga_denue(tipo='ejemplo')
denue = Denue.desde_archivo(pth)
denue.datos.head()
El archivo ya está descargado
ERROR 1: PROJ: proj_create_from_database: Open of /home/plablo/miniconda3/envs/landuse/share/proj failed
nom_estab raz_social codigo_act nombre_act per_ocu tipoCenCom cve_ent cve_mun cve_loc ageb manzana index_right OBJECTID Shape_Leng NOM_CIUDAD Shape_Le_1 Shape_Area CVE_SUN SUN geometry
0 CONSULTORIO DENTAL None 621211 Consultorios dentales del sector privado 0 a 5 personas None 15 033 0001 480A 002 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.06894 19.54062)
1 TIENDA NATURISTA EL ARTE DE LA NATURALEZA None 464113 Comercio al por menor de productos naturistas,... 0 a 5 personas None 09 007 0001 1814 027 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.06312 19.33782)
2 REPARADORA DE CALZADO LOS RAPIDOS None 811430 Reparación de calzado y otros artículos de pie... 0 a 5 personas None 09 016 0001 0162 013 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.18603 19.45710)
3 SIN NOMBRE None 461130 Comercio al por menor de frutas y verduras fre... 0 a 5 personas None 09 008 0001 0423 037 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.25436 19.30129)
4 ADMINISTRACION MERCADO CONCENTRACION VOCEADORES GOBIERNO DE LA CIUDAD DE MEXICO 531311 Servicios de administración de bienes raíces 0 a 5 personas MERCADO PUBLICO 09 007 0001 2371 001 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.03318 19.38744)

Filtrar por clave SCIAN

Lo primero que podemos hacer utilizando estos datos es filtrar las filas utilizando la clave SCIAN. Esta clave está compuesta por 6 caractéres que identifican de forma jerárquica sectores, subsectores y actividades económicas. La estructura completa de la clave se puede consultar aquí.

La clase Denue implementa el método filtra_scian que admite una lista de códigos SCIAN,la función regresa un objeto de la misma clase sólo con las filas que correspondan al filtro especificado.

Cada elemento de la lista de claves puede tener un largo arbitrario (menor a 6 caractéres) y el filtro regresará las filas que empiecen con esos caractéres.


source

Denue.filtra_scian

 Denue.filtra_scian (filtro:list, categoria:str=None)
Type Default Details
filtro list Lista con las claves a filtrar
categoria str None Si se especifica agregamos una columna Categoría
Returns Denue y la populamos con el valor especificado

Digamos que queremos encontrar los bancos, es decir, los lugares donde un ciudadano común y corriente puede ir a obtener diferentes tipos de servicios financieros. Estos establecimiento corresponden a la clave 522110, es decir: Instituciones de intermediación crediticia y financiera no bursátil:: Banca Múltiple

bancos = denue.filtra_scian(['522110'])
bancos.datos.head()
nom_estab raz_social codigo_act nombre_act per_ocu tipoCenCom cve_ent cve_mun cve_loc ageb manzana index_right OBJECTID Shape_Leng NOM_CIUDAD Shape_Le_1 Shape_Area CVE_SUN SUN geometry
9 HSBC MEXICO BANCO HSBC MEXICO 522110 Banca múltiple 0 a 5 personas None 09 017 0001 0140 001 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.07429 19.44325)
62 BANORTE/IXE BANCO BANORTE IXE 522110 Banca múltiple 0 a 5 personas None 15 058 0003 1842 001 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.01810 19.42340)
104 BBVA BANCOMER BANCO BBVA BANCOMER 522110 Banca múltiple 0 a 5 personas None 15 121 0001 2494 004 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.21454 19.70071)
167 CAJERO AUTOMÁTICO BANCOPPEL BANCO BANCOPPEL 522110 Banca múltiple 0 a 5 personas None 15 033 0001 1716 004 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.02541 19.52982)
177 CAJERO AUTOMÁTICO CITIBANAMEX BANCO CITIBANAMEX 522110 Banca múltiple 0 a 5 personas None 09 007 0001 2475 005 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.09467 19.37080)

Ese fue el caso más sencillo, pero también podríamos localizar todos los lugares en los que podría trabajar un banquero, no sólo bancos de primer piso sino instituciones financieras en general.

financieras = denue.filtra_scian(['522110', '5222'])
financieras.datos.tail()
nom_estab raz_social codigo_act nombre_act per_ocu tipoCenCom cve_ent cve_mun cve_loc ageb manzana index_right OBJECTID Shape_Leng NOM_CIUDAD Shape_Le_1 Shape_Area CVE_SUN SUN geometry
99870 SANTANDER BANCO SANTANDER 522110 Banca múltiple 0 a 5 personas None 09 006 0001 0147 001 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.09996 19.40536)
99871 CAJERO AUTOMÁTICO SANTANDER BANCO SANTANDER 522110 Banca múltiple 0 a 5 personas None 09 014 0001 0793 022 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.18051 19.36955)
99895 BANORTE/IXE BANCO BANORTE IXE 522110 Banca múltiple 0 a 5 personas None 09 016 0001 1175 015 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.18490 19.40710)
99914 CAJERO AUTOMÁTICO SCOTIABANK INVERLAT BANCO SCOTIABANK INVERLAT 522110 Banca múltiple 0 a 5 personas None 09 003 0001 0145 010 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.16168 19.35014)
99998 BANCO SANTANDER BANCO SANTANDER SA 522110 Banca múltiple 0 a 5 personas None 09 003 0001 1105 016 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.18993 19.30272)

También podemos agregar una columna Categoria a los datos y popularla con el valor que deseemos. Esto puede resultar útil para producir más adelante agregados de diferentes actividades.

financieras = denue.filtra_scian(['522110', '5222'], categoria='Financieras')
financieras.datos[['codigo_act', 'Categoria']].tail()
codigo_act Categoria
99870 522110 Financieras
99871 522110 Financieras
99895 522110 Financieras
99914 522110 Financieras
99998 522110 Financieras

Agregar en categorías de Uso de Suelo

En general las claves SCIAN no corresponden directamente con los usos de suelo que queremos usar en una investigación en específico. Por ejemplo, en diferentes tipos de estudios urbanos queremos obtener la cantidad de unidades que corresponden a cuestiones como oficinas, manufacturas y comercios al pormenor. Estas categorías no corresponden a claves SCIAN únicas sino que agrupan diferentes claves en una sola categoría de uso de suelo.

Para acomodar este flujo de trabajo, la clase Denue incorpora el método agrega_en_usos que toma un diccionario con el nombre del uso asociado a una lista de expresiones regulares que buscan las claves SCIAN que se quieren asociar a dicho uso.


source

Denue.agrega_en_usos

 Denue.agrega_en_usos (categorias:dict, columna:str='Categoria')
Type Default Details
categorias dict Diccionario con la asociación entre cadenas de búsqueda en codigo_act y categorías de Uso de Suelo
columna str Categoria Nombre de la columna en la que se va a guardar la categoría
Returns Denue
categorias = {
    'Manufacturas': ['^31.*5$', '^32.*5$', '^33.*5$'],
    'Oficinas': ['^51', '^521', '^523', '^524', '^5312', '^5313', '^541', '^55'],
    'Comercio': ['^46[123456]']
}
usos = denue.agrega_en_usos(categorias)
usos.datos.loc[~usos.datos.Categoria.isnull()].head()
nom_estab raz_social codigo_act nombre_act per_ocu tipoCenCom cve_ent cve_mun cve_loc ageb ... index_right OBJECTID Shape_Leng NOM_CIUDAD Shape_Le_1 Shape_Area CVE_SUN SUN geometry Categoria
1 TIENDA NATURISTA EL ARTE DE LA NATURALEZA None 464113 Comercio al por menor de productos naturistas,... 0 a 5 personas None 09 007 0001 1814 ... 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.06312 19.33782) Comercio
3 SIN NOMBRE None 461130 Comercio al por menor de frutas y verduras fre... 0 a 5 personas None 09 008 0001 0423 ... 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.25436 19.30129) Comercio
4 ADMINISTRACION MERCADO CONCENTRACION VOCEADORES GOBIERNO DE LA CIUDAD DE MEXICO 531311 Servicios de administración de bienes raíces 0 a 5 personas MERCADO PUBLICO 09 007 0001 2371 ... 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.03318 19.38744) Oficinas
6 ABARROTES LA TIA None 461110 Comercio al por menor en tiendas de abarrotes,... 0 a 5 personas None 15 121 0001 1763 ... 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-99.19269 19.58976) Comercio
7 BIZUTERIA SIN NOMBRE None 463215 Comercio al por menor de bisutería y accesorio... 0 a 5 personas None 15 122 0001 0847 ... 53 54 630172.981156 Valle de México 630.172981 781912.110166 13 13.0 POINT (-98.94058 19.31219) Comercio

5 rows × 21 columns

Pesos

El DENUE contiene los puntos de las actividades económicas y algunas variables asociadas. Una de las más importantes para estudios de uso de suelo es el personal ocupado en cada actividad, esta información aparece en el DENUE como rangos:

usos.datos.per_ocu.unique()
array(['0 a 5 personas', '6 a 10 personas', '51 a 100 personas',
       '11 a 30 personas', '101 a 250 personas', '251 y más personas',
       '31 a 50 personas'], dtype=object)

Una forma de asignar pesos que reflejen la cantidad de personas que trabajan en cada unidad económica es a través de un diccionario que relacione la columna per_ocu con el peso que le queremos dar. Para esto tenemos la función pesa_unidades


source

Denue.pesa_unidades

 Denue.pesa_unidades (pesos:dict, columna:str='pesos')
Type Default Details
pesos dict Diccionario con la relación per_ocu: peso asignado
columna str pesos Columna en donde vamos a guardar los pesos
Returns Denue
pesos = {
        '0 a 5 personas': 2,
        '6 a 10 personas': 8,
        '11 a 30 personas': 20,
        '31 a 50 personas': 40,
        '51 a 100 personas': 75,
        '101 a 250 personas': 175,
        '251 y más personas': 300
        }
usos = usos.pesa_unidades(pesos)
usos.datos[['per_ocu', 'pesos']]
per_ocu pesos
0 0 a 5 personas 2
1 0 a 5 personas 2
2 0 a 5 personas 2
3 0 a 5 personas 2
4 0 a 5 personas 2
... ... ...
99995 0 a 5 personas 2
99996 0 a 5 personas 2
99997 0 a 5 personas 2
99998 0 a 5 personas 2
99999 0 a 5 personas 2

100000 rows × 2 columns