In [2]:
import os
import re
import zipfile
import requests
import pandas as pd
import matplotlib.pyplot as plt
Creamos en un inicio una función que nos facilite obtener los datos desde el INEGI, para posterior reutilización:
In [3]:
def get_data(url, target_file):
chunk_size = 1024
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(target_file, 'wb') as fd:
for chunk in r.iter_content(chunk_size):
fd.write(chunk)
# Extract all content from zip file
if zipfile.is_zipfile(target_file):
with zipfile.ZipFile(target_file) as zf:
zf.extractall()
In [6]:
base_path="http://www3.inegi.org.mx/sistemas/descarga/descargaArchivo.aspx?file=Por+entidad+federativa"
nuevo_leon="%2f19+Nuevo+Le%f3n%2f19_NuevoLeon_tsv.zip"
url_target = "".join([base_path, nuevo_leon])
fname = "nuevo_leon.zip"
os.mkdir("data", 0755)
os.chdir("data")
get_data(url_target, fname)
In [7]:
input_data = pd.read_csv("19_nuevoleon_valor.tsv", delimiter="\t")
input_data.shape
Out[7]:
In [8]:
input_data.Id_Indicador.value_counts()
Out[8]:
In [7]:
# 3106002001 -> Esperanza de vida al nacer
indicator = input_data[input_data.Id_Indicador == 3106002001]
indicator
Out[7]:
Algunas de las columnas mostradas previamente contienen datos nulos o no representan un número. Por lo tanto, voy a eliminar dichas columnas que no son de nuestro interés para nuestro análisis.
In [8]:
# Drop NaN columns
indicator = indicator.dropna(axis=1, how='all')
indicator
Out[8]:
In [9]:
# Select only years
pattern = re.compile(r"\d{4}(\/\d)?$")
years = [col_name for col_name in indicator.columns if re.match(pattern, col_name)]
years
Out[9]:
In [10]:
# Only get the columns that reference year data and then transpose the matrix
indicator = indicator[years].T
indicator
Out[10]:
In [13]:
fig, axes = plt.subplots()
axes.plot(indicator.index, indicator.values, label="Nuevo Leon", color="green", alpha=0.5, lw=2)
axes.grid(True)
axes.set_xlabel("Tiempo")
axes.set_ylabel("Porcentaje")
axes.set_title("Probabilidad de vivir al nacer")
Out[13]:
In [ ]: