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:

  1. Lea un archivo CSV con las respuestas de los estudiantes.

  2. Lea un archivo Excel (.xlsx) con las respuestas correctas.

  3. Compare las respuestas y califique automáticamente.

  4. 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:

    bash
    pip install pandas openpyxl
  • Crear una carpeta Proyectos_Python y guardar allí los archivos y el script.


2. Estructura del código

a) Importar pandas y cargar los archivos

python
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

python
preguntas = df_correctas['Pregunta'].values

c) Crear un diccionario de respuestas correctas

python
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] = respuesta

d) Calcular puntuaciones

python
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')

python
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

python
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

python
df_estudiantes.to_csv("resultados_examen.csv", index=False)
print("\nResultados guardados en 'resultados_examen.csv'")

✅ Resultado esperado

  • Un archivo resultados_examen.csv con 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.


Has lo lo mas claro y sin usar cosas elegantes o abreviaturas para usar menos líneas recuerda que soy principiante


Claro, te voy a explicar paso a paso con código claro y sencillo para principiantes.

📝 Código completo para calificar exámenes

python
# 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 pandas

  • pd.read_csv() y pd.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

  1. Crea la carpeta y archivos:

text
Proyectos_Python/
├── calificar_examen.py
└── archivos/
    ├── respuestas_estudiantes.csv
    └── respuestas_correctas.xlsx
  1. Ejecuta el script:

bash
python calificar_examen.py
  1. Verá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 uno

  • if respuesta_estudiante == respuesta_correcta: → Compara si la respuesta es correcta

  • df_estudiantes['Puntuación'].iloc[i] += 1 → Suma 1 punto si es correcta

  • respuesta_estudiante + 'X' → Marca respuestas incorrectas

  • sort_values('Puntuación', ascending=False) → Ordena de mayor a menor puntuación

Comentarios

Entradas populares de este blog

1-Teclas

2-canvas

3-1-Personajes