데이터 정리를위한 체계화 된 프로세스


34

R을 사용하여 데이터 과학을 제한적으로 사용하면서 나쁜 데이터를 정리하는 것이 분석을 위해 데이터를 준비하는 데 매우 중요하다는 것을 깨달았습니다.

데이터를 처리하기 전에 데이터를 정리하는 모범 사례 나 프로세스가 있습니까? 그렇다면 이러한 모범 사례 중 일부를 구현하는 자동 또는 반자동 도구가 있습니까?


1
아마도 데이터 정리에서 의미하는 바를 조금 지우는 것이 좋은 생각 입니다. 내 의견으로는 약간 혼란스러워 보입니다
MolbOrg

2
청소 데이터가 무엇을 의미하는지 자세히 설명하면 도움이됩니다. 내가 일하는 맥락에서 정리는 형식화와 관련이 없습니다. 파싱 / 가져 오기라고 부릅니다. 그러나 시끄러운 사용자 데이터를 말하고 일관성을 확인하는 것입니다. 사용되는 기술은 단순한 통계 규칙에서 퍼지 알고리즘에 이르기까지, 특히 데이터가 드문 경우에 사용되는 데이터 세트입니다.
AdrianBR

답변:


21

R 일부 포함 표준 그것의 데이터 세정에 사용될 수있는 데이터 조작 기능, 기본 패키지 ( gsub, transform예컨대, 등)뿐만 아니라 다양한 외부 패키지 stringr , 모양 변경 / reshape2을 하고 plyr / dplyr . 예를 들면 이러한 패키지에 대한 사용의 모범 사례와 그 기능은 다음 종이에 설명되어 있습니다 http://vita.had.co.nz/papers/tidy-data.pdf .

또한 R은 데이터 정리 및 변환에 특별히 초점맞춘 일부 패키지를 제공합니다 .

에 대한 포괄적이고 일관성있는 접근 청소 데이터 예와의 사용을 포함하여 R에, editrulesdeducorrect 패키지뿐만 아니라 설명 워크 플로우 ( 워크 R에 청소 데이터)를, 내가보기 엔 추천하는 다음과 같은 논문에서 제시 : HTTP : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .


2
또한 dplyr특정 plyr도구 의 최적화 된 표현이며 data.table데이터 조작에 대한 완전히 다른 접근 방식 인을 추가합니다. 해들리 위컴
shadowtalker

@ ssdecontrol : 동의합니다-답변을 업데이트했습니다. Hadley는 dplyr패키지 의 저자 이지만 패키지 의 저자는 아닙니다 data.table.
Aleksandr Blekh

16

내 관점에서 볼 때이 질문은 2 단계 답변에 적합합니다. 첫 번째 부분은 소프트 전처리 라고 부르며 , 추가 분석에 적합한 방식으로 데이터를 전처리하기 위해 다른 데이터 마이닝 알고리즘을 사용하는 것으로 간주 할 수 있습니다. 목표가 한 번에 해결하기에 충분히 단순 할 경우에는 분석 자체가 될 수 있습니다.

두 번째 부분 인 하드 프리 프로세싱 은 실제로 다른 프로세스보다 우선하며, 데이터를 정리하고 처리 할 특정 컨텐츠를 선택하는 간단한 도구 또는 스크립트의 사용으로 간주 될 수 있습니다. 이 문제에 대해 POSIX는 간결하고 강력한 전처리 스크립트를 작성하는 데 사용할 수있는 놀라운 도구를 제공합니다.

예를 들어, 소셜 웹 사이트 (twitter, facebook 등)에서 오는 데이터를 다루는 사람들의 경우, 데이터 검색은 대개 매우 구체적인 형식의 파일을 생성합니다. . 이러한 경우 간단한 awk스크립트로 데이터를 정리하여 나중에 처리 할 수있는 유효한 입력 파일을 생성 할 수 있습니다. 마법 세트에서 하나도 지적 할 수있다 grep, sed, cut, join, paste, sort, 및 기타 도구의 전체 무리입니다.

소스 파일이 단순 할 경우 너무 많은 값이있는 경우 데이터 정리를위한 메소드 번들을 생성해야 할 수도 있습니다. 이러한 경우 일반적으로 Python, Ruby 및 Perl과 같은 스크립팅 언어 (쉘 언어 이외의 언어)를 사용하는 것이 좋습니다. 이를 통해 API 를 구축 하여 매우 간단하고 재사용 가능한 방식으로 특정 데이터를 선택할 수 있습니다. 이러한 API 는 때때로 IMDbPY , Stack Exchange API 등의 작성자가 공개적으로 공개 합니다.

