4.2.3 Matrices – Archivo Abrir/Guardar

Para usar matrices en Python se pueden obtener las matrices desde archivos, o almacenar las matrices hacia archivos. Así no será necesario tener que escribir los valores de las matrices cada vez que se requiera hacer una operacion.

Funciones incorporadas en libreria numpy para guardar o abrir una matriz desde un archivo en formato .txt.


Guardar matriz en archivo .txt

Guardar una matriz a un archivo usando: numpy.savetxt('matriz.txt', matriz)

>>> import numpy as np
>>> matriz = np.array([[1,2,3],[4,5,6]])
>>> matriz
array([[1, 2, 3],
       [4, 5, 6]])
>>> np.savetxt('matriz00.txt',matriz)

se puede encontrar en archivo txt en el directorio de trabajo de Python

El archivo puede ser abierto para observar desde el «block de notas»


Abrir archivo.txt de una matriz

continuando con el ejercicio anterior, para abrir o leer desde un archivo en formato de texto ‘matriz.txt’, se dispone de la instruccion de Numpy:  np.loadtxt('matriz.txt',dtype=int)

La instrucción permite indicar el tipo de datos que se usan en el arreglo.

>>> A = np.loadtxt('matriz00.txt',dtype=int)
>>> A
array([[1, 2, 3],
       [4, 5, 6]])

>>> B = np.loadtxt('matriz00.txt')
>>> B
array([[ 1., 2., 3.],
       [ 4., 5., 6.]])

Nota: lo importante es el formato del archivo en tipo texto. Algunas veces los archivos tienen extensión .dat que también pueden ser leidos.

4.2.2 Matrices – Ejercicios

Problemas de aplicación

3Eva_IT2000_T2 Matriz: puntos por goles en campeonato

2Eva_IIT2011_T3 Movimientos del caballo en ajedrez

3Eva_IIT2015_T3 funciones matrices rotar, extraer

3Eva_IIT2015_T4 Orientar código QR (Quick Response Code)


Matrices y Aleatorios

3Eva_IIT2014_T1 Ubicar estudiantes en aula

2Eva_IT2015_T3 Distribuye tortugas en región

2Eva_IT2015_T4 Movilidad de tortugas en región


Matrices en Algebra

2Eva_IIT2009_T2 Transponer una matriz

2Eva_IT2007_T2 Verificar matriz triangular

1Eva_IT2004_T4 Verificar matriz simétrica

3.2.2 Condicionales – Ejemplos

Ejemplos de solución para los ejercicios de la sección Tareas y algunas evaluaciones. Desarrolla los conceptos hasta la Unidad 03 Condicionales.

3.2.2 Ejercicios y Tarea Algoritmos básicos y condicionales


1 Ejercicio 6 interruptores para encender un foco

Ejemplo combinado de las varias formas de resolver el ejercicio.

Supone que el foco al inicio no está encendido (0) .

Instrucciones en Python:

# Ejercicio 6. Interruptores y un foco

# INGRESO
a = int(input('interruptor a: '))
b = int(input('interruptor b: '))
c = int(input('interruptor c: '))

# PROCEDIMIENTO
encendido = 0
if (a==1):
    if (b==1 or c ==1):
        encendido = 1
else:
    if (b==1):
        if (c==1):
            encendido = 1
# SALIDA
print('estado del foco: ',encendido)

Escriba otras propuestas de solución.


2. Ejercicio 12 Bloque rectangular pasa por orificio en pared.

 

Bloque y circulo
Bloque y circulo
# Problema de la caja y el orificio en la pared
import numpy as np

# INGRESO
a = float(input("lado a: "))
b = float(input('lado b: '))
c = float(input('lado c: '))
d = float(input('lado d: '))

# PROCEDIMIENTO
diagonal1 = np.sqrt(a**2 + c**2)
diagonal2 = np.sqrt(a*a + b*b)
diagonal3 = np.sqrt(b*b + c*c)

pasa = 0
if (diagonal1<d):
    pasa = 1
if (diagonal2<d):
    pasa = 1
if (diagonal3<d):
    pasa = 1

# SALIDA
print(pasa)

Tarea: Realizar diagrama de Flujo. Desarrollado en Pizarra durante la clase


3 ** 1Eva_IT2007_T1 Tiro al blanco con dardos

Desarrollado para la primera semana de clases.
Considere solo la parte de condicionales, a partir del ingreso de las coordenadas x,y donde cae el dardo.

intrucciones en Python:

# Un dardo en tablero
# 1ra Evaluación I Término 2007. Tema 1
import numpy as np

