Định dạng văn bản đơn giản, đáng tin cậy, mở và có thể tương tác để lưu trữ dữ liệu


17

Trong một câu hỏi trước tôi đã hỏi về các công cụ chỉnh sửa tệp CSV .

Gavin đã liên kết với một nhận xét về Trợ giúp R ​​của Duncan Murdoch cho thấy Định dạng trao đổi dữ liệu là một cách đáng tin cậy hơn để lưu trữ dữ liệu so với CSV.

Đối với một số ứng dụng, một hệ thống quản lý cơ sở dữ liệu chuyên dụng là những gì cần thiết. Tuy nhiên, đối với các dự án phân tích dữ liệu quy mô nhỏ, một cái gì đó nhẹ hơn có vẻ phù hợp hơn.

Xem xét các tiêu chí sau để đánh giá định dạng tệp:

  • độ tin cậy : dữ liệu được nhập phải đúng với những gì đã nhập; dữ liệu phải mở một cách nhất quán trong các phần mềm khác nhau;
  • đơn giản : sẽ rất tuyệt nếu định dạng tệp dễ hiểu và lý tưởng nhất có thể đọc được bằng một trình soạn thảo văn bản đơn giản; thật dễ dàng để viết một chương trình đơn giản để đọc và viết định dạng.
  • mở : định dạng nên được mở
  • có thể tương tác : định dạng tệp nên được nhiều hệ thống hỗ trợ

Tôi thấy các định dạng giá trị được phân tách bằng dấu phẩy và dấu phẩy không thành công trên tiêu chí độ tin cậy. Mặc dù tôi cho rằng tôi có thể đổ lỗi cho các chương trình nhập và xuất hơn là định dạng tệp. Tôi thường thấy mình phải điều chỉnh một chút cho các tùy chọn read.tableđể ngăn một số nhân vật lạ phá vỡ việc tải khung dữ liệu.

Câu hỏi

  • Định dạng tập tin nào đáp ứng tốt nhất các nhu cầu này?
  • Là định dạng trao đổi dữ liệu là một thay thế tốt hơn? hoặc nó có vấn đề riêng của nó?
  • Có một số định dạng khác là thích hợp hơn?
  • Tôi có đánh giá không công bằng TSV và CSV không? Có một bộ mẹo đơn giản để làm việc với các tệp như vậy làm cho định dạng tệp đáng tin cậy hơn không?

2
Tôi nên nói thêm, R không có write.DIF()đường nên tôi hơi sợ đường một chiều.
Phục hồi Monica - G. Simpson

1
Tôi không hiểu vấn đề của csv và độ tin cậy. Bạn có nghĩa là csv không đủ nghiêm ngặt? Nghiêm khắc có nghĩa là nếu quy định cho csv đủ nghiêm ngặt, mọi công cụ theo các định nghĩa này có thể tải một tệp mà không cần thêm tham số.
steffen

@steffen Ý tôi là những thứ như: tải và lưu tệp csv trong một số chương trình thay đổi tệp csv; tải tập tin csv có thể dẫn đến chuyển đổi không phù hợp trừ khi bạn cẩn thận; Các tập tin csv đôi khi bị phá vỡ khi các tổ hợp ký tự lạ được thêm vào mà không thoát đúng. Có lẽ tôi đang nhầm lẫn việc sử dụng csv với định dạng này, mặc dù tôi đã nghe mọi người bình luận về việc thiếu một tiêu chuẩn chính thức. Tất nhiên, tôi nhận ra rằng trong nhiều trường hợp nó hoạt động tốt.
Jeromy Anglim

5
@steffen: CSV không lưu trữ bất kỳ thông tin nào về định dạng hoặc kiểu dữ liệu của dữ liệu được lưu trữ trong tệp. Bạn cũng có thể mở tệp CSV trong hai ứng dụng khác nhau và yêu cầu nó diễn giải dữ liệu trong tệp theo hai cách khác nhau.
Phục hồi Monica - G. Simpson

