예제 #1
0
    'HOJAS INCLUIDAS EN EL LIBRO': np.nan
}

descripcion_parametro = pd.DataFrame.from_dict(
    d_parametro, orient='index').rename(columns={0: 'DESCRIPCION'})
descripcion_mineria = pd.DataFrame.from_dict(
    d_mineria, orient='index').rename(columns={0: 'DESCRIPCION'})
descripcion_hojas = pd.DataFrame.from_dict(
    d_hojas, orient='index').rename(columns={0: 'DESCRIPCION'})
MetaParametro = descripcion_parametro.append(descripcion_mineria).append(
    descripcion_hojas).append(metavariables)

# Diccionario de Descripciones
DescParametro = {
    'ClaveParametro': ClaveParametro,
    'NombreParametro': NombreParametro,
    'info_completa': info_completa,
    'info_sin_info': info_sin_info,
    'info_incomple': info_incomple,
    'RutaSalida': DirDestino,
    'Clave de Dimension': ClaveDimension,
    'Nombre de Dimension': NomDimension,
    'Titulo de Columna': TituloParametro,
    'Actualizacion de datos': ActDatos
}

# Crear archivo de Excel y documentar parametro
ParametroEstandar(DescParametro, MetaParametro, Parametro, DatosLimpios,
                  integridad_parametro, hoja_datos)
