Простой, надежный, открытый и совместимый текстовый формат для хранения данных

17

В предыдущем вопросе я спрашивал об инструментах для редактирования файлов CSV .

Гэвин ссылается на комментарий к R Help Дункана Мердока, в котором говорится, что формат обмена данными является более надежным способом хранения данных, чем CSV.

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

Рассмотрим следующие критерии оценки формата файла:

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

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

Вопросов

  • Какой формат файла лучше всего отвечает этим потребностям?
  • Является ли формат обмена данными лучшей альтернативой? или у него есть свои проблемы?
  • Есть какой-то другой формат, который предпочтительнее?
  • Я несправедливо оцениваю TSV и CSV? Существует ли простой набор советов по работе с такими файлами, которые делают формат файла более надежным?
Джером англим
источник
2
Я должен добавить, R не имеет, write.DIF()так что это немного улица с односторонним движением, я боюсь.
Восстановить Монику - Г. Симпсон
1
Я не понимаю вопроса о csv и надежности. Вы имеете в виду, что CSV недостаточно строг? Строгое означает, что если бы правила для csv были достаточно строгими, то каждый инструмент, следующий этим определениям, мог бы загрузить файл без необходимости дополнительных параметров.
Штеффен
@steffen Я имею в виду такие вещи, как: загрузка и сохранение файла CSV в некоторых программах изменяет файл CSV; загрузка CSV-файлов может привести к неправильному преобразованию, если вы не будете осторожны; Файлы CSV иногда ломаются, когда странные комбинации символов добавляются без надлежащего экранирования. Возможно, я путаю использование csv с самим форматом, хотя я слышал, как люди комментируют отсутствие официального стандарта. Конечно, я понимаю, что во многих случаях это работает просто отлично.
Джером Энглим
5
@steffen: CSV не хранит никакой информации о формате или типах данных, хранящихся в файле. Вы можете легко открыть файл CSV в двух разных приложениях и заставить его интерпретировать данные в файле двумя различными способами.
Восстановить Монику - Г. Симпсон
1
@JeromyAnglim, я думаю, что изменение файла CSV зависит от вашего программного обеспечения, а не от формата CSV как такового.
Роман Луштрик

Ответы:

9

Интересно, происходит ли здесь столкновение по критерию?

Одна из претензий к таким форматам файлов, как Excel, SQL и т. Д., Заключается в том, что вам необходимо заранее определить типы данных, чтобы они хорошо себя вели, что противоречит критерию «что-то более легкое» (как я понимаю, ваше ограничение - больше времени). связанных, чем в вычислительном отношении).

Напротив, критерии, согласно которым они не портят данные или не допускают кражи данных, требуют некоторой проверки ошибок. Если вы не позволите системе автоматически определять типы данных (что, в сущности, является причиной провала Excel), у вас не будет способа получить свой торт и съесть его тоже.

ИМО, из двух второй критерий важнее. Нарушение целостности данных затрудняет или делает невозможным анализ. Потерянные наблюдения или неверные значения (если не проверены должным образом) могут все испортить.

Что касается DIF, фактический необработанный текст не читается человеком, и людям было бы трудно (IMO) делать ввод данных в.

ИМО, вы должны дать справедливую встряску файлам с разделителями. Как упоминалось выше в комментариях, «искажение данных» в основном является ошибкой подмножества инструментов, которые вы используете. Программы с хорошим поведением не должны искажать файлы с разделителями. Самый большой источник искажения - плохо определенный разделитель. Например, если ваши данные могут иметь запятые, CSV не подходит. Если он может иметь вкладки TSV неуместно. Для многих (но не всех) программ вы можете указать альтернативный разделитель. Например, я использовал тильду (~) в нескольких сложных случаях.

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

На полном серьезе я бы рассмотрел файлы RData, созданные самим R, так как он подходит

  • надежный (проверка)
  • просто (назовите это ничьей - формат двоичный)
  • open (отметьте: не становится более открытым, чем исходный код R)
  • совместимый (проверьте: работает везде R работает)

Достаточно близко для меня. Если под системами вы подразумеваете приложения а не операционную систему, то последний пункт - сбой.

Да, и RData эффективен, поскольку файлы теперь по умолчанию сжимаются (что раньше было параметром, который по умолчанию отключен).

Дирк Эддельбюттель
источник
2
RData, безусловно, хорошо работает с R. Это может быть проблематично в отношении контроля версий. Я предполагаю, что функция R dput()предоставляет альтернативу в виде простого текста, которая будет работать с контролем версий. Тем не менее, одна из привлекательных сторон csv / tsv заключается в том, что, когда я делюсь хранилищем с данными (скажем, для журнальной статьи), люди могут легко взять данные и повторно проанализировать их с помощью любого программного обеспечения, которое им нравится.
Джером Энглим
1
Да, это чрезвычайно сложный вопрос. Я думаю, что люди обсуждали это с рассвета компьютеров. У меня было еще две мысли (и я мог бы расширить свой ответ): ProtocolBuffers хороши для эффективного обмена с Python, Java, C ++, ... и множеством других языков; Мы с Роменом рассказываем о R. Новый сайт mldata.org рассказывает об этом для исследований в области машинного обучения - у них даже есть инструменты, которые они делают доступными для конвертации. Это может стоить посмотреть.
Дирк Эддельбюттель
1
На самом деле SVN без проблем принимает двоичные двоичные объекты, такие как PDF-файлы и т. Д. Я подозреваю, что Git тоже.
Дирк Эддельбюттель
Это полезно знать о двоичных двоичных объектах. Было бы неплохо иметь возможность запускать diff для текстовых файлов и получать значимую информацию об изменениях. Спасибо также за ссылку на mldata.org. Это выглядит интересно.
Jeromy Anglim
Удовольствие. Сестринский сайт mloss.org просто великолепен, если надеюсь, что они получат тягу к mldata.org. Время подходит для этого.
Дирк Эддельбюттель
4

