データを保存するためのシンプルで信頼性が高く、オープンで相互運用可能なプレーンテキスト形式


17

前の質問で、CSVファイルを編集するためのツールについて尋ねました。

GavinはDuncan MurdochによるR Helpのコメントにリンクしており 、Data Interchange FormatはCSVよりもデータを保存する信頼性の高い方法であると示唆しています。

一部のアプリケーションでは、専用のデータベース管理システムが必要です。ただし、小規模のデータ分析プロジェクトでは、より軽量なものがより適しているようです。

ファイル形式を評価するには、次の基準を考慮してください。

  • reliabile:入力されたデータは、入力された内容に忠実でなければなりません。データは異なるソフトウェアで一貫して開く必要があります。
  • simple:ファイル形式が理解しやすく、理想的には単純なテキストエディタで読みやすい場合は便利です。フォーマットを読み書きするための簡単なプログラムを書くのは簡単なはずです。
  • open:形式は開いている必要があります
  • 相互運用可能:ファイル形式は多くのシステムでサポートされる必要があります

タブとコンマで区切られた値の形式は、信頼性の基準で失敗します。ファイル形式ではなく、プログラムのインポートとエクスポートを非難できると思いますが。read.table奇妙なキャラクターがデータフレームの読み込みを壊さないようにするために、オプションを少し調整する必要があることがよくあります 。

ご質問

  • これらのニーズに最適なファイル形式はどれですか?
  • データ交換形式はより良い代替手段ですか?それとも問題がありますか?
  • 望ましい他の形式はありますか?
  • TSVとCSVを不当に評価していますか?ファイル形式の信頼性を高めるようなファイルを操作するための簡単なヒントはありますか?

2
私は付け加えなければなりません、Rは持っていないので、write.DIF()私は恐れている一方通行の通りです。
モニカの復職-G.シンプソン

1
私はcsvと信頼性の問題を理解していません。csvは十分に厳密ではないということですか?厳密とは、csvの規制が十分に厳しい場合、これらの定義に従うすべてのツールは、追加のパラメーターを必要とせずにファイルをロードできることを意味します。
ステフェン

@steffen私は次のようなことを意味します:一部のプログラムでcsvファイルをロードして保存すると、csvファイルが変更されます。csvファイルをロードすると、注意しないと不適切な変換が行われる可能性があります。適切にエスケープせずに文字の奇妙な組み合わせを追加すると、csvファイルが壊れることがあります。おそらく、私はcsvの使用をフォーマット自体と混同しているのでしょうが、公式の標準がないことについて人々がコメントするのを聞いたことがあります。もちろん、私は多くの場合それがうまく機能することを理解しています。
ジェロミーアングリム

5
@steffen:CSVは、ファイルに保存されているデータの形式やデータ型に関する情報を保存しません。2つの異なるアプリでCSVファイルを開き、2つの異なる方法でファイル内のデータを解釈させることができます。
モニカ

1
@ JeromyAnglim、csvファイルの変更は、csv形式そのものではなく、ソフトウェアに依存すると思います。
ローマンルシュトリック

回答:


9

ここで基準衝突が起こっているのだろうか。

Excel、SQLなどのファイル形式に関する不満の1つは、データ型を適切に動作させるために事前に定義する必要があるということです。計算上関連するよりも関連する)。

対照的に、データをマックアップしない、またはデータをマックアップすることを許可する基準には、エラーチェックが必要です。システムが自動的にデータ型を自動的に把握しない限り(これは基本的にExcelが失敗する場所です)、ケーキを食べて食べる方法はありません。

IMO、2つのうち、2番目の基準がより重要です。データの整合性が侵害されると、分析が困難または不可能になります。失われた観測値または無効な値(適切にチェックされていない場合)は、すべてを台無しにする可能性があります。

DIFに関しては、実際の生のテキストは人間が読めるものではなく、人間がデータを入力することは困難(IMO)です。

IMO、区切られたファイルにかなりの揺れを与える必要があります。上記のコメントで述べたように、「データのマングリング」は、主に使用しているツールのサブセットのせいです。正常に動作するプログラムは、区切りファイルを破壊しないでください。マングリングの最大の原因は、十分に指定されていない区切り文字です。たとえば、データにカンマが含まれている可能性がある場合、CSVは不適切です。タブがある場合は、TSVは不適切です。多くの(すべてではない)プログラムでは、代替区切り文字を指定できます。たとえば、いくつかの難しいケースでチルダ(〜)を使用しました。


ありがとう。適切な注意を払って区切られたファイル形式を使用することが最良の選択肢であるように思えます。
ジェロミーアングリム

6

真剣に、私はR自体が適合するRDataファイルを作成することを検討します

  • 信頼できる(チェック)
  • シンプル(ドローと呼びます-形式はバイナリです)
  • オープン(チェック:Rソースコードよりもオープンにならない)
  • 相互運用可能(チェック:Rが動作するすべての場所で動作します)

私に十分近い。システムがオペレーティングシステムではなくアプリケーションを意味する場合、最後のポイントは失敗です。

ああ、ファイルはデフォルトで圧縮されているため、RDataは効率的です(以前はデフォルトでオフにされていたオプションでした)。


2
RDataは確かにRとうまく機能します。バージョン管理に関して問題があるかもしれません。R関数dput()は、バージョン管理で動作するプレーンテキストの代替を提供すると思います。ただし、csv / tsvの魅力の1つは、リポジトリをデータと共有する場合(たとえば、雑誌記事など)、好きなソフトウェアを使用して簡単にデータを取得して再分析できることです。
ジェロミーアングリム