DocumentarParametro(DescParametro, MetaParametro, Parametro)
예제 #2
0
def compilar(M, dataset, par_dataset, variables_dataset):
    # Revisa si la variable requiere que se especifique el array cuando se escriba el JSON
    M.TipoVar = M.TipoVar.lower()
    stdvarset = list(
        'cdobn')  # [c]ontinua, [d]iscreta, [o]rdinal, [b]inaria, [n]ominal
    check1 = M.TipoVar in stdvarset  # Revisa si la variable está mal especificada
    check2 = not (M.TipoVar == 'c' or M.TipoVar == 'd'
                  )  # Revisa si la variable no requiere array
    check3 = M.array == []  # Revisa si el array está vacío
    if not check1:
        raise AttributeError(
            'No se reconoce el tipo de variable especificado: {}'.format(
                M.TipoVar))
    if check2 and check3:
        raise ValueError(
            'M.array no puede estar vacío para variables del tipo {}'.format(
                M.TipoVar))

    # Nombrar columna de integridad
    ColIntegridad = M.ClaveParametro.replace("P", "I")

    # Agregar datos por ciudad para parametro
    variables_SUN = ['CVE_MUN', 'NOM_MUN', 'CVE_SUN', 'NOM_SUN', 'NOM_ENT']
    DatosLimpios = asignar_sun(par_dataset, variables=variables_SUN)
    OrdenColumnas = (variables_SUN + variables_dataset)
    DatosLimpios = DatosLimpios[OrdenColumnas]  # Reordenar las columnas

    # Verifica si hay variables que identifican series de años, y renombralas de ser necesario
    startper = 1960
    finper = 2050
    anios1 = list(range(startper, finper))
    anios2 = [str(i) for i in anios1]
    verified_cols = []
    for col in list(dataset):
        if col in anios1 or col in anios2:
            verified_cols.append('{}_{}'.format(M.ClaveParametro, col))
        else:
            verified_cols.append(col)

    # Consolidar datos por ciudad para hoja_datos
    dataset.columns = verified_cols
    var_disponibles = list(dataset)
    dataset['CVE_MUN'] = dataset.index
    hoja_datos = asignar_sun(dataset)
    hoja_datos = hoja_datos[(['CVE_MUN', 'CVE_SUN', 'NOM_SUN', 'TIPO_SUN'] +
                             var_disponibles)].set_index('CVE_MUN')

    # Revision de integridad
    integridad_parametro = SUN_integridad(DatosLimpios)
    if M.TipoInt == 3:  # Si el tipo de integridad es 3, Crea integridad
        integridad_parametro['INTEGRIDAD'][
            'INTEGRIDAD'] = 1  # completa a todos los registros en el dataset
    info_completa = sum(integridad_parametro['INTEGRIDAD']['INTEGRIDAD'] ==
                        1)  # Para generar grafico de integridad
    info_sin_info = sum(integridad_parametro['INTEGRIDAD']['INTEGRIDAD'] ==
                        0)  # Para generar grafico de integridad
    info_incomple = 135 - info_completa - info_sin_info  # Para generar grafico de integridad

    # Construccion del Parametro
    param_dataset = DatosLimpios.set_index('CVE_SUN')
    param_dataset['CVE_SUN'] = param_dataset.index
    param = param_dataset.groupby(level=0).agg(
        M.TipoAgr)[M.ClaveParametro]  # Agregacion por ciudad
    intparam = integridad_parametro['INTEGRIDAD'][
        'INTEGRIDAD']  # Integridad por ciudad
    Tipo_Sun = integridad_parametro['EXISTENCIA']['TIPO_SUN']
    Tipo_Sun = Tipo_Sun.groupby(Tipo_Sun.index).first()
    std_nomsun = param_dataset['CVE_SUN'].map(str) + ' - ' + param_dataset[
        'NOM_SUN']  # Nombres estandar CVE_SUN + NOM_SUN
    std_nomsun.drop_duplicates(keep='first', inplace=True)
    Parametro = pd.DataFrame()
    Parametro['CIUDAD'] = std_nomsun
    Parametro['TIPO_SUN'] = Tipo_Sun
    Parametro[M.ClaveParametro] = param
    Parametro[ColIntegridad] = intparam
    Parametro = Parametro.sort_index()

    # Checa el tipo de datos para el JSON, porque acepta float64 pero no int64
    if Parametro[M.ClaveParametro].dtypes == np.int64:
        Parametro[M.ClaveParametro] = Parametro[M.ClaveParametro].astype(
            'object')

    # Lista de Variables
    variables_locales = sorted(
        list(
            set(
                list(DatosLimpios) + list(dataset) +
                list(integridad_parametro['INTEGRIDAD']) +
                list(integridad_parametro['EXISTENCIA']) + list(Parametro))))
    metavariables = variables(variables_locales)

    # Metadatos
    d_parametro = {
        'DESCRIPCION DEL PARAMETRO': None,
        'Clave': M.ClaveParametro,
        'Nombre del Parametro': M.NombreParametro,
        'Descripcion del Parametro': M.DescParam,
        'Periodo': M.PeriodoParam,
        'Unidades': M.UnidadesParam
    }

    d_hojas = {
        'METADATOS':
        'Descripciones y notas relativas al Dataset',
        'PARAMETRO':
        'Dataset resultado de la minería, agregado por clave del Sistema Urbano Nacional, '
        'para utilizarse en la construcción de Indicadores',
        'DATOS':
        M.ContenidoHojaDatos,
        'INTEGRIDAD':
        'Revision de integridad de la información POR CLAVE DEL SUN. '
        'Promedio de VAR_INTEGRIDAD de los municipios que componen una ciudad. '
        'Si no se tiene información para el municipio, VAR_INTEGRIDAD es igual a cero',
        'EXISTENCIA':
        'Revision de integridad de la información POR MUNICIPIO.',
        '     ':
        None,
        'DESCRIPCION DE VARIABLES':
        None
    }

    d_mineria = {
        '  ': None,
        'DESCRIPCION DEL PROCESO DE MINERIA:': None,
        'Nombre del Dataset': M.NomDataset,
        'Descripcion del dataset': M.DescDataset,
        'Disponibilidad Temporal': M.DispTemp,
        'Periodo de actualizacion': M.PeriodoAct,
        'Nivel de Desagregacion': M.DesagrMax,
        'Notas': M.Notas,
        'Fuente': M.NomFuente,
        'URL_Fuente': M.UrlFuente,
        'Dataset base': M.DSBase,
        'Repositorio de mineria': M.RepoMina,
        'Método de Agregación': M.Agregacion,
        'VAR_INTEGRIDAD': M.DescVarIntegridad,
        ' ': None,
        'HOJAS INCLUIDAS EN EL LIBRO': None
    }

    descripcion_parametro = pd.DataFrame.from_dict(
        d_parametro, orient='index').rename(columns={0: 'DESCRIPCION'})
    descripcion_mineria = pd.DataFrame.from_dict(
        d_mineria, orient='index').rename(columns={0: 'DESCRIPCION'})
    descripcion_hojas = pd.DataFrame.from_dict(
        d_hojas, orient='index').rename(columns={0: 'DESCRIPCION'})
    MetaParametro = descripcion_parametro.append(descripcion_mineria).append(
        descripcion_hojas).append(metavariables)

    # Archivo JSON
    del (d_parametro['DESCRIPCION DEL PARAMETRO'])
    del ([
        d_mineria['  '], d_mineria[' '],
        d_mineria['HOJAS INCLUIDAS EN EL LIBRO'],
        d_mineria['DESCRIPCION DEL PROCESO DE MINERIA:']
    ])
    BaseJSON = {}
    JSONVars = metavariables.to_dict()['DESCRIPCION']
    JSONVars = {
        key: JSONVars[key]
        for key in [M.ClaveParametro, ColIntegridad]
    }

    BaseJSON['Metadatos'] = {
        'Descripcion': d_parametro,
        'Memoria Mineria de datos': d_mineria,
        'Variables': JSONVars,
        'handling': {
            'VarType': M.TipoVar,
            'array': M.array,
            'dtype': M.ParDtype
        }
    }

    BaseJSON['Parametro'] = Parametro[[M.ClaveParametro,
                                       ColIntegridad]].to_dict('index')

    jsonfile = M.DirDestino + '\\' + M.ClaveParametro + '\\' + M.ClaveParametro + '.json'

    # Diccionario de Descripciones
    DescParametro = {
        'ClaveParametro': M.ClaveParametro,
        'NombreParametro': M.NombreParametro,
        'info_completa': info_completa,
        'info_sin_info': info_sin_info,
        'info_incomple': info_incomple,
        'RutaSalida': M.DirDestino,
        'Clave de Dimension': M.ClaveDimension,
        'Nombre de Dimension': M.NomDimension,
        'Titulo de Columna': M.TituloParametro,
        'Actualizacion de datos': M.ActDatos,
        'ClaveIntegridad': ColIntegridad
    }

    # Convertir NaN en None
    MetaParametro = MetaParametro.where((pd.notnull(MetaParametro)), None)
    Parametro = Parametro.where((pd.notnull(Parametro)), None)
    DatosLimpios = DatosLimpios.where((pd.notnull(DatosLimpios)), None)
    hoja_datos = hoja_datos.where((pd.notnull(hoja_datos)), None)

    # Crear archivo de Excel, JSON y documentar parametro
    with open(jsonfile, 'wb') as f:
        json.dump(BaseJSON, codecs.getwriter('utf-8')(f), ensure_ascii=False)
    print('Archivo JSON generado en {}'.format(jsonfile))
    ParametroEstandar(DescParametro, MetaParametro, Parametro, DatosLimpios,
                      integridad_parametro, hoja_datos)
    DocumentarParametro(DescParametro, MetaParametro, Parametro)