2. Python

Para poder programar con Python vamos a usars el siguiente software:

Visual Studio Code: El IDE

Miniconda: Permite trabajar con los Jupyter Notebooks

Extensiones de VS Code

Diversas librerías de Python

Mas información:

Understanding Python imports, __init__.py and pythonpath — once and for all

10 Python One Liner Tricks to Save Your Precious Time

10 Python Tricks That Will Wow You

JupyterLab App:A desktop application for JupyterLab, based on Electron.

The definitive guide to Python virtual environments with conda

Instalación

Pasemos ahora a indicar todo lo que hay que instalar para poder trabajar en Python y los Jupyter notebooks.

Instalar Visual Studio Code

Ejecutar los siguiente comandos en las consola de Linux para instalar VS Code

Instalar Miniconda

Descargar Miniconda desde https://docs.conda.io/en/latest/miniconda.html.

Ejecutar los siguiente comandos en las consola de Linux para instalar Anaconda

En la instalación de Anaconda, responder a todo que si "yes"

Instalar Extensiones de VS Code

Instalar las siguientes extensiones en VS Code

Python de Microsoft

Jupyter de Microsoft: Al instalar Anaconda despues de VS Code lo normal es que ya esté instalado.

Instalar paquetes de Python

Instalar antes que nada el paquete de Linux de Graphviz

Lo normal es que ya esté instalado en Fedora

Ahora vamos a instalar una serie de paquetes de Python en Anaconda. Se usa el comando conda

El paquete pandas_profiling no se encuentra en el canal (como un repositorio) oficial de Anaconda sino en el canal conda-forge. Por eso lo hemos indicado con --channel

Trabajar con Jupyter Notebooks

Para crear un nuevo Jupyter Notebook en VS Code deberemos pulsar las teclas CTRL+SHIFT+P y escribir "Jupyter: Create New Blank Notebook".

Dentro de un Jupyter Notebook podemos:

"+ Codigo": Añadir un bloque de código

"Ejecutar todo": Ejecuta todo desde el principio

"Restart": Reinicia el entorno de ejecución y borra todas las variable pero no toca el código

Mas información:

Working with Jupyter Notebooks in Visual Studio Code

Jupyter Notebook in Visual Studio Code

El lenguaje Python

Un libro sobre Python lo puedes descargar aqui:Python para todos.Explorando la información con Python 3 y un sitio web sobre python es Python 3 para impacientes

Librerías

Importar la librería numpy con nombre np

Importar una función load_iris de sklearn.datasets

Tipos

Booleanos: True y False

transformación de tipos

int()

float()

str()

Redondear

round(valor,decimales)

Imprimir

Imprimir

Para evitar el final de linea, se usa end=""

Para quitar el separador, se usar sep=""

Para que el separador sea una coma, se usar sep=","

Ayuda

Obtener información de una función, objeto ,etc. Solo hay que añadir la incógnita al final del nombre del método

Usado el método help

A veces interesa la información del método help otras veces de ?

Las propiedades y métodos de una clase

Operadores

División entera //

Resto de la división %

Potencia **

Estructuras de datos

Arrays. Como Listas en Python.

Tamaño de un Array

Sumar los elementos de un array

Añadir un elemento a un array

Concatenar arrays con el operador +. Crea un nuevo array y sirve también para listas.

Usar append con un array

Matrices. Como Arrays de Arrays en Python.

Tuplas

La diferencia entre un array y una tupla, es que la tupla es inmutable

Diccionarios

Claves diccionarios. Para obtener las claves de un diccionario se usa el método keys()

Imprimir matrices

Para imprimir datos en forma tabular, es necesario tenerlas en una matriz. Y para imprimir usaremos la librería tabulate

Estructuras de control

Condicional

Bucles

enumerate: Permite recorres un array pero obteniendo tanto el valor como el índice dentro del array

Funciones

Función que retorna un valor

