Ejercicios resueltos con Módulos
Sitio: | Facultad de Ingeniería U.Na.M. |
Curso: | Informática ET241/EM241/IC241/IN241/IM204 |
Libro: | Ejercicios resueltos con Módulos |
Imprimido por: | Invitado |
Día: | miércoles, 18 de diciembre de 2024, 03:54 |
1. Gráficos en 2D
matplotlib.pyplot es una interfaz basada en estado para matplotlib. Proporciona una forma de trazar similar a MATLAB.
pyplot está destinado principalmente a tramas interactivas y casos simples de generación de gráficos.
1.1. Primer Gráfico
Vamos a escribir el siguiente script...
Si todo esta correcto deberíamos ver algo como..
Vamos a responder las siguientes preguntas para fijar conceptos.
- ¿Que es plt?
- ¿Que línea es la que determina el texto que va sobre el eje x?
- Cambiar el Texto del eje y, por otro que Ud.quiera.
- ¿Cual es el nombre del módulo utilizado?
- ¿Cual es el alias módulo utilizado?
- ¿Cuantos argumentos recibe el método plot del módulo plt?
- ¿Cuantos datos hay y que línea tiene los datos que se grafican?
Vamos a hacer una modificación al código anterior...
La ejecución de este script nos daría el siguiente gráfico.
Vamos a responder las siguientes preguntas para fijar conceptos.
- ¿Que línea tiene los datos que corresponden con el eje y?
- ¿Que método es el que dibuja los ejes x e y?
- Modifique la línea que define los valores de y : y=[2,5,3,4,5] , observe que sucede
- ¿Cuantos valores tiene x y cuantos y?
- ¿Cuantos argumentos recibe ahora el método plot del módulo que llamamos plt?
- ¿Si reemplazo plt.plot([1, 2, 3, 4],[2,5,3,4]? Que cambia en la gráfica...
1.2. Formateando el Gráfico
Para cada par de argumentos x, y, hay un tercer argumento opcional que es la cadena de formato que indica el color y el tipo de línea del gráfico.
Las letras y símbolos de la cadena de formato son de MATLAB y concatena una cadena de color con una cadena de estilo de línea.
La cadena de formato predeterminada es 'b-', que es una línea azul continua. Por ejemplo, para trazar lo anterior con círculos rojos, emitiría
El resultado de la ejecución de este script debería ser:
Con el fin de fijar conceptos se pide al alumno responder las siguientes preguntas
- ¿Cual es el nombre del módulo que me permite generara un arreglo de valores para x?
- ¿Como puedo mostrar los valores de x por pantalla?¿ y los de y?
- ¿Cual es el argumento que indica que el gráfico sea con puntos y de color rojo y en que línea está?
- ¿Que sucede si modifico la línea 12 por paso=0.5?
- Dejando nuevamente la línea 12 paso=0.1, modifique la línea 15 que por: plt.plot(x,y, 'b-') u observe que sucede.
- ¿Que diferencias hay cuando el paso es de 0.5 si el argumento de plot es 'ro' respecto de 'b-'?
- ¿Donde se generan los valores de x?
- ¿Donde se generan los valores de y?
- ¿Cual es la función que relaciona x con y y en que línea se define?
- ¿Que sucede si modifico la línea 12 por : paso=0.5?
- Poner títulos a los Ejes x e y
- Abra el siguiente link : plt.axis() , y leyendo la documentación justifique cuales son los argumentos que se pasan en la línea 16
- ¿ Que sucede si modificamos la línea 16 por: plt.axis([0, 1, 0, 2])?
- ¿Que sucede si eliminamos la línea 17?
- ¿ En el línk .show podemos ver que dice algo sobre modo interactivo y no interactivo, esto justifica lo que sucede si comentamos línea 17?.
- Cambiar la línea 15 por: plt.plot(x, y,'b-', linewidth=0.5) , ¿Que sucede? Probar con plt.plot(x, y,'b-', linewidth=5)
1.3. Graficando múltiples funciones
Vamos a escribir el siguiente script
El resultado de ejecutar este script daría:
Vamos a responder algunas preguntas para fijar conceptos.
- ¿Que argumento dibuja los triángulos verdes?
- ¿Que argumento dibuja los cuadrados azules?
- ¿ Que función es la que dibuja trazos de líneas rojas?
- ¿Identifique los argumentos que indican las funciones de cuadrados azules y triángulos verdes?
1.4. Otro tipo de Gráficos
Vamos copiar el siguiente script. La idea es simplemente mostrar algún tipo de gráfico distinto.
import numpy as np
import matplotlib.pyplot as plt
data = {'a': np.arange(50),
'c': np.random.randint(0, 50, 50),
'd': np.random.randn(50)}
data['b'] = data['a'] + 10 * np.random.randn(50)
data['d'] = np.abs(data['d']) * 100
plt.scatter('a', 'b', c='c', s='d', data=data)
plt.xlabel('entry a')
plt.ylabel('entry b')
plt.show()
El resultado sería:
Se deja como tarea para el Alumno, identificar que hace cada línea del Script.
1.5. Graficando categorías de Variables.
Vamos a ver como podemos graficar distintas categorías en un mismo gráfico.
Vamos escribir el siguiente código:
La salida de este script sería:
Con el propósito de fijar conceptos vamos a plantear algunas preguntas.
- ¿En que lista se definen los nombres de las categorías?
- ¿Que sucede si cambiamos la línea 13 por: plt.subplot(132)?
- ¿Que línea le da al gráfico en nombre?
- ¿Que sucede si modificamos la línea 12 por: plt.figure(figsize=(3, 2))?
- ¿Que sucede si comentamos (#) la línea 18?
1.6. Grafico de Torta
Vamos a escribir el siguiente código:
Si ejecutamos el script se debería ver :
Para fijar conceptos se pide al alumno responder las siguientes preguntas y cambios al código.
- Cambiar la línea por : ax1.axis('tight') y observar que sucede.
- ¿Que sucede si cambiamos la línea 7 por : explode=(0,0.2,0,0)?
- ¿Que módulo usamos?
- ¿Cual es el alias del módulo para el scrit?
- ¿Donde se expresan los valores de cada "porción"de torta?
- Cambie SOLO el valor de la porción que corresponde a Promocionado a 60, ¿Que sucede?
- ¿Cuantos elementos tiene la lista labels y sizes?
- ¿Que sucede si la cantidad de elementos de las listas labels y sizes no es la misma?
- Busque en el siguiente link : pyplot.axis , el método pie e identifique la función de cada argumento de la línea 10?
- ¿Que sucede si cambiamos el argumento de la línea 10 por startangle=10?
- ¿Que sucede si cambiamos al argumento de la línea 10 por shadow=False?
- ¿Cuantos argumentos regresa plt.subplots() en la línea 8?
- ¿Que pasa si modificamos la línea 8: ax1 = plt.subplots()?
- Inserte en el script dos líneas con print, para ver los argumentos de regresa la línea 8.
- Modifique el argumento que muestra la etiqueta de cada porción por : autopct='%5.5f%%'
1.7. Graficando Seno
1.8. Graficar la función diente de sierra
1.9. Seno Ruido
Se tiene en un archivo seno_ruido.txt las muestras obtenidas de un muestreo, este archivo se obtiene de un Osciloscopio Digital.
Vamos a graficar el Seno pero procesando los valores para eliminar algunas componentes vamos a utilizar un filtro de distintos ordenes, se podrían observar distintas gráficas, donde veríamos que el ruido se va reduciendo:
En este caso las muestras están en un archivo de texto llamado seno_ruido.txt (click para descargar)
Ver que el .py y .txt estén en el mismo directorio
1.10. Tiro Parabólico
Al ejecutar el Script, nos pide algunos datos
La gráfica sería:
2. Graficas 3D
Se muestran algunos ejemplos de gráficas 3D hechos con Python
2.1. Gráficos en 3D
Código fuente:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 15 12:21:28 2020
Grafica seno de x cuadrado mas y cuadrado
@author: daniel
"""
from matplotlib import cm
from matplotlib.pyplot import figure, show, title
from numpy import arange, sqrt, sin, meshgrid
fig=figure()
ax=fig.gca(projection='3d')
x=arange(-5,5,0.25)
y=arange(-5,5,0.25)
x,y=meshgrid(x,y)
z=sin(sqrt(x**2+y**2))
A=ax.plot_surface(x,y,z,rstride=1, cstride=1, cmap=cm.coolwarm)
title('Prueba de figura 3 D en Python')
show()
2.2. Estpiral
Vamos a demostrar como hacer un espiral en 3D, este ejemplo es sacado de la pagina de: https://matplotlib.org/
3. Taylor con math
La Serie de Taylor es una herramienta muy usada en distintos escenarios de Ingeniería. Veamos uno sencillo de como calcular e elevado a la x.
Vamos a usar la librería math, que contiene la función factorial para el calculo de Taylor.
Escribiendo import math , incorporamos todas las funciones de math.
Podemos escribir cada término de la serie de la siguiente manera:
Vemos que para usar la función factorial usamos el operador punto para indicar que factorial es un método de math.
Esto en Python sería:
Vemos que x representa la cantidad de términos o iteraciones. En este ejemplo el exponente es 2 y es fijo.. pero bien podría modificarse para que podamos calcular
4. Matrices con Numpy
NumPy es un paquete de Python que significa “Numerical Python”, es la librería principal para la informática científica, proporciona potentes estructuras de datos, implementando matrices y matrices multidimensionales. Estas estructuras de datos garantizan cálculos eficientes con matrices. Mas datos ver en https://www.numpy.org/
Consigna:
Resumiendo lo que podemos encontrar en el sitio oficial de Numpy , wikipedia, blogs, etc. Numpy es el paquete más básico pero poderoso para la computación científica y la manipulación de datos en Python. Nos permite trabajar con matrices y matrices multidimensionales.
Vamos a cargar una matriz con 4x4 con valores aleatorios y luego calculamos el máximo valor de la matriz, el mínimo de las columnas, el menor valor de la matriz, el determinante de la matriz, y finalmente ordenamos por columna.
Figura 1
La salida sería:
Figura 2
Dejo el código para que prueben.
import numpy as np
n=4 #Dimensión de la matriz cuadrada
# carguemos dos matrices de nxn con números aleatorios
matriz_A= np.random.randint(0, 100, size=(n, n))
print(matriz_A)
print('El tipo de dato de matriz_A es: {}'.format(type(matriz_A)))
# Mostremos el máximo valor de la matriz_A
print('El mayor valor de la matriz_A es:{}'.format(matriz_A.max()))
#Mostraremos el menor elementos de las columas de la matriz_A
print('Los menores elemento de {} columas son:{}'.format(n,matriz_A.min(axis=0)))#axis=0=>Columna
matriz_B= np.random.randint(0, 100, size=(n, n))
print(matriz_B)
# Mostremos el menor valor de la matriz_B
print('El menor valor de la matriz_B es:{}'.format(matriz_B.min()))
#Mostraremos el mayores elementos de las filas de la mna de matriz_B
print('Los mayores elemento de {} filas son:{}'.format(n,matriz_B.max(axis=1))) #axis=1=>Fila
#Calculemos el determinante de matriz_A
print('El determinante de matriz_A es: {}'.format(np.linalg.det(matriz_A))) #linag p/operaciones lineales con matrices
# det calcula el determinante.
#Ordenemos la matriz_B por columna 0
indice=matriz_B[:,0].argsort(axis=0)
matriz_B_ordenada=matriz_B[indice,:]
print(matriz_B)
print(matriz_B_ordenada)
5. Raices de un Polinomio con numpy
En la librería numpy, existe una función llamada roots, que permite calcular las raíces de un Polinomio.
Consigna:
Ingresar los coeficientes de un polinomio de 3er grado y calcular las raices.
Almacenamos los coeficientes en una lista, el coeficiente de mayor orden va primero y así sucesivamente.
Figura 1
Las raíces para un ingreso: 1, -4, 1, 6 la ecuación quedaría:
y la salida sería:
Figura 2
Dejo el código para que prueben:
"""
Para calcular raices de polinomios
root permite encontra las racies de un polinomio. Para ello
espera recibir una lista con los coeficientes del polinomio.
Coeficientes son los que acompañan a x.
Cálculo de raices de un polinomio de orden 3 => 4 coeficientes.
"""
from numpy import roots
coeficiente=[]
print(type(coeficiente))
try:
for i in range(3,-1,-1):
print('Ingrese el coeficiente que acompaña a x elevado a la {}'.format(i))
coeficiente.append(int(input(' : ')))
print('Los coeficientes ingresados son: {} '.format(coeficiente))
raices=roots(coeficiente)# roots calcula las raices.
for j in raices:
print(' Raiz :{}'.format(j))
except ValueError:
print('Ingresó algún valor no válido como coeficiente. Finalizando el programa')
Para comprobar podemos acceder al sitio :https://es.symbolab.com/solver/roots-calculator y verificar la salida.
6. Histograma con Matplotlib
Matplotlib es una de las principales y más conocidas librerías de visualización y generación de gráficos para Python. De hecho, hay otras librerías que se basan en ella, como podremos ver más adelante.Para realizar un histograma con Matplotlib hay que utilizar el módulo pyplot, que permite la construcción de un gráfico, y la función hist, a la que hay que proporcionarle el conjunto de datos y los intervalos deseados. Finalmente basta con invocar a la función show para obtener el histograma.
Como puedes ver, en esencia es muy sencillo. Aunque nosotros, en el ejemplo, vamos a configurar un poco el gráfico para:
- Añadir un título con la función title.
- Añadir etiquetas en los ejes con las funciones xlabel e ylabel.
- Cambiar el número de divisiones en el eje X con la función xticks.
- Cambiar el color de las barras con el parámetro color de la función hist.
- Cambiar el ancho de las barras con el parámetro rwidth de la función hist.
y la Salida de ejecutar este script:edades = [12, 15, 13, 12, 18, 20, 19, 20, 13, 12, 13, 17, 15, 16, 13, 14, 13, 17, 19]
El código sería:
El código Fuente:
import matplotlib.pyplot as plot
edades = [12, 15, 13, 12, 18, 20, 19, 20, 13, 12, 13, 17, 15, 16, 13, 14, 13, 17, 19]
intervalos = range(min(edades), max(edades) + 2) #calculamos los extremos de los intervalos
plot.hist(x=edades, bins=intervalos, color='#F2AB6D', rwidth=0.85)
plot.title('Histograma de edades - matplotlib - codigopiton.com')
plot.xlabel('Edades')
plot.ylabel('Frecuencia')
plot.xticks(intervalos)
plot.show() #dibujamos el histograma
7. Fractales
¿Que es un fractal?
Es básicamente una figura geométrica que muestra las mismas características sin importar cuanto te acerques.
Típicamente, los fractales son difíciles de graficar, esto se debe al concepto que está íntimamente relacionado con ellos, la recursión, este concepto se vió cuando vimos funciones, y usamos un ejemplo para calcular el Factorial por ejemplo.
Vamos a usar una biblioteca llamada Turtle, que se usaba para mover una tortuga en lenguaje de programación llamado Logo de los años 1995. Este lenguaje permitía mover una tortuga en la pantalla.
Este ejemplo fue obtenido del siguiente sitio:
https://programmerclick.com/article/50381641460/
Utiliza un concepto de 1904, Helge von Koch, presentó en un trabajo científico una curiosa curva que da lugar a unos gráficos que hoy se conocen como copos de nieve de von Koch. La curva de von Koch se define recursivamente y es tanto más compleja cuanto más profunda es la recursión lo incluimos solamente para mostrar el poder de gráfico de Python.
Los gráficos de Koch están explicados en la bibliografía de la materia Página 321 de Introducción a la programación con Python.
#KochDrawV1.py
import turtle
def koch(size, n): # Dibujar curva de Koch
if n == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, n-1)
def main(level): # Tres curvas de Koch se combinan en un copo de nieve de Koch
turtle.setup(600, 600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.hideturtle()
level = int(input("Introduzca el pedido de copos de nieve de Koch:")) # Ingresar orden
main(level)