Te recuerdo que estoy compartiendo los apuntes de mis primeros pasos con Python y TensorFlow y que puedes acompañarme desde el primer tutorial:
- Instalación de TensorFlow y entorno de desarrollo Python en Mac.
- Revisión de ejemplos de TensorFlow.
- Principios de aprendizaje automático supervisado.
Si queremos trabajar con aprendizaje automático en Python parece lógico tener cierta soltura con los tipos de datos. Uno de los primeros sitios a los que tendríamos que ir es a la guía del lenguaje (ojito que usamos las versión 3.8 o la que proceda).
Como he programado en varios lenguajes solamente voy a apuntar unos pocos enlaces útiles y a ver cómo se hacen cuatro cosas: declarar variables, componer cadenas, hacer operaciones básicas y crear arrays.
La verdad es que es muy intuitivo todo, simplemente hay que acostumbrarse a la notación.
Siempre es mejor leer la documentación ?. Este es el aspecto de los tutoriales descomprimidos.
También podemos encontrar decenas de libros gratuitos por internet.
Asegúrate por favor, que son gratis de verdad (hay demasiados recursos disponibles como para tener que piratear y parece lógico retribuir a los autores).
Bueno, vamos con ejemplos, que no hay nada mejor que tocar por uno mismo.
Esta es la lista de los tipos de datos de Python.
Para declarar variables no hace falta poner ningún modificador como var o similar.
El tipo más simple es un Booleano. Sus valores son True o False. Con == podemos comparar.
a = True if a == True : print ("Es cierto") else : print ("Es falso")
Con los operadores lógicos podemos hacer comparaciones:
a = 20 if a < 50 : print ("Es menor") else : print ("Es mayor")
Con los números no se hace diferencia entre enteros y coma flotante. Si se quieren declarar en coma flotante se les pone el punto.
Como es de esperar la división entre enteros da un valor en coma flotante.
a = 20 b = 7 print (a,b) print (a/b)
Podemos interrogar el tipo de datos con type () o isinstance.
a = 20 b = 7 c = 20/7 print (a,b) print (type(a)) print (type(c)) print (isinstance(c,int))
Ojito que las conversiones a Int() trunca, no redondea.
Esta es la salida que obtenemos (comprobar que no hace redondeo).
20 7 2.857142857142857
2
Una función muy interesante y útil es round. Pongamos un ejemplo muy valioso: si queremos estimar el valor de unas viviendas a partir de unos testigos (muestras), tiene sentido decir que cuesta 350K euros más que 350234 euros. Esa precisión solo aporta complejidad a los modelos.
numero = 123456 redondeado = round (numero,-3) print (redondeado)
Intercambiar el valor de dos elementos es muy sencillo. Y vale para cualquier tipo de datos.
a = 20 b = 10 a,b = b,a print (a,b)
Las cadenas de caracteres se inicializan igualmente con comillas dobles o simples.
También se puede iterar entre los caracteres de las cadenas.
palabra = 'Roberto' for letra in palabra: print (letra)
Del mismo modo, se pueden utilizar rangos de caracteres para extraer subcadenas.
procion = palabra [2:5] print (procion)
Es de esperar que salga BER.
Podemos formatear las salidas de un modo sencillo combinando valores y literales.
nombre = "Roberto" edad = '47' print ("Roberto: {0} : Edad: {1}".format(nombre,edad))
También se pueden formatear las cadenas al estilo clásico (tipo printf c):
nombre = "Roberto" edad = '47' print ("Roberto: {0} : Edad: {1}".format(nombre,edad)) print ('Hola, %s' % nombre)
Uno de los tipos compuestos mutables (cambiables) de datos son las listas.
Los elementos añadidos individualmente pueden ser de diferentes tipos. Se inicializan separados por comas.
lista = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
Podemos añadir elementos, quitárselos o trabajar con rangos.
sesgada = lista [2:8] print(sesgada)
Para hacer operaciones matemáticas con grupos de datos (como redondeo) no es el tipo más adecuado, porque hay que hacerlos uno a uno (ya que los tipos pueden ser diferentes).
lista = [12.3233,2.3323,3.2433,4.5445,5.44345] lista_redondeada = [round(num, 2) for num in lista] print ("lista redondeada",lista_redondeada)
Las tuplas son similares a las listas pero no se puede modificar el número de elementos. Se inicializa con paréntesis en vez de corchetes. Las operaciones con ellas son más rápidas.
Para trabajar con TensorFlow vamos a utilizar principalmente otro tipos de arrays: numpy arrays. Las operaciones son más rápidas y acotadas a números.
Podéis ir a este enlace y recorrer los ejemplos.
Bueno, aunque sea un tutorial chorra estas cuatro cosas nos van a valer para seguir los ejemplos.
Nos interesa más dedicar tiempo a librerías Numpy y Pandas (DataFrames o tablas de datos tipo .csv).
Nos vemos en siguientes tutoriales.
Para imprimir variables se usa también mucho los f-strings. Para mí, es más legible cuando leo el código.
Y los slicing en una lista son una pasada! Te permite manipular grandes estructuras de datos con apenas un par de líneas.