EJERCICIO 3-UsoPandasLecturaArchivos
El PDF es un manual práctico para aprender a usar la biblioteca Pandas en Python, enfocado en la lectura de archivos y el procesamiento de datos mediante un caso concreto: automatizar la corrección de exámenes.
📌 Objetivo principal
Desarrollar un script en Python (calificar_examen.py) que:
Lea un archivo CSV con las respuestas de los estudiantes.
Lea un archivo Excel (.xlsx) con las respuestas correctas.
Compare las respuestas y califique automáticamente.
Genere un reporte detallado y un archivo CSV con los resultados.
📂 Archivos necesarios
respuestas_estudiantes.csv(respuestas de los alumnos)respuestas_correctas.xlsx(clave de respuestas correctas)
🛠️ Pasos a seguir (resumen)
1. Preparación del entorno
Instalar pandas y openpyxl:
pip install pandas openpyxlCrear una carpeta
Proyectos_Pythony guardar allí los archivos y el script.
2. Estructura del código
a) Importar pandas y cargar los archivos
import pandas as pd
df_estudiantes = pd.read_csv("./archivos/respuestas_estudiantes.csv")
df_correctas = pd.read_excel("./archivos/respuestas_correctas.xlsx")b) Obtener las preguntas a evaluar
preguntas = df_correctas['Pregunta'].valuesc) Crear un diccionario de respuestas correctas
clave_respuestas = {}
for i in range(df_correctas.shape[0]):
pregunta = df_correctas['Pregunta'].iloc[i]
respuesta = df_correctas['Respuesta'].iloc[i]
clave_respuestas[pregunta] = respuestad) Calcular puntuaciones
df_estudiantes['Puntuación'] = 0
for p in preguntas:
respuesta_correcta = clave_respuestas[p]
df_estudiantes['Puntuación'] += (df_estudiantes[p] == respuesta_correcta).astype(int)e) Generar reporte detallado (marcar errores con 'X')
df_detalle = df_estudiantes.copy()
for p in preguntas:
df_detalle[p] = df_detalle[p].where(
df_detalle[p] == clave_respuestas[p],
df_detalle[p] + 'X'
)
df_detalle = df_detalle.sort_values('Puntuación', ascending=False)
print("Leyenda: RespuestaX = Incorrecta")
print(df_detalle.to_string(index=False))f) Mostrar resultados resumidos
print("\n=== RESULTADOS DE LOS ESTUDIANTES ===")
print(df_estudiantes[['Nombre', 'Puntuación']].sort_values('Puntuación', ascending=False).to_string(index=False))g) Exportar resultados a CSV
df_estudiantes.to_csv("resultados_examen.csv", index=False)
print("\nResultados guardados en 'resultados_examen.csv'")✅ Resultado esperado
Un archivo
resultados_examen.csvcon los nombres y puntuaciones.Una tabla en consola con las respuestas marcadas (incorrectas con 'X').
Una tabla resumida ordenada por puntuación.
🧠 Consejos adicionales del manual
Divide el código en funciones para que sea más mantenible.
Valida que los archivos se carguen correctamente.
Prueba con diferentes datos modificando el CSV de estudiantes.
Claro, te voy a explicar paso a paso con código claro y sencillo para principiantes.
📝 Código completo para calificar exámenes
# 1. Importar la librería pandas
import pandas as pd
# 2. Cargar los archivos con las respuestas
print("Cargando archivos...")
df_estudiantes = pd.read_csv("./archivos/respuestas_estudiantes.csv")
df_correctas = pd.read_excel("./archivos/respuestas_correctas.xlsx")
# 3. Mostrar cómo se ven los datos
print("Datos de estudiantes:")
print(df_estudiantes.head())
print("\nDatos de respuestas correctas:")
print(df_correctas.head())
# 4. Obtener la lista de preguntas a evaluar
preguntas = df_correctas['Pregunta'].values
print(f"\nPreguntas a evaluar: {preguntas}")
# 5. Crear un diccionario con las respuestas correctas
clave_respuestas = {} # Diccionario vacío
# Recorrer cada fila del archivo de respuestas correctas
for i in range(len(df_correctas)):
pregunta = df_correctas['Pregunta'].iloc[i]
respuesta = df_correctas['Respuesta'].iloc[i]
clave_respuestas[pregunta] = respuesta
print("Diccionario de respuestas correctas:")
print(clave_respuestas)
# 6. Inicializar la columna de puntuación en cero
df_estudiantes['Puntuación'] = 0
# 7. Calcular la puntuación de cada estudiante
for pregunta in preguntas:
respuesta_correcta = clave_respuestas[pregunta]
# Comparar cada respuesta con la correcta
for i in range(len(df_estudiantes)):
respuesta_estudiante = df_estudiantes[pregunta].iloc[i]
# Si la respuesta es correcta, sumar 1 punto
if respuesta_estudiante == respuesta_correcta:
df_estudiantes['Puntuación'].iloc[i] += 1
# 8. Mostrar los resultados
print("\n=== RESULTADOS FINALES ===")
print(df_estudiantes[['Nombre', 'Puntuación']])
# 9. Crear reporte detallado (marcar errores con X)
df_detalle = df_estudiantes.copy()
for pregunta in preguntas:
respuesta_correcta = clave_respuestas[pregunta]
for i in range(len(df_detalle)):
respuesta_estudiante = df_detalle[pregunta].iloc[i]
# Marcar respuestas incorrectas con X
if respuesta_estudiante != respuesta_correcta:
df_detalle[pregunta].iloc[i] = respuesta_estudiante + 'X'
# 10. Ordenar por puntuación (de mayor a menor)
df_detalle = df_detalle.sort_values('Puntuación', ascending=False)
print("\n=== REPORTE DETALLADO ===")
print("Leyenda: RespuestaX = Incorrecta")
print(df_detalle.to_string(index=False))
# 11. Mostrar solo nombres y puntuaciones (ordenados)
print("\n=== TABLA DE PUNTUACIONES ===")
resultados_resumen = df_estudiantes[['Nombre', 'Puntuación']]
resultados_ordenados = resultados_resumen.sort_values('Puntuación', ascending=False)
print(resultados_ordenados.to_string(index=False))
# 12. Guardar resultados en un archivo CSV
df_estudiantes.to_csv("resultados_examen.csv", index=False)
print("\n✅ Resultados guardados en 'resultados_examen.csv'")
# 13. Mostrar estadísticas simples
total_preguntas = len(preguntas)
print(f"\n=== ESTADÍSTICAS ===")
print(f"Total de preguntas: {total_preguntas}")
print(f"Mejor puntuación: {df_estudiantes['Puntuación'].max()}")
print(f"Peor puntuación: {df_estudiantes['Puntuación'].min()}")
print(f"Promedio: {df_estudiantes['Puntuación'].mean():.2f}")🔍 Explicación paso a paso
Parte 1: Cargar datos
import pandas as pd: Importamos la librería pandaspd.read_csv()ypd.read_excel(): Leemos los archivos
Parte 2: Preparar las respuestas correctas
Creamos un diccionario donde cada pregunta tiene su respuesta correcta
Ejemplo:
{'P1': 'A', 'P2': 'B', ...}
Parte 3: Calcular puntuaciones
Para cada estudiante, comparamos sus respuestas con las correctas
Cada respuesta correcta suma 1 punto
Parte 4: Generar reportes
Reporte detallado: Muestra todas las respuestas, marcando las incorrectas con 'X'
Tabla resumen: Solo muestra nombres y puntuaciones
Estadísticas: Muestra promedios y resultados generales
Parte 5: Guardar resultados
Exportamos todo a un archivo CSV para poder abrirlo en Excel
📊 Cómo probar el código
Crea la carpeta y archivos:
Proyectos_Python/
├── calificar_examen.py
└── archivos/
├── respuestas_estudiantes.csv
└── respuestas_correctas.xlsxEjecuta el script:
python calificar_examen.pyVerás en la consola:
Los datos cargados
El diccionario de respuestas correctas
Los resultados detallados
La tabla de puntuaciones
Las estadísticas
❓ ¿Qué hace cada parte importante?
for i in range(len(df_estudiantes)):→ Recorre cada estudiante uno por unoif respuesta_estudiante == respuesta_correcta:→ Compara si la respuesta es correctadf_estudiantes['Puntuación'].iloc[i] += 1→ Suma 1 punto si es correctarespuesta_estudiante + 'X'→ Marca respuestas incorrectassort_values('Puntuación', ascending=False)→ Ordena de mayor a menor puntuación
Comentarios
Publicar un comentario