Format teks sederhana, dapat diandalkan, terbuka, dan dapat dioperasikan untuk menyimpan data

17

Dalam pertanyaan sebelumnya saya bertanya tentang alat untuk mengedit file CSV .

Gavin ditautkan dengan komentar pada R Help oleh Duncan Murdoch yang menyarankan bahwa Format Pertukaran Data adalah cara yang lebih andal untuk menyimpan data daripada CSV.

Untuk beberapa aplikasi, sistem manajemen basis data khusus diperlukan. Namun, untuk proyek analisis data skala kecil, sesuatu yang lebih ringan tampaknya lebih cocok.

Pertimbangkan kriteria berikut untuk mengevaluasi format file:

  • reliabile : data yang dimasukkan harus sesuai dengan apa yang telah dimasukkan; data harus terbuka secara konsisten dalam perangkat lunak yang berbeda;
  • sederhana : alangkah baiknya jika format file mudah dimengerti dan idealnya dapat dibaca dengan editor teks sederhana; seharusnya mudah untuk menulis program sederhana untuk membaca dan menulis format.
  • open : formatnya harus terbuka
  • interoperable : format file harus didukung oleh banyak sistem

Saya menemukan format nilai tab dan koma yang gagal pada kriteria reliabilitas. Meskipun saya kira saya bisa menyalahkan program impor dan ekspor daripada format file. Saya sering menemukan diri saya harus membuat sedikit penyesuaian pada opsi read.tableuntuk mencegah beberapa karakter aneh dari melanggar memuat frame data.

Pertanyaan

  • Format file mana yang paling memenuhi kebutuhan ini?
  • Apakah Format Interchange Data alternatif yang lebih baik? atau apakah ia memiliki masalah sendiri?
  • Apakah ada format lain yang lebih disukai?
  • Apakah saya mengevaluasi TSV dan CSV secara tidak adil? Apakah ada serangkaian tips sederhana untuk bekerja dengan file seperti itu yang membuat format file lebih dapat diandalkan?
Jeromy Anglim
sumber
2
Saya harus menambahkan, R tidak memiliki write.DIF()sehingga itu adalah jalan satu arah yang saya khawatirkan.
Pasang kembali Monica - G. Simpson
1
Saya tidak mengerti masalah csv dan reliabilitas. Apakah maksud Anda csv tidak cukup ketat? Ketat berarti bahwa jika peraturan untuk csv cukup ketat, setiap alat yang mengikuti definisi ini dapat memuat file tanpa perlu parameter tambahan.
steffen
@steffen Saya maksudkan hal-hal seperti: memuat dan menyimpan file csv di beberapa program mengubah file csv; memuat file csv dapat menghasilkan konversi yang tidak pantas kecuali Anda berhati-hati; File csv terkadang pecah ketika kombinasi karakter aneh ditambahkan tanpa melarikan diri dengan benar. Mungkin saya bingung menggunakan csv dengan format itu sendiri, meskipun saya telah mendengar orang berkomentar tentang kurangnya standar resmi. Tentu saja, saya menyadari bahwa dalam banyak kasus ini berfungsi dengan baik.
Jeromy Anglim
5
@steffen: CSV tidak menyimpan informasi tentang format atau tipe data dari data yang disimpan dalam file. Anda dapat membuka file CSV dengan baik di dua aplikasi yang berbeda dan membuatnya menafsirkan data dalam file dengan dua cara berbeda.
Pasang kembali Monica - G. Simpson
1
@JeromyAnglim, saya pikir perubahan file csv tergantung pada perangkat lunak Anda, bukan format csv per se.
Roman Luštrik

Jawaban:

9

Saya ingin tahu apakah ada tabrakan kriteria yang terjadi di sini.

Satu keluhan tentang format file seperti Excel, SQL, dll adalah bahwa Anda harus menentukan tipe data terlebih dahulu agar berperilaku baik, yang bertentangan dengan kriteria "sesuatu yang lebih ringan" (seperti yang saya pahami pembatasan Anda untuk lebih banyak waktu) terkait daripada yang terkait secara komputasi).

Sebaliknya, kriteria yang tidak membersihkan data, atau membiarkan data dibersihkan, memerlukan pengecekan kesalahan. Kecuali jika Anda membiarkan sistem secara otomatis menemukan tipe data (yang pada dasarnya adalah tempat Excel gagal Anda), tidak ada cara untuk mendapatkan kue Anda dan memakannya juga.

IMO, dari keduanya, kriteria kedua lebih penting. Integritas data, setelah dilanggar, membuat analisis menjadi sulit atau tidak mungkin. Pengamatan yang hilang atau nilai yang tidak valid (jika tidak diperiksa dengan benar) dapat mengacaukan segalanya.

