home / encuestas

Script en Python para procesar encuestas de satisfacción

En el Centro Cultural CEINA generamos encuestas de satisfacción para nuestros eventos. Para profundizar en el análisis de esta información, desarrollé un script en Python que ayuda a dar formato a los archivos proporcionados por MailerLite y procesa los datos, entregándonos gráficos y análisis útiles.

Objetivos del Proyecto:

  • Mejorar el Formato de Datos: Transformar los archivos CSV exportados por MailerLite en un formato más manejable y coherente.
  • Optimizar el Análisis de Encuestas: Facilitar el análisis profundo de los datos para obtener insights significativos sobre la satisfacción y preferencias del público.
  • Automatizar la Generación de Informes: Crear gráficos y visualizaciones de datos de manera automática para su inclusión en informes periódicos.
  • Compartibilidad y Accesibilidad: Diseñar el script en un notebook de Jupyter para que sea fácil de compartir y utilizar por otros miembros del equipo.

Las Encuestas: Para el envío de encuestas utilizamos MailerLite, una plataforma amigable e intuitiva tanto para la creación de encuestas como para la recepción de respuestas. Sin embargo, el formato en que se exportan los datos en CSV puede ser complejo de manejar y analizar directamente.

El Script

Para abordar esta necesidad, desarrollé un script en Python utilizando la biblioteca pandas para unir, formatear y limpiar los archivos CSV. Posteriormente, con la ayuda de la biblioteca matplotlib, generamos gráficos que usamos en nuestros informes. El script está diseñado en un notebook de Jupyter para facilitar su compartición y uso.

Características del Script:

  • Unión de CSVs: Combina múltiples archivos CSV en un solo dataset.
  • Formateo y Limpieza: Ajusta y limpia los datos para asegurar su coherencia y precisión.
  • Generación de Gráficos: Utiliza matplotlib para crear gráficos informativos y visualmente atractivos.
				
					pip install matplotlib
pip install OS  
pip install pandas

import pandas as pd
import os
import matplotlib.pyplot as plt

def unir_excel_en_carpeta(ruta_carpeta, nombre_archivo_salida):
    # Obtener la lista de archivos en la carpeta
    archivos_excel = [archivo for archivo in os.listdir(ruta_carpeta) if archivo.endswith('.xlsx')]
    
    # Crear un DataFrame vacío para almacenar los datos combinados
    df_final = pd.DataFrame()
    
    # Iterar sobre cada archivo en la carpeta
    for archivo in archivos_excel:
        # Leer el archivo Excel en un DataFrame
        df_temporal = pd.read_excel(os.path.join(ruta_carpeta, archivo))
        
        # Obtener el nombre del archivo sin la extensión
        nombre_sin_extension = os.path.splitext(archivo)[0]
        
        # Agregar una columna con el nombre del archivo sin extensión
        df_temporal.insert(0, 'Evento', nombre_sin_extension)
        
        # Agregar el DataFrame al DataFrame final
        df_final = pd.concat([df_final, df_temporal], ignore_index=True)
    
    # Guardar el DataFrame combinado en un nuevo archivo Excel
    df_final.to_excel(nombre_archivo_salida, index=False)
    
    print("Archivos combinados exitosamente y guardados en", nombre_archivo_salida)


# Ruta de la carpeta que contiene los archivos Excel
ruta_carpeta = '/Users/julianrudy/Desktop/Encuestas/Excels'

# Nombre del archivo de salida
nombre_archivo_salida = 'datos_combinados.xlsx'

# Llamar a la función para combinar los archivos Excel
unir_excel_en_carpeta(ruta_carpeta, nombre_archivo_salida)

# Cargar el archivos xlsx
archivo_excel = '/Users/julianrudy/Desktop/Encuestas/datos_combinados.xlsx'  # Cambia por el nombre de tu archivo Excel
datos = pd.read_excel(archivo_excel)

# Filtro de entradas
filtro_pregunta_enteraste = datos['question'].str.contains('¿Cómo te enteraste del evento?', case=False, na=False)
respuestas_enteraste = datos[filtro_pregunta_enteraste]

# Conteo respuestas
conteo_respuestas_enteraste = respuestas_enteraste['answer'].value_counts()

# Gráfico barras
plt.figure(figsize=(10, 6))
conteo_respuestas_enteraste.plot(kind='bar')
plt.title('Respuestas a "¿Cómo te enteraste del evento?"')
plt.xlabel('Respuestas')
plt.ylabel('Cantidad')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

# Gráfico pastel
plt.figure(figsize=(8, 8))
conteo_respuestas_enteraste.plot(kind='pie', autopct='%1.1f%%', startangle=140)
plt.title('Distribución de respuestas')
plt.axis('equal')
plt.tight_layout()
plt.show()

# Filtro de entradas
filtro_pregunta_calificar = datos['question'].str.contains('¿Cómo calificarías la función?', case=False, na=False)
respuestas_calificar = datos[filtro_pregunta_calificar]

# Conteo respuestas
conteo_respuestas_calificar = respuestas_calificar['answer'].value_counts()

# Gráfico barras
plt.figure(figsize=(10, 6))
conteo_respuestas_calificar.plot(kind='bar')
plt.title('Respuestas a "¿Cómo calificarías la función?"')
plt.xlabel('Respuestas')
plt.ylabel('Cantidad')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

# Gráfico pastel
plt.figure(figsize=(8, 8))
conteo_respuestas_calificar.plot(kind='pie', autopct='%1.1f%%', startangle=140)
plt.title('Distribución de respuestas')
plt.axis('equal')
plt.tight_layout()
plt.show()
				
			

Conclusiones:

Este proyecto ha tenido un impacto significativo en la forma en que analizamos y comprendemos la satisfacción de nuestro público en el Centro Cultural CEINA. La automatización del proceso de análisis de encuestas no solo ha ahorrado tiempo y recursos, sino que también ha mejorado la precisión y profundidad de nuestros informes. Al entender mejor las preferencias y comportamientos de nuestros visitantes, hemos podido ajustar nuestras estrategias de comunicación y programación de eventos, resultando en una mayor satisfacción y participación del público. La implementación de este script en Python destaca la importancia de utilizar herramientas tecnológicas avanzadas para la gestión y mejora continua de nuestras actividades culturales.