1
@JeromyAnglim, tôi nghĩ rằng việc thay đổi tệp csv phụ thuộc vào phần mềm của bạn chứ không phải định dạng csv mỗi se.
Roman Luštrik

Câu trả lời:


9

Tôi tự hỏi nếu có một vụ va chạm tiêu chí đang diễn ra ở đây.

Một khiếu nại về các định dạng tệp như Excel, SQL, v.v ... là bạn phải xác định trước các kiểu dữ liệu để nó hoạt động tốt, chạy ngược lại với tiêu chí "trọng lượng nhẹ hơn" (vì tôi hiểu rằng hạn chế của bạn sẽ mất nhiều thời gian hơn liên quan hơn liên quan đến tính toán).

Ngược lại, các tiêu chí mà nó không làm hỏng dữ liệu hoặc cho phép dữ liệu được lấy ra, yêu cầu một số kiểm tra lỗi. Trừ khi bạn để hệ thống tự động tìm ra các loại dữ liệu (về cơ bản là nơi Excel làm bạn thất vọng), không có cách nào để có bánh của bạn và cũng ăn nó.

IMO, trong số hai, tiêu chí thứ hai là quan trọng hơn. Tính toàn vẹn dữ liệu, một khi bị vi phạm, làm cho việc phân tích trở nên khó khăn hoặc không thể. Các quan sát bị mất hoặc các giá trị không hợp lệ (nếu không được kiểm tra đúng cách) có thể làm rối tung mọi thứ.

Liên quan đến DIF, văn bản thô thực tế không thể đọc được bằng con người và sẽ rất khó (IMO) để con người thực hiện nhập dữ liệu.

IMO, bạn nên cung cấp cho các tệp được phân tách một cách công bằng. Như đã đề cập ở trên trong các bình luận, 'dữ liệu xáo trộn' hầu hết là lỗi của một tập hợp con các công cụ bạn đang sử dụng. Các chương trình hoạt động tốt không nên mang các tập tin phân định. Nguồn xáo trộn lớn nhất là một dấu phân cách được chỉ định kém. Ví dụ: nếu dữ liệu của bạn có thể có dấu phẩy, CSV không phù hợp. Nếu nó có thể có các tab TSV là không phù hợp. Đối với nhiều chương trình (nhưng không phải tất cả), bạn có thể chỉ định một dấu phân cách thay thế. Ví dụ: tôi đã sử dụng dấu ngã (~) trong một vài trường hợp khó khăn.


Cảm ơn. Có vẻ như sử dụng một định dạng tệp được phân tách với sự chăm sóc thích hợp có thể là lựa chọn tốt nhất.
Jeromy Anglim

6

Nói một cách nghiêm túc, tôi sẽ xem xét các tệp RData do chính R tạo ra vì nó phù hợp

  • đáng tin cậy (kiểm tra)
  • đơn giản (gọi nó là vẽ - định dạng là nhị phân)
  • mở (kiểm tra: không nhận được nhiều hơn mã nguồn R)
  • khả năng tương tác (kiểm tra: hoạt động ở mọi nơi R hoạt động)

Đủ gần cho tôi Nếu theo hệ thống, bạn có nghĩa là các ứng dụng chứ không phải hệ điều hành thì điểm cuối cùng là thất bại.

Ồ, và RData hoạt động hiệu quả vì các tệp hiện được nén theo mặc định (trước đây là một tùy chọn bị tắt theo mặc định).


2
RData chắc chắn hoạt động tốt với R. Nó có thể có vấn đề liên quan đến kiểm soát phiên bản. Tôi cho rằng chức năng R dput()cung cấp một sự thay thế văn bản đơn giản sẽ hoạt động với kiểm soát phiên bản. Tuy nhiên, một trong những điều hấp dẫn của csv / tsv là khi tôi chia sẻ kho lưu trữ với dữ liệu (nói về một bài báo), mọi người có thể lấy dữ liệu và phân tích lại dễ dàng bằng bất kỳ phần mềm nào họ muốn.
Jeromy Anglim