Función que retorna 2 valores y se almacenan en dos variables

Función que retorna 2 valores y se almacenan en una única variable

Llamar a funciones por nombre de los parámetros

Parámetros opcionales

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

Ahora vamos a usar la clase que hemos creado

Medición de rendimiento

timeit

IPython es como la forma genérica de los Jupyter Notebooks. Y tiene una serie de órdenes que podemos usar directamente. La orden %timeit permite saber el tiempo que ha tardado una orden en ejecutarse.

Lo que hace es calcula el tiempo de ejecutar la orden sum(range(1000000000)) y almacena cuanto ha tardado en time

Y para imprimirlo, se usa:

Sin embargo el problema de usar %timeit es que lo que ejecutas no puede devolver un resultado. Es decir que no podríamos saber el resultado de la suma.

perf_counter

Para solucionar el problema anterior podemos simplemente medir nosotros el tiempo que tarda un método en ejecutarse con la función perf_counter.

El resultado se muestra en segundos

Mas información:

ML09: Measuring Running Time in Python & R

Ejercicios

Ejercicio 1: Instalación

Instala todo lo indicado en el apartado "Instalación" de este tema

Ejercicio 2: Librerías

Importa la librería llamada numpy con el nombre de np

Importa la librería llamada pandas con el nombre de pd

Importa la librería llamada matplotlib.pyplot con el nombre de plt

Importa la librería llamada seaborn con el nombre de sns

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.

Ejercicio 3: Tipos

Crea 2 variables booleanas una con el valor verdadero y otra con el valor falso.

Crea una variable de tipo String con un número y la transformas en un int.

Crea una variable de tipo String con un número y la transformas en un float.

Crea una variable de tipo int y la transformas en un float.

Crea una variable de tipo int y la transformas en un String.

Crea una variable de tipo float y la transformas en un String.

Crea una variable de tipo float y la transformas en un int. ¿La función redondea o trunca?

Ejercicio 4.A: Ayuda

Muestra la ayuda de la función load_breast_cancer mediante ?

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í:

Ejercicio 5: Operadores

Haz la división con decimales de 5/3

Haz la división entera de 5/3

Calcula

Ejercicio 6: Arrays

Crea una array con los siguiente números primos e imprime el cuarto número: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29

Calcula la longitud del anterior array

Calcula la suma de los elementos del anterior array

Añade al array el elemento 97

Crea una tupla con los siguiente números primos e imprime el cuarto número: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29

Añade a la tupla el elemento 97. ¿Porqué no te deja?.

Crea una array que sea la unión de los elementos de los siguientes dos arrays 1,2,3,4 y 10,20,30,40. Deberás usar un bucle for.

Añade al array 1,2,3,4 el siguiente array 10,20,30,40, pero como si fuera un único elemento usando una sola vez append. ¿Ves la diferencia con el ejercicio anterior?

Ejercicio 7: Print y arrays

Dado el array:

Imprime todos sus números cada un en una línea distinta

Imprime todos sus números en una única línea y separados por punto y coma

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 3 por línea y separados por un espacio

Ejercicio 8: Matrices

Crea la siguiente matriz:

Obtén el elemento de la fila 2º y la columna 3º. Es el valor del 7.

Crea un nuevo array con los elementos de la 3º Fila de la matriz

Crea un nuevo array con los elementos de la 2º Columna de la matriz

Imprime la matriz y haz que las cabeceras de cada columna sean A, B , C y D

Ejercicio 9: Diccionarios

Crea una variable llamada cliente que sea un diccionario con la información de este cliente

Del anterior diccionario muestra la siguiente información:

nombre

El teléfono móvil

El tipo de vía

El número de la 3º factura que vendió

La cantidad de compras que ha hecho.

Imprime el nombre de las claves del "primer nivel"

Ejercicio 10: Estructuras de control

Usando la variable cliente del ejercicio anterior, haz lo siguiente:

