CSV (쉼표로 구분 된 값) 파일 편집 전략


18

데이터 분석 프로젝트를 수행 할 때 종종 데이터를 쉼표 또는 탭으로 구분 된 (CSV, TSV) 데이터 파일에 저장합니다. 데이터는 종종 전용 데이터베이스 관리 시스템에 속합니다. 내 응용 프로그램의 많은 경우이 작업을 과도하게 수행 할 수 있습니다.

Excel (또는 다른 스프레드 시트 프로그램)에서 CSV 및 TSV 파일을 편집 할 수 있습니다. 이점이 있습니다.

  • 스프레드 시트로 데이터를 쉽게 입력 할 수 있습니다

몇 가지 문제가 있습니다.

  • CSV 및 TSV 파일로 작업하면 다양한 기능이 손실되고 활성 시트 만 저장되는 방법 등에 대한 광범위한 경고 메시지가 나타납니다. 따라서 파일을 열고 약간의 변경을 원한다면 성가신 일입니다.
  • 많은 "현명한"변환을 수행합니다. 예를 들어 12/3를 입력하면 날짜를 입력한다고 생각합니다. 업데이트 : 날짜 예제는 많은 예제 중 하나 일뿐입니다. 대부분의 문제는 부적절한 전환과 관련이있는 것 같습니다. 특히 숫자 나 날짜처럼 보이는 텍스트 필드는 문제를 일으 킵니다.

또는 표준 텍스트 편집기에서 텍스트 파일로 직접 작업 할 수 있습니다. 이것은 내가 입력 한 것이 기록되는 것을 보장합니다. 그러나 데이터를 입력하는 것은 매우 어색한 방법입니다 (열은 정렬되지 않습니다. 단순히 여러 셀에 데이터를 입력하는 것은 어렵습니다).

질문

  • CSV 또는 TSV 데이터 파일 작업을위한 좋은 전략은 무엇입니까? 즉, 어떤 전략을 사용하여 데이터를 쉽게 입력하고 조작하면서 입력 한 내용이 실제로 올바르게 해석되도록 할 수 있습니까?

1
실제로 파일에서 어떤 종류의 작업을 수행합니까? 내 마음에, 그것은 수용 가능한 옵션의 범위에 큰 영향을 미칩니다. 또한 워드 프로세서가 "스마트 한"변환을 수행하지 않도록 설정하고 일반 텍스트로 저장할 수있는 한 워드 프로세서에서 TSV 데이터를 편집하고 탭을 정렬하여 열을 보존 할 수있는 것 같습니다. .
Wayne

@ 웨인 좋은 지적. 스프레드 시트 프로그램으로 자랐기 때문에 익숙한 바로 가기 (기능, 복사 및 붙여 넣기, 추가 열 추가 등)가 많이 있습니다. 여기서는 데이터 분석에 대해 이야기하는 것이 아니라 단순한 테이블 형식 데이터 파일 (예 : R 코드를 처리하는 데 필요한 일부 메타 정보) 만 작성하는 것입니다. R에서 이러한 기본 테이블 조작을 모두 할 수는 있지만 나에게는 직관적이지 않습니다. 아마도 시간이 지남에 따라 R에서 csv를 열고 약간의 변경을 한 다음 다시 저장하면 내가 선호하는 옵션이 될 것입니다.
Jeromy Anglim

답변:


14
  1. R에 익숙하다면 기본 data.frame을 만든 다음 fix () 함수를 사용하여 데이터를 입력 할 수 있습니다. # 5와 같은 행을 따라 data.frame을 설정하면 일련의 readLines (n = 1) (또는 무엇이든)를 사용하여 데이터를 가져 와서 확인하고 다음을 추가 할 수있는 기회를 제공 할 수 있습니다 열. 그런 다음 fix ()에 고정을 두십시오. scan ()을 사용하여 아래 구현 된 예를 참조하십시오.

  2. Excel의 다른 옵션은 복잡하지만 12/9를 입력 한 다음 다른 열에 = IFERROR (MONTH (DateEntryCell) / DAY (DataEntryCell), DataEntryCell)를 평가할 수 있습니다. 그러나 엑셀 시트와 csv 시트를 유지해야하며 csv를 작성할 때의 모든 불만은 지속됩니다.

  3. 또는 필드가 비교적 짧고 길이가 일정한 경우 일반 텍스트 편집기가 TSV를 잘 지원해야합니다. 완료되면 항상 엑셀에로드 할 수 있으며 각 행의 열 수를 원하는대로 유지할 수 있습니다.
  4. Emacs는 여러 플랫폼에서 사용할 수 있으며 http://www.emacswiki.org/emacs/CsvMode 와 같이이 플랫폼에 적합합니다 .
  5. 당신이 왕성한 영혼이라면, 데이터 입력을하기 위해 프로그래밍 언어로 빠르게 무언가를 프로그래밍하는 것은 사소한 일이며, 데이터 편집은 훨씬 더 어려울 것입니다.
  6. 빠른 Google 검색은 이러한 목적으로 만 소프트웨어를 보여 주지만 무료 소프트웨어는 좋지 않은 것 같습니다.
  7. 미친 소리처럼 들리지만 수퍼 유저의 누군가가 액세스 테이블을 편집 한 다음 CSV로 내보내는 것이 좋습니다.
  8. .csv로 저장해도 문제가 해결되는 것을 막을 수는 없지만 데이터 입력 필드 앞에 단일 아포스트로피를 입력하면 자동 서식 지정 측면에서 단독으로 사용할 수 있습니다. 다행히도 Office 2007에서는 csv 파일에 아포스트로피가 남지 않습니다.

업데이트 : 나는이 문제도 있기 때문에이 문제에 대해 많이 파고 들었습니다. 지금까지 내가 본 데이터 입력을위한 가장 좋고 쉬운 솔루션은 KillinkCSV 입니다. "무료"소프트웨어는 아니며 30 일의 평가판 기간과 합리적인 가격 (~ $ 27)의 쉐어웨어입니다. 그래도 기존 CSV를 편집하는 데 얼마나 신뢰할 수 있는지 잘 모르겠습니다.이 파일은 엄청나게 큰 (아마도 형식이 좋은) CSV를 전달하여 모든 행을 읽지 못했습니다. 그러나 합리적으로 큰 파일 (20MB)에서는 제대로 작동하는 것으로 보였으며 더 큰 파일의 문제는 내 사용자 오류 일 수 있습니다.

R 예 :

#This function takes a what argument like in scan, 
#a list with the types to be used, see usage example 
#at the end of this code block
#dataEntry will keep reading in values until 
#the values it reads in matches what is in 
#"terminateon".
#limitations: Many
dataEntry <- function(what,terminateon)
{
  CONTINUE <- TRUE #Make sure we start the loop
  data <- NULL #Create empty data so that the data.frame can define itself
  ti <- NULL
  while(CONTINUE)
  {
    ti <- NULL    
    ti <- tryCatch(
      {as.data.frame(scan(what=what, nlines=1, multi.line=FALSE, comment.char="",quiet=TRUE))},
      error=function (e) {print("Error in data entry! Line not stored.")
                          return(NULL)},
      warning=function(w) {print("Error in data entry! Line not stored.")
                           return(NULL)},
      finally={ti <- NULL}
    ) #Try getting the data according to the parameters in 'what' one row at a time.
    if (!is.null(ti))
    {
      if ((ncol(ti)==length(what)) & (nrow(ti)==1)) {
        data <- rbind(data,ti) #If there wasn't an error, add ti to the previous value  
      } else {
        print("Too many or not enough values on previous entry.")
        print("Tail of current data:")
        print(tail(data))
      }
    }
    if (!is.null(ti) & all(ti == terminateon)) 
    {
      CONTINUE <- FALSE
      data <- data[-c(nrow(data)),]
    } #if we've recieved the final value we won't continue and the last row is invalid so we remove it
  }
  return(data)
}