В ответ на ответ Дирка Эддельбюттеля я предлагаю использовать формат файла HDF5 . Он менее прост, чем формат RData, или, можно сказать, «более богатый», но, безусловно, более функционально совместим (может использоваться в C, Java, Matlab и т. Д.). Я обнаружил, что ввод / вывод с использованием больших файлов HDF5 очень быстрый.

shabbychef
источник
(+1) Есть мысли о его производительности по сравнению с NetCDF ?
ЧЛ
IIRC, который также является внутренним форматом, выбранным на mldata.org, с набором инструментов для преобразования. Конвертеры могут стоить посмотреть. У меня всегда было чувство, что поддержка R для HDF5 была не такой идеальной.
Дирк Эддельбюттель
@chl Я смутно думал, что NetCDF использует HDF5 для внутреннего использования, но, похоже, это не совсем точно.
Шаббычеф
2

Я не совсем уверен, почему формат фиксированного текста с соответствующими метаданными не соответствует вашим критериям. Это не так просто для чтения, как разделитель, но вам все равно нужны метаданные для использования информации. Задача написания синтаксиса для чтения программы просто зависит от того, насколько большой и сложной является структура набора данных. SPSS и Excel имеют графический интерфейс, чтобы помочь с этими задачами.

Есть только две ошибки с файлами CSV, с которыми я столкнулся:

  1. Отсутствующие поля без разделителей (поэтому каждое другое поле в этой записи неуместно, у меня также была эта проблема с отсутствующими тегами в XML)
  2. Запятая в текстовой строке

(если вы столкнулись с другими проблемами, не стесняйтесь приводить примеры)

Два решается с более неправильным разделителем, как предложил drnexus (труба (|) - это та, с которой я сталкивался ранее, но тильда (~) работает так же хорошо, что ни одна из них, вероятно, не будет включена в строковые поля.) Проблема не легко решается с помощью любого программного обеспечения, которое вы используете, и обе проблемы связаны с тем, как люди пишут файлы, а не с программным обеспечением, используемым для чтения файлов.

Я также хотел бы сказать, что я согласен с drnexus как в этой ветке, так и в его ответе на вашу недавнюю ветку о редактировании этих файлов. Вы, кажется, жалуетесь на программное обеспечение, которое используете (в частности, Excel), и просите хранить данные в формате, соответствующем вашему программному обеспечению с плохим поведением. Возможно, вопрос должен быть в том, как заставить Excel остановить автоматическое форматирование текстовых файлов. Ваш надежный критерий, как мне кажется, это проблема программного обеспечения с чтением текстовых файлов. Я не использую R для управления данными, но у меня не было так много времени для чтения файлов с разделителями в SPSS, как вы, похоже, предлагаете.

Если исходные файлы записаны неправильно, что заставляет вас надеяться, что какое-либо программное обеспечение надежно прочитает файл? И определенный формат файла, безусловно, не помешает вам неправильно записать данные в любой тип файла, который вы выбрали для начала.

Энди У
источник
(1) Я хотел бы иметь возможность открывать и закрывать файл данных так же легко, как я могу открыть файл данных Rdata, Excel или SPSS. Проводить время, прогуливаясь по мастеру, работает, но это не совсем простой и надежный рабочий процесс, который мне бы идеально понравился. (2) Да, я согласен с использованием неправильного разделителя. Вообще Tab мне достаточно большую часть времени; (3) У меня нет огромных проблем с CSV / TSV. У меня есть случайные проблемы, которые легко решаются. Однако я не хотел бы думать о проблемах разделителей и преобразования форматов.
Джером Энглим
@Jeromy Anglim, для пункта № 1, я думаю, что обычно вам нужно сделать это только один раз (если вы часто не мигрируете между двумя различными средами, которые не могут читать или выводить другие файлы). Для пункта № 3 исправленные текстовые файлы решают эту проблему. Я никогда не сталкивался с ситуацией, когда SPSS неправильно форматировал файл другого типа. Если вам не нужно распространять файлы, весь этот вопрос бесполезен, если вы можете заставить файл правильно сохранять в любой среде, в которой вы будете работать, больше нет необходимости в преобразовании / хранении.
Энди Ш
1

Общая проблема с открытым текстовым форматом заключается в том, что он не может хранить метаданные. Как вы определяете отсутствующие данные? Как вы определяете 1 = категорически не согласен, 2 = не согласен, ... виды вещей в текстовом формате? В простом текстовом формате вы должны использовать другой документ для определения этих метаданных. И это не легко сделать в XML.

Иногда эта проблема может быть очень тревожной.

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

Jfly
источник