Einfaches, zuverlässiges, offenes und interoperables Nur-Text-Format zum Speichern von Daten

17

In einer früheren Frage habe ich nach Tools zum Bearbeiten von CSV-Dateien gefragt .

Gavin ist mit einem Kommentar zu R Help von Duncan Murdoch verknüpft, der darauf hinweist , dass das Datenaustauschformat eine zuverlässigere Methode zum Speichern von Daten ist als CSV.

Für einige Anwendungen ist ein dediziertes Datenbankverwaltungssystem erforderlich. Für kleinere Datenanalyseprojekte scheint jedoch etwas Leichteres geeigneter zu sein.

Berücksichtigen Sie die folgenden Kriterien für die Bewertung eines Dateiformats:

  • Zuverlässig : Die eingegebenen Daten müssen den eingegebenen Daten entsprechen. Daten sollten in unterschiedlicher Software konsistent geöffnet werden.
  • einfach : es wäre schön, wenn das dateiformat einfach zu verstehen und idealerweise mit einem einfachen texteditor lesbar wäre; Es sollte einfach sein, ein einfaches Programm zu schreiben, um das Format zu lesen und zu schreiben.
  • offen : Das Format sollte offen sein
  • interoperabel : Das Dateiformat sollte von vielen Systemen unterstützt werden

Ich finde, dass durch Tabulatoren und Kommas getrennte Wertformate das Zuverlässigkeitskriterium nicht erfüllen. Obwohl ich denke, ich könnte eher das Importieren und Exportieren von Programmen als das Dateiformat verantwortlich machen. Ich muss oft kleine Anpassungen an den Optionen vornehmen, read.tableum zu verhindern, dass ein seltsamer Charakter das Laden des Datenrahmens unterbricht.

Fragen

  • Welches Dateiformat erfüllt diese Anforderungen am besten?
  • Ist das Datenaustauschformat eine bessere Alternative? oder hat es seine eigenen probleme
  • Gibt es ein anderes Format, das vorzuziehen ist?
  • Beurteile ich TSV und CSV zu Unrecht? Gibt es einfache Tipps zum Arbeiten mit solchen Dateien, die das Dateiformat zuverlässiger machen?
Jeromy Anglim
quelle
2
Ich sollte hinzufügen, R hat keine write.DIF()Einbahnstraße, daher fürchte ich, dass dies eine Einbahnstraße ist.
Setzen Sie Monica - G. Simpson
1
Ich verstehe das Thema CSV und Zuverlässigkeit nicht. Meinen Sie, dass CSV nicht streng genug ist? Streng bedeutet, dass jedes Tool, das diesen Definitionen folgt, eine Datei laden könnte, ohne dass zusätzliche Parameter erforderlich wären, wenn die Vorschriften für csv streng genug wären.
Steffen
@steffen Ich meine Dinge wie: Laden und Speichern einer CSV-Datei in einigen Programmen ändert die CSV-Datei; Das Laden von CSV-Dateien kann zu einer unangemessenen Konvertierung führen, sofern Sie nicht vorsichtig sind. csv-dateien brechen manchmal ab, wenn komische kombinationen von zeichen hinzugefügt werden, ohne dass sie ordnungsgemäß maskiert werden. Vielleicht verwechsle ich die Verwendung von csv mit dem Format selbst, obwohl ich schon Kommentare über das Fehlen eines offiziellen Standards gehört habe. Natürlich ist mir klar, dass es in vielen Fällen gut funktioniert.
Jeromy Anglim
5
@steffen: CSV speichert keine Informationen über das Format oder die Datentypen der in der Datei gespeicherten Daten. Sie können eine CSV-Datei auch in zwei verschiedenen Apps öffnen und die Daten in der Datei auf zwei verschiedene Arten interpretieren lassen.
Setzen Sie Monica - G. Simpson
1
@JeromyAnglim, ich denke, dass das Ändern der CSV-Datei von Ihrer Software abhängt, nicht vom CSV-Format an sich.
Roman Luštrik

Antworten:

9

Ich frage mich, ob hier eine Kriteriumskollision vorliegt.

Eine Beschwerde über Dateiformate wie Excel, SQL usw. ist, dass Sie die Datentypen im Voraus definieren müssen, damit sie sich gut verhalten, was dem Kriterium "etwas leichter" zuwiderläuft (da ich verstehe, dass Ihre Einschränkung mehr Zeit ist) verwandt als rechnerisch verwandt).

Im Gegensatz dazu erfordern die Kriterien, dass die Daten nicht durcheinandergebracht werden oder dass die Daten durcheinandergebracht werden können, eine Fehlerprüfung. Wenn Sie nicht zulassen, dass das System die Datentypen automatisch herausfindet (was im Wesentlichen der Fall ist, bei dem Excel versagt), können Sie Ihren Kuchen nicht auch essen.

IMO, von den beiden ist das zweite Kriterium wichtiger. Wenn die Datenintegrität einmal verletzt ist, wird die Analyse schwierig oder unmöglich. Verlorene Beobachtungen oder ungültige Werte (wenn nicht ordnungsgemäß überprüft) können alles durcheinander bringen.

