데이터를 저장하기위한 단순하고 안정적이며 개방적이며 상호 운용 가능한 일반 텍스트 형식


17

이전 질문에서 CSV 파일 편집 도구에 대해 물었습니다 .

GavinDuncan Murdoch의 R Help에 대한 의견에 링크하여 데이터 교환 형식이 CSV보다 데이터를 저장하는 것이 더 안정적인 방법이라고 제안했습니다.

일부 응용 프로그램의 경우 전용 데이터베이스 관리 시스템이 필요합니다. 그러나 소규모 데이터 분석 프로젝트의 경우 더 가벼운 것이 더 적합합니다.

파일 형식을 평가하기 위해 다음 기준을 고려하십시오.

  • reliabile : 입력 한 데이터는 입력 한 내용을 그대로 유지해야합니다. 데이터는 다른 소프트웨어에서 지속적으로 열어야합니다.
  • 단순 : 파일 형식을 이해하기 쉽고 간단한 텍스트 편집기로 이상적으로 읽을 수 있으면 좋을 것입니다. 형식을 읽고 쓰는 간단한 프로그램을 작성하는 것이 쉬워야합니다.
  • open : 형식이 열려 있어야합니다
  • 상호 운용성 : 많은 시스템에서 파일 형식을 지원해야합니다

신뢰성 기준에서 탭과 쉼표로 구분 된 값 형식이 실패한다는 것을 알았습니다. 파일 형식이 아닌 가져 오기 및 내보내기 프로그램을 비난 할 수 있다고 생각합니다. 나는 종종 read.table이상한 캐릭터가 데이터 프레임의 로딩을 방해하는 것을 막기 위해 옵션을 약간 조정해야한다는 것을 알게 됩니다.

질문

  • 이러한 요구에 가장 적합한 파일 형식은 무엇입니까?
  • 데이터 교환 형식이 더 나은 대안입니까? 아니면 자체 문제가 있습니까?
  • 바람직한 다른 형식이 있습니까?
  • TSV 및 CSV를 부당하게 평가하고 있습니까? 파일 형식을보다 안정적으로 만드는 그러한 파일로 작업하기위한 간단한 팁이 있습니까?

2
추가해야합니다 .R에는이 없으므로 write.DIF()두려워하는 일방 통행 거리입니다.
복원 Monica Monica-G. Simpson

1
CSV 및 안정성 문제를 이해하지 못합니다. csv가 충분히 엄격하지 않다는 것을 의미합니까? 엄격함은 csv에 대한 규정이 충분히 엄격한 경우 이러한 정의를 따르는 모든 도구가 추가 매개 변수없이 파일을로드 할 수 있음을 의미합니다.
steffen

@ steffen 나는 다음과 같은 것을 의미합니다 : 일부 프로그램에서 csv 파일을로드하고 저장하면 csv 파일이 변경됩니다. csv 파일을로드하면주의하지 않으면 부적절한 변환이 발생할 수 있습니다. 적절한 이스케이프없이 이상한 문자 조합을 추가하면 csv 파일이 손상되는 경우가 있습니다. 아마도 사람들은 공식 표준이 부족하다는 의견을 들었지만 csv 사용과 형식 자체를 혼동하고 있습니다. 물론 많은 경우에 잘 작동한다는 것을 알고 있습니다.
Jeromy Anglim

5
@steffen : CSV는 파일에 저장된 데이터의 형식 또는 데이터 유형에 대한 정보를 저장하지 않습니다. 두 개의 다른 앱에서 CSV 파일을 열면 파일의 데이터를 두 가지 다른 방식으로 해석 할 수 있습니다.
복원 Monica Monica-G. Simpson

1
@JeromyAnglim, csv 파일 변경은 csv 형식 자체가 아니라 소프트웨어에 달려 있다고 생각합니다.
Roman Luštrik

답변:


9

여기에 기준 충돌이 있는지 궁금합니다.

Excel, SQL 등과 같은 파일 형식에 대한 한 가지 불만은 데이터 유형이 올바르게 작동하도록 사전에 데이터 유형을 정의해야한다는 것입니다. 전산 관련보다 관련).

반대로, 데이터를 정리하지 않거나 데이터를 정리할 수있는 기준에는 약간의 오류 검사가 필요합니다. 시스템에서 자동으로 데이터 유형 (기본적으로 Excel이 실패한 위치)을 알아 내지 않으면 케이크를 먹고 먹을 수있는 방법이 없습니다.

IMO는 두 가지 중 두 번째 기준이 더 중요합니다. 데이터 무결성이 일단 위반되면 분석이 어렵거나 불가능 해집니다. 잃어버린 관측 값 또는 유효하지 않은 값 (올바로 확인되지 않은 경우)은 모든 것을 망칠 수 있습니다.

