print(1 / 200 * 30)
print((59 + 73 + 2) / 3)0.15
44.666666666666664
Si seguiste los capítulos anteriores, ya tendrás algo de experiencia ejecutando código Python. No te dimos muchos detalles, pero es evidente que has entendido lo básico, ¡o habrías tirado este libro por la frustración! La frustración es natural cuando empiezas a programar en Python, porque es muy exigente con la puntuación, y basta un solo carácter fuera de lugar para que se queje. Pero, aunque debes esperar frustrarte un poco, consuélate pensando que esta experiencia es tanto típica como temporal: le pasa a todo el mundo, y la única forma de superarla es seguir intentándolo.
Antes de seguir, asegurémonos de que tienes una base sólida para ejecutar código Python y de que conoces algunas de las funcionalidades más útiles de Visual Studio Code para trabajar con Python.
Repasemos algunos conceptos básicos que hemos omitido hasta ahora para que pudieras ponerte al día lo más rápido posible. Puedes usar Python como calculadora:
print(1 / 200 * 30)
print((59 + 73 + 2) / 3)0.15
44.666666666666664
El paquete adicional numpy contiene muchos de los operadores matemáticos adicionales que podrías necesitar. Si aún no tienes numpy instalado, abre la terminal en Visual Studio Code (ve a “Terminal -> New Terminal”, escribe uv add numpy en la terminal y pulsa Enter). Una vez que tengas numpy instalado, puedes importarlo y usarlo así:
import numpy as np
print(np.sin(np.pi / 2))1.0
Puedes crear objetos nuevos con el operador de asignación =. Piensa en esto como copiar el valor de lo que esté en el lado derecho en la variable del lado izquierdo.
x = 3 * 4
print(x)12
Hay varias estructuras en Python que agrupan varios objetos a la vez, pero quizá la más común es la lista, que se indica con corchetes.
primes = [1, 2, 3, 5, 7, 11, 13]
print(primes)[1, 2, 3, 5, 7, 11, 13]
Para hacer aritmética básica sobre una lista, usa una list comprehension (comprensión de listas), que tiene la estructura “para cada elemento de esta lista, realiza una operación”. Por ejemplo, para multiplicar cada elemento por tres.
[element * 3 for element in primes][3, 6, 9, 15, 21, 33, 39]
Fíjate en que la palabra “element” de arriba podría haber sido casi cualquier palabra, porque la definimos al escribir ...for element in .... Puedes probar lo anterior con otra palabra, por ejemplo [entry*3 for entry in primes].
Todas las sentencias de Python en las que creas objetos (conocidas como sentencias de asignación) tienen la misma forma:
object_name = value
Al leer ese código, di mentalmente “nombre del objeto recibe valor”.
Python ignorará cualquier texto que aparezca después de #. Esto te permite escribir comentarios, texto que Python ignora pero que otras personas pueden leer. A veces incluiremos comentarios en los ejemplos para explicar qué ocurre con el código.
Los comentarios pueden ser útiles para describir brevemente lo que hace el código que sigue.
# define primes
primes = [1, 2, 3, 5, 7, 11, 13]
# multiply primes by 2
[el * 2 for el in primes][2, 4, 6, 10, 14, 22, 26]
Con fragmentos de código cortos como este, no es necesario dejar un comentario en cada línea, y deberías intentar usar nombres informativos siempre que puedas, porque ayudan a quienes lean tu código (probablemente tú en el futuro) a entender lo que está pasando.
Nuestro consejo es usar los comentarios para explicar el porqué de tu código, no el cómo ni el qué. El qué y el cómo de tu código siempre se pueden averiguar leyéndolo con atención, aunque resulte tedioso. Si describes cada paso en los comentarios y luego cambias el código, tendrás que acordarte de actualizar también los comentarios (tedioso) o resultará confuso cuando vuelvas a tu código en el futuro.
Averiguar por qué se hizo algo es mucho más difícil, si no imposible. Por ejemplo, geom_smooth() tiene un argumento llamado span que controla la suavidad de la curva: los valores más grandes producen una curva más suave. Supón que decides cambiar el valor de span de su valor predeterminado de 0.75 a 0.9: a un lector futuro le resultará fácil entender qué está pasando, pero a menos que anotes tu razonamiento en un comentario, nadie entenderá por qué cambiaste el valor predeterminado.
En el código de análisis de datos, usa los comentarios para explicar tu plan general de ataque y registrar las ideas importantes a medida que las encuentres. No hay forma de recuperar este conocimiento a partir del propio código.
Siempre puedes inspeccionar un objeto ya creado escribiendo su nombre en la ventana interactiva:
primes[1, 2, 3, 5, 7, 11, 13]
Si quieres saber de qué tipo es el objeto, usa type(object) en la ventana interactiva así:
type(primes)list
Visual Studio Code tiene algunas funcionalidades potentes para ayudarte a llevar el control de los objetos:
Los nombres de objetos (también llamados “variables”) deben cumplir lo siguiente para ser válidos en Python:
Además, los nombres de objetos en Python distinguen entre mayúsculas y minúsculas, así que age, Age y AGE podrían ser tres variables distintas.
Cuando pongas nombre a los objetos, lo mejor es que sean descriptivos para que puedas saber qué son. Tendrás que adoptar una convención para nombres de varias palabras. Recomendamos snake_case, en la que separas palabras en minúsculas con _. Por ejemplo, i_use_snake_case es un nombre válido en snake case para un objeto.
Intenta crear el objeto age y asignarle el valor 10. ¿Qué ocurre cuando escribes Age en tu consola?
Recuerda que siempre puedes inspeccionar un objeto que hayas creado escribiendo de nuevo su nombre:
primes[1, 2, 3, 5, 7, 11, 13]
Haz otra asignación:
this_is_a_really_long_name = 2.5Para ahorrarte tiempo al inspeccionar este objeto en la ventana interactiva, puedes empezar a escribir el nombre (escribe “this”) y luego pulsar la tecla TAB. Visual Studio Code autocompletará lo que hayas escrito usando las variables que has definido durante tu sesión. ¡Es un gran truco para ahorrar tiempo!
Si usas la consola interactiva en lugar de un notebook, hay otro gran truco. Supón que antes ejecutaste this_is_a_really_long_name = 2.5 pero querías asignarle 3.5. No te desesperes; no tienes que volver a escribirlo todo. Con el cursor en la ventana interactiva, basta con pulsar ↑ en tu teclado para recorrer los comandos que ejecutaste antes. Cambia 2.5 por 3.5, pulsa shift + Enter y habrás redefinido tu variable.
Definamos otra variable:
py_variable = 2 ^ 3Ahora intentemos inspeccionarla:
py_variabl
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/Users/aet/Documents/git_projects/python4DS/workflow-basics.ipynb Cell 31 in ()
----> 1 py_variabl
NameError: name 'py_variabl' is not definedEsto ilustra lo brillante y lo frustrante de programar: tu IDE (Visual Studio Code) hará por ti los cálculos tediosos, pero, a cambio, debes ser preciso en tus instrucciones. Si no, es probable que obtengas un error que diga que no se encontró el objeto que buscas. Las erratas importan; Python no puede leerte la mente y decir: “ah, probablemente quería decir py_variable cuando escribió py_variabl”.
Python tiene una gran cantidad de funciones integradas. También puedes importar funciones de paquetes (como hicimos con np.sin) o definir las tuyas propias.
En programación, una función tiene entradas, realiza su tarea y devuelve las salidas que correspondan. Veamos un ejemplo sencillo de uso de una función integrada, sum():
sum(primes)42
La estructura general de las funciones es el nombre de la función, seguido de paréntesis, seguido de uno o más argumentos. A veces también habrá argumentos de palabra clave (keyword arguments). Por ejemplo, sum() incluye un argumento de palabra clave que le indica a la función que empiece a contar desde un número concreto. Veámoslo en acción empezando desde diez:
sum(primes, start=10)52
Si alguna vez no tienes claro qué hace una función, puedes llamar a help() sobre ella (que a su vez es una función):
help(sum)Help on built-in function sum in module builtins:
sum(iterable, /, start=0)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
O, en Visual Studio Code, pasa el ratón por encima del nombre de la función.
Igual que con las variables, el autocompletado también funciona con las funciones. Prueba a escribir su y pulsar tab para verlo en acción.
Tendrás que tener especial cuidado con los objetos que son strings (palabras, oraciones, letras y frases), porque siempre deben ir entre comillas. Puedes usar comillas simples o dobles según prefieras, pero i) la convención es usar comillas dobles, y ii) conviene ser coherente, elijas la que elijas.
Aquí tienes un ejemplo de código que produce un error
x = "hello
Input In [3]
x = "hello
^
SyntaxError: unterminated string literal (detected at line 1)De nuevo, Visual Studio Code puede ayudarte mucho aquí, porque en cuanto abres unas comillas dobles, te prepara las de cierre.
¿Por qué no funciona este código?
my_variable = 10
my_varıable¡Mira con atención! Puede parecer un ejercicio sin sentido, pero entrenar a tu cerebro para notar hasta la más mínima diferencia te resultará muy útil al programar.
Modifica cada uno de los siguientes comandos de Python para que se ejecuten correctamente:
import pandas as pd
from palmerpenguins import load_penguins
from lets_pot import *
LetsPlot.setup_html()
penguins = load_penguins()
(
ggplot(
dTA=penguins,
maping=aes(x="flipper_length_mm", y="body_mass_g", color="species"),
)
+ geom_smooth(method="lm)
)