4.1 Introducción a Python

4.1.1 ¿Qué es Python?

Python es un lenguaje creado por Guido van Rossum en 1991.
Se destaca por:

  • Sintaxis clara y legible
  • Tipado dinámico
  • Amplia biblioteca estándar
  • Gran ecosistema de paquetes
  • Multiplataforma

Python puede ejecutarse de diferentes maneras según la necesidad: - Desde la línea de comandos

python -c "print('Hola desde Python')"
  • En modo interactivo

Este entorno interactivo se conoce como REPL (Read, Eval, Print, Loop)

$ python3
Python 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Ahora se pueden escribir comandos:

>>> 2 + 2
4
>>> print("Hola")
Hola
>>> exit()
  • Ejecutando archivos .py
$ python archivo.py
  • Usando entornos interactivos como IPython
  • Empleando herramientas para generar una versión “compilada”

4.1.2 Primeros pasos: Hola Mundo

Podemos comenzar escribiendo nuestro primer programa:

print("Hola mundo")

Para ejecutarlo desde la terminal

python mi_programa.py

También es posible utilizarlo, al igual que R, de forma interactiva:

4.1.3 Sintáxis básica

Los comentarios se escriben con #:

# Esto es un comentario
print("Hola")

4.1.3.1 Variables y Tipos de Datos

Python no requiere declarar el tipo de las variables (tipado dinámico):

x = 10            # Entero (int / long)
pi = 3.1416       # Flotante (float / double)
nombre = "Ana"    # Cadena (string)
es_valido = True  # Booleano

Para mirar cuál es el tipo de dato de una variable se usa la función type:

print(type(x))
print(type(pi))
print(type(nombre))
print(type(es_valido))

Para solicitar una entrada de texto al usuario se usa la instrucción input:

nombre = input("Introduce tu nombre: ")

IMPORTANTE: input siempre devuelve un string aunque se introduzca un número. Si se quiere convertir a otro tipo de dato hay que hacerlo explícitamente:

edad = int(input("Edad: "))

Para imprimir un string, se puede formatear la salida. Indicando una “f” antes del string se indica que es una salida formateada y se pueden indicar variables entre corchetes “{ }”:

