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

 

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

8.5 Archivos de Audio.wav – Abrir, extraer una porción

El manejo de archivo de audio en formato wav permite analizar varios conceptos como , en los cursos de Señales y Sistemas y Procesos estocásticos:

Modulación Delta Sigma

Señales de energía y potencia

Señales Analógicas y Digitales

Correlación(señal01,señal02)

Morse – Generador de Tonos

Conocer conceptos de la Unidad 4 para arreglos como vectores y matrices son suficientes para manejar archivos.wav.

1. Abrir archivo de audio.wav

Se requiere usar la libreria scipy.io.wavfile con el alias wave para usar las instrucciones para abrir, modificar y grabar un archivo de audio en formato wav. Con los datos se pueden graficar las ondas de sonido como la mostrada en la imagen.

Para mostrar el concepto se tiene como archivo ejemplo:

muestra_Invernal01.wav

El formato .wav es el más simple de manejar pues contiene directamente los datos de las muestras de sonido similar a la mostrada en la figura.

El primer parámetro a obtener es la frecuencia de muestreo en Hz, o cuántas muestras por segundo se realizan, y luego los datos del sonido.

# Abrir un archivo de audio .wav
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as waves

# INGRESO 
# archivo = input('archivo de sonido:' )
archivo = 'muestra_Invernal01.wav'
muestreo, sonido = waves.read(archivo)

# PROCEDIMIENTO
tamano=np.shape(sonido)
canales=len(tamano)
tipo = 'estéreo'
if (canales<2):
    tipo = 'monofónico'
duracion = len(sonido) /muestreo

# SALIDA
print('muestreo (Hz) : ',muestreo)
print('canales: ' + str(canales) + ' tipo ' + tipo )
print('duración (s): ',duracion)
print('tamaño de matriz: ', tamano)
print(sonido)
plt.plot(sonido)
plt.show()

Con lo que obtiene la gráfica mostrada al inicio y los siguientes resultados:

muestreo (Hz) :  44100
canales: 2 tipo estéreo
duración (s):  15.0
tamaño de matriz:  (661500, 2)
[[-4355 -4561]
 [-4353 -4572]
 [-4347 -4578]
 ..., 
 [  120  1008]
 [  124   993]
 [  100   935]]

Referencias:
https://docs.scipy.org/doc/scipy-0.19.1/reference/generated/scipy.io.wavfile.read.html

la librería de funciones scipy (scientific python), dispone de funciones para el tratamiento de señales, estadíasticas, audio, entre otras.

El orden de las instrucciones es el que aparece en los post del blog.

instrucciones
import scipy.io.wavfile as waves librerias de audio en formato wac para lectura y escritura de archivos.
fsonido, sonido = waves.read(archivo) lectura de datos de un archivo de audio en formato wav. Se obtiene la frecuencia de muestreo en fsonido y los datos en sonido
import scipy.integrate as integrate importar metodos de integración de scipy
integrate.simps(valrores, ejex) integral de muestras de señal usando el método de Simpson.
. .
. .

2. Extraer una Porción del audio

Para extraer una porción de un archivo de audio se requiere: abrir el archivo, seleccionar la porción de interés y grabar el resultado un archivo de salida.

archivo origen: muestra_Invernal01.wav

archivo resultado: muestra_Invernal02.wav

La porción puede ser indicada en unidades de tiempo que luego deben ser convertidas a índices de muestras para extraer la porción requerida.

El procesamiento del archivo simplificado en Python es:

# Extrae porción de un archivo de audio .wav
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as waves

# INGRESO 
# archivo = input('archivo de sonido:' )
archivo = 'muestra_Invernal01.wav'
archivosalida = 'muestra_Invernal02.wav'
# tiempo en segundos
desde = 7.5
hasta = 10.2

muestreo, sonido = waves.read(archivo)

# PROCEDIMIENTO
# indices de muestras
idesde = int(desde*muestreo)
ihasta = int(hasta*muestreo)
porcion = sonido[idesde:ihasta,:]
duracion = len(porcion)/muestreo

# SALIDA
waves.write(archivosalida, muestreo, porcion)
print('archivo creado: ', archivosalida)

La instrución waves.write() requiere el nombre del archivo de salida, la velocicad de muestreo y los datos a grabar.

Ejercicio

Si el archivo de origen es estéreo, extraer un solo canal y convertirlo a monofónico.

Referencia: https://docs.scipy.org/doc/scipy-0.19.1/reference/generated/scipy.io.wavfile.write.html

