In [1]:
descripciones = {
'P0813' : 'Homicidios Intencionales',
}
In [58]:
# Librerías utilizadas
import pandas as pd
import sys
import urllib
import os
import csv
import zipfile
from simpledbf import Dbf5
import matplotlib.pyplot as plt
%matplotlib inline
In [3]:
# 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 [4]:
# URL Fuente
remote_path = r'http://www.beta.inegi.org.mx/contenidos/proyectos/registros/vitales/mortalidad/microdatos/defunciones/2016/defunciones_base_datos_2016_dbf.zip'
# Carpeta destino Local
local_path = r'D:\PCCS\00_RawData\01_CSV\INEGI\Defunciones\defunciones_base_datos_2016_dbf.zip'
In [5]:
# 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 [6]:
# Descompresión de archivo
target = r'D:\PCCS\00_RawData\01_CSV\INEGI\Defunciones'
descomprimir = zipfile.ZipFile(local_path, 'r')
print('Iniciando descompresión')
descomprimir.extractall(target)
descomprimir.close
print('Descompresión terminada en {}'.format(target))
In [7]:
# Listado de archivos
files = os.listdir(target)
x = 0
for file in files:
print('{} - {}'.format(x, file))
x += 1
In [47]:
# Se utilizará el dataset contenido en el archivo DEFUN16.dbf (Posición 5)
path_to_dbf = r'{}\{}'.format(target,files[5])
dataset = Dbf5(path_to_dbf, codec='mbcs').to_dataframe()
dataset.head()
Out[47]:
In [28]:
len(dataset)
Out[28]:
In [48]:
# Seleccion de variables
x = 0
for i in dataset:
print('{} - {}'.format(x, i))
x += 1
In [49]:
# lista de variables seleccionadas
Variables = [0, 1, 6, 7, 10, 12, 16, 24, 26, 30, 43, 54, 55]
Variables = list(list(dataset)[i] for i in Variables)
Variables
Out[49]:
In [50]:
dataset = dataset[Variables]
dataset.head()
Out[50]:
In [33]:
# Tipos de datos en variables
dataset.dtypes
Out[33]:
In [34]:
years = sorted(dataset['ANIO_OCUR'].unique())
In [35]:
yearsize = {}
for year in years:
yearsize[year] = len(dataset[dataset['ANIO_OCUR'] == year])
In [36]:
len(dataset)
Out[36]:
In [44]:
# El set1 tiene la suma de las defunciones registradas entre 1923 y 1990
set1 = 0
for year in years:
# print(year)
if year > 1990:
break
set1 += yearsize[year]
set1
Out[44]:
In [59]:
# El set 2 tiene la suma de las defunciones registradas entre 1991 y 2000
set2 = 0
for year in years:
if year < 1991:
continue
if year > 2000:
break
# print(year)
set2 += yearsize[year]
set2
Out[59]:
In [62]:
yearsize2 = {'1923-1990':set1,
'1991-2000':set2}
for year in years:
if year < 2001:
continue
# print(year)
yearsize2[str(year)] = yearsize[year]
In [64]:
# Numero de defunciones registradas en cada periodo
for k,v in yearsize2.items():
print('{} : {}'.format(k, v))
In [65]:
#Subconjunto de años para el estudio
dataset = dataset.loc[dataset['ANIO_OCUR'].isin(range(2010, 2017))]
En el campo "PRESUNTO", la clave 2 identifica homicidios.
In [66]:
# Subconjunto de homicidios (El identificador 2 corresponde a homicidios)
dataset = dataset.loc[dataset['PRESUNTO'] == 2]
In [67]:
dataset.head()
Out[67]:
In [69]:
for year in sorted(list(dataset['ANIO_OCUR'].unique())):
print('{} : {}'.format(year, len(dataset[dataset['ANIO_OCUR'] == year])))
In [32]:
len(dataset['CAUSA_DEF'].unique())
Out[32]:
In [33]:
dataset['CAUSA_DEF'].unique()
Out[33]:
In [18]:
# Se utilizará el dataset contenido en el archivo CATMINDE.dbf (Posición 3)
path_to_desc = r'{}\{}'.format(target,files[3])
descripciones = Dbf5(path_to_desc, codec='mbcs').to_dataframe()
descripciones.head()
Out[18]:
In [39]:
#Asignacion de columna con descripciones de causa de defunción
dataframe = dataset.merge(descripciones, left_on='CAUSA_DEF', right_on = 'CLAVE')
dataframe.head()
Out[39]:
In [40]:
# Concatenar claves estatales y municipales para obtener CVE_MUN
# Municipio donde se registró el deceso
dataframe['CVE_MUN_REGIS'] = dataframe.ENT_REGIS.map(str)+dataframe.MUN_REGIS
# Municipio donde ocurrió el deceso
dataframe['CVE_MUN_OCURR'] = dataframe.ENT_OCURR.map(str)+dataframe.MUN_OCURR
# Municipio donde ocurrió la lesión que provocó el deceso
dataframe['CVE_MUN_OCULES'] = dataframe.ENT_OCULES.map(str)+dataframe.MUN_OCULES
dataframe.head()
Out[40]:
In [41]:
# Eliminar columnas redundantes
del(dataframe['ENT_REGIS'])
del(dataframe['MUN_REGIS'])
del(dataframe['ENT_OCURR'])
del(dataframe['MUN_OCURR'])
del(dataframe['ENT_OCULES'])
del(dataframe['MUN_OCULES'])
del(dataframe['CLAVE'])
# Renombrar nombre de la causa de defuncion
dataframe.rename(columns={'NOMBRE' : 'NOMBRE_CAUSA_DEF'}, inplace = True)
# Se asigna el municipio de ocurrencia como indice de la tabla
dataframe.set_index('CVE_MUN_OCURR', inplace=True)
dataframe.head()
Out[41]:
In [42]:
#Reordenar Columnas
list(dataframe)
Out[42]:
In [80]:
# Metadatos estándar
metadatos = {
'Nombre del Dataset': 'INEGI - Registros administrativos de mortalidad al año 2016',
'Descripcion del dataset': 'Originalmente, el formato de captación para las defunciones generales era una boleta colectiva, en la cual las fuentes informantes reportaban las defunciones que registraban durante el mes. A partir del año 1987, el formato principal es el certificado o acta de defunción y el cuaderno para defunciones accidentales y violentas del Ministerio Público.',
'Disponibilidad Temporal': '1923 a 2016',
'Periodo de actualizacion': 'Anual',
'Nivel de Desagregacion': 'Caso',
'Notas': None,
'Fuente': 'INEGI',
'URL_Fuente': 'http://www.beta.inegi.org.mx/proyectos/registros/vitales/mortalidad/',
'Dataset base': None,
}
metadatos = pd.DataFrame.from_dict(metadatos, orient='index', dtype=None)
metadatos.columns = ['Descripcion']
metadatos = metadatos.rename_axis('Metadato')
metadatos
Out[80]:
In [79]:
variables = {
'ENT_REGIS': 'Entidad de registro.',
'MUN_REGIS': 'Municipio de registro.',
'ENT_OCURR': 'Entidad de ocurrencia.',
'MUN_OCURR': 'Municipio de ocurrencia.',
'CAUSA_DEF': 'Causa de la defunción (clave).',
'SEXO': 'Sexo del (la) fallecido (a).\n'
'1: Hombre\n'
'2: Mujer\n'
'9: No especificado',
'ANIO_OCUR': 'Año de ocurrencia.',
'ESCOLARIDA': 'Nivel de escolaridad del (la) fallecido (a) (escolaridad).\n'
'1: Sin escolaridad\n'
'2: Preescolar\n'
'3: Primaria incompleta\n'
'4: Primaria completa\n'
'5: Secundaria incompleta\n'
'6: Secundaria completa\n'
'7: Bachillerato o preparatoria incompleto\n'
'8: Bachillerato o preparatoria completo\n'
'9: Profesional\n'
'10: Posgrado\n'
'88: No aplica a menores de 3 años\n'
'99: No especificado',
'PRESUNTO': 'Tipo de defunción (presunto). 2: Homicidio',
'ASIST_MEDI': 'Condición de atención médica.\n'
'1: Con Asistencia Medica\n'
'2: Sin Asistencia Medica\n'
'9: No especificada',
'VIO_FAMI': 'Condición de violencia familiar.\n'
'1: Hubo violencia familiar\n'
'2: No hubo violencia familiar\n'
'2: No aplica cuando no es homicidio\n'
'9: No especificado',
'ENT_OCULES': 'Entidad de ocurrencia de la lesión.',
'MUN_OCULES': 'Municipio de ocurrencia de la lesión.',
}
variables = pd.DataFrame.from_dict(variables, orient='index', dtype=None)
variables.columns = ['Descripcion']
variables = variables.rename_axis('Mnemonico')
variables
Out[79]:
In [58]:
variables['VIO_FAMI']
Out[58]:
In [81]:
# Guardar el dataset
file = r'D:\PCCS\01_Dmine\Datasets\INEGI\Defunciones\defunciones.xlsx'
writer = pd.ExcelWriter(file)
dataframe.to_excel(writer, sheet_name = 'DATOS')
metadatos.to_excel(writer, sheet_name = 'METADATOS')
variables.to_excel(writer, sheet_name = 'VARIABLES')
writer.save()
print('---------------TERMINADO---------------')