# INGRESO
x = float(input('coordenada x: '))
y = float(input('coordenada y: '))

# PROCEDIMIENTO
distancia = np.sqrt(x**2 + y**2)
premio = 0
if (distancia <= 10):
    premio = 50
if (distancia>10 and distancia<=40):
    premio = 40
if (distancia>40 and distancia<=80):
    premio = 30

# SALIDA
print('el premio obtenido es: ', premio)

4 ** 1Eva_IT2005_T4 Lanza penales

Desarrollado para un solo penal.
Dado el sector del arco [1,6] donde un jugador lanza el balón y el sector donde el arquero protege, determinar:

a) si hubo gol (1 ó 0)

b) si hubo gol, indicar si fué por izquierda (1), centro(2), derecha(3)

# analizar un penal
# Parcial I Término 2005. Tema 4.

# INGRESO
jugador = int(input('sector del jugador:'))
arquero = int(input('sector del arquero:'))

# PROCEDIMIENTO
seccion = 0
if not(jugador==arquero):
    gol = 1
    if (jugador==3 or jugador==4):
        seccion = 1
    if (jugador==2 or jugador==5):
        seccion = 2
    if (jugador== 1 or jugador==6):
        seccion = 3
else:
    gol = 0

# SALIDA
print('Hubo gol: ',gol)
print('seccion: ', seccion)

 

2.1 Tipos de datos numéricos

Referencia: Van Rossum 3.2 p9, Rodriguez 5.6.1 p58, Downey 2.1

ESCALARES

Las variables numéricas simples, o de un solo elemento utilizadas en un algoritmo se clasificarán en enteras y reales.

Variables tipo entero

Es el tipo de variable usada para contar el número de estudiantes presentes en un aula de clases, pasajeros en un bus, barco o avión. Indican la cantidad de elementos: una manzana, cuatro manzanas en un canasto, etc.

La única forma de variable posible a utilizar en estos casos es la tipo entera.

Tipo de datos enteros: int()

>>> a = int(input('escriba un entero: '))
>>> b = 5
>>> c = a*b
>>> type(a)
<class 'int'>

Variables tipo real

Este tipo de variable se usa para escribir por ejemplo el precio de un producto que incluye los centavos, el peso se producto en Kg, el número π.

En estos casos, al escribir con decimales, se los considera como variable tipo real. Ejemplos: $9.99, $89.32, 1.268Kg, 3.1416

Tipo de datos reales: float()

>>> g = float(input('escriba un real')
>>> valor = 3.1415927
>>> type(valor)
<class 'float'>

Tipo de datos complejos: complex(,)

>>> w=complex(1,.5)
>>> w
(1+0.5j)
>>> type(w)
<class 'complex'>
>>> w.real
1.0
>>> w.imag
0.5
>>> w.conjugate()
(1-0.5j)

Variables tipo Booleana

Se usan en lógica matemática como valor verdadero 1 y falso 0.

Tienen aplicaciones como en asistencia a clases:
presente=0, presente=1,
y pueden sustituir símbolos como √ para asistencia y X para una ausencia.

>>> tarea = True
>>> leccion = False
>>> aprender = tarea and leccion
>>> aprender
False
>>> asiste = tarea or leccion
>>> asiste
True
>>> esperanza = not(leccion)
>>> esperanza
True
>>> examen = 1
>>> leccion = 1
>>> tarea = 0
>>> aprendizaje = leccion and tarea
>>> aprendizaje
0
>>> estudia = leccion or tarea
>>> estudia
1
>>> aprueba = examen and leccion and tarea
>>> aprueba
0

Para el desarrollo de algoritmos se describirán solo estos tipos numéricos como grupos principales. Para el caso de lenguajes de programación se definirán otros subtipos: entero, entero largo, real, real doble, etc.


VECTORIALES Y MATRICIALES

Usados por ejemplo para tabular la cantidad e manazanas en los arboles de un huerto como control de producción por árbol.

La fila de un huerto es el vector, cada árbol es el índice del vector, la cantidad de manzanas producidas es el valor de cada casilla del vector.

huerto
árbol 1 2 3
manzanas 15 18 17

tamano del vector=3

ARREGLOS

Arreglos de una dimensión o vectores, requieren importar numpy. Las librerias numpy incoporan muchas operaciones de vectores y matrices usadas en otros cursos como algebra lineal (http://blog.espol.edu.ec/matg1003/)

Vectores – Arreglos de una dimensión

Por ejemplo: las notas de 1ra, 2da y 3ra evaluación se pueden escribir en un vector.

vector = \begin{pmatrix}7.2 \\ 8.4 \\ 9.23\end{pmatrix}
>>> import numpy as np
>>> vector = np.array([7.2, 8.4, 9.23])
>>> type(vector)
<class 'numpy.ndarray'>

los vectores pueden contener escalares de tipo entero, real o complejo, como se usan en matemáticas.

Matrices – Arreglos de dos dimensiones

matriz = \begin{pmatrix}1.2 && 2.45 && 5.3 \\ 0.3 && 1.75 && 4.89\end{pmatrix}

matrices requieren importar numpy

>>> matriz=numpy.array([[1.2, 2.45, 5.3],
                        [0.3, 1.75, 4.89]])
>>> type(matriz)
<class 'numpy.ndarray'>
>>> matriz
array([[ 1.2 , 2.45, 5.3 ],
       [ 0.3 , 1.75, 4.89]])

las matrices de igual manera pueden contener valores de de tipo entero, real o complejo, etc. acorde al problema a realizar.


LISTAS

Otra forma de escribir vectores y matrices es usar listas.
Para uso de matemáticas, cálculo numérico o algebra se recomienda usar arreglos, pues las librerías (numpy) están optimizadas para el uso de arreglos.

Ejemplo de un vector como lista:

>>> vector = [1,4,2,1]
>>> type(vector)
<class 'list'>

Ejemplo de una matriz como lista:

>>> matriz = [[1,2,3,4],
              [5,6,7,8]]
>>> type(matriz)
<class 'list'>
>>> matriz[0][2]
3
>>>

En el caso de vectores y matrices numéricos es preferible usar arreglos por la disponibilidad de operaciones numéricas, algebraicas disponibles en la libreria Numpy.

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: ejemplonotas.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
tabla = pd.read_csv('ejemplonotas01.csv', 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

8.2 Gráficas básicas de funciones

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

>>>import matplotlib.pyplot as plt

gráficas con 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)

Forma interactiva desde shell:

activa la forma interactiva

 >>>plt.ion()

apaga la forma interactiva

 >>>plt.ioff()

8.1 Menú – Estructura

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')

7.7 Archivos texto – Actividad integradora

El Instituto Nacional de Evaluación Educativa publica en su página web los informes y datos de las evaluaciones del programa «ser Bachiller realizadas en el país durante el año 2016.

Los datos «Meso» (intermedios), se encuentran disponibles en un «archivo.txt»(enlace) cuyo formato se adjunta al final de la página.

Realice las instrucciones necesarias para abrir el archivo y cargar los datos, permitiendo encontrar las respuestas a las siguientes preguntas:

  1. Mostrar cuántas instituciones se evaluaron en cada Régimen:
    ['COSTA', 'SIERRA', 'COSTA-SIERRA']

    Para validar, muestre además el total de registros leídos y la suma de estudiantes evaluados por régimen (deberían ser iguales)

  2. La cantidad de estudiantes evaluados para Matemática por provincia:
    [[1,'AZUAY'], [2,'BOLIVAR'], [3,'CAÑAR'], [4,'CARCHI'], [5,'COTOPAXI'], [6,'CHIMBORAZO'], [7,'EL ORO'], [8,'ESMERALDAS'], [9,'GUAYAS'], [10,'IMBABURA'], [11,'LOJA'], [12,'LOS RIOS'], [13,'MANABI'], [14,'MORONA SANTIAGO'], [15,'NAPO'], [16,'PASTAZA'], [17,'PICHINCHA'], [18,'TUNGURAHUA'], [19,'ZAMORA CHINCHIPE'], [20,'GALAPAGOS'], [21,'SUCUMBIOS'], [22,'ORELLANA'], [23,'SANTO DOMINGO DE LOS TSACHILAS'],
    [24,'SANTA ELENA'], [90,'ZONA NO DELIMITADA']]

    La ‘ZONA NO DELIMITADA’ incluye aquellos territorios en frontera de provincia, ejemplo «MANGA DEL CURA» que no tenía pertenencia administrativa – política a ningún cantón o provincia.

  3. El porcentaje de estudiantes evaluados en Matemática incluidos en los niveles de ‘Satisfactorio’ yExcelente’ en cada provincia. Los estudiantes evaluados en cada unidad educativa se clasificaron en: ‘Insuficiente’, ‘Elemental’, ‘Satisfactorio’, ‘Excelente’.
    Nota: Use la cantidad de estudiantes y el porcentaje de cada nivel (satisfactorio y excelente) para obtener la cantidad de estudiantes buscada y así obtener el porcentaje
  4. Con los resultados del ejercicio anterior, obtenga las cinco provincias con los mejores resultados a nivel nacional.

Formato del archivo

  • Los datos de cada registro se encuentran delimitados por punto y coma «;» (42 columnas)
  • Las tres primeras líneas describen el encabezado, como se muestra en la tabla siguiente.
  • Los registros para cada unidad educativa evaluada se encuentran luego de la tercera línea, con mas de 3100 registros.
Columna línea=0 línea=1 línea=2
0 zxx Código de institución
1 Institución
2 Régimen
3 Zona de planificación
4 Distrito
5 Circuito
6 Código de provincia
7 Provincia
8 Código de cantón
9 Cantón
10 Código de parroquia
11 Parroquia
12 Área
13 Tipo de financiamiento
14 Resultados generales Cantidad de estudiantes evaluados
15 Índice socioeconómico
16 Promedio global
17 Promedio global ajustado
18 Matemática
19 Lengua y Literatura
20 Ciencias Naturales
21 Estudios Sociales
22 Matemática Cantidad de estudiantes evaluados
23 Estudiantes por nivel de logro Insuficiente
24 Elemental
25 Satisfactorio
26 Excelente
27 Lengua y Literatura Cantidad de estudiantes evaluados
28 Estudiantes por nivel de logro Insuficiente
29 Elemental
30 Satisfactorio
31 Excelente
32 Ciencias Naturales Cantidad de estudiantes evaluados
33 Estudiantes por nivel de logro Insuficiente
34 Elemental
35 Satisfactorio
36 Excelente
37 Estudios Sociales Cantidad de estudiantes evaluados
38 Estudiantes por nivel de logro Insuficiente
39 Elemental
40 Satisfactorio
41 Excelente
Ejemplo del Archivo:

zxx;;;;;;;;;;;;;;;;;;;;;;Matemática;;;;;Lengua y Literatura;;;;;Ciencias Naturales;;;;;Estudios Sociales;;;;
;;;;;;;;;;;;;;Resultados generales;;;;;;;;;Estudiantes por nivel de logro;;;;;Estudiantes por nivel de logro;;;;;Estudiantes por nivel de logro;;;;;Estudiantes por nivel de logro;;;
Código de institución;Institución;Régimen;Zona de planificación;Distrito;Circuito;Código de provincia;Provincia;Código de cantón;Cantón;Código de parroquia;Parroquia;Área;Tipo de financiamiento;Cantidad de estudiantes evaluados;Índice socioeconómico;Promedio global;Promedio global ajustado;Matemática;Lengua y Literatura;Ciencias Naturales;Estudios Sociales;Cantidad de estudiantes evaluados;Insuficiente;Elemental;Satisfactorio;Excelente;Cantidad de estudiantes evaluados;Insuficiente;Elemental;Satisfactorio;Excelente;Cantidad de estudiantes evaluados;Insuficiente;Elemental;Satisfactorio;Excelente;Cantidad de estudiantes evaluados;Insuficiente;Elemental;Satisfactorio;Excelente
01B00020;COLEGIO INTERCULTURAL BILINGUE DE NARANCAY;SIERRA;ZONA 6;01D02;01D02C12;1;AZUAY;101;CUENCA;10151;BAÑOS;RURAL;PUBLICO;20;-0,603;636;684;605;663;566;709;20;75,00%;25,00%;0,00%;0,00%;20;65,00%;25,00%;10,00%;0,00%;20;90,00%;5,00%;5,00%;0,00%;20;40,00%;30,00%;30,00%;0,00%
01B00051;SAN JOSE;SIERRA;ZONA 6;01D05;01D05C01;1;AZUAY;104;NABON;10450;NABON;URBANA;PUBLICO;20;-0,69;706;761;653;687;652;831;20;55,00%;45,00%;0,00%;0,00%;20;50,00%;40,00%;10,00%;0,00%;20;60,00%;35,00%;5,00%;0,00%;20;15,00%;20,00%;45,00%;20,00%
01B00054;UNIDAD EDUCATIVA COMUNITARIO INTERCULTURAL BILINGUE SHIÑA;SIERRA;ZONA 6;01D05;01D05C01;1;AZUAY;104;NABON;10450;NABON;URBANA;PUBLICO;24;-0,955;645;721;550;699;613;718;24;91,70%;4,20%;4,20%;0,00%;24;33,30%;58,30%;8,30%;0,00%;24;79,20%;12,50%;4,20%;4,20%;24;37,50%;37,50%;16,70%;8,30%
...