8.3 Archivos.csv – Pandas

Algunas tablas de datos se pueden recibir como archivos.csv, que son datos separados por ';' , debiendo indicar el separador de decimales ','.

Ejemplo de archivo: ejemplonotas01.csv

nombre;primera;segunda;tercera;final
Maria;55;70;0;62,5
Pedro;30;60;70;65
Juan;80;65;65;72,5

puede ser leido y procesado usando la libreria pandas

import pandas as pd

# INGRESO
# archivo de entrada
unarchivo = 'ejemplonotas01.csv'


# PROCEDIMIENTO
tabla = pd.read_csv(unarchivo,
                    sep=';',
                    na_values=',')

# SALIDA
print(tabla)

con lo que se obtiene:

  nombre  primera  segunda  tercera final
0  Maria       55       70        0  62,5
1  Pedro       30       60       70    65
2   Juan       80       65       65  72,5
>>> 

Tamaño de la tabla:

>>> tabla.shape
(3, 5)
>>> tabla.columns
Index(['nombre', 'primera', 'segunda', 'tercera', 'final'], dtype='object')
>>> tabla['nombre']
0    Maria
1    Pedro
2     Juan
Name: nombre, dtype: object

Seleccionando solo un grupo de datos:

>>> soloprimera = tabla['primera']
>>> soloprimera
0    55
1    30
2    80
Name: primera, dtype: int64

>>> media = soloprimera.mean()
>>> media
55.0

Referencia:
https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

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

8.2 Gráficas de funciones matemáticas

Las gráficas básicas para funciones matemáticas, datos, en 2D y 3D usan la librería matplotlib.pyplot con el alias plt.

import matplotlib.pyplot as plt

Se pueden usar algunos tipos de gráficas, como de línea, dispersión, flechas,  usando las coordenadas en vectores x, y

plt.plot(x,y)
plt.scatter(x,y)
plt.arrow(xinicio, yinicio, deltax,deltay)
plt.quiver(xinicio, yinicio, componentex, componentey)

Las instrucciones para las gráficas se realizan en el bloque de salida usando un solo bloque de instrucciones, para finalmente mostrar el resultado plt.show().

Aunque también se pueden construir de forma interactiva linea por línes adesde la consola o «shell», activando o desactivando el modo con:

Forma interactiva desde shell:

 plt.ion()
 plt.ioff()

Ejemplos de gráficas en 2D

Las gráficas son un recurso muy versatil en el área de la matemática e ingeniería.

En el curso de Métodos Numéricos se presenta una introducción de gráficas en 2D y se usan y desarrollan en todas las unidades como parte del análisis de los problemas.

En el curso de Señales y Sistemas, se las usa ampliamente desde la unidad 1 Señales, para mostrar los diferentes tipos y formas, y luego en el análisis de las respuestas de los sistemas ante las señales. Como tema de instroducción, revise algúnas de las definiciones básicas de señales para observar la aplicación de gráficas.

8.1 Menú – Estructura en Python

Estructura de un Menú con 6 opciones, seleccionadas usando un número entero.

Recuerde que:

  • el bloque menú se repite en un lazo hasta que se seleccione la opción de salida
  • Se muestran las opciones del menú
  • Pregunte por la opción seleccionada
  • use un condicional por cada opción seleccionada.
  • Se puede añadir un condicional para la opción de salida y presentar mensajes de cierre de programa.
# Ejemplo de un menu
# las opciones se proponen por caracteres
# propuesta: edelros@espol.edu.ec

# menu
opcion = '0'
while not(opcion=='6'):
    print(' 1. menu opcion 01')
    print(' 2. menu opcion 02')
    print(' 3. menu opcion 03')
    print(' 4. menu opcion 04')
    print(' 5. menu opcion 05')
    print(' 6. Salir')

    opcion=input('  --- ¿Cuál opcion?: ')
    
    if (opcion=='1'):
        print(' **** menu opcion 01 ****')
        
    elif (opcion=='2'):
        print(' **** menu opcion 02 ****')
        
    elif (opcion=='3'):
        print(' **** menu opcion 03 ****')
        
    elif (opcion=='4'):
        print(' **** menu opcion 04 ****')
        
    elif (opcion=='5'):
        print(' **** menu opcion 05 ****')
                
    elif (opcion=='6'):
        print(' **** Saliendo del menu  ****')
        print(' **** Ejemplo de un menu ****')
    else:
        print('No existe la opcion')

Concepto y Ejercicio