Saltar al contenido

[2021] Limpie, analice y visualice datos de encuestas en Python {DH}

junio 20, 2022

un tutorial con pandas, matplotlibY seaborn para generar información digerible a partir de datos sucios

30 de marzo de 2019·10 minutos de lectura

Si está trabajando con datos en un inicio de D2C, es muy probable que se le pida que mire los datos de la encuesta al menos una vez. Y dado que SurveyMonkey es una de las plataformas de encuestas más populares, es muy probable que se trate de datos de SurveyMonkey.

La forma en que SurveyMonkey exporta datos no es necesariamente ryolisto para el análisis en este momento, pero está bastante cerca. Aquí hay algunos ejemplos de preguntas que quizás desee hacer sobre los datos de su encuesta y cómo extraer rápidamente esas respuestas. Incluso escribiremos algunas funciones para facilitarnos la vida a la hora de planificar futuras preguntas.

usaremos pandas, matplotlibY seaborn para entender nuestros datos. Usé Mockaroo para generar estos datos; Específicamente para los campos de preguntas de la encuesta, utilicé «Lista personalizada» e ingresé los campos apropiados. Puedes obtener el mismo efecto usando random.choice en el cual random módulo, pero me resultó más fácil dejar que Mockaroo creara todo para mí. Luego modifiqué los datos en Excel para reflejar la estructura de una exportación de SurveyMonkey.

oh chico… vamos

Su primera reacción a esto podría ser, “Ugh. Es horrible». Quiero decir, los nombres de las columnas no se leyeron correctamente, hay muchos NaN, en lugar de representaciones numéricas como 0/1 o 1/2/3/4/5, tenemos las respuestas de texto reales en cada celda… ¿Y deberíamos leer esto con un índice múltiple?

Pero no te preocupes, no es tan malo como crees. E ignoraremos MultiIndexes en esta publicación. (De todos modos, a nadie le gusta trabajar con ellos). El equipo necesita este conocimiento lo antes posible, por lo que vamos a encontrar algunas soluciones.

Primera tarea: se nos pidió que averigüáramos cómo diferían las respuestas a estas preguntas según el grupo de edad. pero age Es solo una edad, ¡no tenemos una columna para grupos de edad! Bueno, por suerte para nosotros, podemos definir fácilmente una función para crear una.

¡Pero si intentamos ejecutarlo así, obtenemos un error! Eso es porque tenemos la primera fila y su valor para la edad es la palabra «edad» en lugar de un número. Dado que el primer paso es convertir cada edad en una inteso fallará.

Necesitamos eliminar esta fila del DataFrame, pero será útil más adelante cuando cambiemos el nombre de las columnas, así que almacenémosla como una variable separada.

Notarás que desde que lo quitaste headers, ahora hemos perdido algo de información mirando solo los datos de la encuesta. Idealmente, tiene una lista de las preguntas y sus opciones que se hicieron en la encuesta proporcionada por quien desea el análisis. De lo contrario, debe tener una forma separada de hacer referencia a esta información en un documento o nota que pueda ver mientras trabaja.

Bien, ahora apliquemos esos age_group función para obtener nuestro age_group Pilar.

Excelente. A continuación, subdividimos los datos para centrarnos solo en la primera pregunta. ¿Cómo difieren las respuestas a esta primera pregunta según el grupo de edad?

Excelente. Ahora tenemos las respuestas en una variable. Pero cuando graficamos estos datos, no se ve muy bien debido a las columnas mal nombradas. Escribamos una función rápida para simplificar el cambio de nombre de la columna:

Recuerdo headers ¿del pasado? Podemos usarlo para crear el nuestro. new_names_list para cambiar el nombre.

Ya es una matriz, por lo que podemos pasarla directamente o podemos cambiarle el nombre primero para facilitar la lectura.

¿No es mucho más agradable de ver? No te preocupes, estamos casi en el punto en el que estamos obteniendo algunas ideas.

reconocer cómo groupby y otras funciones de agregación ignoran automáticamente los NaN. Esto nos hace la vida mucho más fácil.

Supongamos que tampoco nos importa mirar a los clientes menores de 30 años en este momento, por lo que solo estamos rastreando los otros grupos de edad.