DIF와 관련하여 실제 원시 텍스트는 사람이 읽을 수 없으며 사람이 데이터를 입력하기가 어렵습니다 (IMO).

IMO, 구분 된 파일에 공정한 흔들림을 주어야합니다. 주석에서 위에서 언급했듯이 '데이터 관리'는 대부분 사용중인 도구의 하위 집합의 결함입니다. 잘 동작하는 프로그램은 구분 된 파일을 엉망으로 만들면 안됩니다. 맨 글링의 가장 큰 원인은 잘못 지정된 구분 기호입니다. 예를 들어 데이터에 쉼표가 있으면 CSV가 부적절합니다. 탭이있는 경우 TSV가 부적절합니다. 많은 (전부는 아님) 프로그램의 경우 대체 구분 기호를 지정할 수 있습니다. 예를 들어, 몇 가지 어려운 경우에 물결표 (~)를 사용했습니다.


감사. 구분 된 파일 형식을 적절한주의를 기울여 사용하는 것이 가장 좋습니다.
Jeromy Anglim

6

진지하게, 나는 R 자체에 의해 작성된 RData 파일을 그것이 적합하다고 생각합니다.

  • 신뢰할 수있는 (확인)
  • 단순함 (그리기라고 부릅니다. 형식은 이진입니다)
  • open (확인 : R 소스 코드보다 더 개방적이지 않음)
  • 상호 운용 가능 (확인 : R이 작동하는 모든 곳에서 작동)

나를 위해 충분히 가까이 시스템에 의해 응용 프로그램 을 의미하는 경우 이 운영 체제가 아닌 하는 경우 마지막 지점은 실패입니다.

아, 그리고 RData는 파일이 기본적으로 압축되어 있기 때문에 효율적입니다 (이것은 기본적으로 꺼져 있던 옵션이었습니다).


2
RData는 확실히 R과 잘 작동합니다. 버전 제어와 관련하여 문제가 될 수 있습니다. R 함수 dput()가 버전 제어와 함께 작동하는 일반 텍스트 대안을 제공 한다고 가정합니다 . 그러나 csv / tsv의 매력 중 하나는 데이터 (예 : 저널 기사)와 저장소를 공유 할 때 사람들이 원하는 소프트웨어를 사용하여 데이터를 가져 와서 쉽게 다시 분석 할 수 있다는 것입니다.
Jeromy Anglim

1
예, 그것은 매우 복잡한 문제입니다. 나는 사람들이 컴퓨팅의 새벽부터 이것을 논의했다고 생각합니다. 두 가지 생각이 더 있었고 대답을 확장 할 수 있습니다. ProtocolBuffers는 Python, Java, C ++ 및 기타 여러 언어와 효율적으로 공유 하기에 좋습니다 . Romain과 저는 R을 다룹니다 . 새로운 사이트 인 mldata.org 는 기계 학습 연구를 위해이 사이트를 다룹 니다. 살펴볼 가치가 있습니다.
Dirk Eddelbuettel

1
실제로 SVN은 pdf 파일과 같은 이진 얼룩을 문제없이 사용합니다. git도 의심합니다.
Dirk Eddelbuettel

이진 얼룩에 대해 아는 것이 좋습니다. 텍스트 파일에서 diff를 실행하고 변경 사항에 대한 의미있는 정보를 얻을 수 있다면 여전히 좋을 것입니다. mldata.org에 링크 해 주셔서 감사합니다. 흥미로운 것 같습니다.
Jeromy Anglim

낙. 자매 사이트 mloss.org는 mldata.org에 대한 관심을 끌기 만하면 훌륭합니다. 시간이 맞습니다.
Dirk Eddelbuettel

4

Dirk Eddelbuettel의 답변에 따라 HDF5 파일 형식을 사용하는 것이 좋습니다 . RData 형식보다 간단하지 않거나 '더 풍부'하지만 확실히 더 상호 운용 가능합니다 (C, Java, Matlab 등에서 사용될 수 있음). 대용량 HDF5 파일과 관련된 I / O가 매우 빠릅니다.


(+1) NetCDF 와 비교하여 성능에 대한 생각이 있습니까?
chl

또한 IIdatamldata.org 에서 선택한 내부 형식 이며 변환 도구 모음이 있습니다. 변환기는 살펴볼 가치가 있습니다. 나는 항상 HDF5에 대한 R 지원이 그다지 완벽하지 않다는 느낌을 받았습니다.
Dirk Eddelbuettel

@chl 나는 NetCDF가 내부적으로 HDF5를 사용한다고 막연하게 생각했지만, 그것은 정확하지 않은 것 같습니다.
shabbychef

2