In Bezug auf DIF ist der eigentliche Rohtext nicht für den Menschen lesbar und es wäre schwierig (IMO) für den Menschen, Daten einzugeben.

IMO, sollten Sie begrenzte Dateien einen fairen Shake geben. Wie oben in den Kommentaren erwähnt, ist die Datenverknüpfung hauptsächlich auf eine Teilmenge der von Ihnen verwendeten Tools zurückzuführen. Gut erzogene Programme sollten keine durch Trennzeichen getrennten Dateien entstellen. Die Hauptursache für Verstümmelung ist ein schlecht spezifizierter Begrenzer. Wenn Ihre Daten beispielsweise Kommas enthalten, ist eine CSV-Datei ungeeignet. Wenn es Registerkarten haben könnte, ist TSV ungeeignet. Für viele (aber nicht alle) Programme können Sie ein alternatives Trennzeichen angeben. Zum Beispiel habe ich die Tilde (~) in einigen schwierigen Fällen verwendet.

russellpierce
quelle
Vielen Dank. Es hört sich so an, als wäre die Verwendung eines begrenzten Dateiformats mit entsprechender Sorgfalt die beste Option.
Jeromy Anglim
6

In jedem Fall würde ich RData-Dateien, die von R selbst erstellt wurden, als passend betrachten

  • zuverlässig (check)
  • einfach (nenne es ein Unentschieden - das Format ist binär)
  • offen (Häkchen: wird nicht offener als R-Quellcode)
  • interoperabel (Kontrolle: funktioniert überall R funktioniert)

Nah genug für mich. Wenn Sie unter Systemen eher Anwendungen als Betriebssystem verstehen , ist der letzte Punkt ein Fehler.

Oh, und RData ist effizient, da die Dateien jetzt standardmäßig komprimiert sind (was früher eine Option war, die standardmäßig deaktiviert war).

Dirk Eddelbüttel
quelle
2
RData funktioniert auf jeden Fall gut mit R. In Bezug auf die Versionskontrolle könnte es problematisch sein. Ich nehme an, die R-Funktion dput()bietet eine Nur-Text-Alternative, die mit der Versionskontrolle funktionieren würde. Ein Appell von csv / tsv ist jedoch, dass, wenn ich ein Repository mit Daten teile (z. B. für einen Zeitschriftenartikel), die Daten mit jeder Software, die sie mögen, einfach neu analysiert werden können.
Jeromy Anglim
1
Ja, das ist eine äußerst komplizierte Angelegenheit. Ich denke, die Leute haben dies seit den Anfängen des Rechnens diskutiert. Ich hatte noch zwei Gedanken (und konnte meine Antwort erweitern): ProtocolBuffers eignen sich gut zum effizienten Teilen mit Python, Java, C ++, ... und vielen anderen Sprachen. Romain und ich behandeln R. Die neue Website mldata.org behandelt dies für Forschungszwecke im Bereich Maschinelles Lernen - sie stellen sogar Tools zur Konvertierung zur Verfügung. Das könnte einen Blick wert sein.
Dirk Eddelbuettel
1
Tatsächlich nimmt SVN problemlos binäre Blobs wie PDF-Dateien usw. entgegen. Ich würde vermuten, dass GIT das auch tut.
Dirk Eddelbuettel
Das ist gut über binäre Blobs zu wissen. Es wäre immer noch schön, diff für Textdateien ausführen zu können und wichtige Informationen über Änderungen zu erhalten. Danke auch für den Link zu mldata.org. Das sieht interessant aus.
Jeromy Anglim
Vergnügen. Die Schwestersite mloss.org ist einfach großartig, wenn sie hoffen, dass sie Traktion für mldata.org bekommen. Dafür ist die Zeit richtig.
Dirk Eddelbuettel
4

Als Antwort auf Dirk Eddelbuettels Antwort schlage ich vor, das HDF5-Dateiformat zu verwenden . Es ist weniger einfach als das RData-Format, oder man könnte sagen, "umfangreicher", aber sicherlich interoperabler (kann in C, Java, Matlab usw. verwendet werden). Ich habe festgestellt, dass I / O mit großen HDF5-Dateien sehr schnell ist.

shabbychef
quelle
(+1) Haben Sie sich Gedanken über die Leistung im Vergleich zu NetCDF gemacht ?
chl
IIRC, das auch das interne Format ist, das bei mldata.org ausgewählt wurde - mit einer Reihe von Tools, die konvertieren. Die Konverter können einen Blick wert sein. Ich hatte immer das Gefühl, dass die R-Unterstützung für HDF5 weniger perfekt war.
Dirk Eddelbuettel
@chl Ich hatte vage gedacht, dass NetCDF HDF5 intern verwendet, aber das scheint nicht ganz richtig zu sein.
Shabbychef
2

