Manual Python
Manual Python
Manual de Python
Carmen Reina
Enero 2026
[Link]
Índice de Contenidos
1. Introducción a Python
2. Fundamentos de Python
3. Python Avanzado
5. NumPy Avanzado
7. Pandas Avanzado
2
1. Introducción a Python
Este manual es una guía completa de Python y sus librerías fundamentales para el Machine
Learning, diseñada específicamente para los alumnos de la Microcredencial en Machine Learning y
Modelos de Lenguaje de la UNED. El objetivo es proporcionar una base sólida que os permita seguir
el curso con fluidez, incluso si vuestra experiencia previa en programación es limitada.
• Sintaxis Clara: Es fácil de leer y escribir, lo que acelera el desarrollo y reduce errores.
• Ecosistema Rico: Dispone de una vasta colección de librerías especializadas como NumPy,
Pandas, Scikit-learn, TensorFlow, PyTorch y Transformers.
• Acceso a GPUs: Ofrece GPUs y TPUs gratuitas para acelerar el entrenamiento de modelos.
3
# Verificar la versión de Python instalada
python --version
4
2. Fundamentos de Python
2.1. Variables y Tipos de Datos
En Python, no es necesario declarar el tipo de una variable. El tipo se asigna dinámicamente en
tiempo de ejecución. Python es un lenguaje de tipado dinámico y fuerte.
# Variables numéricas
numero_entero = 10 # int
numero_complejo = 3 + 4j # complex
# Booleano
es_verdadero = True
es_falso = False
# Verificar tipos
5
2.2. Operadores
Python soporta diversos tipos de operadores para realizar operaciones aritméticas, comparaciones
y operaciones lógicas.
Operadores Aritméticos
a = 10
b = 3
print(f"Suma: {a + b}") # 13
print(f"Resta: {a - b}") # 7
print(f"Multiplicación: {a * b}") # 30
print(f"Módulo: {a % b}") # 1
Operadores de Comparación
x = 5
y = 10
6
print(f"x >= y: {x >= y}") # False
Operadores Lógicos
p = True
q = False
# Evaluación de cortocircuito
Listas
Las listas son colecciones ordenadas y modificables que pueden contener elementos de diferentes
tipos.
7
print(modulos[-1]) # "LLMs" (último elemento)
# Modificar elementos
# Añadir elementos
[Link]("Agentes Inteligentes")
[Link](0, "Introducción")
# Eliminar elementos
[Link]("Introducción")
# Slicing (rebanado)
primeros_dos = modulos[0:2]
desde_segundo = modulos[1:]
hasta_penultimo = modulos[:-1]
# Longitud de la lista
if "LLMs" in modulos:
8
Tuplas
Las tuplas son similares a las listas, pero son inmutables (no se pueden modificar después de
crearlas).
# Acceder a elementos
latitud = coordenadas[0]
longitud = coordenadas[1]
# Desempaquetado de tuplas
tupla_un_elemento = (42,)
def obtener_estadisticas(numeros):
9
Diccionarios
Los diccionarios son colecciones de pares clave-valor, muy útiles para almacenar datos
estructurados.
# Crear un diccionario
alumno = {
"edad": 30,
# Acceder a valores
print(alumno["nombre"])
# Modificar valores
alumno["edad"] = 31
alumno["email"] = "ana@[Link]"
# Eliminar pares
del alumno["email"]
edad = [Link]("edad")
10
# Iterar sobre un diccionario
print(f"{clave}: {valor}")
claves = [Link]()
valores = [Link]()
# Diccionarios anidados
curso = {
"modulos": {
"m1": "Fundamentos",
"m2": "Supervisado",
"m3": "LLMs"
print(curso["modulos"]["m3"]) # "LLMs"
Conjuntos (Sets)
Los conjuntos son colecciones desordenadas de elementos únicos, útiles para eliminar duplicados
y operaciones matemáticas de conjuntos.
# Crear un conjunto
lenguajes = {"Python", "R", "Julia", "Python"} # "Python" aparece solo una vez
11
# Añadir y eliminar elementos
[Link]("Scala")
[Link]("R")
# Operaciones de conjuntos
# Unión
# Intersección
# Diferencia
12
2.4. Estructuras de Control
Condicionales
nota = 7.5
if nota >= 9:
calificacion = "Sobresaliente"
calificacion = "Notable"
calificacion = "Aprobado"
else:
calificacion = "Suspenso"
print(f"Calificación: {calificacion}")
# Operador ternario
# Condiciones múltiples
edad = 25
tiene_carnet = True
print("Puede conducir")
13
Bucles For
print(f"Estudiando: {modulo}")
for i in range(5):
print(i) # 0, 1, 2, 3, 4
print(f"{clave}: {valor}")
14
Bucles While
contador = 0
print(f"Contador: {contador}")
contador += 1
# Break y continue
if num == 3:
if num == 8:
print(num)
i = 0
while i < 5:
i += 1
else:
2.5. Funciones
Las funciones permiten encapsular código reutilizable y organizar mejor los programas.
15
# Función básica
def saludar(nombre):
mensaje = saludar("Ana")
print(mensaje)
def calcular_media(numeros):
if not numeros:
return 0
return {
"nombre": nombre,
"edad": edad,
"curso": curso
16
# Argumentos arbitrarios (*args)
def sumar_todos(*numeros):
return sum(numeros)
total = sumar_todos(1, 2, 3, 4, 5)
def mostrar_info(**datos):
print(f"{clave}: {valor}")
# Try-except básico
try:
resultado = 10 / 0
except ZeroDivisionError:
17
try:
numero = int("abc")
except ValueError:
except TypeError:
try:
resultado = operacion_riesgosa()
except Exception as e:
# Try-except-else-finally
try:
contenido = [Link]()
except FileNotFoundError:
else:
finally:
# Lanzar excepciones
18
def dividir(a, b):
if b == 0:
return a / b
19
3. Python Avanzado
3.1. Comprensiones de Listas
Las comprensiones de listas (list comprehensions) son una forma concisa y elegante de crear listas
en Python.
# Forma tradicional
cuadrados = []
for x in range(10):
[Link](x ** 2)
# Con condición
# Comprensiones anidadas
20
plana = [num for fila in matriz for num in fila]
# [1, 2, 3, 4, 5, 6]
# Comprensión de diccionario
# Invertir un diccionario
# Comprensión de conjunto
numeros = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
# {1, 2, 3, 4}
# Filtrar diccionario
# {'c': 3, 'd': 4}
21
3.3. Funciones Lambda
Las funciones lambda son funciones anónimas de una sola expresión, útiles para operaciones
simples.
cuadrado = lambda x: x ** 2
print(cuadrado(5)) # 25
suma = lambda a, b: a + b
print(suma(3, 4)) # 7
alumnos = [
22
# Uso con reduce()
3.4. Generadores
Los generadores son funciones que producen una secuencia de valores de forma perezosa (lazy
evaluation), ahorrando memoria.
def contador(n):
i = 0
while i < n:
yield i
i += 1
# Usar el generador
print(num)
# Generador infinito
def numeros_pares():
23
n = 0
while True:
yield n
n += 2
gen = numeros_pares()
print(next(gen)) # 0
print(next(gen)) # 2
print(next(gen)) # 4
def leer_archivo_grande(ruta):
for linea in f:
yield [Link]()
3.5. Decoradores
Los decoradores son funciones que modifican el comportamiento de otras funciones, muy útiles
para logging, timing, validación, etc.
# Decorador básico
def mi_decorador(func):
print(f"Llamando a {func.__name__}")
24
print(f"Función {func.__name__} completada")
return resultado
return wrapper
@mi_decorador
def saludar(nombre):
import time
def medir_tiempo(func):
inicio = [Link]()
fin = [Link]()
return resultado
return wrapper
@medir_tiempo
def operacion_lenta():
[Link](1)
return "Completado"
25
# Decorador con parámetros
def repetir(veces):
def decorador(func):
for _ in range(veces):
return resultado
return wrapper
return decorador
@repetir(3)
def saludar():
print("Hola!")
[Link]("Hola, mundo!")
class MiContextManager:
def __enter__(self):
print("Entrando al contexto")
26
return self
return False
@contextmanager
def medir_tiempo():
inicio = [Link]()
yield
fin = [Link]()
with medir_tiempo():
[Link](0.5)
27
4. NumPy: Computación Numérica
NumPy (Numerical Python) es la librería fundamental para la computación científica en Python. Su
principal objeto es el ndarray (array n-dimensional), que es mucho más rápido y eficiente que las
listas de Python para operaciones numéricas.
import numpy as np
a = [Link]([1, 2, 3, 4, 5])
print(f"Tipo: {[Link]}")
print(f"Forma: {[Link]}")
print(f"Matriz 2D:\n{b}")
# Arrays especiales
28
full = [Link]((2, 3), 7) # Matriz llena de 7s
# Secuencias
# Arrays aleatorios
# Array 1D
a = [Link]([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# Array 2D
29
print(b[0, 0]) # Elemento (0,0): 1
# Indexación booleana
a = [Link]([1, 2, 3, 4, 5])
mask = a > 3
print(a[mask]) # [4, 5]
print(a[indices]) # [1, 3, 5]
a = [Link]([1, 2, 3, 4, 5])
30
print([Link](a)) # [1., 1.41, 1.73, 2., 2.24]
# Funciones de agregación
print([Link](a)) # 15
print([Link](a)) # 3.0
print([Link](a)) # 1.41
print([Link](a)) # 1
print([Link](a)) # 5
# Operaciones de comparación
a = [Link](12)
# Reshape
31
b = [Link](3, 4)
print(b)
# [[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]]
print([Link]) # (2, 6)
# Aplanar
d = [Link]() # Copia
# Transponer
print(b.T)
# Añadir dimensiones
f = [Link]([1, 2, 3])
print([Link]) # (3,)
# Concatenar arrays
32
y = [Link]([[5, 6], [7, 8]])
33
5. NumPy Avanzado
5.1. Broadcasting
Broadcasting es una técnica que permite a NumPy realizar operaciones entre arrays de diferentes
formas de manera eficiente.
# Broadcasting básico
a = [Link]([1, 2, 3])
b = 2
print(a * b) # [2, 4, 6]
print(matriz + vector)
# [[2, 2, 4],
# [5, 5, 7],
# [8, 8, 10]]
media = [Link](axis=0)
std = [Link](axis=0)
34
# Broadcasting con diferentes formas
a = [Link](3).reshape(3, 1) # (3, 1)
b = [Link](3) # (3,)
print(a + b)
# [[0, 1, 2],
# [1, 2, 3],
# [2, 3, 4]]
# Producto punto
a = [Link]([1, 2, 3])
b = [Link]([4, 5, 6])
print([Link](a, b)) # 32
# Producto matricial
print([Link](A, B)) # o A @ B
# [[19, 22],
# [43, 50]]
# Determinante
print([Link](A)) # -2.0
35
# Inversa
print([Link](A))
# Autovalores y autovectores
b = [Link]([9, 8])
x = [Link](A, b)
# Descomposición SVD
U, s, Vt = [Link](A)
# Norma
print([Link](a)) # Norma L2
# Funciones trigonométricas
print([Link](angulos))
print([Link](angulos))
36
# Funciones exponenciales y logarítmicas
x = [Link]([1, 2, 3])
print([Link](x)) # e^x
print([Link](x)) # ln(x)
print(np.log10(x)) # log10(x)
# Funciones de redondeo
# Funciones de comparación
a = [Link]([1, 5, 3, 8, 2])
b = [Link]([2, 4, 3, 7, 5])
# Funciones especiales
# Generar datos
37
[Link](42)
datos = [Link](1000)
# Estadísticas descriptivas
print(f"Media: {[Link](datos):.4f}")
print(f"Mediana: {[Link](datos):.4f}")
print(f"Varianza: {[Link](datos):.4f}")
print(f"Mínimo: {[Link](datos):.4f}")
print(f"Máximo: {[Link](datos):.4f}")
# Percentiles
# Correlación
x = [Link](100)
y = 2 * x + [Link](100) * 0.5
correlacion = [Link](x, y)
# Histograma
38
39
6. Pandas: Manipulación de Datos
Pandas es la librería esencial para la manipulación y análisis de datos tabulares en Python.
Introduce dos estructuras de datos principales: Series (1D) y DataFrame (2D).
6.1. Series
import pandas as pd
s = [Link]([1, 3, 5, 7, 9])
print(s)
print(notas)
print(notas["Ana"]) # 8.5
s = [Link](datos)
print([Link]()) # Media
print([Link]()) # Máximo
40
6.2. DataFrames
datos = {
df = [Link](datos)
print(df)
# Información básica
print([Link]) # (4, 4)
# Acceder a columnas
# Acceder a filas
41
print([Link][0:2]) # Primeras dos filas
# Leer CSV
df = pd.read_csv("[Link]")
# Opciones de lectura
df = pd.read_csv("[Link]",
sep=";", # Separador
# Escribir CSV
df.to_csv("[Link]", index=False)
# Leer/escribir Excel
df = pd.read_excel("[Link]", sheet_name="Hoja1")
42
df.to_excel("[Link]", index=False)
# Leer/escribir JSON
df = pd.read_json("[Link]")
df.to_json("[Link]", orient="records")
url = "[Link]
df = pd.read_csv(url)
print(mayores_30)
# Múltiples condiciones
resultado = df[filtro]
# Usar query()
43
resultado = df[df["Ciudad"].isin(ciudades)]
resultado = df[df["Nombre"].[Link]("a")]
resultado = df[df["Nombre"].[Link]("A")]
texto = df.select_dtypes(include=["object"])
# Añadir columna
# Modificar valores
# Renombrar columnas
# Eliminar columnas
44
df = [Link](columns=["Bonus"])
# Eliminar filas
df = [Link](index=[0, 1])
# Ordenar
df = df.sort_values("Salario", ascending=False)
df = df.sort_values(["Ciudad", "Salario"])
# Resetear índice
df = df.reset_index(drop=True)
45
7. Pandas Avanzado
7.1. Valores Nulos
# Interpolar valores
df["Valor"] = df["Valor"].interpolate()
# Datos de ejemplo
46
ventas = [Link]({
})
# Agrupar y agregar
por_producto = [Link]("Producto")["Ventas"].sum()
print(por_producto)
# Múltiples agregaciones
resumen = [Link]("Producto").agg({
})
def rango(x):
resumen = [Link]("Producto")["Ventas"].agg(rango)
47
# Transform (mantiene la forma original)
ventas["Ventas_Media_Producto"] = [Link]("Producto")["Ventas"].transform("mean")
# DataFrames de ejemplo
clientes = [Link]({
})
pedidos = [Link]({
})
48
resultado = [Link](clientes, pedidos, on="cliente_id", how="right")
left_on="cliente_id",
right_on="cliente_id")
# Concatenar DataFrames
# Pivot table
pivot = ventas.pivot_table(
values="Ventas",
index="Producto",
columns="Region",
aggfunc="sum",
fill_value=0
49
print(pivot)
pivot = ventas.pivot_table(
values=["Ventas", "Cantidad"],
index="Producto",
columns="Region",
df_largo = [Link](pivot.reset_index(),
id_vars=["Producto"],
var_name="Region",
value_name="Ventas")
df["Nombre_Upper"] = df["Nombre"].apply([Link])
def categorizar_edad(edad):
return "Joven"
50
elif edad < 50:
return "Adulto"
else:
return "Senior"
df["Categoria"] = df["Edad"].apply(categorizar_edad)
def calcular_total(row):
df["Codigo_Ciudad"] = df["Ciudad"].map(mapeo)
# Replace
51
8. Matplotlib: Visualización Básica
Matplotlib es la librería base para crear visualizaciones estáticas en Python. Proporciona control
total sobre cada aspecto de los gráficos.
import numpy as np
# Datos
y1 = [Link](x)
y2 = [Link](x)
# Gráfico básico
[Link](figsize=(10, 6))
[Link]("X", fontsize=12)
[Link]("Y", fontsize=12)
[Link]()
[Link](True, alpha=0.3)
[Link]()
52
# Múltiples subplots
axes[0, 0].set_title("Seno")
axes[0, 1].set_title("Coseno")
axes[1, 0].plot(x, y1 ** 2)
axes[1, 0].set_title("Seno²")
axes[1, 1].plot(x, y2 ** 2)
axes[1, 1].set_title("Coseno²")
plt.tight_layout()
[Link]()
# Datos
53
[Link](figsize=(8, 5))
[Link]("Categoría")
[Link]("Ventas")
[Link]()
[Link](figsize=(8, 5))
[Link]("Ventas")
[Link]("Categoría")
[Link]()
# Barras agrupadas
x = [Link](len(categorias))
width = 0.35
ax.set_xticks(x)
54
ax.set_xticklabels(categorias)
[Link]()
[Link]()
# Datos aleatorios
[Link](42)
datos = [Link](1000)
# Histograma básico
[Link](figsize=(10, 6))
[Link]("Distribución Normal")
[Link]("Valor")
[Link]("Frecuencia")
[Link]()
[Link]()
[Link](figsize=(10, 6))
[Link]()
55
# Múltiples histogramas
datos1 = [Link](1000)
datos2 = [Link](1000) + 2
[Link](figsize=(10, 6))
[Link]()
[Link]()
# Datos
[Link](42)
x = [Link](100)
y = 2 * x + [Link](100) * 0.5
colores = [Link](100)
# Scatter básico
[Link](figsize=(10, 6))
[Link](x, y, alpha=0.7)
[Link]("X")
56
[Link]("Y")
[Link]()
[Link](figsize=(10, 6))
[Link](scatter, label="Color")
[Link]()
57
9. Seaborn: Visualización Estadística
Seaborn está construida sobre Matplotlib y proporciona una interfaz de alto nivel para crear gráficos
estadísticos atractivos con menos código.
# Configurar estilo
# Paletas de colores
# Configuración personalizada
sns.set_theme(
style="whitegrid",
palette="deep",
font_scale=1.2
# Datos
[Link](42)
datos = [Link](1000)
58
# Histograma con KDE
[Link](figsize=(10, 6))
[Link]()
# Solo KDE
[Link](figsize=(10, 6))
[Link]("Estimación de Densidad")
[Link]()
df = [Link]({
})
[Link](figsize=(10, 6))
[Link]()
59
# Datos de ejemplo
tips = sns.load_dataset("tips")
# Box plot
[Link](figsize=(10, 6))
[Link]()
# Violin plot
[Link](figsize=(10, 6))
[Link]("Distribución de Propinas")
[Link]()
# Strip plot
[Link](figsize=(10, 6))
[Link]("Propinas Individuales")
[Link]()
[Link](figsize=(10, 6))
60
[Link]()
[Link](figsize=(10, 6))
[Link]()
[Link]()
iris = sns.load_dataset("iris")
[Link](iris, hue="species")
[Link]()
# Joint plot
[Link]()
9.5. Heatmaps
61
# Matriz de correlación
iris = sns.load_dataset("iris")
[Link](figsize=(8, 6))
fmt=".2f", linewidths=0.5)
[Link]()
# Heatmap de datos
[Link](figsize=(12, 6))
xticklabels=meses)
[Link]("Datos Mensuales")
[Link]()
62
10. Scikit-learn: Machine Learning
Scikit-learn es la librería de referencia para Machine Learning en Python. Ofrece una API
consistente para preprocesamiento, clasificación, regresión, clustering y evaluación de modelos.
# 1. Cargar datos
iris = load_iris()
X, y = [Link], [Link]
# 3. Preprocesar (escalar)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = [Link](X_test)
63
# 4. Entrenar modelo
model = LogisticRegression(random_state=42)
[Link](X_train_scaled, y_train)
# 5. Predecir
y_pred = [Link](X_test_scaled)
# 6. Evaluar
print(classification_report(y_test, y_pred))
10.2. Preprocesamiento
LabelEncoder, OneHotEncoder
# Escalado
X_scaled = scaler.fit_transform(X_train)
64
X_test_scaled = [Link](X_test)
X_imputed = imputer.fit_transform(X)
le = LabelEncoder()
ohe = OneHotEncoder(sparse_output=False)
10.3. Regresión
# Datos de ejemplo
65
# Regresión Lineal
lr = LinearRegression()
[Link](X_train, y_train)
y_pred = [Link](X_test)
ridge = Ridge(alpha=1.0)
[Link](X_train, y_train)
lasso = Lasso(alpha=0.1)
[Link](X_train, y_train)
rf = RandomForestRegressor(n_estimators=100, random_state=42)
[Link](X_train, y_train)
10.4. Clasificación
66
from [Link] import RandomForestClassifier
# Datos
data = load_breast_cancer()
X, y = [Link], [Link]
# Logistic Regression
lr = LogisticRegression(max_iter=1000)
[Link](X_train, y_train)
# Decision Tree
dt = DecisionTreeClassifier(max_depth=5, random_state=42)
[Link](X_train, y_train)
# Random Forest
rf = RandomForestClassifier(n_estimators=100, random_state=42)
[Link](X_train, y_train)
# SVM
[Link](X_train, y_train)
67
# KNN
knn = KNeighborsClassifier(n_neighbors=5)
[Link](X_train, y_train)
# Comparar modelos
y_pred = [Link](X_test)
print(f"{nombre}: {acc:.4f}")
68
11. Scikit-learn Avanzado
11.1. Validación Cruzada
# Cross-validation básica
# KFold personalizado
# Múltiples métricas
resultados = cross_validate(
rf, X, y, cv=5,
return_train_score=True
69
for metrica, valores in [Link]():
print(f"{metrica}: {[Link]():.4f}")
# Grid Search
param_grid = {
"min_samples_leaf": [1, 2, 4]
grid_search = GridSearchCV(
RandomForestClassifier(random_state=42),
param_grid,
cv=5,
scoring="accuracy",
n_jobs=-1,
verbose=1
70
grid_search.fit(X_train, y_train)
param_dist = {
random_search = RandomizedSearchCV(
RandomForestClassifier(random_state=42),
param_dist,
n_iter=50,
cv=5,
scoring="accuracy",
n_jobs=-1,
random_state=42
71
random_search.fit(X_train, y_train)
11.3. Pipelines
# Pipeline simple
pipeline = Pipeline([
("scaler", StandardScaler()),
("classifier", RandomForestClassifier(random_state=42))
])
[Link](X_train, y_train)
y_pred = [Link](X_test)
num_features = [0, 1, 2]
cat_features = [3, 4]
preprocessor = ColumnTransformer(
transformers=[
72
("num", StandardScaler(), num_features),
pipeline = Pipeline([
("preprocessor", preprocessor),
("classifier", RandomForestClassifier())
])
param_grid = {
grid_search.fit(X_train, y_train)
73
# Métricas básicas
y_pred = [Link](X_test)
# Matriz de confusión
cm = confusion_matrix(y_test, y_pred)
print("Matriz de Confusión:")
print(cm)
y_proba = model.predict_proba(X_test)[:, 1]
print(f"ROC-AUC: {auc:.4f}")
# Curva ROC
[Link](figsize=(8, 6))
74
[Link](fpr, tpr, label=f"AUC = {auc:.4f}")
[Link]("Curva ROC")
[Link]()
[Link]()
75
12. Introducción a Transformers
La librería Transformers de Hugging Face proporciona acceso a miles de modelos pre-entrenados
para tareas de Procesamiento del Lenguaje Natural (NLP), visión por computador y más.
# Instalar transformers
# Importar la librería
# Verificar instalación
import transformers
# Análisis de sentimiento
sentiment_analyzer = pipeline("sentiment-analysis")
print(resultado)
76
# Clasificación de texto
classifier = pipeline("zero-shot-classification")
resultado = classifier(
print(resultado)
# Generación de texto
print(resultado[0]["generated_text"])
# Resumen de texto
summarizer = pipeline("summarization")
texto_largo = '''
building systems that learn from data. These systems can improve their
to computer vision.
'''
print(resumen[0]["summary_text"])
77
12.3. Modelos y Tokenizers
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
# Tokenizar texto
# Decodificar tokens
decoded = [Link](tokens['input_ids'][0])
print(f"Decoded: {decoded}")
# Obtener embeddings
import torch
with torch.no_grad():
outputs = model(**tokens)
embeddings = outputs.last_hidden_state
78
12.4. Fine-tuning Básico
AutoModelForSequenceClassification,
TrainingArguments,
Trainer
# Cargar dataset
dataset = load_dataset("imdb")
model = AutoModelForSequenceClassification.from_pretrained(
"bert-base-uncased",
num_labels=2
# Tokenizar dataset
def tokenize_function(examples):
# Configurar entrenamiento
training_args = TrainingArguments(
79
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=8,
per_device_eval_batch_size=8,
warmup_steps=500,
weight_decay=0.01,
logging_dir="./logs",
# Crear Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets["train"].shuffle(seed=42).select(range(1000)),
eval_dataset=tokenized_datasets["test"].shuffle(seed=42).select(range(100)),
# [Link]()
80
13. Buenas Prácticas y Consejos
13.1. Organización del Código
Una buena organización del código facilita su mantenimiento y colaboración con otros
desarrolladores.
# proyecto/
# ├── data/
# │ ├── raw/
# │ └── processed/
# ├── notebooks/
# │ └── [Link]
# ├── src/
# │ ├── __init__.py
# │ ├── data_processing.py
# │ ├── [Link]
# │ ├── [Link]
# │ └── [Link]
# ├── tests/
# │ └── test_models.py
# ├── [Link]
# └── [Link]
# src/data_processing.py
81
import pandas as pd
import numpy as np
def cargar_datos(ruta):
df = pd.read_csv(ruta)
df = [Link]()
return df
scaler = StandardScaler()
df[columnas_numericas] = scaler.fit_transform(df[columnas_numericas])
13.2. Documentación
"""
Parameters
----------
82
X : array-like of shape (n_samples, n_features)
Matriz de características.
Vector de etiquetas.
**kwargs : dict
Returns
-------
model : estimator
Modelo entrenado.
Examples
--------
>>> y = [0, 1, 0]
"""
if modelo == "rf":
model = RandomForestClassifier(**kwargs)
83
model = LogisticRegression(**kwargs)
else:
[Link](X, y)
return model
13.3. Reproducibilidad
import numpy as np
import random
import os
def establecer_semillas(seed=42):
[Link](seed)
[Link](seed)
[Link]["PYTHONHASHSEED"] = str(seed)
# Para PyTorch
# import torch
# torch.manual_seed(seed)
# [Link].manual_seed_all(seed)
# Para TensorFlow
84
# import tensorflow as tf
# [Link].set_seed(seed)
establecer_semillas(42)
config = {
"seed": 42,
"test_size": 0.2,
"model": "RandomForest",
"n_estimators": 100,
"max_depth": 10
import json
[Link](config, f, indent=2)
# Liberar memoria
import gc
85
del df_grande
[Link]()
df["columna_float"] = df["columna_float"].astype("float32")
procesar(chunk)
def procesar_lineas(archivo):
with open(archivo) as f:
for linea in f:
yield procesar_linea(linea)
import logging
# Configurar logging
[Link](
level=[Link],
86
handlers=[
[Link]("[Link]"),
[Link]()
logger = [Link](__name__)
[Link]("Iniciando entrenamiento...")
try:
model = RandomForestClassifier()
[Link](X, y)
return model
except Exception as e:
raise
87
Conclusión
Este manual ha cubierto los conceptos fundamentales y avanzados de Python y sus librerías
esenciales para el Machine Learning. Desde los fundamentos del lenguaje hasta técnicas
avanzadas de Scikit-learn y una introducción a los Transformers, ahora tenéis las herramientas
necesarias para abordar los proyectos del curso.
88