적절한 메타 데이터가 포함 된 고정 텍스트 형식이 기준을 충족하지 않는 이유를 잘 모르겠습니다. 구분자로 읽는 것은 간단하지 않지만 정보를 사용하려면 메타 데이터가 필요합니다. 프로그램을 읽기 위해 구문을 작성하는 작업은 단순히 데이터 세트의 구조가 얼마나 크고 복잡한 지에 달려 있습니다. SPSS와 Excel에는 이러한 작업을 도와주는 GUI가 있습니다.

내가 본 CSV 파일에는 두 가지 오류 만 있습니다.

  1. 구분 기호가없는 누락 된 필드 (따라서 해당 레코드의 다른 모든 필드가 잘못 배치되어 XML에서 누락 된 태그 로이 문제가 발생했습니다)
  2. 텍스트 문자열 내의 쉼표

(다른 문제가 발생한 경우 자유롭게 예를 들어주십시오)

drnexus가 제안한 것처럼 두 개는 더 불규칙한 구분 기호로 해결됩니다 (파이프 (|)는 이전에 만난 것이지만 물결표 (~)는 문자열 필드에 포함되지 않을 가능성도 있습니다). 문제는 사용중인 소프트웨어로 쉽게 해결할 수 없으며 둘 다 사람들이 파일을 읽는 데 사용되는 소프트웨어가 아니라 처음부터 파일을 쓰는 방식에 문제가 있습니다.

또한이 스레드와 drexeus에 동의 하여이 파일을 편집하는 다른 스레드에 대한 그의 응답 에 동의 합니다. 사용하는 소프트웨어 (특히 Excel)에 대해 불만을 품고 악의적 인 소프트웨어에 맞는 형식으로 데이터를 저장하도록 요청하는 것 같습니다. 어쩌면 문제는 Excel에서 일반 텍스트 파일의 자동 서식을 중지시키는 방법입니다. 나에게 나타나는 신뢰할 수있는 기준은 일반 텍스트 파일을 읽을 때 발생하는 소프트웨어 문제입니다. 데이터 관리에 R을 사용하지는 않지만 제안한 것처럼 SPSS에서 구분 파일을 읽는 데 어려움을 겪지 않았습니다.

원본 파일이 올바르게 작성되지 않은 경우 어떤 소프트웨어가 파일을 안정적으로 읽을 것으로 예상합니까? 그리고 특정 파일 형식을 사용하면 시작하기로 선택한 파일 형식에 데이터를 잘못 쓰는 것이 확실하지 않습니다.


(1) Rdata, Excel 또는 SPSS 데이터 파일을 열 수있는 것처럼 데이터 파일을 쉽게 열고 닫을 수 있기를 원합니다. 마법사를 통해 걷는 시간은 효과가 있지만 이상적으로는 간단하고 신뢰할 수있는 워크 플로가 아닙니다. (2) 예, 불규칙한 구분 기호를 사용하는 것에 동의합니다. 일반적으로 Tab은 대부분의 경우 충분합니다. (3) CSV / TSV에는 큰 문제가 없습니다. 간혹 해결되는 문제가 있습니다. 그러나 구분 기호 및 형식 변환 문제에 대해 생각할 필요가 없습니다.
Jeromy Anglim

@Jeromy Anglim, 포인트 # 1의 경우 다른 파일을 읽거나 출력 할 수없는 두 개의 다른 환경간에 자주 마이그레이션하지 않는 한 일반적으로 한 번만 수행하면된다고 생각합니다. 포인트 # 3의 경우 고정 텍스트 파일이 해당 문제를 해결합니다. SPSS가 다른 파일 형식을 잘못 형식화 한 상황을 본 적이 없습니다. 파일을 배포 할 필요가없는 경우이 전체 질문은 무시됩니다. 작업중인 환경에 파일을 올바르게 저장하려면 더 이상 변환 / 저장이 필요하지 않습니다.
Andy W

1

일반 텍스트 형식의 일반적인 문제는 메타 데이터를 저장할 수 없다는 것입니다. 누락 된 데이터를 어떻게 정의합니까? 평범한 텍스트 형식으로 1 = 강하게 동의하지 않음, 2 = 동의하지 않음, 종류를 어떻게 정의합니까? 일반 텍스트 형식에서는 다른 문서를 사용하여 해당 메타 데이터를 정의해야합니다. 그리고 XML로하는 것은 쉽지 않습니다.

때때로이 문제는 매우 혼란 스러울 수 있습니다.

내 솔루션은 SPSS 데이터 형식을 사용하는 것인데,이 형식은 자체 포함되어 있으며 SPSS에서 쉽게 편집 할 수 있습니다. 나는 이것이 귀하의 질문에 대한 정답이 아니라는 것을 알고 있지만, 오랫동안 같은 문제로 어려움을 겪어 왔으며 이것이 현재의 해결책입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.