Indicadores que salen de deste dataset:
ID | Descripción |
---|---|
P0702 | Restricción al paso de automóviles |
P0703 | Restricción al paso a peatones |
P0704 | Vialidades con recubrimiento de la calle |
P0705 | Vialidades con banqueta |
P0706 | Vialidades con guarnición |
P0713 | vialidades con rampa para silla de ruedas |
In [2]:
descripciones = {
'P0702' : 'Restricción al paso de automóviles',
'P0703' : 'Restricción al paso a peatones',
'P0704' : 'Vialidades con recubrimiento de la calle',
'P0705' : 'Vialidades con banqueta',
'P0706' : 'Vialidades con guarnición',
'P0713' : 'vialidades con rampa para silla de ruedas',
}
In [3]:
# Librerias utilizadas
import pandas as pd
import sys
import urllib
import os
import csv
import zipfile
In [4]:
# Configuracion del sistema
print('Python {} on {}'.format(sys.version, sys.platform))
print('Pandas version: {}'.format(pd.__version__))
import platform; print('Running on {} {}'.format(platform.system(), platform.release()))
In [5]:
# URL Fuente
remote_path = r'http://www.beta.inegi.org.mx/contenidos/proyectos/encotras/cleu/2014/tabulados/tab_entorno_2014_xls.zip'
# Carpeta destino Local
local_path = r'D:\PCCS\00_RawData\01_CSV\CLEU\tab_entorno_2014_xls.zip'
In [7]:
# Descarga de archivo
if os.path.isfile(local_path):
print('Ya existe el archivo: {}'.format(local_path))
else:
print('Descargando {} ... ... ... ... ... '.format(local_path))
urllib.request.urlretrieve(remote_path, local_path) #
print('se descargó {}'.format(local_path))
In [13]:
#Descompresión de archivo
target = r'D:\PCCS\00_RawData\01_CSV\CLEU'
archivo = target + '\\' + 'tab_entorno_2014.xls'
if os.path.isfile(target + '\\' + 'tab_entorno_2014.xls'):
print('Ya existe el archivo: {}'.format(archivo))
else:
print('Descomprimiendo {} ... ... ... ... ... '.format(target))
descomprimir = zipfile.ZipFile(local_path, 'r')
descomprimir.extractall(target)
descomprimir.close
In [15]:
# Cada parametro se encuentra en una hoja diferente del libro de excel
# Ubicacion de datos del cada parametro:
hojas = {
'P0702': 'TEU07', # Restricción al paso de automóviles
'P0703': 'TEU07', # Restricción al paso a peatones
'P0704': 'TEU12', # Vialidades con recubrimiento de la calle
'P0705': 'TEU02', # Vialidades con banqueta
'P0706': 'TEU03', # Vialidades con guarnición
'P0713': 'TEU04' # vialidades con rampa para silla de ruedas
}
Cada hoja tiene columnas diferentes, a continuación se definen para pasar los nombres durante el proceso de lectura de hojas:
In [19]:
# Nombre de las hojas a partir de su descripcion en el archivo fuente
nom_hojas = {
'P0702': 'Manzanas por entidad federativa, municipio, localidad y restricción del paso a automóviles según restricción del paso a peatones en sus vialidades', # Restricción al paso de automóviles
'P0703': 'Manzanas por entidad federativa, municipio, localidad y restricción del paso a automóviles según restricción del paso a peatones en sus vialidades', # Restricción al paso a peatones
'P0704': 'Vialidades por entidad federativa, municipio, localidad y alumbrado público según tipo de recubrimiento de la calle', # Vialidades con recubrimiento de la calle
'P0705': 'Manzanas por entidad federativa, municipio, localidad y disponibilidad de banqueta según disponibilidad de recubrimiento de la calle', # Vialidades con banqueta
'P0706': 'Manzanas por entidad federativa, municipio, localidad y disponibilidad de banqueta según disponibilidad de guarnición en sus vialidades', # Vialidades con guarnición
'P0713': 'Manzanas por entidad federativa, municipio, localidad y disponibilidad de banqueta según disponibilidad de rampa para silla de ruedas en sus vialidades' # vialidades con rampa para silla de ruedas
}
Debido a que se saltarán renglones al momento de leer cada hoja, será necesario renombrar todas las columnas para cada hoja. De una vez, como en el archivo original todas las columnas tienen nombres similares sin imporatar el tema, en el renombrado de columnas se incluirá el tema al que aluda cada dataset.
In [40]:
dic_hojas = {
'TEU07': [ # Restricción al paso de automóviles
'Clave geoestadística',
'Entidad federativa',
'Municipio',
'Localidad',
'Restricción del paso a automóviles',
'Total de manzanas',
'RPPeatones Todas las vialidades',
'RPPeatones Alguna vialidad',
'RPPeatones Ninguna vialidad',
'RPPeatones No especificado'
],
'TEU12': [ # Vialidades con recubrimiento de la calle
'Clave geoestadística',
'Entidad federativa',
'Municipio',
'Localidad',
'Disponibilidad de alumbrado público',
'Total de vialidades',
'Pavimento o concreto',
'Empedrado o adoquín',
'Sin recubrimiento',
'Recubrimiento No especificado',
],
'TEU02': [ # Vialidades con banqueta
'Clave geoestadística',
'Entidad federativa',
'Municipio',
'Localidad',
'Disponibilidad de banqueta',
'Total de manzanas',
'Banqueta en todas las vialidades',
'Banqueta en Alguna vialidad',
'Banqueta en Ninguna vialidad',
'Banqueta No especificado'
],
'TEU03': [ # Vialidades con guarnición
'Clave geoestadística',
'Entidad federativa',
'Municipio',
'Localidad',
'Disponibilidad de banqueta',
'Total de manzanas',
'Guarnicion en Todas las vialidades',
'Guarnicion en Alguna vialidad',
'Guarnicion en Ninguna vialidad',
'Guarnicion No especificado'
],
'TEU04': [ # vialidades con rampa para silla de ruedas
'Clave geoestadística',
'Entidad federativa',
'Municipio',
'Localidad',
'Disponibilidad de banqueta',
'Total de manzanas',
'Rampa en Todas las vialidades',
'Rampa en Alguna vialidad',
'Rampa en Ninguna vialidad',
'Rampa No especificado'
]
}
In [23]:
# Numero de filas que se tienen que ignorar en cada hoja antes de llegar a los datos.
skip = 8
In [41]:
# Funcion para leer datos de hojas
def cargahoja(hoja, colnames, skip):
raw_data = pd.read_excel(archivo,
sheetname=hoja,
skiprows=skip).dropna()
# renombra las columnas
raw_data.columns = colnames
return raw_data
In [77]:
datasets = {}
for parametro, hoja in hojas.items():
print('Procesando {} para {}'.format(hoja, parametro))
datasets[parametro] = cargahoja(hoja, dic_hojas[hoja], skip)
print('------terminado------')
In [51]:
datasets.keys()
Out[51]:
In [49]:
descripciones
Out[49]:
In [73]:
# Limpieza estándar
def limpieza(dataset):
# Conserva unicamente los renglones con datos municipales
dataset = dataset[dataset['Clave geoestadística'].str.len() == 5]
# Elimina columnas que ya no se van a utilizar
del(dataset['Entidad federativa'])
del(dataset['Municipio'])
del(dataset['Localidad'])
# Renombra la columna correspondiente a CVE_MUN y asignala como index
dataset.set_index('Clave geoestadística', inplace=True)
dataset = dataset.rename_axis('CVE_MUN')
return dataset
In [64]:
# Metadatos estándar
metadatos = {
'Nombre del Dataset': 'Características de las localidades y del entorno urbano 2014',
'Descripcion del dataset': None,
'Disponibilidad Temporal': '2014',
'Periodo de actualizacion': 'No Determinada',
'Nivel de Desagregacion': 'Localidad, Municipal, Estatal, Nacional',
'Notas': None,
'Fuente': 'INEGI',
'URL_Fuente': 'http://www.beta.inegi.org.mx/proyectos/encotras/cleu/2014/',
'Dataset base': None,
}
In [67]:
list(datasets.keys())
Out[67]:
In [78]:
datasets['P0702'].head(3)
Out[78]:
In [79]:
# Limpieza estándar inicial
for ds in list(datasets.keys()):
print('Limpiando dataset para {}'.format(ds))
datasets[ds] = limpieza(datasets[ds])
print('------terminado------')
In [93]:
datasets['P0702'].head()
Out[93]:
In [164]:
# La columna 'Restricción del paso a automóviles' clasifica las manzanas
# que tienen alguna clase de restriccion al paso de automóviles.
P0702_raw = datasets['P0702']
list(P0702_raw['Restricción del paso a automóviles'].unique())
Out[164]:
In [165]:
P0702_raw.head()
Out[165]:
In [166]:
list(P0702_raw)
Out[166]:
In [167]:
# Es conveniente crear un dataset con el total de manzanas por municipio
manzanas = P0702_raw[P0702_raw['Restricción del paso a automóviles'] == 'Total']['Total de manzanas']
manzanas.head()
Out[167]:
In [168]:
# Para el parametro, hay que filtrar unicamente las columnas que contienen restricciones a la vialidad
P0702_1 = P0702_raw.loc[P0702_raw['Restricción del paso a automóviles'].isin([
'Restricción del paso a automóviles en todas las vialidades',
'Restricción del paso a automóviles en alguna vialidad',
])]
P0702_1.head()
Out[168]:
In [169]:
# Una vez filtrados hay que agregar los datos por municipio. También vale la pena quitar las columnas de
# restriccion al paso de peatones, pues no son de interes para este parametro.
P0702_1 = P0702_1['Total de manzanas'].groupby(level=0).sum().to_frame(name='Restricción del paso a automóviles')
P0702_1.head()
Out[169]:
In [170]:
# Unimos ambos datasets para crear el dataset estandar del parámetro
P0702 = manzanas.to_frame().join(P0702_1)
print(len(P0702))
P0702.head()
Out[170]:
Después de hacer el join de las columnas del total de manzanas y las manzanas con restricción al paso de automóviles, en algunas celdas de la columna "Restricción del paso a automóviles" quedaron sin valores. Para entender a qué se debe, es conveniente agregar las columnas de 'Restricción del paso a automóviles en ninguna vialidad' y 'No Especificado'.
In [171]:
# celdas de la columna "Restricción del paso a automóviles" que quedaron sin valores
P0702[P0702['Restricción del paso a automóviles'].isnull()]
Out[171]:
In [172]:
P0702_raw['Restricción del paso a automóviles'].unique()
Out[172]:
In [173]:
# Columna con manzanas con restriccion al paso de automoviles en ninguna vialidad
RPA = 'Restricción del paso a automóviles'
TM = 'Total de manzanas'
VAR = 'Restricción del paso a automóviles en ninguna vialidad'
RPANV = P0702_raw[P0702_raw[RPA] == VAR][TM].to_frame(name = VAR)
RPANV.head()
Out[173]:
In [174]:
# Columna con manzanas con restriccion al paso de automoviles no especificado
VAR = 'No especificado'
RPANE = P0702_raw[P0702_raw[RPA] == VAR][TM].to_frame(name = 'Restricción del paso a automóviles '+VAR)
RPANE.head()
Out[174]:
In [175]:
# Union de los dataframes
P0702 = P0702.join(RPANV)
P0702 = P0702.join(RPANE)
P0702.head()
Out[175]:
Nuevamente, revisamos las celdas que no tienen datos en la columna de "Restriccion al paso de automóviles"
In [182]:
# Celdas de la columna "Restricción del paso a automóviles" que quedaron sin valores
P0702[P0702['Restricción del paso a automóviles'].isnull()].head()
Out[182]:
Hay dos tipos de casos:
In [ ]:
In [183]:
def llenarestriccion(x):
rpa = 'Restricción del paso a automóviles'
rpane = 'Restricción del paso a automóviles No especificado'
if x[rpa].isnull() and x[rpane].isnull():
x[rpa] = 0
In [185]:
testframe.apply(llenarestriccion)
In [ ]:
# Guardar el dataset
file = r'D:\PCCS\01_Dmine\Datasets\CLEU\P0702.xlsx'
writer = pd.ExcelWriter(file)
P0702.to_excel(writer, sheet_name = 'DATOS')
variables.to_excel(writer, sheet_name = 'VARIABLES')
writer.save()
print('---------------TERMINADO---------------')