Простий, надійний, відкритий та сумісний формат простого тексту для зберігання даних


17

У попередньому запитанні я запитав про інструменти для редагування файлів CSV .

Гевін посилається на коментар до R Help від Duncan Murdoch, припускаючи, що формат обміну даними - більш надійний спосіб зберігання даних, ніж CSV.

Для деяких додатків потрібна спеціальна система управління базами даних. Однак для невеликих масштабів аналізу даних здається більш підходящим.

Розглянемо наступні критерії оцінки формату файлу:

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

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

Запитання

  • Який формат файлу найкраще відповідає цим потребам?
  • Чи краща альтернатива формату обміну даними? чи у нього є свої проблеми?
  • Чи є якийсь інший формат, який є кращим?
  • Чи я несправедливо оцінюю TSV та CSV? Чи є простий набір порад щодо роботи з такими файлами, які роблять формат файлу більш надійним?

2
Додам, R не має, write.DIF()тому я боюся трохи односторонньої вулиці.
Відновіть Моніку - Г. Сімпсон

1
Я не розумію питання csv та надійності. Ви маєте на увазі, що csv недостатньо суворий? Суворо означає, що якби правила щодо csv були досить суворими, кожен інструмент, що слідує цим визначенням, міг би завантажувати файл без необхідності додаткових параметрів.
steffen

@steffen Я маю на увазі такі речі, як: завантаження та збереження CSV-файлу в деяких програмах змінює файл csv; завантаження файлів CSV може призвести до невідповідної конверсії, якщо ви не будете обережні; CSS-файли іноді ламаються, коли додаються дивні комбінації символів без належного втечі. Можливо, я плутаю використання csv із самим форматом, хоча я чув, як люди коментують відсутність офіційного стандарту. Звичайно, я розумію, що у багатьох випадках це працює просто чудово.
Джеромі Англім

5
@steffen: CSV не зберігає жодної інформації про формат або типи даних, що зберігаються у файлі. Ви можете добре відкрити файл CSV у двох різних програмах і дати їм інтерпретувати дані у файлі двома різними способами.
Відновіть Моніку - Г. Сімпсон

1
@JeromyAnglim, я думаю, що зміна файлу csv залежить від вашого програмного забезпечення, а не від формату csv.
Роман Луштрик

Відповіді:


9

Цікаво, чи тут відбувається зіткнення за критеріями.

Одна скарга щодо форматів файлів, таких як Excel, SQL тощо, полягає в тому, що ви повинні заздалегідь визначити типи даних, щоб вони добре поводилися, що суперечить критерію "щось більш легкий" (наскільки я розумію, що ваше обмеження має більше часу пов'язані, ніж обчислювально).

На відміну від цього, критерії, за якими він не мукує дані, або дозволяють мукувати дані, вимагають певної перевірки помилок. Якщо ви не дозволите системі автоматично магічно розраховувати типи даних (а це, по суті, там, де Excel вас відмовляє), немає ніякого способу скласти торт і з'їсти його теж.

ІМО, з двох, другий критерій є важливішим. Після порушення цілісності даних ускладнення чи неможливість аналізу. Втрачені спостереження або недійсні значення (якщо їх не перевірено належним чином) можуть зіпсувати все.

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

ІМО, ви повинні дати розмежуваним файлам справедливий струс. Як згадувалося вище в коментарях, "керування даними" є здебільшого виною підмножини інструментів, які ви використовуєте. Добре поводиться програми не повинні маніпулювати файлами з обмеженими можливостями. Найбільшим джерелом манлінгу є погано визначений роздільник. Наприклад, якщо у ваших даних можуть бути коми, CSV є недоречним. Якщо це може мати вкладки, TSV недоцільно. Для багатьох (але не всіх) програм ви можете вказати альтернативний роздільник. Наприклад, я використовував тильду (~) у кількох важких випадках.


Спасибі. Здається, найкращим варіантом може бути використання формату файлів з обмеженим доступом.
Джеромі Англім

6

По суті, я б вважав файли RData, створені самим R, як годиться

  • надійний (перевірити)
  • простий (назвіть це нічия - формат двійковий)
  • відкрити (перевірте: не відкриється більше, ніж вихідний код R)
  • сумісний (перевірка: працює скрізь R працює)

Досить близько для мене. Якщо під системами ви маєте на увазі додатки, а не операційну систему, то останній пункт - це збій.

О, і RData ефективна, оскільки файли тепер за замовчуванням стискаються (що раніше було опцією, яка була вимкнена за замовчуванням).


2
RData, безумовно, добре працює з R. Це може бути проблематично щодо контролю версій. Я припускаю, що функція R dput()пропонує звичайну текстову альтернативу, яка б працювала з контролем версій. Однак одне із звернень csv / tsv полягає в тому, що коли я ділюсь сховищем із даними (скажімо, для статті журналу), люди можуть взяти дані та легко їх аналізувати, використовуючи будь-яке програмне забезпечення, яке їм подобається.
Джеромі Англім

1
Так, це надзвичайно складна справа. Я думаю, що люди обговорювали це ще з світанку обчислень. У мене були ще дві думки (і я міг би розширити свою відповідь): ProtocolBuffers хороші для ефективного обміну з Python, Java, C ++, ... та безліччю інших мов; Ми з Роменом висвітлюємо R. Новий сайт mldata.org висвітлює це для дослідження машинного навчання - у них навіть є інструменти, які вони роблять доступними для перетворення. Це, можливо, варто подивитися.
Дірк Еддельбуеттель

1
Насправді, SVN без проблем приймає двійкові краплі, такі як PDF-файли тощо. Я підозрюю, що git теж робить.
Дірк Еддельбюттель

Це добре знати про двійкові краплі. Було б непогано мати змогу запускати різні текстові файли та отримувати змістовну інформацію про зміни. Дякуємо також за посилання на mldata.org. Це виглядає цікаво.
Джеромі Англім

Задоволення Сайт сестри mloss.org просто чудовий, якщо сподіваємось, що вони отримають тягу до mldata.org. Час саме для цього.
Дірк Еддельбюттель

4

У відповідь на відповідь Дірка Еддельбуеттеля, я пропоную використовувати формат файлів HDF5 . Він менш простий, ніж формат RData, або, можна сказати, "більш багатий", але, безумовно, більш сумісний (може використовуватися в C, Java, Matlab тощо). Я виявив, що введення / вивід із залученням великих файлів HDF5 дуже швидкий.


(+1) Ви думали про його ефективність порівняно з NetCDF ?
chl

IIRC - це також внутрішній формат, обраний на mldata.org - з набором інструментів, які конвертують. Перетворювачі, можливо, варто переглянути. У мене завжди було відчуття, що підтримка R для HDF5 була не такою ідеальною.
Дірк Еддельбуеттель

@chl Я смутно думав, що NetCDF використовує HDF5 всередині, але це здається не зовсім точним.
shabbychef

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. Я знаю, що це неправильна відповідь на ваше запитання, але я дуже довго боровся з тією ж проблемою, і це моє поточне рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.