print(f"Nombre: {nombre}, Edad: {edad}")
print(f"{precio:.2f}"

Una variante más antigua es con el método format sobre el string:

print("Nombre: {}, Edad: {}".format(nombre, edad))
print("Nombre: {n}, Edad: {e}".format(n=nombre, e=edad))

Se puede usar un formato similar al de C (aún más antiguo)

print("Nombre: %s, Edad: %d" % (nombre, edad))

Y también concatenar strings:

print("Hola " + nombre)

4.1.3.2 Tuplas

Una tupla es una colección ordenada e inmutable de elementos.

  • Mantienen el orden de inserción.
  • No se pueden modificar (inmutables).
  • Pueden contener valores de distintos tipos.
  • Se usan frecuentemente para representar filas o registros de datos.
  • Se crean con paréntesis ( ).
tupla = ("Ana", 30, "Madrid")
print(tupla[0])   # Acceso por índice

La tupla es útil cuando necesitas una estructura fija que no cambiará (por ejemplo, una fila SQL).

El tipo más cercano en R es un vector (c(1, 2, 3)) si los datos son homogéneos o una lista (list("Ana", 30, "Madrid")) si son heterogéneos.

4.1.3.3 Listas

Una lista es una colección ordenada y mutable.

  • Mantienen el orden.
  • Sí pueden modificarse: agregar, borrar, reordenar, reemplazar elementos.
  • Pueden contener cualquier tipo de dato.
  • Se crean con corchetes [ ].
numeros = [1, 2, 3, 4]
numeros.append(5)
print(numeros)

numeros[0] = 5     # la lista queda: [5,2,3,4] 
numeros.append(17) # ahora la lista queda [5,2,3,4,17]
print(numeros)

La lista es útil cuando la colección va a crecer, modificarse o reordenarse.

4.1.3.4 Diccionarios

Un diccionario es una colección no ordenada (en versiones modernas, conserva el orden de inserción) de pares clave-valor.

  • Cada elemento tiene una clave única.
  • Permiten acceso muy rápido a los valores mediante la clave.
  • Se usan para representar datos estructurados, como registros con nombre.
  • Se crean con llaves { }.
persona = {"nombre": "Luis", "edad": 30}
print(persona["nombre"])
persona["edad"] = 31

El diccionario es útil cuando necesitas asociar valores a nombres o claves. También es interesante para acceder a filas SQL por nombre de atributo.

El tipo más cercano en R sería una lista nombrada: list(nombre = "Luis", edad = 30), o bien un environment:

env <- new.env()
env$nombre <- "Luis"
env$edad <- 30

También es similar un dataframe

df <- data.frame(nombre = "Luis", edad = 30)

4.1.3.5 Operadores

  • Operadores lógicos:
Operación Python R C
AND lógico and & (element-wise), && (control-flow) &&
OR lógico or | (element-wise), || (control-flow) ||
NOT lógico not ! !
  • Operadores bitwise:
Operación Python R C
AND bitwise & bitwAnd(a,b) &
OR bitwise | bitwOr(a,b) |
XOR bitwise ^ bitwXor(a,b) ^
NOT bitwise ~ bitwNot(a) ~
Shift izquierda << bitwShiftL(a,n) <<
Shift derecha >> bitwShiftR(a,n) >>

4.1.3.6 Indentación

Python usa la indentación para definir bloques de código. Esto es fundamental: si la indentación es incorrecta, el código no funciona.

La convención es usar 4 espacios por nivel (mejor que usar tabs).

if x > 5:
    print("x es mayor que 5")
    print("Esto sigue dentro del bloque")
print("Esto ya está fuera del bloque")

Ejemplo incorrecto (producirá un error):

if x > 5:
  print("Error por mezclar espacios")
    print("Indentación inconsistente")

4.1.3.7 Estructuras de control

  • Condicionales
edad = 18

if edad >= 18:
    print("Mayor de edad")
else:
    print("Menor de edad")
  • Bucle for
for i in range(5):
    print(i)
  • Bucle while
contador = 0
while contador < 5:
    print(contador)
    contador += 1

4.1.3.8 Funciones

def saludar(nombre):
    return f"Hola, {nombre}"

print(saludar("María"))

4.1.3.9 Errores Comunes de Sintaxis

  • Olvidar los dos puntos (:) al iniciar un bloque
  • Mezclar tabs y espacios
  • Indentación incorrecta

4.1.4 Librerías populares

Python cuenta con miles de bibliotecas. Para usar una biblioteca se utiliza “import …”, de forma análoga a “library(…)” en R.

import math
print(math.sqrt(16))

Algunas destacadas:

4.1.4.1 🔢 Ciencia de Datos

  • NumPy: Cálculo numérico y manejo de arreglos multidimensionales.
  • Pandas: Análisis y manipulación de datos mediante DataFrames.
  • SciPy: Funciones científicas y matemáticas avanzadas.
  • Matplotlib: Visualización básica y clásica.
  • Seaborn: Visualización estadística de alto nivel.
  • Plotly: Gráficos interactivos y dinámicos.
  • Statsmodels: Modelos estadísticos y econometría.

4.1.4.2 🤖 Machine Learning e Inteligencia Artificial

  • scikit-learn: Algoritmos tradicionales de machine learning.
  • TensorFlow: Deep learning desarrollado por Google.
  • PyTorch: Deep learning desarrollado por Meta.
  • Keras: API de alto nivel para redes neuronales.
  • XGBoost: Algoritmo de gradient boosting optimizado.
  • LightGBM: Boosting rápido para grandes datasets.
  • CatBoost: Boosting especializado en variables categóricas.

4.1.4.3 🧠 Procesamiento del Lenguaje Natural (NLP)

  • NLTK: Procesamiento de texto tradicional.
  • spaCy: NLP industrial rápido y eficiente.
  • Transformers (Hugging Face): Modelos modernos como BERT, GPT, etc.
  • Gensim: Modelado de tópicos y embeddings semánticos.

4.1.4.4 🌐 Desarrollo Web

  • Django: Framework completo para aplicaciones web.
  • Flask: Microframework web ligero y flexible.
  • FastAPI: Framework moderno y rápido para APIs (asíncrono).
  • Bottle: Alternativa aún más ligera a Flask.

4.1.4.5 🛠️ Utilidades y Herramientas

  • Requests: Manejo de peticiones HTTP.
  • BeautifulSoup: Análisis y extracción de datos HTML.
  • Selenium: Automatización de navegadores web.
  • PyTest: Framework de testing en Python.
  • Pillow (PIL): Manipulación de imágenes.
  • Click: Creación de interfaces de línea de comandos.

4.1.4.6 🧱 Desarrollo y Arquitectura

  • SQLAlchemy: ORM y manejo avanzado de bases de datos.
  • Pydantic: Validación de datos basada en tipos.
  • Celery: Ejecución de tareas distribuidas.
  • Redis-py: Cliente de Python para Redis.

4.1.4.7 🧪 Data Engineering y Big Data

  • PySpark: Uso de Apache Spark desde Python.
  • Dask: Computación distribuida para conjuntos grandes de datos.
  • Vaex: Manipulación de datos grandes sin cargarlos completamente en memoria.
  • Ray: Framework para computación distribuida y ML escalable.

4.1.4.8 📦 Librerías Estándar Muy Usadas

  • os: Interacción con el sistema operativo.
  • sys: Acceso directo al intérprete de Python.
  • json: Lectura y escritura de archivos JSON.
  • re: Manejo de expresiones regulares.
  • datetime: Manejo de fechas y horas.
  • subprocess: Ejecución de comandos externos.