03. Variables, Tipos de Datos y Operadores
Domina números, strings, listas, diccionarios y operadores fundamentales
Domina los bloques fundamentales de Python: variables, tipos de datos y operadores. Estos conceptos son la base de todo análisis de datos.
¿Qué es una variable?
Una variable es un contenedor que almacena datos. Piensa en ella como una caja etiquetada donde guardas información.
# Crear variables es simple en Python
nombre_empresa = "Tooldata"
ingresos_mensuales = 125000
tasa_crecimiento = 0.15
es_rentable = True
Reglas para nombrar variables
✅ Permitido:
nombre = "Juan"
nombre_completo = "Juan Pérez"
edad = 28
CONSTANTE_PI = 3.14159
_variable_privada = "dato interno"
nombre2 = "María"
❌ No permitido:
2nombre = "Error" # No puede empezar con número
nombre-completo = "Error" # No usar guiones (usar guión bajo)
class = "Error" # No usar palabras reservadas
nombre completo = "Error" # No espacios
Convenciones de nomenclatura
# snake_case (recomendado para Python)
total_ventas_anuales = 1500000
promedio_engagement_rate = 0.045
# camelCase (común en otros lenguajes, válido pero no preferido en Python)
totalVentasAnuales = 1500000
# MAYÚSCULAS para constantes
API_KEY = "sk-abc123"
MAX_INTENTOS = 3
💡 PEP 8: Python tiene una guía de estilo oficial llamada PEP 8 que recomienda usar
snake_casepara variables y funciones, yMAYÚSCULASpara constantes.
Tipos de datos fundamentales
Python tiene varios tipos de datos incorporados. Los más importantes para data analytics son:
1. Números (int y float)
# Enteros (int)
usuarios_activos = 15000
clics_totales = 2450000
edad = 28
# Flotantes (float)
precio = 99.99
tasa_conversion = 0.0345
temperatura = -15.5
# Verificar tipo de dato
print(type(usuarios_activos)) # <class 'int'>
print(type(precio)) # <class 'float'>
# Operaciones numéricas
total = usuarios_activos * precio
promedio = clics_totales / usuarios_activos
porcentaje = tasa_conversion * 100
print(f"Total: ${total:,.2f}")
print(f"Promedio: {promedio:.2f}")
print(f"Porcentaje: {porcentaje:.2f}%")
Resultado:
<class 'int'>
<class 'float'>
Total: $1,499,850.00
Promedio: 163.33
Porcentaje: 3.45%
2. Cadenas de texto (str)
# Diferentes formas de crear strings
nombre = 'Juan'
apellido = "Pérez"
mensaje = """Esto es un string
que abarca múltiples
líneas"""
# Concatenación
nombre_completo = nombre + " " + apellido
print(nombre_completo) # Juan Pérez
# f-strings (forma moderna y recomendada)
edad = 28
salario = 85000
presentacion = f"Hola, soy {nombre_completo}, tengo {edad} años y gano ${salario:,}"
print(presentacion)
# Hola, soy Juan Pérez, tengo 28 años y gano $85,000
# Métodos útiles de strings
texto = " data analytics con python "
print(texto.strip()) # "data analytics con python" (elimina espacios)
print(texto.upper()) # " DATA ANALYTICS CON PYTHON "
print(texto.lower()) # " data analytics con python "
print(texto.title()) # " Data Analytics Con Python "
print(texto.replace("python", "Python")) # Reemplaza texto
# Verificar contenido
email = "usuario@tooldata.io"
print(email.startswith("usuario")) # True
print(email.endswith(".com")) # False
print("@" in email) # True
3. Booleanos (bool)
# Valores booleanos
es_premium = True
tiene_descuento = False
mayor_de_edad = True
# Operadores de comparación
edad = 25
print(edad > 18) # True
print(edad == 18) # False
print(edad != 30) # True
print(edad >= 25) # True
# Operadores lógicos
tiene_email = True
acepto_terminos = True
puede_registrarse = tiene_email and acepto_terminos
print(puede_registrarse) # True
es_vip = False
es_nuevo = True
mostrar_descuento = es_vip or es_nuevo
print(mostrar_descuento) # True
activo = True
print(not activo) # False
4. Listas (list)
Las listas son colecciones ordenadas y modificables:
# Crear listas
ventas_diarias = [1200, 1450, 1100, 1800, 1950]
productos = ["Laptop", "Mouse", "Teclado", "Monitor"]
mixta = [100, "Texto", 3.14, True] # Pueden contener tipos diferentes
# Acceder a elementos (índice empieza en 0)
print(ventas_diarias[0]) # 1200 (primer elemento)
print(ventas_diarias[-1]) # 1950 (último elemento)
print(productos[1:3]) # ['Mouse', 'Teclado'] (slice)
# Modificar elementos
ventas_diarias[0] = 1300
print(ventas_diarias) # [1300, 1450, 1100, 1800, 1950]
# Métodos útiles de listas
ventas_diarias.append(2100) # Agregar al final
print(len(ventas_diarias)) # 6 (longitud)
print(sum(ventas_diarias)) # 9700 (suma total)
print(max(ventas_diarias)) # 2100 (máximo)
print(min(ventas_diarias)) # 1100 (mínimo)
# Operaciones con listas
numeros = [3, 1, 4, 1, 5, 9, 2, 6]
numeros.sort() # Ordenar
print(numeros) # [1, 1, 2, 3, 4, 5, 6, 9]
numeros.reverse() # Invertir
print(numeros) # [9, 6, 5, 4, 3, 2, 1, 1]
# List comprehension (forma avanzada de crear listas)
cuadrados = [x**2 for x in range(1, 6)]
print(cuadrados) # [1, 4, 9, 16, 25]
5. Diccionarios (dict)
Los diccionarios almacenan pares clave-valor (similares a objetos JSON):
# Crear diccionario
usuario = {
"nombre": "María García",
"edad": 32,
"email": "maria@empresa.com",
"es_premium": True,
"compras": 15
}
# Acceder a valores
print(usuario["nombre"]) # María García
print(usuario.get("edad")) # 32
print(usuario.get("telefono", "No disponible")) # No disponible (default)
# Modificar/agregar valores
usuario["edad"] = 33
usuario["ciudad"] = "Madrid"
print(usuario)
# Métodos útiles
print(usuario.keys()) # dict_keys(['nombre', 'edad', ...])
print(usuario.values()) # dict_values(['María García', 33, ...])
print(usuario.items()) # Pares clave-valor
# Caso de uso real: métricas de campaña
metricas_campaña = {
"impresiones": 150000,
"clics": 4500,
"conversiones": 180,
"costo_total": 1500,
"roi": 3.2
}
# Calcular CTR y CPC
ctr = (metricas_campaña["clics"] / metricas_campaña["impresiones"]) * 100
cpc = metricas_campaña["costo_total"] / metricas_campaña["clics"]
print(f"CTR: {ctr:.2f}%")
print(f"CPC: ${cpc:.2f}")
Resultado:
CTR: 3.00%
CPC: $0.33
6. Tuplas (tuple)
Las tuplas son como listas pero inmutables (no se pueden modificar):
# Crear tupla
coordenadas = (40.4168, -3.7038) # Latitud, Longitud de Madrid
dimensiones = (1920, 1080)
rgb_color = (255, 0, 128)
# Acceder a elementos
print(coordenadas[0]) # 40.4168
# Las tuplas NO se pueden modificar
# coordenadas[0] = 41.0 # Error: TypeError
# Uso común: retornar múltiples valores de funciones
def calcular_metricas(ventas):
total = sum(ventas)
promedio = total / len(ventas)
maximo = max(ventas)
return total, promedio, maximo # Retorna una tupla
ventas = [1200, 1450, 1100, 1800, 1950]
total, prom, max_venta = calcular_metricas(ventas)
print(f"Total: {total}, Promedio: {prom:.2f}, Máximo: {max_venta}")
Operadores en Python
Operadores aritméticos
# Operaciones básicas
a = 100
b = 30
print(a + b) # 130 (suma)
print(a - b) # 70 (resta)
print(a * b) # 3000 (multiplicación)
print(a / b) # 3.33 (división con decimales)
print(a // b) # 3 (división entera)
print(a % b) # 10 (módulo - resto de división)
print(a ** 2) # 10000 (potencia)
# Ejemplo práctico: calcular comisión
ventas_totales = 50000
tasa_comision = 0.05
comision = ventas_totales * tasa_comision
print(f"Comisión: ${comision:,.2f}") # Comisión: $2,500.00
# Incremento/decremento
contador = 10
contador += 5 # contador = contador + 5
print(contador) # 15
precio = 100
precio *= 1.10 # Aumentar 10%
print(precio) # 110.0
Operadores de comparación
# Comparaciones
x = 10
y = 20
print(x == y) # False (igual)
print(x != y) # True (diferente)
print(x > y) # False (mayor que)
print(x < y) # True (menor que)
print(x >= 10) # True (mayor o igual)
print(x <= 5) # False (menor o igual)
# Ejemplo: validar rango de edad
edad = 25
es_adulto = edad >= 18
es_senior = edad >= 65
puede_descuento_joven = 18 <= edad <= 25
print(f"Es adulto: {es_adulto}") # True
print(f"Es senior: {es_senior}") # False
print(f"Puede descuento joven: {puede_descuento_joven}") # True
Operadores lógicos
# AND, OR, NOT
tiene_stock = True
precio_accesible = True
puede_comprar = tiene_stock and precio_accesible
print(puede_comprar) # True
es_fin_semana = True
es_feriado = False
puede_relajarse = es_fin_semana or es_feriado
print(puede_relajarse) # True
sistema_activo = False
print(not sistema_activo) # True
# Ejemplo práctico: validación de registro
email = "usuario@empresa.com"
password = "Secure123!"
acepto_terminos = True
email_valido = "@" in email and len(email) > 5
password_fuerte = len(password) >= 8
puede_registrarse = email_valido and password_fuerte and acepto_terminos
print(f"¿Puede registrarse?: {puede_registrarse}") # True
Operadores de pertenencia
# in y not in
frutas = ["manzana", "banana", "naranja"]
print("manzana" in frutas) # True
print("uva" in frutas) # False
print("uva" not in frutas) # True
# Con strings
email = "contacto@tooldata.io"
print("@" in email) # True
print("tooldata" in email) # True
# Con diccionarios (verifica las claves)
usuario = {"nombre": "Juan", "edad": 28}
print("nombre" in usuario) # True
print("Juan" in usuario) # False (es un valor, no una clave)
Conversión entre tipos de datos
# String a número
edad_texto = "28"
edad_numero = int(edad_texto)
print(edad_numero + 2) # 30
precio_texto = "99.99"
precio_numero = float(precio_texto)
print(precio_numero * 1.10) # 109.989
# Número a string
cantidad = 100
mensaje = "Tienes " + str(cantidad) + " puntos"
print(mensaje) # Tienes 100 puntos
# Mejor con f-strings
mensaje = f"Tienes {cantidad} puntos"
print(mensaje)
# Lista a string
productos = ["Laptop", "Mouse", "Teclado"]
productos_str = ", ".join(productos)
print(productos_str) # Laptop, Mouse, Teclado
# String a lista
csv_data = "Juan,28,Madrid"
datos = csv_data.split(",")
print(datos) # ['Juan', '28', 'Madrid']
Ejercicio práctico: Análisis de campaña digital
Apliquemos todo lo aprendido en un caso real:
# Datos de campaña de marketing
campaña = {
"nombre": "Black Friday 2024",
"presupuesto": 5000,
"impresiones": 250000,
"clics": 7500,
"conversiones": 300,
"valor_conversion": 150
}
# Calcular métricas clave
ctr = (campaña["clics"] / campaña["impresiones"]) * 100
conversion_rate = (campaña["conversiones"] / campaña["clics"]) * 100
cpc = campaña["presupuesto"] / campaña["clics"]
ingresos = campaña["conversiones"] * campaña["valor_conversion"]
roi = ((ingresos - campaña["presupuesto"]) / campaña["presupuesto"]) * 100
# Análisis de rendimiento
ctr_objetivo = 2.5
conversion_objetivo = 3.0
cumple_ctr = ctr >= ctr_objetivo
cumple_conversion = conversion_rate >= conversion_objetivo
campaña_exitosa = cumple_ctr and cumple_conversion and roi > 0
# Reporte
print("=" * 50)
print(f"REPORTE DE CAMPAÑA: {campaña['nombre']}")
print("=" * 50)
print(f"Presupuesto: ${campaña['presupuesto']:,}")
print(f"Impresiones: {campaña['impresiones']:,}")
print(f"Clics: {campaña['clics']:,}")
print(f"Conversiones: {campaña['conversiones']}")
print()
print("MÉTRICAS CALCULADAS:")
print(f"CTR: {ctr:.2f}% (Objetivo: {ctr_objetivo}%)")
print(f"Conversion Rate: {conversion_rate:.2f}% (Objetivo: {conversion_objetivo}%)")
print(f"CPC: ${cpc:.2f}")
print(f"Ingresos generados: ${ingresos:,}")
print(f"ROI: {roi:.1f}%")
print()
print("ANÁLISIS:")
print(f"✓ Cumple CTR: {cumple_ctr}")
print(f"✓ Cumple Conversión: {cumple_conversion}")
print(f"🎯 Campaña exitosa: {campaña_exitosa}")
Resultado:
==================================================
REPORTE DE CAMPAÑA: Black Friday 2024
==================================================
Presupuesto: $5,000
Impresiones: 250,000
Clics: 7,500
Conversiones: 300
MÉTRICAS CALCULADAS:
CTR: 3.00% (Objetivo: 2.5%)
Conversion Rate: 4.00% (Objetivo: 3.0%)
CPC: $0.67
Ingresos generados: $45,000
ROI: 800.0%
ANÁLISIS:
✓ Cumple CTR: True
✓ Cumple Conversión: True
🎯 Campaña exitosa: True
Buenas prácticas
1. Nombres de variables descriptivos
❌ Mal:
x = 1500
y = 0.045
z = x * y
✅ Bien:
inversion_marketing = 1500
tasa_conversion = 0.045
conversiones_esperadas = inversion_marketing * tasa_conversion
2. Usar constantes para valores fijos
# Definir constantes al inicio
IVA = 0.21
DESCUENTO_PREMIUM = 0.15
MAX_INTENTOS_LOGIN = 3
# Usar en el código
precio_base = 100
precio_con_iva = precio_base * (1 + IVA)
3. Comentarios útiles
# ❌ Comentario obvio
edad = 25 # Asignar 25 a edad
# ✅ Comentario que agrega valor
edad = 25 # Edad mínima para descuento corporativo
Resumen de la lección
✅ Las variables son contenedores de datos con nombres descriptivos ✅ Los tipos de datos principales son: int, float, str, bool, list, dict, tuple ✅ Los operadores permiten realizar cálculos, comparaciones y operaciones lógicas ✅ Puedes convertir entre tipos de datos según sea necesario ✅ Los f-strings son la forma moderna de formatear strings en Python ✅ Los diccionarios son ideales para representar datos estructurados ✅ Las listas son perfectas para colecciones de datos del mismo tipo
🎯 Próxima lección: 04. Estructuras de Control: if, for, while
En la siguiente lección aprenderás a controlar el flujo de tus programas con condicionales y bucles. 🚀
¿Completaste esta lección?
Marca esta lección como completada. Tu progreso se guardará en tu navegador.