Dalam hal DIF, teks mentah yang sebenarnya tidak dapat dibaca manusia dan akan sulit (IMO) bagi manusia untuk melakukan entri data.

IMO, Anda harus memberikan file terbatas goyang yang adil. Seperti yang disebutkan di atas dalam komentar, 'data mangling' sebagian besar merupakan kesalahan subset alat yang Anda gunakan. Program yang berperilaku baik seharusnya tidak memotong-motong file yang dibatasi. Sumber mangling terbesar adalah pembatas yang tidak ditentukan. Misalnya, jika data Anda memiliki koma, CSV tidak sesuai. Jika mungkin memiliki tab TSV tidak pantas. Untuk banyak (tetapi tidak semua) program, Anda dapat menentukan pembatas alternatif. Sebagai contoh, saya telah menggunakan tilde (~) dalam beberapa kasus sulit.

russellpierce
sumber
Terima kasih. Kedengarannya seperti menggunakan format file terbatas dengan perawatan yang tepat mungkin merupakan pilihan terbaik.
Jeromy Anglim
6

Dalam semua keseriusan, saya akan mempertimbangkan file RData yang dibuat oleh R itu sendiri sesuai

  • dapat diandalkan (periksa)
  • sederhana (sebut saja seri - formatnya adalah biner)
  • buka (periksa: tidak mendapatkan lebih banyak daripada kode sumber R)
  • interoperable (periksa: bekerja di mana saja R bekerja)

Cukup dekat untukku. Jika dengan sistem yang Anda maksud aplikasi daripada sistem operasi maka titik terakhir adalah gagal.

Oh, dan RData efisien karena file sekarang secara default dikompresi (yang dulunya merupakan opsi yang dimatikan secara default).

Dirk Eddelbuettel
sumber
2
RData tentu bekerja dengan baik dengan R. Mungkin bermasalah sehubungan dengan kontrol versi. Saya kira fungsi R dput()menyediakan alternatif teks biasa yang akan bekerja dengan kontrol versi. Namun, salah satu daya tarik dari csv / tsv adalah bahwa ketika saya berbagi repositori dengan data (katakanlah untuk artikel jurnal), orang dapat mengambil data dan menganalisisnya kembali dengan mudah menggunakan perangkat lunak apa pun yang mereka sukai.
Jeromy Anglim
1
Ya, ini masalah yang sangat rumit. Saya pikir orang telah membahas ini sejak awal komputasi. Saya memiliki dua pemikiran lagi (dan saya dapat memperluas jawaban saya): ProtocolBuffers bagus untuk berbagi secara efisien dengan Python, Java, C ++, ... dan sejumlah bahasa lain; Romain dan saya membahas R. Situs new-ish mldata.org membahas ini untuk penelitian dalam Pembelajaran Mesin - mereka bahkan memiliki alat yang tersedia untuk dikonversi. Itu mungkin layak untuk dilihat.
Dirk Eddelbuettel
1
Sebenarnya, SVN mengambil gumpalan biner seperti file pdf dll tanpa masalah. Saya menduga git juga.
Dirk Eddelbuettel
Itu bagus untuk mengetahui tentang biner gumpalan. Masih bagus untuk dapat menjalankan diff pada file teks dan mendapatkan informasi yang bermakna tentang perubahan. Terima kasih juga untuk tautan ke mldata.org. Itu terlihat menarik.
Jeromy Anglim
Kesenangan. Situs saudara mloss.org sangat bagus, jika berharap mereka mendapatkan daya tarik untuk mldata.org. Waktunya tepat untuk itu.
Dirk Eddelbuettel
4

Menanggapi jawaban Dirk Eddelbuettel, saya sarankan menggunakan format file HDF5 . Ini tidak sesederhana format RData, atau Anda mungkin mengatakan, 'lebih kaya', tetapi tentu saja lebih dapat dioperasikan (dapat digunakan dalam C, Java, Matlab, dll). Saya telah menemukan bahwa I / O yang melibatkan file HDF5 besar sangat cepat.

shabbychef
sumber
(+1) Adakah pemikiran tentang kinerjanya dibandingkan dengan NetCDF ?
chl
IIRC yang juga merupakan format internal yang dipilih di mldata.org - dengan serangkaian alat yang mengkonversi. Konverter mungkin layak untuk dilihat. Saya selalu merasa bahwa dukungan R untuk HDF5 kurang sempurna.
Dirk Eddelbuettel
@ chl Saya secara samar-samar berpikir bahwa NetCDF menggunakan HDF5 secara internal, tetapi itu tampaknya tidak cukup akurat.
shabbychef
2

