¿Cuál es la mejor manera de remodelar / reestructurar datos?

12

Soy asistente de investigación para un laboratorio (voluntario). A mí y a un pequeño grupo se nos ha encomendado el análisis de datos para un conjunto de datos extraídos de un gran estudio. Lamentablemente, los datos se recopilaron con una aplicación en línea de algún tipo, y no se programó para generar los datos en la forma más útil.

Las imágenes a continuación ilustran el problema básico. Me dijeron que esto se llama "Reformar" o "Reestructurar".

Pregunta: ¿Cuál es el mejor proceso para pasar de la Imagen 1 a la Imagen 2 con un gran conjunto de datos con más de 10k entradas?

Esta es una muestra, el archivo real tiene más de 10k entradas.  He codificado por colores para ayudar con claridad

Esto es en lo que todo necesita convertirse.

Wilkoe
fuente
1
Divida esto en dos preguntas separadas y proporcione datos de muestra (también puede omitir sus antecedentes a menos que sea relevante). Aproximadamente, en (1) querrá encontrar un mapeo y luego combinarlo para adjuntar números. (2) depende en gran medida del tipo de manipulaciones que desee hacer; R paquetes populares para este tipo de cosas son data.table, dplyr, plyr, y reshape2- Recomiendo evitar Excel y tablas dinámicas, si es posible.
Max Ghenis
Supongo que sus problemas de limpieza de datos son más extensos que los que se pueden cubrir en el tipo de preguntas generales que hace. Es posible que desee mirar OpenRefine.org. Algunos videos y una descarga pueden ayudarlo mucho con esta parte de su análisis.
John
3
Esta pregunta parece estar fuera de tema porque se trata de la limpieza y organización de datos rudimentarios, no de estadísticas.
Nick Stauner
2
Yo diría que no está fuera de tema porque limpiar sus datos, por muy "rudimentario" que sea el proceso, es esencial para usarlos. Es parte de un problema mayor.
shadowtalker
2
@NickStauner, IIRC Voté para cerrar como 'poco claro / necesita más información', no como fuera de tema. Me parece que la limpieza de datos está dentro del alcance de las estadísticas escritas en grande, y aunque reconozco que las buenas personas pueden estar en desacuerdo, creo que tales preguntas pueden ser sobre el tema. Tenga en cuenta que tenemos una etiqueta de limpieza de datos y estos hilos de CV: 1 , 2 , 3 y 4 .
gung - Restablece a Monica

Respuestas:

12

Como señalé en mi comentario , no hay suficientes detalles en la pregunta para formular una respuesta real. Como necesita ayuda incluso para encontrar los términos correctos y formular su pregunta, puedo hablar brevemente en generalidades.

El término que está buscando es limpieza de datos . Este es el proceso de tomar datos en bruto, mal formateados (sucios) y ponerlos en forma para los análisis. Cambiar y regularizar formatos ("two" ) y reorganizar filas y columnas son tareas de limpieza de datos típicas. 2