1
Vâng, nó là một vấn đề cực kỳ phức tạp. Tôi nghĩ mọi người đã thảo luận về điều này kể từ buổi bình minh của máy tính. Tôi đã có thêm hai suy nghĩ (và tôi có thể mở rộng câu trả lời của mình): ProtocolBuffers rất tốt để chia sẻ hiệu quả với Python, Java, C ++, ... và một loạt các ngôn ngữ khác; Romain và tôi trình bày R. Trang web mới mldata.org bao gồm điều này để nghiên cứu về Machine Learning - họ thậm chí còn có các công cụ mà họ có sẵn để chuyển đổi. Đó có thể là giá trị một cái nhìn.
Dirk Eddelbuettel

1
Trên thực tế, SVN có các đốm màu nhị phân như tệp pdf, v.v. Tôi nghi ngờ git cũng vậy.
Dirk Eddelbuettel

Đó là điều tốt để biết về các đốm màu nhị phân. Sẽ vẫn tốt nếu có thể chạy diff trên các tệp văn bản và nhận thông tin có ý nghĩa về các thay đổi. Cũng cảm ơn vì liên kết đến mldata.org. Điều đó có vẻ thú vị.
Jeromy Anglim

Vui lòng. Trang web chị em mloss.org đơn giản là tuyệt vời, nếu hy vọng họ có được lực kéo cho mldata.org. Thời điểm thích hợp cho việc đó.
Dirk Eddelbuettel

4

Đáp lại câu trả lời của Dirk Eddelbuettel, tôi đề nghị sử dụng định dạng tệp HDF5 . Nó ít đơn giản hơn định dạng RData, hoặc bạn có thể nói, 'giàu hơn', nhưng chắc chắn có khả năng tương tác cao hơn (có thể được sử dụng trong C, Java, Matlab, v.v.). Tôi đã thấy rằng I / O liên quan đến các tệp HDF5 lớn rất nhanh.


(+1) Bạn có nghĩ gì về hiệu suất của nó so với NetCDF không?
chl

IIRC cũng là định dạng nội bộ được chọn tại mldata.org - với bộ công cụ chuyển đổi. Các bộ chuyển đổi có thể đáng xem. Tôi luôn có cảm giác rằng R hỗ trợ cho HDF5 kém hoàn hảo.
Dirk Eddelbuettel

@chl Tôi đã mơ hồ nghĩ rằng NetCDF đã sử dụng HDF5 trong nội bộ, nhưng điều đó dường như không hoàn toàn chính xác.
shabbychef

2

Tôi không chắc tại sao định dạng văn bản cố định với dữ liệu meta phù hợp không đáp ứng tiêu chí của bạn. Nó không đơn giản để đọc như một dấu phân cách nhưng bạn cần siêu dữ liệu để sử dụng thông tin. Nhiệm vụ viết cú pháp để đọc chương trình chỉ đơn giản phụ thuộc vào cấu trúc của tập dữ liệu lớn và phức tạp như thế nào. SPSS và Excel có GUI để trợ giúp các tác vụ này.

Chỉ có hai lỗi với các tệp CSV mà tôi đã gặp:

  1. Thiếu các trường không có dấu phân cách (vì vậy mọi trường khác trong bản ghi đó bị đặt sai vị trí, tôi cũng gặp vấn đề này với các thẻ bị thiếu trong XML)
  2. Dấu phẩy trong chuỗi văn bản

(nếu bạn gặp phải các vấn đề khác, vui lòng cho ví dụ)

Hai được giải quyết bằng một dấu phân cách bất thường hơn như drnexus đã đề xuất (một đường ống (|) là một cái tôi đã gặp trước đây, nhưng một dấu ngã (~) hoạt động tốt ở chỗ không có khả năng được bao gồm trong các trường chuỗi.) Một là một vấn đề không dễ dàng giải quyết bằng bất kỳ phần mềm nào bạn đang sử dụng và cả hai đều là vấn đề với cách mọi người viết các tệp để bắt đầu, chứ không phải phần mềm được sử dụng để đọc các tệp.