질문에 대답하십시오 : 모범 사례가 있습니까? 일반적으로 작업에 따라 다릅니다. 항상 동일한 데이터 형식을 다루는 경우 사전 처리를 위해 체계화 된 스크립트를 작성하는 것이 가장 좋습니다 . 반면 일부 데이터 세트에서 간단하고 빠른 정리가 필요한 경우 POSIX 도구를 사용 하여 Python 스크립트보다 훨씬 빠르게 전체 작업을 수행하는 간결한 쉘 스크립트를 사용하십시오 . 때문에 정리가 데이터 세트에 당신의 목적에 모두 의존, 그것은 모든 것을 이미 수행이 어렵다. 그러나 문제를 절반 정도 해결하는 API가 많이 있습니다.


hm-데이터 가져 오기, 데이터 형식 지정 (awk sed grep stuff), 첫 단계로 노이즈 제거, 더 깊이 들어가기 당신의 열을 사용하는 경우, 어려운 전처리 가 처음에 온 것은 아닙니다
MolbOrg

@MolbOrg 예, 그게 제가 의미 한 바입니다. 필자 는 스크립팅 측면 에서 하드 전처리를 호출 하고 일반적으로 문제 의 크기 를 줄이는 데이터 마이닝 알고리즘을 사용 하여 소프트 전처리를 호출했습니다 (데이터베이스 정리). 또한 두 번째 부분 인 하드 전처리는 실제로 다른 프로세스보다 우선 합니다 . 그러한 용어로 명확하지 않은 경우 답변을 개선하기 위해 다른 제안을 기꺼이 고려하겠습니다.
Rubens

1
아 예, 원시 데이터 전처리에 충분한주의를 기울이지 않았다 . 테스트 된 atm-yes perl oneliner는 300MB에서 3.5kk 문자열에 대해 3 배 느리고 grep), perl의 경우 1.1 초, grep 0.31 초의 경우. 포인트는 펄 정규 표현식이 느린 것을, 훨씬 느린 다음 연습에있을 수 있습니다 I 톱 기사 (난이 너무 그렙에 대해서도 의심) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg

@ MolbOrg 멋진 참조! AFAIK grep는 기본적으로 POSIX 기본 정규식을 사용하며로 실행될 때 확장 POSIX 정규식을 허용 grep -E하고로 실행될 때 PCRE를 허용합니다 grep -P.
Rubens

1
이것은 매우 좋은 게시물입니다. R은 데이터 조작 에는 탁월 하지만 문자열 조작에 대한 자세한 구문과 데이터 구조에 대한 목록 및 행렬에 대한 엄격한 준수로 인해 데이터 정리 가 매우 번거로울 수 있습니다 .
shadowtalker

11

데이터 정리가 거의 자동화되지 않는 한 가지 이유는 특정 문제, 방법 및 목표가 주어지면 "깨끗한"의 의미를 정의하는 데 필요한 많은 판단이 필요하기 때문입니다.

누락 된 데이터에 대한 값을 전가하는 것처럼 간단하거나 이전 자동화 프로세스의 데이터 입력 오류 또는 데이터 변환 오류 (예 : 코딩, 검열, 변환)를 진단하는 것만 큼 복잡 할 수 있습니다. 이 마지막 두 경우에는 데이터가 외형 적으로 좋아 보이지만 실제로는 잘못되었습니다. 이러한 진단에는 종종 수동 분석 및 검사와 사용 된 데이터 소스 및 방법에 대한 정보와 같은 대역 외 정보가 필요합니다.

또한 일부 데이터 분석 방법은 잘못되었거나 누락 된 데이터가 대치되거나 기본값이 아닌 공백으로 남아 있거나 N / A 인 경우 더 잘 작동합니다. 이는 Dempster-Shafer Belief 기능과 같이 불확실성과 무지가 명시 적으로 표현 된 경우에 해당됩니다.

마지막으로 청소 프로세스에 대한 특정 진단 및 메트릭을 갖는 것이 유용합니다. 누락되거나 잘못된 값이 임의로 분포되거나 분석 결과에 영향을 줄 수있는 방식으로 집중되어 있습니까? 대체 클리닝 전략 또는 알고리즘의 효과를 테스트하여 최종 결과에 영향을 미치는지 확인하는 것이 좋습니다.