1
はい、それは非常に複雑な問題です。コンピューティングのd明期から人々はこれについて議論してきたと思います。さらに2つの考えがありました(そして、答えを広げることができました)。ProtocolBuffersは、Python、Java、C ++、および他の言語のホストと効率的に共有するのに適しています。Romainと私はRをカバーしています。新しいサイトmldata.orgは、機械学習の研究のためにこれをカバーしています-彼らは変換に利用できるツールさえ持っています。それは一見の価値があるかもしれません。
ダークエデルブッテル

1
実際、SVNは、pdfファイルなどのバイナリBLOBを問題なく取得します。gitもそうだと思います。
ダークエデルブッテル

バイナリBLOBについて知っておくと便利です。テキストファイルでdiffを実行し、変更に関する有意義な情報を取得できると便利です。mldata.orgへのリンクもありがとう。おもしろそうです。
ジェロミーアングリム

喜び。姉妹サイトmloss.orgは、mldata.orgの注目を集めることを期待しているなら、単に素晴らしいです。その時が適切です。
ダークエデルブエッテル

4

Dirk Eddelbuettelの回答に応じて、HDF5ファイル形式を使用することをお勧めします。RData形式ほど単純ではないか、「リッチ」と言うかもしれませんが、確かに相互運用性が高い(C、Java、Matlabなどで使用できます)。大きなHDF5ファイルを含むI / Oは非常に高速であることがわかりました。


(+1)NetCDFと比較したパフォーマンスについて何か考えはありますか?
chl

また、mldata.orgで選択された内部形式であるIIRC-変換する一連のツールを備えています。コンバーターは一見の価値があります。私はいつも、HDF5のRサポートがそれほど完璧ではないと感じていました。
ダークエデルブエッテル

@chl NetCDFは内部でHDF5を使用していると漠然と思っていましたが、それはあまり正確ではないようです。
みすぼらしいシェフ

2

適切なメタデータを含む固定テキスト形式があなたの基準を満たさない理由はよくわかりません。区切り文字ほど読むのは簡単ではありませんが、とにかく情報を使用するにはメタデータが必要です。プログラムを読み取るための構文を記述するタスクは、データセットの構造がどれだけ大きく複雑であるかによって異なります。SPSSとExcelには、これらのタスクを支援するGUIがあります。

私が遭遇したCSVファイルには2つのエラーしかありません:

  1. 区切り文字のないフィールドが欠落している(したがって、そのレコード内の他のすべてのフィールドが誤って配置されているため、XMLでタグが欠落しているという問題もあります)
  2. テキスト文字列内のコンマ

(他の問題が発生した場合は、例を挙げてください)

2つは、drnexusが示唆したより不規則な区切り文字で解決されます(パイプ(|)は以前に遭遇したものですが、チルダ(〜)は文字列フィールドに含まれない可能性が高いという点で同様に機能します)。問題は、使用しているソフトウェアでは簡単に解決できないものであり、両方とも、ファイルの読み取りに使用したソフトウェアではなく、最初にファイルを書き込む方法の問題です。

また、このスレッドについてのdrnexusと、これらのファイルの編集に関する他の最近のスレッドについての彼の応答についても同意したいと思います。使用しているソフトウェア(特にExcel)について不平を言っており、不正なソフトウェアに適合する形式でデータを保存するように求めているようです。たぶん、質問は、Excelでプレーンテキストファイルの自動フォーマットを停止する方法です。私に見えるあなたの信頼できる基準は、プレーンテキストファイルの読み取りに関するソフトウェアの問題です。データ管理にRを使用していませんが、SPSSで区切られたファイルを読むのに苦労したことはありません。

元のファイルが適切に書き込まれていない場合、どのソフトウェアがファイルを確実に読み取ると思われますか?また、特定のファイル形式では、最初に選択したファイルタイプに誤ってデータを書き込むことを防ぐことはできません。


(1)Rdata、Excel、またはSPSSデータファイルを開くのと同じくらい簡単に、データファイルを開いたり閉じたりできるようにしたいと思います。ウィザードを使用して時間を費やすことはできますが、私が理想とするのは非常に単純で信頼できるワークフローではありません。(2)はい、不規則な区切り文字を使用することに同意します。一般的に、ほとんどの場合、タブで十分です。(3)CSV / TSVに大きな問題はありません。簡単に解決できる問題が時々あります。ただし、区切り文字と形式変換の問題について考える必要はありません。
ジェロミーアングリム

@Jeromy Anglim、ポイント#1については、通常、これを1回だけ行う必要があると思います(他のファイルを読み書きできない2つの異なる環境間で頻繁に移行しない限り)。ポイント#3の場合、修正されたテキストファイルはその問題を修正します。SPSSが別のファイルタイプを誤ってフォーマットしたという状況に遭遇したことはありません。ファイルを配布する必要がない場合は、この質問全体がミュートになります。作業中の環境でファイルを正しく保存できる場合は、変換/保存の必要はありません。
アンディW

1

プレーンテキスト形式の一般的な問題は、メタデータを保存できないことです。欠落データをどのように定義しますか?1 =強く同意しない、2 =同意しない、...プレーンテキスト形式の種類をどのように定義しますか?プレーンテキスト形式では、別のドキュメントを使用してこれらのメタデータを定義する必要があります。また、XMLで行うのは簡単ではありません。

時々、この問題は非常に邪魔になることがあります。

私の解決策は、自己完結型でSPSSで編集しやすいSPSSデータ形式を使用することです。私はこれがあなたの質問に対する正しい答えではないことを知っていますが、私は非常に長い間同じ問題に苦労しており、これが私の現在の解決策です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.