Каков наилучший способ изменить / реструктурировать данные?

12

Я научный сотрудник лаборатории (волонтер). Мне и небольшой группе было поручено провести анализ данных для набора данных, извлеченных из большого исследования. К сожалению, данные были собраны с помощью какого-то онлайн-приложения, и оно не было запрограммировано на вывод данных в наиболее удобной форме.

Картинки ниже иллюстрируют основную проблему. Мне сказали, что это называется «изменение формы» или «реструктуризация».

Вопрос: Каков наилучший процесс перехода от рисунка 1 к рисунку 2 с большим набором данных с более чем 10 тыс. Записей?

Это образец, в самом файле более 10 тыс. Записей.  Я помечен цветом, чтобы помочь с ясностью

Это то, во что все это нужно преобразовать.

Wilkoe
источник
1
Пожалуйста, разбейте это на два отдельных вопроса и предоставьте образцы данных (вы также можете опустить свой фон, если это не актуально). Грубо говоря, в (1) вы хотите найти сопоставление, а затем объединить, чтобы прикрепить номера. (2) сильно зависит от типа манипуляций, которые вы хотите сделать; популярные пакеты R для такого рода вещи , включают в себя data.table, dplyr, plyr, и reshape2- я рекомендую избегать Excel и сводных таблиц , если это возможно.
Макс Генис
Я предполагаю, что ваши проблемы с очисткой данных более масштабны, чем те, которые можно задать в общих вопросах. Возможно, вы захотите посмотреть на OpenRefine.org. Несколько видео и загрузка могут помочь вам в этой части вашего анализа.
Джон
3
Этот вопрос кажется не по теме, потому что он касается элементарной очистки данных и организации, а не статистики.
Ник Стаунер
2
Я бы сказал, что это не по теме, потому что очистка ваших данных, как бы «элементарно» она ни была, очень важна для ее использования. Это часть большой проблемы.
теневик
2
@NickStauner, IIRC Я проголосовал за то, чтобы закрыться как «неясно / нужна дополнительная информация», а не как не по теме. Мне кажется, что очистка данных входит в объем написанной статистики, и хотя я признаю, что хорошие люди могут не согласиться, я думаю, что такие вопросы могут быть предметными. Учтите, что у нас есть тег очистки данных и эти темы резюме: 1 , 2 , 3 и 4 .
gung - Восстановить Монику

Ответы:

12

Как я отметил в своем комментарии , в вопросе недостаточно подробностей, чтобы сформулировать реальный ответ. Поскольку вам нужна помощь даже в поиске правильных терминов и формулировании вашего вопроса, я могу кратко рассказать об общих чертах.

2