Muestra el texto "Cliente Importante" si el número de compras es mayor que 5 o sino muestra "Cliente Normal"

Muestra el texto "Cliente Importante" si el número de compras es mayor que 5 , si el número de compras es entre 2 y 5 muestra "Cliente Normal" , sino muestra "Cliente poco importante"

Haz que se muestre por pantalla los números del 0 al 999

Haz que se muestre por pantalla los números del 1 al 1000

Crea un array con los números primos hasta el 100, que son 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97

Muestra cada número por pantalla.

Haz que se muestren por pantalla el número junto con el orden que ocupan. Por ejemplo 4º -> 7 , 6º -> 13

Modifica el ejercicio anterior de forma que si es el primer número primo del array, se muestre Primero -> 2 y si es el último número primo del array , se muestre Ultimo -> 97

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 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 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.

Ejercicio 12

Vamos a volver al ejercicio de redes neuronales del tema 1 del tipo de flor .

Modifica el siguiente programa:

Para que en vez de poner tantas líneas como capas hay , se haga con un array. Es decir que dado el array capas=[6,12,6,1] se cree la red anterior pero si cambiamos los datos del array que se cree la red correspondiente.

Ejercicio 13

Modifica el ejercicio anterior de forma que el código esté en una función llamada compile_fit que haga lo mismo y retorne el objeto model.

Prueba a llamar a la función con los siguientes datos

Además, encapsula la obtención de los datos en la función get_datos

Ejercicio 14

Siguiendo con el ejercicio anterior, haz un programa que muestre lo siguiente

Pero los números con decimales que se muestran son el resultado de llamar a la red neuronal con los valores (4.9, 1.4) y (6.3, 4.9). Y cada red va a tener las siguientes capas con las neuronas:

Red	Nº Neuronas en cada capa
1º	2, 4, 1
2º	4, 8, 8, 2, 1
3º	8, 12, ,24, 12, 1
4º	8, 16, 8, 1
5º	16, 32, 1

Para hacer eso deberás crear un array en la que cada elemento será otro array con las neuronas de cada capa. Ejemplo:

Recorre el array y en cada vuelta

Obtén las neuronas de cada capa

Llama al método compile_fit

Obtén los resultados de predecir con los valores (4.9, 1.4) y (6.3, 4.9).

Añade los resultados a una matriz de resultados

Imprime la matriz de resultados

Ejercicio 15

Modifica el ejercicio anterior para que el método compile_fit retorna además del objeto model , el tiempo en segundos (con 2 decimales) que ha tardado en ejecutarse el método fit

Y que en la tabla se muestre también el tiempo

Ejercicio 16

Modifica el ejercicio anterior pero ahora modifica en el array de cada red para que la columna Red sea el nombre de la red para que podamos saber cual es cada una. El nombre será las neuronas de cada capa

Ejercicio 17

Modifica el ejercicio anterior pero ahora incluye en el array de cada red un nuevo campo con el número de épocas con las que se ha entrenado.

Por ello , deberás incluir un nuevo valor para cada red que será el número de épocas a entrenar.

Ejemplo:

El último elemento de cada array en el número de épocas que se va a entrenar la red.

Ejercicio 18

Modifica la función compile_fit añadiendo un nuevo parámetro que se a el número de neuronas de entrada. Es decir, el número de valores de la "x".

Ejercicio 19

Repite el ejercicio anterior pero ahora con la red neuronal del cáncer de mama y las siguientes capas de la red:

Nº Neuronas en cada capa	Épocas
4, 8, 4, 2, 1	20
4, 8, 4, 2, 1	40
8, 16, 8, 4, 1	20
8, 16, 8, 4, 1	40
16, 32, 16, 8, 1	20
16, 32, 16, 8, 1	40
32, 64, 32, 8, 1	20
32, 64, 32, 8, 1	40
64, 128, 64, 8, 1	20
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.