Example #1
0
    def guardar(símismo, frmt='json', l_vars=None, arch=None):
        """
        Guarda los resultados en un archivo.

        Parameters
        ----------
        frmt: str
            El formato deseado. Puede ser ``json`` o ``csv``.
        l_vars:
            La lista de variables de interés.
        """

        if l_vars is None:
            l_vars = list(símismo)
        elif isinstance(l_vars, (str, Variable)):
            l_vars = [l_vars]

        if frmt[0] != '.':
            frmt = '.' + frmt
        arch = arch + frmt if arch else valid_nombre_arch(símismo.nombre +
                                                          frmt)

        if frmt == '.json':
            contenido = símismo.a_dic()
            guardar_json(jsonificar(contenido), arch=arch)

        elif frmt == '.csv':

            with open(arch, 'w', encoding='UTF-8', newline='') as a:
                escr = csv.writer(a)

                escr.writerow([_('fecha')] + list(símismo.t.eje()))
                for var in l_vars:
                    vals = símismo[var].values
                    if len(vals.shape) == 1:
                        escr.writerow([var] + vals.tolist())
                    else:
                        for í in range(vals.shape[1]):
                            escr.writerow(['{}[{}]'.format(var, í)] +
                                          vals[:, í].tolist())

        else:
            raise ValueError(
                _('Formato de resultados "{}" no reconocido.').format(frmt))
Example #2
0
    def dibujar_corrida(símismo,
                        resultados,
                        l_vars=None,
                        directorio='./',
                        i_paso=None,
                        colores=None,
                        escala=None):

        if all(v in resultados for v in l_vars):
            lugares = None
        else:
            lugares = list(resultados)
            faltan_de_geog = [
                lg for lg in lugares if lg not in símismo.cód_a_lugar
            ]
            if len(faltan_de_geog):
                avisar(
                    _('\nLos lugares siguientes no están en la geografía y por tanto no se podrán dibujar:'
                      '\n\t{}').format(', '.join(faltan_de_geog)))

        if isinstance(l_vars, str):
            l_vars = [l_vars]

        for var in l_vars:

            if lugares is None:
                res_var = resultados[var]
                n_obs = res_var.shape[-1]
                if escala is None:
                    escala = np.min(res_var), np.max(res_var)
            else:
                res_var = {lg: resultados[lg][var] for lg in lugares}
                n_obs = len(list(resultados.values())[0]['n']) + 1
                if escala is None:
                    escala = res_var[var].min(), res_var[var].max()

            if isinstance(i_paso, tuple):
                i_paso = list(i_paso)

            if i_paso is None:
                i_paso = [0, n_obs]
            if isinstance(i_paso, int):
                i_paso = [i_paso, i_paso + 1]
            if i_paso[0] is None:
                i_paso[0] = 0
            if i_paso[1] is None:
                i_paso[1] = n_obs

            # Incluir el nombre del variable en el directorio, si no es que ya esté allí.
            nombre_var = valid_nombre_arch(var)
            if os.path.split(directorio)[1] != nombre_var:
                directorio = os.path.join(directorio, nombre_var)

            # Crear el directorio, si no existe ya. Sino borrarlo.
            if os.path.exists(directorio):
                shutil.rmtree(directorio)
            os.makedirs(directorio)

            for i in range(*i_paso):
                if lugares is None:
                    valores = res_var[..., i]
                else:
                    valores = {lg: res_var[i] for lg in res_var}
                archivo_í = os.path.join(directorio,
                                         '{}, {}'.format(nombre_var, i))
                símismo.dibujar(archivo=archivo_í,
                                valores=valores,
                                título=var,
                                colores=colores,
                                escala_num=escala)