Ich bin mir nicht ganz sicher, warum ein festes Textformat mit den entsprechenden Metadaten nicht Ihren Kriterien entspricht. Es ist nicht so einfach zu lesen wie ein Trennzeichen, aber Sie benötigen Metadaten, um die Informationen trotzdem zu verwenden. Die Aufgabe des Schreibens einer Syntax zum Lesen des Programms hängt lediglich davon ab, wie groß und kompliziert die Struktur des Datensatzes ist. SPSS und Excel verfügen über eine grafische Benutzeroberfläche, die Sie bei diesen Aufgaben unterstützt.

Es gibt nur zwei Fehler bei CSV-Dateien, auf die ich gestoßen bin:

  1. Fehlende Felder ohne Trennzeichen (daher ist jedes andere Feld in diesem Datensatz falsch platziert. Ich hatte auch dieses Problem mit fehlenden Tags in XML.)
  2. Ein Komma in einer Textzeichenfolge

(Wenn Sie auf andere Probleme gestoßen sind, können Sie Beispiele nennen.)

Zwei werden mit einem unregelmäßigeren Trennzeichen gelöst, wie es drnexus vorschlägt (eine Pipe (|) ist eine, auf die ich zuvor gestoßen bin, aber eine Tilde (~) funktioniert genauso gut, da beide wahrscheinlich nicht in Zeichenfolgenfeldern enthalten sind.) Eine ist a Das Problem kann nicht einfach mit der von Ihnen verwendeten Software gelöst werden. Beides sind Probleme mit der Art und Weise, wie die Benutzer die Dateien geschrieben haben, und nicht mit der Software, mit der die Dateien gelesen wurden.

Ich möchte auch sagen, dass ich drnexus sowohl in diesem Thread als auch in seiner Antwort auf Ihren anderen aktuellen Thread zur Bearbeitung dieser Dateien zustimme . Sie scheinen sich über die von Ihnen verwendete Software (insbesondere Excel) zu beschweren und zu fragen, ob Daten in einem Format gespeichert werden sollen, das Ihrer schlecht benommenen Software entspricht. Vielleicht sollte die Frage lauten, wie Excel dazu gebracht werden kann, die automatische Formatierung von Nur-Text-Dateien zu beenden. Wie mir scheint, handelt es sich bei Ihren zuverlässigen Kriterien um ein Softwareproblem beim Lesen von Nur-Text-Dateien. Ich verwende R nicht für die Datenverwaltung, aber ich hatte nicht die Mühe, begrenzte Dateien in SPSS zu lesen, wie Sie anscheinend vermuten.

Wenn die Originaldateien nicht richtig geschrieben sind, was lässt Sie erwarten, dass eine Software die Datei zuverlässig liest? Und ein bestimmtes Dateiformat wird Sie mit Sicherheit nicht daran hindern, die Daten falsch in den Dateityp zu schreiben, mit dem Sie beginnen möchten.

Andy W
quelle
(1) Ich möchte die Datendatei so einfach öffnen und schließen können wie eine Rdata-, Excel- oder SPSS-Datendatei. Die Zeit, die ich mit dem Durchlaufen eines Assistenten verbringe, funktioniert, aber es ist nicht ganz der einfache und zuverlässige Workflow, den ich am liebsten hätte. (2) Ja, ich stimme der Verwendung eines unregelmäßigen Trennzeichens zu. Im Allgemeinen ist Tab für mich die meiste Zeit ausreichend; (3) Ich habe keine großen Probleme mit CSV / TSV. Ich habe gelegentlich Probleme, die sich leicht lösen lassen. Ich möchte jedoch nicht über Trennzeichen und Formatkonvertierungen nachdenken müssen.
Jeromy Anglim
@Jeromy Anglim, für Punkt 1 würde ich vermuten, dass Sie dies normalerweise nur einmal tun müssen (es sei denn, Sie migrieren häufig zwischen zwei verschiedenen Umgebungen, die die anderen Dateien nicht lesen oder ausgeben können). Für Punkt 3 beheben feste Textdateien dieses Problem. Ich bin noch nie auf eine Situation gestoßen, in der SPSS einen anderen Dateityp falsch formatiert hat. Wenn Sie die Dateien nicht verbreiten müssen, ist diese ganze Frage stummgeschaltet. Wenn Sie die Datei in der Umgebung, in der Sie arbeiten, korrekt speichern können, ist keine Konvertierung / Speicherung mehr erforderlich.
Andy W
1

Das häufigste Problem beim Nur-Text-Format ist, dass keine Metadaten gespeichert werden können. Wie definieren Sie fehlende Daten? Wie definieren Sie 1 = stimme überhaupt nicht zu, 2 = stimme überhaupt nicht zu, ... Arten von Inhalten im Nur-Text-Format? Im Nur-Text-Format müssen Sie ein anderes Dokument verwenden, um diese Metadaten zu definieren. Und in XML ist das nicht einfach.

Manchmal kann dieses Problem sehr störend sein.

Meine Lösung ist die Verwendung des SPSS-Datenformats, das in sich geschlossen und in SPSS einfach zu bearbeiten ist. Ich weiß, dass dies keine richtige Antwort auf Ihre Frage ist, aber ich habe sehr lange mit demselben Problem zu kämpfen, und dies ist meine derzeitige Lösung.

Jfly
quelle