unir-metodologia/analisis-de-columnas.ipynb

12 KiB

Ejecutaremos el script sinac-download.py y nos dara los archivos zip a trabajar, los descomprimimos y vermos los CSV necesarios.

Despues de descomprimir los ZIP hay que renombrar los archivos:

  • datasets/Nacimientos_2021.csv
  • datasets/Nacimientos_2022.csv
  • datasets/sinac_2020.csv

Para que sigan la convencion: datasets/sinac2008DatosAbiertos.csv

from pathlib import Path
import json
import pandas as pd
csvs = sorted([p for p in Path("datasets").iterdir() if "csv" in p.name])
samples = {}
csvs
[PosixPath('datasets/sinac2008DatosAbiertos.csv'),
 PosixPath('datasets/sinac2009DatosAbiertos.csv'),
 PosixPath('datasets/sinac2010DatosAbiertos.csv'),
 PosixPath('datasets/sinac2011DatosAbiertos.csv'),
 PosixPath('datasets/sinac2012DatosAbiertos.csv'),
 PosixPath('datasets/sinac2013DatosAbiertos.csv'),
 PosixPath('datasets/sinac2014DatosAbiertos.csv'),
 PosixPath('datasets/sinac2015DatosAbiertos.csv'),
 PosixPath('datasets/sinac2016DatosAbiertos.csv'),
 PosixPath('datasets/sinac2017DatosAbiertos.csv'),
 PosixPath('datasets/sinac2018DatosAbiertos.csv'),
 PosixPath('datasets/sinac2019DatosAbiertos.csv'),
 PosixPath('datasets/sinac2020DatosAbiertos.csv'),
 PosixPath('datasets/sinac2021DatosAbiertos.csv'),
 PosixPath('datasets/sinac2022DatosAbiertos.csv')]
csvs[0].name[5:9]
'2008'
columnas_totales = []
for csv in csvs:
    df = pd.read_csv(csv, low_memory=False)
    columnas = set(df.columns.to_list())
    columnas_totales.append(columnas)
    # print(csv.name, len(df), len(columnas), columnas)
    samples[csvs[0].name[5:9]] = df.sample(25)
    del df
columns = {}
for i, columnas in enumerate(columnas_totales):
    columns[csvs[i].name[5:9]] = sorted(list(columnas))

# json.dumps(columns)

Con este siguient script produciremos un archivo Excel, colocara las columnas en un renglon por año y utilizaremos esto para determinar las equivalencias.

file = Path("columns.csv")
with file.open("w") as f:
    for year, column in columns.items():
        print(year, *column, sep=",", file=f)

Utilizando como base las columnas correspondientes a los primeros años (antes del 2017), definiremos equivalencias para los rangos del 2017 al 2019.

Para esto utilizamos ChatGPT con el siguiente Prompt:

Te proporcionare dos listas que nombran columnas,

Primera Lista:
{PRIMERA LISTA}

Segunda Lista:
{SEGUNDA LISTA}

Determina cuales son las equivalencias de columnas. Y proporciona un JSON que exprese las equivalencias. No todas las columnas existen mutuamente, asi que determina el conjunto maximo de columnas compatibles por significado de la columna.

Si sirve de contexto, enterate que son columnas correspondientes a campos de informacion de utilidad en resportes de natalidad.

Despues de analizar manualmente las columnas para el 2017,2018,2019 se ha encontrado que el siguiente es un candidato a mapa de equivalencias de columnas.

Para los años 2020, 2021, 2022, tenemos la siguiente relacion de equivalencias.

Las columnas de interes, netas seran las siguientes: