Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:1eval:tema02

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:iabd:pia:1eval:tema02 [2023/05/09 23:36]
admin [El lenguaje Python]
clase:iabd:pia:1eval:tema02 [2024/01/06 12:03] (actual)
admin [Poetry]
Línea 260: Línea 260:
  
  
-==== Estructuras de datos ====+===== Estructuras de datos =====
  
  
Línea 407: Línea 407:
 from tabulate import tabulate from tabulate import tabulate
  
-a=[  [5,0.7,0.765], [10,1.45,0.84], [20,2.678,0.978], [60,11.396,0.9973]  ]+datos=[  [5,0.7,0.765], [10,1.45,0.84], [20,2.678,0.978], [60,11.396,0.9973]  ]
  
  
-print(tabulate(a, headers=["Épocas", "Tiempo (s)", "Resultado"]))+print(tabulate(datos, headers=["Épocas", "Tiempo (s)", "Resultado"]))
 </sxh> </sxh>
  
Línea 422: Línea 422:
 </sxh> </sxh>
  
 +También podemos añadir una primera columna que sean también como "cabeceras". El siguiente anterior ejemplo se podría modificar de forma que en el array ''a'' solo estén los datos de tiempo y resultado y no las épocas ya que son como "cabeceras".
  
 +<sxh python>
 +from tabulate import tabulate
 +
 +datos=[  [0.7,0.765], [1.45,0.84], [2.678,0.978], [11.396,0.9973]  ]
 +epocas=[5,10,20,60]
 +
 +print(tabulate(datos, headers=["Épocas", "Tiempo (s)", "Resultado"],showindex=epocas))
 +
 +</sxh>
 +<sxh base>
 +  Épocas    Tiempo (s)    Resultado
 +--------  ------------  -----------
 +               0.7         0.765
 +      10         1.45        0.84
 +      20         2.678       0.978
 +      60        11.396       0.9973
 +</sxh>
  
-==== Estructuras de control ====+===== Estructuras de control =====
  
   * Condicional   * Condicional
Línea 500: Línea 518:
 </sxh> </sxh>
  
-==== Funciones ====+===== Funciones =====
  
   * Función que retorna un valor   * Función que retorna un valor
Línea 591: Línea 609:
 </sxh> </sxh>
  
-==== Medición de rendimiento ====+ 
 +===== Clases ===== 
 +Para crear clases en python: 
 +  * ''class'': Se crear la clase 
 +  * ''self'': Para referirse a propiedades y métodos del propio objeto, se pasa siempre como primer argumento en todos los métodos. 
 +  * ''%%__%%init%%__%%'': El nombre del constructor 
 +  
 + 
 +  * Vamos a crear la clase rectángulo 
 +<sxh python> 
 +class Rectangulo: 
 +    def __init__(self, longitud, ancho): 
 +        self.longitud = longitud 
 +        self.ancho = ancho 
 + 
 +    def calcular_area(self): 
 +        return self.longitud * self.ancho 
 + 
 +    def calcular_perimetro(self): 
 +        return 2 * (self.longitud + self.ancho) 
 +</sxh> 
 + 
 + 
 +  * Ahora vamos a usar la clase que hemos creado 
 +<sxh python> 
 +mi_rectangulo = Rectangulo(5, 10) 
 + 
 +print("Longitud:", mi_rectangulo.longitud) 
 +print("Ancho:", mi_rectangulo.ancho) 
 +print("Área:", mi_rectangulo.calcular_area()) 
 +print("Perímetro:", mi_rectangulo.calcular_perimetro())  
 +</sxh> 
 + 
 +<sxh base> 
 +Longitud: 5 
 +Ancho: 10 
 +Área: 50 
 +Perímetro: 30 
 +</sxh> 
 +===== Medición de rendimiento =====
  
 === timeit === === timeit ===