Es cierto que todo eso está muy bien, pero el grupo de mayores de 60 años tiene más personas que los otros grupos, por lo que es difícil hacer una comparación justa. ¿qué hacemos? Podemos trazar cada grupo de edad en un gráfico separado y luego comparar las distribuciones.

Pero espera, podrías pensar. «Realmente no quiero escribir el código para 4 parcelas diferentes».

¡Por supuesto que no! ¿Quién tiene tiempo para esto? Escribamos otra función que haga esto por nosotros.

Creo que fue Jenny Bryan quien primero me hizo saber lo siguiente en su maravillosa charla «Code Smells and Feels»:

Si está copiando y pegando código y solo cambiando algunos valores, realmente debería estar escribiendo una función.

Esta ha sido una gran guía para mí para decidir cuándo vale la pena escribir una función para algo y cuándo no. Una regla general que me gusta usar es que si quiero copiar y pegar más de tres veces, escribo una función.

Este enfoque también tiene otras ventajas además de la conveniencia, tales como:

  • reduce la posibilidad de error (es fácil olvidarse de cambiar un valor al copiar y pegar)
  • hace que el código sea más legible
  • Cree su caja de herramientas personal de características
  • te obliga a pensar en un nivel más alto de abstracción

(¡Todo esto mejora sus habilidades de codificación y hace que las personas que necesitan leer su código sean más felices!)

¡Hurra, perezoso!

Por supuesto, estos son datos generados a partir de una distribución uniforme, por lo que no esperaríamos diferencias significativas entre los grupos. Esperemos que los datos de su propia encuesta sean más interesantes.

A continuación, abordemos un formato de pregunta diferente. En este caso, necesitamos ver qué tan interesado está cada grupo de edad en un beneficio particular. Afortunadamente, estas preguntas son más fáciles de resolver que las anteriores. Veremos:

Y mira, dado que este es un pequeño DataFrame, age_group ya está agregado y no necesitamos agregarlo.

Frío. Ahora tenemos los datos del subconjunto, pero esta vez no podemos simplemente agregarlos por conteo como pudimos con la otra pregunta: la última pregunta tenía NaN que se excluirían para dar el verdadero conteo de esta respuesta, pero esta sí, simplemente obtendríamos el número de respuestas para cada grupo de edad en general:

¡Definitivamente no queremos eso! El punto de la pregunta es entender qué tan interesados ​​están los diferentes grupos de edad y necesitamos preservar esa información. Todo esto nos dice cuántas personas en cada grupo de edad respondieron a la pregunta.

¿Asi que que hacemos? Una forma de hacerlo sería recodificar numéricamente estas respuestas. Pero, ¿y si queremos mantener la relación en un nivel aún más granular? Si codificamos numéricamente, podemos tomar el interés medio y promedio de cada grupo de edad. Pero, ¿y si realmente nos preocupamos por el porcentaje específico de personas por grupo de edad que eligieron cada nivel de interés? Sería más fácil transmitir esta información en un gráfico de barras conservando el texto.

Eso es lo que haremos a continuación. Y, lo adivinaste, es hora de escribir otra función.

Nota rápida para nuevos estudiantes: La mayoría de las personas no dirán esto explícitamente, pero permítanme explicar cómo se hacen a menudo las visualizaciones. En general, es un proceso muy iterativo. Incluso los científicos de datos más experimentados no solo escriben un gráfico con todas estas especificaciones en mente.

Por lo general, ahí es donde comienzas .plot(kind='bar')o similar según el gráfico que desee, y luego cambie el tamaño, coloree las tarjetas, organice los grupos correctamente order=indique si las etiquetas se deben rotar y establezca el eje x, las etiquetas invisibles y más, lo que crea que es mejor para aquellos que usarán las visualizaciones.

Así que no se deje intimidar por los largos bloques de código que ve cuando la gente planifica. Por lo general, se crean en cuestión de minutos mientras se prueban diferentes especificaciones, en lugar de escribir un código perfecto desde cero de una sola vez.


: [2021] Limpie, analice y visualice datos de encuestas en Python {DH}