이러한 우려를 감안할 때, 데이터 정리를 피상적이거나 무심하거나 완전 자동화 된 방식으로 처리하는 방법이나 프로세스가 매우 의심 스럽습니다. 그 세부 사항에 많은 악마가 숨어 있으며 심각한주의를 기울이는 것은 비용을 지불합니다.


1
부수적 인 의견으로 : 파이프 라인에서 일부 문제로 인해 잘못된 데이터를 발견하는 것이 금 기술이라고 생각합니다. 여러 번 나는 왜 나의 분석이 이상한 결과를 낳는 지 궁금해했고 파이프 라인을 볼 때 어떤 종류의 오류를 발견했다. 예 : 나는 왜 내 모든 데이터가 내 정신 모델에서 벗어나 높은 가격으로 치우친 이유를 궁금해했습니다. 내가 주변에 물었을 때, 일부 하청 업체가 브리핑을 이해하지 못하고 고소득층에 대한 데이터를 전달했으며, 혼합 된 데이터를 원한다는 것을 알았습니다 ...
Christian Sauer

예! 데이터 오류는 종종 프로세스 문제의 징후입니다. 프로세스에서 오류가 발생한 위치와 메커니즘을 알면 청소 프로세스에 큰 도움이됩니다. 그러나 프로세스 문제를 해결하여 깨끗한 (또는 더 깨끗한) 데이터를 생성하는 것이 좋습니다.
MrMeritology

5

자동 정리 정보 : 오류 수와 오류 정의는 종종 데이터에 따라 다르므로 실제로 데이터를 자동으로 정리할 수 없습니다. 예 : 열 "수입"에 음수 값이 포함되어있을 수 있습니다.이 경우 오류가 발생합니다. 사례에 대해 뭔가를해야합니다. 반면에 "매월 절약"열에는 부의 값이 포함될 수 있습니다.

이러한 오류는 도메인에 따라 크게 달라 지므로 오류를 찾으려면 사람이 능가하는 자동화 된 프로세스 인 도메인 지식이 있어야합니다.

자동화 할 수있는 곳과 반복되는 곳은 반복되는 프로젝트입니다. 예를 들어 매월 생산해야하는 보고서. 오류를 발견하면 몇 달 안에 이러한 종류의 오류를 발견 할 수있는 자동화 된 프로세스를 배치해야하므로 시간이 절약됩니다.


5

실제 연구를하기 전에 데이터를 "정리"하는 보편적 인 기술은 없다고 생각합니다. 다른 한편으로, 나는 가능한 많은 재현 가능한 연구 를하는 것을 목표로하고 있습니다. 재현 가능한 연구를 수행하여 버그 나 불량한 매개 변수 / 가정과 함께 클리닝 기술을 사용한 경우 다른 사람이 발견 할 수 있습니다.

재현 가능한 연구에 많은 도움이되는 멋진 R 패키지 편물 기가 있습니다.

물론 모든 연구를 완전히 재현 할 수있는 것은 아니지만 (예 : 라이브 트위터 데이터) 최소한 청소, 서식 및 전처리 단계를 쉽게 문서화 할 수 있습니다.

Coursera에서 재현 가능한 연구 과정을 위해 준비된 평가 를 확인할 수 있습니다 .


3

OpenRefine (이전의 Google Refine)은 대화식으로 데이터 정리 및 변환을 수행 할 수있는 훌륭한 도구입니다. 최종 출력은 다양한 표준 형식 (json, csv) 또는 사용자 정의 형식 (예 : wiki)으로 내보낼 수 있습니다.

"공백"기능을 사용하여 +를 정렬하면 OpenRefine에서 정확한 중복을 처리 할 수 ​​있습니다. 또한 회사 이름이나 주소와 비슷한 모양의 복제본을 그룹화 할 수있는 대략적인 문자열 (퍼지) 클러스터링 기능이 있습니다. 이 기능만으로도 굉장합니다.


1
이것은 훌륭하고보고가 적은 도구입니다.
thanks_in_advance

2

Coursera에는 이에 관한 전 과정이 있습니다. 그들이 언급 한 기술을 살펴보고 싶을 때 중요한 부분은 언제 무엇을 사용해야 하는지를 아는 것입니다.

https://www.coursera.org/learn/data-cleaning

각 데이터 세트마다 고유 한 문제와 문제가 있으며 모든 단계가 모든 데이터 세트에 적용되는 것은 아니기 때문에 자동화하는 대신 항상 수동으로 수행하는 것이 좋습니다.

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