Saya tidak yakin mengapa format teks tetap dengan meta data yang sesuai tidak memenuhi kriteria Anda. Tidak sesederhana itu untuk dibaca sebagai pembatas tetapi Anda perlu metadata untuk menggunakan informasi tersebut. Tugas penulisan sintaks untuk membaca program hanya tergantung pada seberapa besar dan rumitnya struktur dataset. SPSS dan Excel memiliki GUI untuk membantu tugas-tugas ini.

Hanya ada dua kesalahan dengan file CSV yang saya temui:

  1. Bidang yang hilang tanpa pembatas (jadi setiap bidang lain dalam catatan itu salah tempat, saya juga punya masalah dengan tag yang hilang dalam XML)
  2. Koma dalam string teks

(jika Anda mengalami masalah lain jangan ragu untuk memberikan contoh)

Dua diselesaikan dengan pembatas yang lebih tidak teratur seperti yang disarankan drnexus (pipa (|) adalah yang pernah saya temui sebelumnya, tetapi tilde (~) berfungsi dengan baik karena keduanya tidak mungkin dimasukkan dalam bidang string.) Salah satunya adalah masalah tidak mudah dipecahkan oleh perangkat lunak apa pun yang Anda gunakan, dan keduanya adalah masalah dengan cara orang menulis file untuk memulai, bukan perangkat lunak yang digunakan untuk membaca file.

Saya juga ingin mengatakan saya setuju dengan drnexus pada kedua utas ini dan tanggapannya pada utas baru Anda lainnya tentang mengedit file-file ini. Anda tampaknya mengeluh tentang perangkat lunak yang Anda gunakan (khususnya Excel) dan meminta untuk menyimpan data dalam format yang sesuai dengan perangkat lunak Anda yang berperilaku buruk. Mungkin pertanyaannya adalah bagaimana membuat Excel menghentikan auto-format file teks biasa. Kriteria andal Anda seperti yang tampak bagi saya adalah masalah perangkat lunak dengan membaca file teks biasa. Saya tidak menggunakan R untuk manajemen data, tetapi saya belum kesulitan membaca file yang dibatasi di SPSS seperti yang Anda sarankan.

Jika file asli tidak ditulis dengan benar, apa yang membuat Anda mengharapkan perangkat lunak untuk membaca file dengan andal? Dan format file tertentu tentu tidak akan mencegah Anda dari salah menulis data ke jenis file apa pun yang Anda pilih untuk memulai.

Andy W
sumber
(1) Saya ingin dapat membuka dan menutup file data semudah saya dapat membuka file data Rdata, Excel, atau SPSS. Menghabiskan waktu berjalan melalui penyihir berfungsi, tapi itu bukan alur kerja yang sederhana dan dapat diandalkan yang idealnya saya sukai. (2) Ya, saya setuju tentang menggunakan pembatas tidak teratur. Secara umum, Tab sudah cukup untuk saya sebagian besar waktu; (3) Saya tidak punya masalah besar dengan CSV / TSV. Saya memiliki masalah sesekali yang mudah diselesaikan. Namun, saya ingin tidak harus memikirkan masalah pembatas dan konversi format.
Jeromy Anglim
@Jeromy Anglim, untuk poin # 1, saya kira Anda biasanya hanya perlu melakukan ini satu kali (kecuali Anda sering bermigrasi di antara dua lingkungan yang berbeda yang tidak dapat membaca atau menampilkan file yang lain). Untuk poin # 3, file teks tetap memperbaiki masalah itu. Saya belum pernah menemukan situasi di mana SPSS salah memformat tipe file yang berbeda. Jika Anda tidak perlu menyebar file-file ini, seluruh pertanyaan ini bisu, jika Anda dapat menyimpan file dengan benar di lingkungan apa pun yang akan Anda kerjakan, tidak perlu lagi konversi / penyimpanan.
Andy W
1

Masalah umum dengan format teks biasa adalah tidak dapat menyimpan metadata. Bagaimana Anda mendefinisikan data yang hilang? Bagaimana Anda mendefinisikan 1 = sangat tidak setuju, 2 = tidak setuju, ... jenis barang dalam format teks biasa? Dengan format teks biasa, Anda harus menggunakan dokumen lain untuk mendefinisikan metadata tersebut. Dan itu tidak mudah dilakukan dalam XML.

Terkadang masalah ini bisa sangat mengganggu.

Solusi saya adalah menggunakan format data SPSS, yang mandiri dan mudah diedit di SPSS. Saya tahu ini bukan jawaban yang tepat untuk pertanyaan Anda, tetapi saya telah berjuang untuk masalah yang sama sejak lama dan ini adalah solusi saya saat ini.

Jfly
sumber