8.4 Archivos.json – Pandas

Algunas estructuras de datos que se encuentran en formato tipo «diccionario» se pueden guardar y leer usando librerias Pandas.

Para el ejemplo se usa el diccionario:

tabla = {'Maria': {'primera': 55,
                   'segunda': 70,
                   'tercera': 0,
                   'final': '62,5'},
         'Pedro': {'primera': 30,
                   'segunda': 60,
                   'tercera': 70,
                   'final': '65'},
         'Juan': {'primera': 80,
                  'segunda': 65,
                  'tercera': 65,
                  'final': '72,5'}
         }

Para almacenar estos datos se realiza la conversión del diccionario DataFrame con el objetivo de usar la instrucción de pandas para guardar archivos.json.

tabla.to_json(unarchivo)

Instrucciones en Python

import pandas as pd

# INGRESO
#archivos de salida T: Transpuesta
unarchivo  = 'ejemplonotas01.json'
unarchivoT = 'ejemplonotasT01.json'

# datos como diccionario de datos
tabla = {'Maria': {'primera': 55,
                   'segunda': 70,
                   'tercera': 0,
                   'final': '62,5'},
         'Pedro': {'primera': 30,
                   'segunda': 60,
                   'tercera': 70,
                   'final': '65'},
         'Juan': {'primera': 80,
                  'segunda': 65,
                  'tercera': 65,
                  'final': '72,5'}
         }

# PROCEDIMIENTO
# conversión a DataFrame de pandas
tabla = pd.DataFrame(tabla)
tablaT = tabla.transpose()

# SALIDA
print(tabla)
print('transponer: ')
print(tablaT)

# almacena en archivo.json
tabla.to_json(unarchivo)
tablaT.to_json(unarchivoT)

los archivos resultantes son:

ejemplonotas01.json

ejemplonotasT01.json

Referencia:
https://pandas.pydata.org/docs/reference/api/pandas.io.json.read_json.html

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_json.html

 

5.1.3 Funciones – Archivos de librerias

Los algoritmos que se reutilizan y se convierten a funciones, se pueden agrupar en un archivo.py

Esto permite realizar un archivo de librerias de funciones personalizadas.

Las librerias se pueden llamar por la instrucción import y se usan individualmente por el nombre de la función.

Ejemplo

Archivo de funciones personalizadas politoESPOL.py, en directorio de trabajo:

# ejemplo de libreria de funciones

def sumando(a,b):
    c = a + b
    return(c)

def invierteletras(palabra):
    n = len(palabra)
    invertida = ''
    for i in range(0,n,1):
        invertida = palabra[i] + invertida
    return(invertida)

Archivo de programa principal politoProgram.py en el mismo directorio que el archivo de funciones.

# probando importar funciones
import politoESPOL as espol

# INGRESO
a = 3
b = 5
palabra = 'polito'

# PROCEDIMIENTO
sumado = espol.sumando(a,b)
alreves = espol.invierteletras(palabra)

# SALIDA
print('la suma es: ', sumado)
print('palabra invertida: ',alreves)

Resultado del algoritmo

la suma es:  8
palabra invertida:  otilop
>>> 

8.1.1 Menú – Ejemplos

3Eva_IIT2009_T2 Registrar alquiler de casilleros

Solución propuesta: s3Eva_IIT2009_T2 Registrar alquiler de casilleros

2Eva_IIT2009_T3 Controlar saldos prepago

Solución propuesta: s2Eva_IIT2009_T3 Controlar saldos prepago

2Eva_IIT2015_T4 biciespol, prestamos de bicicletas

Solución propuesta: s2Eva_IIT2015_T4 biciespol, prestamos de bicicletas

2Eva_IT2006_T1 Donaciones defensa civil

Solución propuesta: s2Eva_IT2006_T1 Donaciones defensa civil

3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

Solución propuesta: s3Eva_IIT2015_T1 Mensajes en redes sociales y etiquetas

3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

Solución propuesta: s3Eva_IIT2015_T2 Gestionar mensajes con etiquetas

5.3 Funciones Recursivas

Referencia: Rodriguez 6.0 p168

Una función recursiva conocida, definida en la matemática es el factorial. El factorial tiene la característica que se puede llamar a si misma.

5! = 5x4!
       4! = 4x3!
              3! = 3x2!
                     2! = 2x1!
           por definición   1! = 1

Se interpreta que para encontrar 5! requerimos la respuesta de 4!.
Para encontrar 4! se debe calcular 3! y así sucesivamente,
hasta llegar al valor inicial de la función que es 1!=1

La solución se interpreta  hacia atras,  empezando desde la respuesta conocida de 1! =1 y reemplazando los valores en las operaciones que estaban por resolverse:

5! = 5x4! = 5x24 = 120
       4! = 4x3! = 4x6 = 24
              3! = 3x2! = 3x2 = 6
                     2! = 2x1! = 2x1 =2
           por definición   1! = 1

Observamos que la función recursiva tiene valores iniciales, que se llama a si misma, y de forma matemática tiene una forma elegante de escribirse:

n! = \begin{cases} 1 && n=1 \\ n(n-1)! && n>1\end{cases}

Escribir la función recursiva en un algoritmo consiste en transcribir paso a paso lo descrito en forma matemática.

# factorial en forma recursiva

def factorial(n):
    if n==1:
        resultado = 1
    if n>1:
        resultado = n*factorial(n-1)
    return(resultado)

una vez que se ejecuta el algoritmo para que esté disponible en memoria, se usa llamando a la función

>>> factorial(5)
120
>>> factorial(1)
1
>>> factorial(4)
24
>>> 

Existen otras funciones recursivas en matemáticas que se pueden fácilmente convertir a algoritmos como Fibonacci, Padovan,  incluso algunas que funcionan en parejas como Par e impar. Se muestran algunas en la sección de ejemplos.

Observaciones de uso

Sín embargo hay que considerar que la recursión se usa con precaución, pues las llamadas generan otra instancia que puede saturar la capacidad del computador.

Matrioshka. Muñeca tradicional rusa, hueca con más muñecas en su interior.

En el ejemplo se observa que se tienen operaciones en espera de resultados de la siguiente respuesta, cada llamada usa memoria, tiempo de cómputo como recursos.

Por ejemplo, al intentar de obtener factorial(1000) en forma recursiva, se obtiene un error "RecursionError: maximum recursion depth exceeded in comparison".

Los lenguajes de programación tienen como límite máximo de llamadas recursivas, para evitar saturar los recursos disponibles de memoria y tiempo computacional.


Ejemplos

2Eva_IIT2007_T4 Fibonacci recursiva

Solución propueta: Sol_py

2Eva_IT2007_T1 Funciones par e impar recursivas

Solución Propuesta: Sol_py

3Eva_IT2004_T3 Multiplicar con campesino egipcio

Solución Propuesta: Sol_py


Ejercicios

2Eva_IT2005_T2 Calcular potencia recursiva

2Eva_IIT2012_T1 Recursiva Multi

5.1.2 Funciones – Ejercicios

Funciones Numéricas

2Eva_IT2014_T2 Función color RGB a gris

2Eva_IIT2011_T1 Algoritmo de Euclides MCD

2Eva_IIT2013_T3 Encriptar binarios con XOR

2Eva_IT2003_T1 Funciones promedio, mayor y menor

2daEva_IIT2004_T3 Reciclar vasos


Funciones con cadenas de caracteres

2Eva_IIT2009_T1 Mensaje a SMS

2Eva_IIT2014_T3 Palabras monovocalicas en frase

2Eva_IIT2015_T1 función lipovocal(frase)

2Eva_IT2006_T3 Encriptar a Morse

2Eva_IT2009_T1 Desordenar una palabra

2Eva_IT2014_T1 Palabras con eco

4.4.1 Listas – Ejemplos

Unión e Intersección

1Eva_IIT2007_T3 Garantías de prestamos IESS

Solución propuesta: Sol-py

1Eva_IIT2012_T4 Informe de pasantías

Solución propuesta: Sol_py

1Eva_IIT2010_T1 Censo de instrucción por género

Solución propuesta: Sol_py

1Eva_IT2010_T1 Bono para televisores en Uruguay

Solución propuesta: sol_py


Arreglos y Aleatorios, random, numpy

3Eva_IT2005_T4 Tabla de Pozo millonario

Solución propuesta: Sol_py

1Eva_IIT2005_T3 Entrenamiento atleta: promedios

Solución propuesta:  Sol_py

4.3.2 Cadenas de caracteres – Ejercicios

2Eva_IT2012_T2 Cifrado musical americano

2Eva_IT2010_T2 Operaciones infix – postfix

2Eva_IIT2009_T1 Mensaje a SMS

2Eva_IT2009_T1 Desordenar una palabra

2Eva_IIT2007_T1 Palabras aleatorias, genword

2Eva_IT2006_T3 Encriptar a Morse

3Eva_IIT2013_T3 buscar cadena en una frase

3Eva_IT2013_T1 Verificar Abecegrama

3Eva_IIT2012_T1 Alfabeto radiofónico

3Eva_IIT2008_T1 Contar palabras para un clasificado

3Eva_IT2007_T2 Crear Acrónimos