En cierto sentido, la limpieza de datos se puede hacer en cualquier software y se puede hacer con Excel o con R. Habrá ventajas y desventajas en ambas opciones:

  • Excel: Excel es casi seguro la opción más común para la limpieza de datos (ver R fortunes # 59 pdf ). También es considerado una mala elección por los estadísticos. La razón principal es que es difícil asegurarse de que haya captado todo, o que haya tratado todo de manera idéntica, y que no haya un registro de los cambios que haya realizado, por lo que no puede volver a revisarlos más tarde. La ventaja de usar Excel es que será más fácil ver lo que está haciendo y no tiene que saber mucho para hacer cambios. (Los estadísticos considerarán esto último como una estafa adicional ).
  • R: R requerirá una curva de aprendizaje empinada. Si no está muy familiarizado con R o la programación, las cosas que se pueden hacer de manera bastante rápida y fácil en Excel serán frustrantes de intentar en R. Por otro lado, si alguna vez tiene que hacer esto nuevamente, ese aprendizaje habrá sido tiempo bien gastado. Además, la capacidad de escribir y guardar su código para limpiar los datos en R aliviará los inconvenientes mencionados anteriormente. Los siguientes son algunos enlaces que lo ayudarán a comenzar con estas tareas en R:

    Puede obtener mucha buena información sobre Stack Overflow :

    Quick-R también es un recurso valioso:

    Poner números en modo numérico:

    Otra fuente invaluable para aprender sobre R es el sitio web de ayuda de estadísticas de UCLA :

    Por último, siempre puedes encontrar mucha información con el viejo Google:

    • Esta búsqueda: limpieza de datos en r , trae una serie de tutoriales (ninguno de los cuales he trabajado, FTR).

Actualización: Este es un problema común con respecto a la estructura de su conjunto de datos cuando tiene múltiples mediciones por 'unidad de estudio' (en su caso, una persona). Si tiene una fila para cada persona, se dice que sus datos están en forma 'amplia', pero entonces necesariamente tendrá múltiples columnas para su variable de respuesta, por ejemplo. Por otro lado, puede tener solo una columna para su variable de respuesta (pero, como resultado, tener varias filas por persona), en cuyo caso se dice que sus datos están en forma 'larga'. Moverse entre estos dos formatos a menudo se llama 'remodelar' sus datos, especialmente en el mundo R.

  • La función R estándar para esto es ? Rehacer . Hay una guía para usar reshape()en el sitio web de ayuda de estadísticas de UCLA.
  • Mucha gente piensa que reshapees difícil trabajar con ellos. Hadley Wickham ha contribuido con un paquete llamado reshape2 , que pretende simplificar el proceso. El sitio web personal de Hadley para reshape2 está aquí , la descripción general de Quick-R está aquí y hay un tutorial atractivo aquí .
  • Hay muchas preguntas sobre SO sobre cómo cambiar la forma de los datos. La mayoría de ellos se trata de ir de ancho a largo, porque eso es lo que generalmente enfrentan los analistas de datos. Su pregunta es acerca de ir de largo a ancho, lo cual es mucho menos común, pero todavía hay muchos hilos al respecto, puede revisarlos con esta búsqueda .
  • Si su corazón está decidido a tratar de hacer esto con Excel, hay un hilo sobre escribir una macro VBA para Excel para replicar la funcionalidad de remodelación aquí: ¿ derretir / rehacer en Excel usando VBA?
gung - Restablece a Monica
fuente
2
Esta pregunta, y esta respuesta, es una gran ilustración de por qué la alfabetización en programación es cada vez más necesaria para casi cualquier tipo de investigación. Voy a escribir una respuesta más completa a esta pregunta que también voy a publicar en mi blog, pero quería recibir este comentario antes de que lo olvide.
shadowtalker
2
Estoy de acuerdo en cierta medida, pero "necesario" y "cualquier tipo de investigación" está yendo un poco lejos. Muchas disciplinas no suelen tratar datos sucios y muchos investigadores líderes nunca han necesitado tocar un lenguaje de programación.
Behacad
Wow, gracias a todos. Me llevará un poco procesar e integrar toda esta información, que es muy nueva para mí. Parece un poco de una meta tangente que estimulé mi pregunta ... Imagínate a ti mismo en una tierra extranjera sin conocimiento de su idioma / cultura, este soy yo y las estadísticas. Agradezco el tiempo que han dedicado a responder.
Wilkoe
Agregué una edición con la esperanza de aclarar mi pregunta inicial, aunque la pregunta parece estar cerrada.
Wilkoe
La pregunta está cerrada, @ user48538, y esta versión está más claramente fuera del tema que la anterior, desafortunadamente. Si tiene 10k filas, definitivamente no desea intentar hacer esto en Excel. Realmente tienes que usar R o un software de programación similar. El nombre de la operación específica es remodelar su conjunto de datos de 'largo' a 'ancho', agregaré algunos enlaces más para usted. Además, si usted es un voluntario de pregrado, con poca o ninguna experiencia en estadísticas o programación, fue muy irresponsable de quien le asigne esta tarea, en mi humilde opinión. No hay forma de que esta sea tu tarea.
gung - Restablece a Monica
0

Intenta seguir usando R:

> ddf
   sess_id user_id     quest  response
1        1       a       age        29
2        1       a satisfied  st_agree
3        1       a    gender      male
4        1       a     phone    iphone
5        2       a       age        29
6        2       a satisfied not_agree
7        2       a    gender    female
8        2       a     phone    iphone
9        3       b       age        29
10       3       b satisfied     agree
11       3       b    gender      male
12       3       b     phone   android
> 
> library(reshape2)
> dcast(ddf, sess_id+user_id ~ quest, value.var='response')
  sess_id user_id age gender   phone satisfied
1       1       a  29   male  iphone  st_agree
2       2       a  29 female  iphone not_agree
3       3       b  29   male android     agree
rnso
fuente
0

En scala, esto se denomina operación de "explosión" y se puede hacer en un DataFrame. Si sus datos son un rdd, primero convierte a dataFrame mediante un toDFcomando y luego usa el .explodemétodo.

Lucas Roberts
fuente