
Estructura de datos en Python
Estructura de datos en Python
Sí, lo sé, he estado desaparecido por un tiempo. Entre el trabajo que me ha tenido a tope🔥 y un viaje a Londres (¡Camden me ha enamorado!), apenas he tenido tiempo para actualizar el blog. Pero estoy de vuelta y con más ganas que nunca de seguir compartiendo todo lo que voy aprendiendo. Así que, hoy vamos a ver cositas sobre las estructuras de datos en Python.
Las estructuras de datos en Python suelen ser simples, pero son súper importantes si queremos ser unos programadores top 💪 (yo aún estoy en el proceso, claro 😅).
Las estructuras de datos en python suelen ser simples pero es súper importante si queremos ser unos programadores top (yo aún estoy en el proceso).
Tuplas
Vamos a empezar con la que más me ha costado entender a mi… las tuplas😵. Una tupla es como una lista de cosas pero con una diferencia importante: una vez creas una tupla, no puedes modificar los elementos que contiene. Por ejemplo, si tienes una tupla con los números 1,2 y 3, no puedes cambiar esos números por otros más tarde.
La forma sencilla de crear una tupla es poner los valores dentro de paréntesis separados por coma, aunque también puedes crearlo sin los paréntesis, por ejemplo:
tupla = (1,2,3)
tupla2 = 1,2,3
Además, podemos hacer cositas interesantes con los tuples, como asignarlo a variables individuales.
x,y,z = tupla
print(tupla[0])
Aquí el resultado del print sería “1” porque es el primer elemento de nuestra tupla. Ahora vamos a complicarlo un poquito más y crear una tupla que contenga diferentes tipos de datos:
tup = tuple(['ejemplo', [1, 2], True])
Antes comenté que las tuplas son inmutables PEEEEERO, si dentro de una tupla existe algún objeto mutable (que se puede modificar), ¡pues podríamos modificarlo! Mirad:
tup[1].append(3)
tup
('ejemplo', [1, 2, 3], True)
Lo que hemos hecho es decirle que queremos añadir el número 3 al objeto en esa posición y, como es una lista, nos deja modificarlo.
Ejemplo: Coordenadas geográficas
Imaginemos que estamos trabajando con coordenadas geográficas y necesitas almacenar la latitud y longitud de varias ubicaciones para hacer un análisis geoespacial. Al usar tuplas para cada coordenada, te aseguras de que los valores se mantengan inalterados, garantizando una consistencia en el análisis:
# Lista de tuplas, cada tupla contiene una latitud y una longitud para las ubicaciones.
coordenadas = [
(36.618, -6.356), # Ubicación 1
(37.382, -5.986), # Ubicación 2
(36.721, -4.421) # Ubicación 3
]
Ejemplo: Datos de configuración
Un uso interesante de las tuplas sería almacenar configuraciones o constantes, como parámetros de un modelo:
# Parámetros de un modelo en una tupla
model_params = ('Linear Regression', 0.01, 1000) # (nombre del modelo, learning rate, iteraciones)
# Accedemos a cada parámetro
nombre_modelo = model_params[0]
learning_rate = model_params[1]
iteraciones = model_params[2]
print(f"Modelo: {nombre_modelo}, Learning Rate: {learning_rate}, Iteraciones: {iteraciones}")
Las tuplas son una opción excelente cuando trabajamos con conjuntos de datos constantes que deben mantenerse íntegros durante todo el análisis.
Listas
A diferencia de las tuplas, las listas son de longitud variable y pueden ser modificadas. Podemos definir listas usando [] o usando la función “list()”.
una_lista = [1,2,3]
tupla = ("foo", "bar", "baz")
lista = list(tupla) #con esto convertimos la tupla en lista
Las listas y las tuplas son parecidas, con la principal diferencia de que las listas pueden cambiarse. Por ejemplo, podemos añadir elementos al final de una lista con “append” o insertarlos en una posición específica con “insert”.
ejemplo_lista = ["fantasma", "caballero"]
ejemplo_lista.append("arquero")
ejemplo_lista.insert(1,"mago")
#nuestra lista quedaría de la siguiente forma
ejemplo_lista
["fantasma","mago","caballero","arquero"]
Esto es lo más básico de las listas, también se pueden eliminar valores, concatenar listas, verificar si un valor está dentro de la lista y mil cosas más peeeero vamos a lo que nos interesa realmente que son ejemplos de usos reales.
Ejemplo: Ventas
Vamos a imaginarnos que tenemos una lista de ventas y queremos calcular la diferencia entre cada valor y el valor anterior para ver si el incremento o disminución.
ventas = [1000, 1200, 1500, 1300, 1600]
cambios_ventas = [] # Lista para almacenar las diferencias
# Calculamos la diferencia con el valor anterior
for i in range(1, len(ventas)):
diferencia = ventas[i] - ventas[i-1]
cambios_ventas.append(diferencia)
print("Diferencia entre valores consecutivos de ventas:", cambios_ventas)
# Salida: [200, 300, -200, 300]
Ejemplo: Análisis de retención
Imaginemos que tenemos una lista de usuarios y el número de horas que han pasado viendo contenido en TikTok durante el último mes. Podemos usar las listas para clasificar los usuarios en diferentes segmentos: bajo, medio y alto nivel de interacción.
# Horas de visualización por usuario en un mes
horas_usuarios = [5, 12, 22, 34, 3, 18, 9, 41, 7, 28]
# Segmentamos a los usuarios según su nivel de interacción
bajo_interaccion = []
medio_interaccion = []
alto_interaccion = []
for horas in horas_usuarios:
if horas < 10:
bajo_interaccion.append(horas)
elif 10 <= horas < 30:
medio_interaccion.append(horas)
else:
alto_interaccion.append(horas)
print("Usuarios con baja interacción:", bajo_interaccion)
print("Usuarios con media interacción:", medio_interaccion)
print("Usuarios con alta interacción:", alto_interaccion)
En el mundo real, normalmente usamos archivos como csv, excel o bases de datos, y entran en juego librerías como pandas o numpy que optimizan el trabajo (lo veremos pronto, lo prometo 😉).
Diccionarios
Por último, vamos a ver los diccionarios. Podemos resumir que un diccionario es una estructura de datos que permite almacenar valores en forma de pares clave-valor.
Por ejemplo, un diccionario tiene esta pinta:
# Diccionario vacío
mi_diccionario = {}
# Diccionario con valores
mi_diccionario = {
'nombre': 'Juan',
'edad': 29,
'ciudad': 'Madrid'
}
Ejemplo: Análisis de Compras por Categoría
Imaginemos los datos de productos vendidos en un formato de diccionario para ver ventas por categoría:
# Datos de productos vendidos
productos = [
{'producto': 'Camiseta', 'categoria': 'Ropa', 'precio': 20},
{'producto': 'Pantalón', 'categoria': 'Ropa', 'precio': 35},
{'producto': 'Laptop', 'categoria': 'Electrónica', 'precio': 700},
{'producto': 'Celular', 'categoria': 'Electrónica', 'precio': 500},
{'producto': 'Zapatos', 'categoria': 'Ropa', 'precio': 50},
{'producto': 'Audífonos', 'categoria': 'Electrónica', 'precio': 150},
{'producto': 'Libro', 'categoria': 'Libros', 'precio': 15}
]
Cada producto es un diccionario en sí, con las claves “producto”, “categoría” y “precio”.
# Creamos un diccionario vacío para acumular ventas por categoría
ventas_por_categoria = {}
# Recorremos la lista de productos
for producto in productos:
categoria = producto['categoria']
precio = producto['precio']
# Si la categoría ya está en el diccionario, sumamos el precio
if categoria in ventas_por_categoria:
ventas_por_categoria[categoria] += precio
else:
# Si la categoría no está en el diccionario, la añadimos con el precio actual
ventas_por_categoria[categoria] = precio
print("Total de ventas por categoría:", ventas_por_categoria)
Con esto lo que hacemos es obtener y almacenar el total de ventas de cada categoría. Y, finalmente, el resultado sería algo como:
Total de ventas por categoría: {'Ropa': 105, 'Electrónica': 1350, 'Libros': 15}
Por último, dejo por aquí el libro que estoy usando para aprender Python porque me parece super top y, además lo tienes gratis en formato online:
Python for Data Analysis - Wes McKinney
Recuerda: las tuplas son como esa caja de herramientas que nunca tocas 🛠️, las listas como tu fondo de pantalla (cambiando cada dos por tres 🎨), y los diccionarios… bueno, como el cajón de los calcetines (todos por pares). Espero que este post te haya sido tan útil como a mí al escribirlo. 😄