Este repositorio contiene una colección de notebooks de Jupyter con ejercicios, exámenes parciales y finales de cursos de Python, cubriendo desde conceptos básicos hasta temas avanzados de análisis de datos y machine learning.
Archivo: Victor Guzman - XIV_python_basico_Final.ipynb
-
Pregunta 1 (10 puntos): Extracción de información de bases de datos NoSQL
- Manejo de diccionarios anidados
- Consultas dinámicas de datos
- Validación de campos y manejo de valores faltantes
-
Pregunta 2 (5 puntos): Sistema de evaluación de perfil
- Implementación de validación de respuestas
- Lógica de decisión basada en múltiples criterios
- Manejo de entrada de usuario
-
Pregunta 3 (5 puntos): Sistema de recomendación de productos
- Estructuras condicionales (if/elif/else)
- Matching de patrones
- Manejo de strings
# Ejemplo: Extracción de datos de base NoSQL
def extraer_informacion(base_de_datos):
num_columnas = int(input("Ingrese la cantidad de columnas a extraer: "))
campos_solicitados = []
for i in range(num_columnas):
campo = input(f"Ingrese el nombre del campo {i + 1}: ")
campos_solicitados.append(campo)
# Extracción y formato de datos
resultados = []
for documento in base_de_datos:
resultado_documento = {}
for campo in campos_solicitados:
valor = documento.get(campo, '-')
resultado_documento[campo] = valor
if any(valor != '-' for valor in resultado_documento.values()):
resultados.append(resultado_documento)Archivo: Victor Guzman - XIV_python_basico_parcial.ipynb
-
Pregunta 1 (6 puntos): Bucle acumulador
- Acumulación de números hasta alcanzar una suma objetivo
- Control de flujo con while
-
Pregunta 2 (7 puntos): Sistema de evaluación de notas
- Condicionales múltiples
- Evaluación de rendimiento académico
-
Pregunta 3 (7 puntos): Enmascaramiento de datos personales
- Manipulación de strings
- Protección de información sensible
- Formateo de salida
# Enmascaramiento de datos personales
nombre = input("Ingrese su nombre: ")
correo = input("Ingrese su correo: ")
telefono = input("Ingrese su número de teléfono: ")
# Mostrar parcialmente los datos
nombre_par = nombre[0] + "*" * (len(nombre) - 1)
telefono_par = telefono[:3] + "*" * (len(telefono) - 3)
correo_par = correo[:3] + "*" * (correo.index('@') - 3) + correo[correo.index('@'):]
mensaje = f"Estimado {nombre_par}, se registró su número {telefono_par} y su correo {correo_par}"
print(mensaje)Archivo: Victor Guzman - XIV_Python_parcial.ipynb
Librerías utilizadas:
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltPregunta 1 (5 puntos): Cálculo de tasa de desempleo
- Agrupación de datos por año y género
- Cálculo de tasas porcentuales
- Análisis de tendencias temporales
Pregunta 2 (7 puntos): Función de rango personalizada
- Definición de funciones de agregación
- Uso de pivot tables
- Análisis estadístico (max - min)
Pregunta 3 (5 puntos): Cálculo de moda por grupos
- Estadísticas descriptivas
- Agrupación multinivel
- Análisis de edad por ocupación
Pregunta 4 (3 puntos): Exportación a Excel
- Múltiples hojas en un mismo archivo
- Formato de datos
- Uso de
ExcelWriter
# Cálculo de tasa de desempleo por año y género
data['desempleo'] = (data['ocupado'] == 0).astype(int)
grouped_desempleo = data.groupby(['año', 'p207']).agg({
'desempleo': ['sum', 'count']
})
grouped_desempleo['tasa_desempleo'] = (
grouped_desempleo['sum'] / grouped_desempleo['count']
) * 100Archivo: Victor Guzman - 2402_PYTHON_AVANZADO_PARCIAL.ipynb
Análisis del mercado laboral de mujeres casadas con 753 observaciones y 22 variables.
Librerías de ML:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.metrics import mean_squared_error, r2_score, accuracy_score
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
import seaborn as snsObjetivo: Predecir salarios (wage)
Características:
- División de datos (80/20)
- Normalización con StandardScaler
- Manejo de valores NaN con SimpleImputer
- Métricas: MSE y R²
Resultados:
Mean Squared Error (MSE): 2.31
R-squared (R²): 0.588
Visualizaciones:
- Scatter plot: Predicciones vs Valores Reales
- Histograma de residuos
Objetivo: Predecir participación laboral (inlf)
Métricas evaluadas:
- Accuracy: 0.715
- Confusion Matrix
- Classification Report
- ROC Curve (AUC)
- Precision-Recall Curve
Visualizaciones:
- Matriz de confusión (heatmap)
- Curva ROC
- Curva Precision-Recall
# Modelo de Regresión Lineal
X = mroz_data.drop('wage', axis=1)
y = mroz_data['wage']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = LinearRegression()
model.fit(X_train_scaled, y_train)
y_pred = model.predict(X_test_scaled)
# Métricas
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)pandas>=1.5.3
numpy>=1.23.5
matplotlib>=3.7.1
seaborn>=0.12.2
scikit-learn>=1.2.2
wooldridge>=0.4.4pip install pandas numpy matplotlib seaborn scikit-learn wooldridgebase = {
'usuario1': {
'nombre': 'sergio',
'apellido': 'diaz',
'pwd': 'dth4',
'telefono': '1234',
'carrera': 'economia',
'nivel_python': 'intermedio'
},
# ... más usuarios
}Variables principales:
inlf: Participación en fuerza laboral (binaria)wage: Salario por horaeduc: Años de educaciónexper: Años de experiencia laboralage: Edadkidslt6: Número de hijos menores de 6 añoskidsge6: Número de hijos de 6-18 años
- ✅ Estructuras de control (if/elif/else, while, for)
- ✅ Manipulación de diccionarios y listas
- ✅ Entrada y salida de datos
- ✅ Funciones personalizadas
- ✅ Validación de datos
- ✅ Importación y limpieza de datos
- ✅ Merge y join de DataFrames
- ✅ Pivot tables y agregaciones
- ✅ Funciones de agregación personalizadas
- ✅ Exportación a Excel con múltiples hojas
- ✅ Regresión lineal
- ✅ Regresión logística
- ✅ Preprocesamiento de datos (normalización, imputación)
- ✅ División train/test
- ✅ Evaluación de modelos (MSE, R², accuracy, confusion matrix)
- ✅ Visualización de resultados
| Métrica | Valor |
|---|---|
| MSE | 2.31 |
| R² | 0.588 |
| Métrica | Valor |
|---|---|
| Accuracy | 71.5% |
| Precision (clase 1) | 0.73 |
| Recall (clase 1) | 0.79 |
| F1-Score (clase 1) | 0.76 |
jupyter notebook "Victor Guzman - XIV_python_basico_Final.ipynb"Los notebooks están optimizados para Google Colab y pueden ejecutarse directamente subiendo los archivos.
- Manejo de datos faltantes: Se utiliza el símbolo '-' para representar valores ausentes en bases NoSQL
- Normalización: Es crucial normalizar los datos antes de entrenar modelos de ML
- Validación cruzada: Los modelos utilizan random_state=42 para reproducibilidad
- Visualizaciones: Todas las visualizaciones utilizan matplotlib y seaborn para máxima claridad
🛠️ Requisitos bashpip install pandas numpy matplotlib seaborn scikit-learn wooldridge
Victor Guzman
Este repositorio contiene material educativo y ejercicios de práctica.
Este es un repositorio de aprendizaje personal. Sin embargo, sugerencias y mejoras son bienvenidas.
- Dataset MROZ: Wooldridge package
- Encuesta Nacional de Hogares: Datos públicos de empleo
- Documentación oficial de Pandas, NumPy, Scikit-learn
Última actualización: 2024