dataEntry(list(x=integer(), y=numeric(), z=character()),terminateon=c(999,999,"Z"))

그래, 이미 데비안 / 우분투 패키지 csv-mode.el덕분에 이미 설치되어 있음이 밝혀졌습니다 emacs-goodies-el.
Dirk Eddelbuettel

1
+1, 포인트 # 1의 경우 내가 작업 한 모든 stat 소프트웨어 (R, Stata, SPSS 및 SAS 제외)는 이러한 유형의 기능을 제공합니다. 따라서 귀하의 조언은 누군가가 작업하고자하는 소프트웨어에 대해 일반화됩니다.
Andy W

5

업데이트 : [R- 도움말에서 많은 수의 전자 메일을 처리하고 있습니다] " 동작의read.csv() " 에 대한 스레드가 생각납니다 . Duncan Murdoch는 Jeromy가 언급 한 몇 가지 이유로 csv 대신 DIF (Data Interchange Format) 파일 을 사용하는 것을 선호한다고 언급했습니다. 방금 이것을 시도하고 Gnumeric이 잘못 가져옵니다 (12/3를 날짜로로드)하지만 OpenOffice.org는 이것을 올바르게 읽고 12/3 정보를 그대로 유지합니다. (MS Excel에서 이것을 확인하려는 사람이 있습니까?)

DIF 파일은 일반 텍스트이며 스프레드 시트에서 읽을 수 있으며 R (최근 R 개정판 (SVN 개정판> = r53778)을 사용하는 한)은 올바른 형식으로 데이터를 읽습니다.


원본 : 가능할 때마다 데이터 편집 / 조작을 위해 스프레드 시트를 완전히 사용하지 않으려 고합니다. 기존 데이터 세트에 대한 변경 사항을 문서화하여 재현 가능한 연구 관점에서 거의이를 배제하는 것은 불가능하지는 않지만 매우 어렵습니다. 기껏해야 스프레드 시트를 사용하여 기존 데이터를 빠르게 볼 수 있습니다.

데이터 처리의 경우 원시 csv 파일을 가져와 필요한 모든 처리 단계를 적용하는 R 스크립트를 작성하는 경향이 있습니다. 각 단계에서 내가하고있는 일과 그 이유를 정확하게 설명하기 위해이 스크립트에 대해 크게 언급합니다. 내 데이터 분석 스크립트는 데이터를로드하고 처리하는 데이터 처리 스크립트를 호출합니다.

데이터 입력의 경우 텍스트 편집기 나 스프레드 시트에 데이터를 입력하는 것이 더 번거 롭습니까? 후자에 대해 언급 한 문제가 텍스트 편집기에 CSV 데이터를 입력하려는 문제보다 중요하지 않다고 생각합니다.

더 나은 스프레드 시트를 시도 할 수 있습니다. OpenOffice.org는 열의 형식을 먼저 "숫자"로 지정하더라도 12/3를 날짜로 형식화하지 않거나 숫자 형식으로 변환하지 않습니다. 반면에 숫자는 열을 "숫자"로 먼저 형식을 지정 하면 12/3로 그대로 남습니다 .

'항목 앞에 붙임으로써 OpenOffice.org가 12/3를 날짜로 다시 포맷하지 않도록 할 수 있습니다 . 즉 '12/3, 스프레드 시트에서 12/3로 표시되고 텍스트로 저장됩니다. 이것은 아마도 사용하기에 안전합니다.

왜 텍스트 파일에 12/3로 12/3를 숫자로 저장하고 싶은지 잘 모르겠습니다. R과 같은 것을 어떻게 읽어야합니까?

기능 손실 또는 활성 시트 저장에 대한 경고에 대한 귀하의 의견은 실제로 문제가되지 않습니까? (만약 그렇다면, 나는 내 인생에서 당신의 문제를 원합니다 ;-)