Tôi cũng muốn nói rằng tôi đồng ý với drnexus trên cả chủ đề này và phản hồi của anh ấy về chủ đề gần đây khác của bạn về việc chỉnh sửa các tệp này. Bạn dường như đang phàn nàn về phần mềm bạn sử dụng (đặc biệt là Excel) và yêu cầu lưu trữ dữ liệu ở định dạng phù hợp với phần mềm bị hành xử xấu của bạn. Có lẽ câu hỏi nên là làm thế nào để Excel dừng tự động định dạng các tệp văn bản thuần túy. Tiêu chí đáng tin cậy của bạn khi nó xuất hiện với tôi là một vấn đề phần mềm với việc đọc các tệp văn bản thuần túy. Tôi không sử dụng R để quản lý dữ liệu, nhưng tôi không gặp khó khăn gì khi đọc các tệp được phân tách trong SPSS như bạn dường như đang đề xuất.

Nếu các tệp gốc không được viết đúng, điều gì khiến bạn mong đợi bất kỳ phần mềm nào đáng tin cậy để đọc tệp? Và một định dạng tệp cụ thể chắc chắn sẽ không ngăn bạn ghi dữ liệu không chính xác vào bất kỳ loại tệp nào bạn chọn để bắt đầu.


(1) Tôi muốn có thể mở và đóng tệp dữ liệu dễ dàng như tôi có thể mở tệp dữ liệu Rdata, Excel hoặc SPSS. Dành thời gian đi bộ qua một trình hướng dẫn hoạt động, nhưng nó không hoàn toàn là quy trình làm việc đơn giản và đáng tin cậy mà tôi lý tưởng. (2) Đúng, tôi đồng ý về việc sử dụng một dấu phân cách không đều. Nói chung, Tab là đủ cho tôi hầu hết thời gian; (3) Tôi không gặp vấn đề lớn với CSV / TSV. Tôi có những vấn đề không thường xuyên được giải quyết dễ dàng. Tuy nhiên, tôi không muốn phải suy nghĩ về các vấn đề của dấu phân cách và chuyển đổi định dạng.
Jeromy Anglim

@Jeromy Anglim, đối với điểm # 1, tôi đoán bạn thường chỉ phải làm điều này một lần (trừ khi bạn thường xuyên di chuyển giữa hai môi trường khác nhau mà không thể đọc hoặc xuất các tệp khác). Đối với điểm # 3, các tệp văn bản cố định khắc phục sự cố đó. Tôi chưa bao giờ gặp tình huống SPSS định dạng một loại tệp khác không chính xác. Nếu bạn không cần phổ biến các tệp thì toàn bộ câu hỏi này bị tắt tiếng, nếu bạn có thể lấy tệp để lưu chính xác trong bất kỳ môi trường nào bạn sẽ làm việc trong đó thì không cần phải chuyển đổi / lưu trữ nữa.
Andy W

1

Vấn đề phổ biến với định dạng văn bản thuần túy là nó không thể lưu trữ siêu dữ liệu. Làm thế nào để bạn xác định dữ liệu bị thiếu? Làm thế nào để bạn xác định 1 = không đồng ý mạnh mẽ, 2 = không đồng ý, ... các loại nội dung ở định dạng văn bản thuần túy? Với định dạng văn bản thuần túy, bạn phải sử dụng một tài liệu khác để xác định các siêu dữ liệu đó. Và nó không dễ thực hiện trong XML.

Đôi khi vấn đề này có thể rất đáng lo ngại.

Giải pháp của tôi là sử dụng định dạng dữ liệu SPSS, độc lập và dễ chỉnh sửa trong SPSS. Tôi biết đây không phải là một câu trả lời đúng cho câu hỏi của bạn, nhưng tôi đã phải vật lộn với cùng một vấn đề trong một thời gian rất dài và đây là giải pháp hiện tại của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.