Línea 636: Línea 693:
 Mas información: Mas información:
   * [[https://morton-kuo.medium.com/ml09-e549b2c26c47|ML09: Measuring Running Time in Python & R]]   * [[https://morton-kuo.medium.com/ml09-e549b2c26c47|ML09: Measuring Running Time in Python & R]]
 +
 +===== Poetry =====
 +A veces no quieremos usar conda sino tener una carpeta con todo lo que necesita el proyecto, al estilo de //NodeJS//. En ese caso podemos usar una herramienta llamada [[https://python-poetry.org/|Poetry]]
 +
 +  * Instalar poetry
 +<sxh bash>
 +pip install --user poetry
 +</sxh>
 +
 +  * Comprobar que tenemos poetry instalado
 +
 +<sxh bash>
 +poetry --version
 +</sxh>
 +
 +  * Para decir que las librerías se instalen en nuestra propia carpeta del proyecto.
 +<sxh bash>
 +poetry config virtualenvs.in-project true
 +</sxh>
 +
 +  * Para tener un proyecto con python y todas sus dependencias en la misma carpeta haremos lo siguiente:
 +<sxh bash>
 +poetry init
 +poetry add libclang = "<12.0.0" numpy pandas matplotlib seaborn scikit-learn tensorflow tabulate PyMySQL SQLAlchemy ipympl keras-tuner tensorflow-addons statsmodels
 +poetry install
 +</sxh>
 +
 +<note important>
 +Si al hacer el ''poetry add'' se produce el error:
 +''[org.freedesktop.DBus.Error.UnknownObject] ("No such object path '/org/freedesktop/secrets/aliases/default'",)'' 
 +deberemos crear la siguiente variable de entorno:
 +''export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring''
 +</note>
 +
 +Para ejecutar el código hay 2 formas:
 +
 +  * Desde la línea de comandos:
 +<sxh python>
 +poetry run python my_script.py
 +</sxh>
 +
 +  * Desde VS Code seleccionar en los entornos de ejecución la carpeta ''.venv'' del propio proyecto:
 +{{ :clase:iabd:pia:1eval:vs-code-poetry.png?direct |}}
 +
 +  * Si queremos usar el entorno de poetry pero no está en nuestra carpeta se puede indicar a VS Code cual es el ejecutable de python que debe usar siempre para ello hay que crear en la carpeta de nuestro proyecto el fichero ''$HOME/.config/Code/User/settings.json''
 +
 +<sxh base>
 +{    
 +    "python.defaultInterpreterPath": "/home/logongas/python_default_env/.venv/bin/python",
 +}
 +</sxh>
 +
 +
  
 ===== Ejercicios ===== ===== Ejercicios =====
Línea 647: Línea 757:
   * Importa la librería llamada ''matplotlib.pyplot'' con el nombre de ''plt''   * Importa la librería llamada ''matplotlib.pyplot'' con el nombre de ''plt''
   * Importa la librería llamada ''seaborn'' con el nombre de ''sns''   * Importa la librería llamada ''seaborn'' con el nombre de ''sns''
-  * Importa una función ''load_boston'' desde ''sklearn.datasets''+  * Importa una función ''load_breast_cancer'' desde ''sklearn.datasets''
  
 Una vez importadas esas librerías ejecuta el siguiente código, el cual mostrará una gráfica. Una vez importadas esas librerías ejecuta el siguiente código, el cual mostrará una gráfica.
 <sxh python> <sxh python>
- 
 df=pd.DataFrame({ df=pd.DataFrame({
-    'Nº Habitaciones':load_boston().data[:,5], +    'Perímetro medio':load_breast_cancer().data[:,2], 
-    'Precio':load_boston().target,+    '¿Benigno?':load_breast_cancer().target,
 }) })
 + 
 figure=plt.figure() figure=plt.figure()
 axes = figure.add_subplot() axes = figure.add_subplot()
-sns.scatterplot(data=df,x="Nº Habitaciones",y="Precio")+sns.scatterplot(data=df,x="Perímetro medio",y="¿Benigno?")
 </sxh> </sxh>
  
Línea 672: Línea 781:
  
  
-==== Ejercicio 4: Ayuda ==== +==== Ejercicio 4.A: Ayuda ==== 
-  * Muestra la ayuda de la función ''load_boston''+  * Muestra la ayuda de la función ''load_breast_cancer'' mediante ''?''
    
- ¿Como se llaman los argumentos que se le pueden pasar?+ 
 +==== Ejercicio 4.B: Ayuda ==== 
 +  * Muestra la ayuda de la función ''load_breast_cancer'' mediante ''help'' 
 + 
 +==== Ejercicio 4.C: Ayuda ==== 
 +  * Muestra los campos del objeto ''datos'', sabien que el objeto datos se obtiene así: 
 + 
 +<sxh> 
 +datos=load_breast_cancer() 
 +</sxh> 
 + 
  
 ==== Ejercicio 5: Operadores ==== ==== Ejercicio 5: Operadores ====
Línea 703: Línea 823:
   * Imprime todos sus números en una única línea y separados por un espacio   * Imprime todos sus números en una única línea y separados por un espacio
   * Imprime todos sus números de forma que se impriman 2 por línea  y separados por una coma   * Imprime todos sus números de forma que se impriman 2 por línea  y separados por una coma
-  * Imprime todos sus números de forma que se impriman 3 por línea sin separación entre los números +  * Imprime todos sus números de forma que se impriman 3 por línea separados por un espacio
 ==== Ejercicio 8: Matrices ==== ==== Ejercicio 8: Matrices ====
   * Crea la siguiente matriz:   * Crea la siguiente matriz:
Línea 763: Línea 882:
 ==== Ejercicio 11: Funciones ==== ==== Ejercicio 11: Funciones ====
  
-  * Haz una función llamada "importe_final que dado el precio de un producto y el porcentaje de descuento , nos diga el importe del producto. Usa la función con los valores de 120€ y un 10% e imprime el resultado. Vuelve a llamar ahora a la función pero cambiando el nombre de los argumentos y usando el nombre de los parámetros en la llamada+  * Haz una función llamada "importe_final que dado el precio de un producto y el porcentaje de descuento , nos diga el importe del producto. Usa la función con los valores de 120€ y un 10% e imprime el resultado. Vuelve a llamar ahora a la función pero cambiando el orden de los argumentos y usando el nombre de los parámetros en la llamada
   * Modifica la función para que retorne tanto el importe como la cantidad que se ha descontado del precio. Usa la función con los valores de 120€ y un 10% e imprime el resultado.   * Modifica la función para que retorne tanto el importe como la cantidad que se ha descontado del precio. Usa la función con los valores de 120€ y un 10% e imprime el resultado.
   * Modifica la función para que por defecto el descuento sea un 10% y no sea necesario pasar ese valor. Usa la función con el valor de 120€ e imprime el resultado.   * Modifica la función para que por defecto el descuento sea un 10% y no sea necesario pasar ese valor. Usa la función con el valor de 120€ e imprime el resultado.
Línea 908: Línea 1027:
 |  64, 128, 64, 8, 1  |  20 | |  64, 128, 64, 8, 1  |  20 |
 |  64, 128, 64, 8, 1  |  40 | |  64, 128, 64, 8, 1  |  40 |
 +
 +==== Ejercicio 20 ====
 +Crea una clase llamada ''CuentaBancaria''.
 +
 +La clase debe tener  los siguientes atributos:
 +
 +  * ''titular'': el titular de la cuenta.
 +  * ''saldo'': el saldo actual de la cuenta.
 +  * 
 +La clase debe tener los siguientes métodos:
 +  * ''%%__%%init%%__%%'': el método de inicialización que toma el titular como parámetro e inicializa el saldo en 0.
 +  * ''depositar'': un método que toma una cantidad como parámetro y la suma al saldo actual.
 +  * ''retirar'': un método que toma una cantidad como parámetro y la resta del saldo actual, pero verifica que haya suficiente saldo antes de realizar la operación.
 +  * ''obtener_saldo'': un método que devuelve el saldo actual de la cuenta.
 +
 +Usa la clase de forma que
 +  * Se cree un objeto
 +  * Se depositen 100€
 +  * Se retiren 75€.
 +  * Imprimas el titular y el saldo.
  
  
clase/iabd/pia/1eval/tema02.1683668172.txt.gz · Última modificación: 2023/05/09 23:36 por admin