재현 가능한 연구와 관련하여 파일 형식이 CSV 인 경우 변경이 이루어질 때 커밋을 통해 CSV 파일을 쉽게 버전 관리 할 수 ​​있습니다. 이것이 재현 가능한 연구에 충분할까요? 데이터 입력과 관련하여 효율성을 극대화하기 위해 종종 다른 사람들이 고정 너비 형식으로 원시 데이터 입력을 수행하도록합니다. 그러나 CSV 또는 TSV로 데이터를 저장하는 것을 선호합니다 (더 투명하다는 것을 알았습니다). 열을 숫자로 형식화하는 것과 관련하여. 이 정보는 저장시 손실 될 수 있습니다.
Jeromy Anglim

12/3와 관련하여 12를 3으로 나눈 객관식 테스트의 예를 보았습니다. 그러나 나는 이것을 예시적인 예로 더 많이 사용합니다. CSV 파일이 크면 부적절한 변환을 원하지 않습니다. 경고와 관련하여 하루에 10 번 CSV 파일을 열면 경고가 지루합니다. 또한 실제로 CSV 파일을 저장했는지 여부를 명확하지 않습니다. 폭도 미안합니다.
Jeromy Anglim

@Jeromy 예, 즉시 저장하고 커밋하는 단일 변경 (또는 단일 데이터 처리 단계)을 엄격히 수행하는 것이 좋습니다. 스크립트를 사용하여 R에서 처리하는 방법에 대한 메모를 포함하지 않습니다. 그것이 제가 데이터 동료들과 함께 일하는 방식입니다. 스프레드 시트를 간략하게 살펴본 다음 csv를 R로 읽고 적용 해야하는 모든 데이터 처리 단계가 포함 된 스크립트를 작성하십시오. 그런 다음 해당 스크립트에 주석을 달아서 내가 한 일과 내가 왜 그 일을했는지 ​​기록하고 원본 데이터 파일을 전혀 변경하지 않았습니다.
복원 Monica Monica-G. Simpson

@Jeromy : 경고에 대한 적절한 지적. 나는 그들을 소음으로 걸러 낸 지 오래되어서 귀찮게하지 않았습니다. 방금 Gnumeric과 OpenOffice.org를 테스트했으며 12/3의 csv를 자동으로 날짜로 변환합니다. 무슨 말인지 알 겠어요 이를 중지하는 유일한 방법은 해당 데이터를 텍스트로 저장하고로드 / 가져 오기시 해당 데이터 유형을 강제하는 것입니다.
복원 Monica Monica-G. Simpson

@Jeromy : re : 숫자 형식 손실-예, 가져올 때 열 형식을 (OpenOffice.org)에서 "숫자"(숫자) 또는 "텍스트"로 지정하지 않는 한 가능합니다. 더 나은 변환을 방지하기 위해 (내 편집 대답을 참조) 텍스트로 저장할 수 있습니다 - 당신은 여전히 ... 가져올 때 데이터 형식을 지정해야합니다
분석 재개 모니카 - G. 심슨

3