В некотором смысле, очистка данных может быть выполнена в любом программном обеспечении и с помощью Excel или R. У обоих вариантов будут свои плюсы и минусы:

  • Excel: Excel почти наверняка является наиболее распространенным выбором для очистки данных (см. R fortunes # 59 pdf ). Это также считается плохим выбором для статистиков. Основная причина заключается в том, что трудно убедиться, что вы все поймали или что вы относились ко всему одинаково, и нет записей об изменениях, которые вы внесли, поэтому вы не сможете вернуться к этим изменениям позже. Преимущество использования Excel состоит в том, что вам будет легче видеть, что вы делаете, и вам не нужно много знать, чтобы вносить изменения. (Статистики сочтут последнее дополнительным доводом .)
  • R: R потребует крутой кривой обучения. Если вы не очень хорошо знакомы с R или программированием, то попытки, которые можно сделать довольно быстро и легко в Excel, будут неприятны, если вы попытаетесь использовать R. С другой стороны, если вам когда-либо придется делать это снова, это обучение будет хорошо проведенное время Кроме того, возможность писать и сохранять свой код для очистки данных в R облегчит перечисленные выше недостатки. Ниже приведены некоторые ссылки, которые помогут вам начать работу с этими задачами в R:

    Вы можете получить много полезной информации о переполнении стека :

    Quick-R также является ценным ресурсом:

    Получение чисел в числовом режиме:

    Еще один бесценный источник информации о R - справочный веб-сайт UCLA :

    Наконец, вы всегда можете найти много информации с помощью старого доброго Google:

    • Этот поиск: очистка данных в r , выводит несколько учебных пособий (ни один из которых я не изучал, FTR).

Обновление: это распространенная проблема, касающаяся структуры вашего набора данных, когда у вас есть несколько измерений на «единицу обучения» (в вашем случае, на человека). Если у вас есть одна строка для каждого человека, ваши данные, как говорят, находятся в «широкой» форме, но тогда у вас обязательно будет несколько столбцов для вашей переменной ответа, например. С другой стороны, вы можете иметь только один столбец для вашей переменной ответа (но в результате иметь несколько строк на человека), и в этом случае ваши данные будут иметь «длинную» форму. Переход между этими двумя форматами часто называют «преобразованием» ваших данных, особенно в мире R.

  • Стандартная функция R для этого - изменить форму . На справочномreshape() сайте статистики UCLA есть руководство по использованию .
  • Многие думают, что с ними reshapeтяжело работать. Хэдли Уикхем предоставил пакет под названием reshape2 , который призван упростить процесс. Персональный сайт Хэдли для reshape2 находится здесь , обзор Quick-R находится здесь , и есть хороший вид учебник здесь .
  • На SO очень много вопросов о том, как изменить данные. Большинство из них предназначены для перехода от широкого к длинному, потому что именно с этим обычно сталкиваются аналитики данных. Ваш вопрос касается перехода от длинного к широкому, что встречается гораздо реже, но об этом еще много тем, вы можете просмотреть их с помощью этого поиска .
  • Если ваше сердце настроено на попытки сделать это с Excel, есть поток о написании макроса VBA для Excel, чтобы реплицировать функциональность изменения формы здесь: melt / rehshape в Excel с использованием VBA?
Gung - Восстановить Монику
источник
2
Этот вопрос, и этот ответ, является отличной иллюстрацией того, почему грамотность программирования становится все более необходимой для практически любых исследований. Я собираюсь написать более полный ответ на этот вопрос, который я также собираюсь опубликовать в своем блоге, но я хотел получить этот комментарий, прежде чем я забыл.
бродяга
2
Я согласен в некоторой степени, но «необходимые» и «любые исследования» идут немного дальше. Многие дисциплины не часто имеют дело с грязными данными, и многим ведущим исследователям никогда не приходилось касаться языка программирования.
Behacad
Вау, спасибо всем. Мне понадобится немного времени, чтобы обработать и интегрировать всю эту информацию, которая является для меня очень новой. Кажется, что это немного мета-тангенс, и я подстегнул свой вопрос ... Представьте, что вы попали в чужую страну, не зная ее языка / культуры, это я и статистика. Я ценю время, которое вы потратили на свои ответы.
Wilkoe
Я добавил изменения в надежде прояснить мой первоначальный вопрос, хотя вопрос выглядит закрытым.
Wilkoe
Вопрос закрыт, @ user48538, и эта версия, к сожалению, более явно не по теме, чем предыдущая. Если у вас есть 10 тыс. Строк, вы определенно не хотите делать это в Excel. Вы действительно должны использовать R или подобное программное обеспечение для программирования. Название конкретной операции - изменить форму набора данных с «длинного» на «широкий», я добавлю еще несколько ссылок для вас. Кроме того, если вы являетесь студентом-волонтером, практически без опыта в статистике или программировании, это было крайне безответственно, кто бы ни поручил вам эту задачу, ИМХО. Это никоим образом не должно быть вашей задачей.
gung - Восстановить Монику
0

Попробуйте выполнить с помощью 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
источник
0

В scala это называется операцией "разнесения" и может быть выполнено в dataFrame. Если ваши данные rdd, вы сначала конвертируете их в dataFrame с помощью toDFкоманды, а затем используете .explodeметод.

Лукас Робертс
источник