google refine (http://code.google.com/p/google-refine/)를 참조하십시오. CSV 파일을 편집하는 데 매우 유용한 도구라고 생각합니다


이것이 질문 의 전략 요청에 어떻게 반응하는지 설명해 주 시겠습니까?
whuber

3

CSV와 TSV 파일을 함께 사용하지 마십시오. 대신 SQL 사용법을 배우고 데이터의 데이터 마트 또는 데이터베이스 (DB) 사본에서만 작동하거나 데이터베이스에 대한 경유 연결로 SAS 또는 R을 사용할 수 있습니다. 이렇게하면 Excel (또는 사용중인 스프레드 시트 프로그램)에서 두려운 찾기 및 바꾸기를 수행하거나 복사 및 붙여 넣기 대신 데이터를 대량으로 업데이트하여 오류가 발생하기 쉽습니다. DB 시스템을 사용하면 얻을 수있는 이점은 오류가 발생하여 모든 변경 사항을 감사 할 수있는 경우 로깅을 활성화하고 변경 사항을 신속하게 롤백 할 수 있다는 것입니다. 또한 DB 테이블에 무결성 제약 조건을 적용하여 부적절하다고 생각되는 방식으로 변수 / 열을 실수로 업데이트하거나 변경하지 않도록 할 수 있습니다 (예 : 날짜는 날짜로 유지되고 기타 정보는 적절하게 유형 캐스팅됩니다). 내가이 겄어'

스프레드 시트가 어떤 식 으로든 데이터 입력 기능을 제공하기 때문에 스프레드 시트를 좋아하는 경우 데이터베이스와 함께 제공되는 그래픽 사용자 인터페이스 도구 / IDE (예 : Microsoft Management Studio)를 사용하거나 연결된 버전을 가져 와서 사용했던 모든 데이터베이스에서 극복 할 수 있습니다. 데이터를 입력하고 데이터 제한 조건 (예 : Access의 링크 된 테이블 양식 또는 사용자 정의 웹 인터페이스)을 적용하기 위해 특별히 설계된 시스템으로 또한 두 프로그램 모두를 최대한 활용하고 Excel에서 데이터를 업데이트하고 변경 사항을 데이터베이스에 전파 할 수있는 다른 프로그램을 사용할 수도 있습니다 ( 예 : https://www.youtube.com/watch?v=5iyuF_mDSac 참조 ) .


2

이 질문을 한 후 CSVed를 살펴보기 시작했습니다 .

웹 사이트에서 :

CSVed는 쉽고 강력한 CSV 파일 편집기로 구분 기호로 구분하여 CSV 파일을 조작 할 수 있습니다.

누구든지 경험이 있는지 확실하지 않습니다.


설치를 시도했습니다. 빠른 시도 후 데이터 입력을위한 쓰레기처럼 보였다; 어쩌면 더 길게 시도하면 효과적으로 사용하는 방법을 알 수있을 것입니다.
russellpierce

이것이 질문 의 전략 요청에 어떻게 반응하는지 설명해 주 시겠습니까?
whuber

2

Excel은 CSV에 익숙하지 않습니다. 예를 들어 Excel에 "1,300"을 입력하고 쉼표로 구분 된 값으로 저장하면 가능합니다. 이것은 큰 문제 일 수 있습니다 (다른 사람들로부터 파일을받을 때 정기적으로 발생합니다).

필자는 개인적으로 OpenOffice.org Calc를 사용하고 위에 나열된 많은 솔루션을 사용하지만이 중 다수는 정기적 인 편집에 필요한 기능과 사용 편의성을 가지고 있지 않습니다. OOO Calc는 Excel보다 훨씬 지능적입니다. 비록 스프레드 시트 프로그램이지만 "12/3"대신 "= 12 / 3"를 입력해야합니다. 그렇지 않으면 계산 대신 값을 입력하게됩니다.

소용돌이를 주면 실망하지 않을 것입니다.


1

Gnumeric은 다른 사람들처럼 바보 같은 기능을하지 않으려 고 노력하지 않기 때문에 (기능 손실에 대해 소리 지르지 않음) 대용량 데이터로 작동하지만 Linux 전용이라고 생각합니다.


1
이 질문에 따라, 나는 사냥을했다 : Windows 버전이 있습니다 projects.gnome.org/gnumeric/downloads.shtml
Jeromy Anglim

1
그것은 현재 시트 만 저장하는 것에 대해 경고하지만 (Jeromy의 버그 곰 중 하나였습니다) 가져 오기 할 때 수동으로 숫자를 지정하지 않으면 제대로 저장된 12/3 숫자를 날짜로 변환하는 성가신 기능이 있습니다 (데이터> 가져 오기 외부 데이터> 텍스트 파일 가져 오기 ...)가로드되지 않습니다.
복원 Monica Monica-G. Simpson

이것이 질문 의 전략 요청에 어떻게 반응하는지 설명해 주 시겠습니까?
whuber

1

Ron 's Editor 만 사용하십시오 . '도움말'이없는 Excel과 같습니다.

사이트에서 :

Ron의 편집기는 강력한 표 형식 텍스트 또는 CSV 편집기입니다. 표준 쉼표 및 탭으로 구분 된 파일 (CSV 및 TSV)을 포함하여 모든 형식의 분리 된 텍스트를 열 수 있으며 내용과 구조를 완전히 제어 할 수 있습니다.

표 형식의 텍스트 파일을 편집 할 수있을뿐만 아니라 강력한 분석 기능을 추가하여 필요한만큼 많은 추가보기로 쉽게 필터링하고 요약 할 수 있습니다.

  • 라이센스 : 개인 사용 / 평가 무료
  • 다음에서 실행됩니다 : Windows 32 / 64-bit 2000 / XP / 2003 / Vista /

이것이 질문 의 전략 요청에 어떻게 반응하는지 설명해 주 시겠습니까?
whuber

1

개인적으로 "관계형 데이터베이스"라는 아이디어를 사용하여 CSV 파일을 관리하고 싶습니다. CSV 파일은 교환 데이터에는 좋지만 비즈니스 로직은 없습니다. CSV 작업에 대한 저의 경험은 "분석을 세분화하기 위해 비즈니스에 많은 반복이 있다는 것"입니다. 일반 텍스트 파일 (CSV) 만 사용하면 많은 문제가 발생합니다. 예를 들어 CSV 파일에는 "데이터를 고유하게 만드는 것", 즉 "각 행의 기본 키"가 표시되지 않습니다. 나중에 다른 데이터 소스를 결합 할 때 큰 문제가 발생합니다.

SQLite 는 CSV를 관계형 데이터베이스로 만드는 좋은 도구이며 CSV와 유사하며 교환이 쉽고 서버 설정이 필요하지 않습니다. 더 중요한 것은 R다른 통계 소프트웨어 에서도 잘 지원되었습니다 .

내 전략은 항상 관계형 데이터베이스에서 "정리 된 데이터"를 유지하는 것입니다. 그리고 각 테이블의 기본 키를 명확하게 유지하십시오.

다음은 실제 단어로 발생할 수있는 예입니다 (책을 판매한다고 가정).

  • 1 일째에 모든 고객 정보가 포함 된 CSV 파일을 받았습니다.
  • 2 일째에 모든 제품 (도서) 정보가 포함 된 다른 CSV 파일을 받았습니다. 어떤 이유로 비즈니스에서 ISBN을 사용할 수 없다고 말했으며 도서 이름과 저자 이름의 조합이 기본 키입니다.
  • 3 일째, Business found book edition을 고려해야하며 day2의 CSV를 "덮어 쓰기"하기 위해 다른 CSV를 보냅니다.
  • 4 일째, 비즈니스에서 찾은 고객 정보 (예 : 주소 변경)는 업데이트 된 버전의 고객 정보를 보냅니다.

이제 깨끗한 데이터의 이점을보고 관계형 데이터베이스에 유지할 수 있습니다. 고객 ID를 기본 키로하고 책 이름, 저자 및 에디션을 기본 키로 사용하십시오. 데이터를 업데이트하고 필요에 따라 변경 사항을 통합하는 것은 매우 쉽습니다. 또한 기본 키는 새로운 데이터에 대한 "제약"및 "위생성 확인"도 제공합니다.


0

Excel의 "데이터 가져 오기"기능을 사용하면 각 열의 데이터 유형을 선택할 수있는 옵션이 제공됩니다. 모든 열을 선택하고 "텍스트"데이터 유형을 사용할 수 있습니다.


이것이 질문 의 전략 요청에 어떻게 반응하는지 설명해 주 시겠습니까?
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.