나쁜 데이터 핸드북

1

나의 사적 욕심을 대신해서 회사에서 구매해준 책이다. 서울을 오가면 읽고, 나름대로 정리했다. 좋은 책임에 틀림없고, 파이썬은 굉장히 유용한 언어라는 것을 느낄 수 있다.

기승 전 파이썬이라 느껴진다면 그건 오해가 아니다.

2

시간이 없다면 다음 순서로 읽어보길 권한다. 물론 다 읽는게 쵝오다. 하지만 시간이 없다면(우린 바쁘다. MGS5, WOW, LOL 등등…) 아래 순서대로 읽어 보길 권한다. (물론 순서는 본인의 의견이다.)

  • 19 데이터 퀄리티 분석의 이해
  • 16 기계 학습 전문가를 먹이고 돌보는 방법
  • 17 데이터 추적 기술
  • 03 기계가 아닌 사람이 보도록 만든 데이터
  • 04 플레인 텍스트 속에 숨어있는 나쁜 데이터
  • 05 웹 데이터 (재) 구성하기
  • 06 거짓 리뷰와 헷갈리는 리뷰 찾아내기
  • 12 데이터베이스의 공격
  • 14 클라우드 컴퓨팅 신화

진심으로 동의한다.

[…] 나쁜 데이터는 여러분이 일하는 데 방해가 되는 모든 데이터를 일컫는다.

나도 이런 실수를 무지하게 저지른다.

흔히 저지른 실수는 필드의 의미나 단위를 잘못 해석하는 것이다. […] 필드가 적절한 값을 포함하고 있는지도 살펴보아야 한다. […] 값이 없거나 빠져 있는 경우도 많다.

규식이 말고 다른 방법이 있을꺼야, 꼭 찾고야 말겠다.

필자는 종종 실제 필드에 위와 같은 검증을 한다. 이런 검증은 대부분 정규표현(Regular Expression)을 사용하는 것이 가장 적합하다.

이런건 생각도 못해봤다. 테스트 코드를 작성 할 때 꼭 반영해야 겠다.

정의에 따르면 CTR과 같은 비율에 해당하는 값은 1을 넘지 못한다. […] 보통 1을 크게 넘겨서는 안 된다. 만약 수백 혹은 수천이 넘는 값이 들어있다면 확실히 문제일 가능성이 있다.

이 분야는 다른 책을 좀 더 참고해봐야겠다.

일반적으로 시계열 데이터는 히스토그램을 만들기에 적합하지 않지만 다른 차원의 데이터를 합산할 수 있는 경우 히스토그램과 비슷한 시각화 기법이 도움이 된다.

쉽게 생각해서 for loop로 해결할 수 있어야 하니까…?

여기서 강조하고 싶은 문제는 스프레드시트 내에서의 데이터 배치다. […] 정리하면, 우리가 맞닥뜨린 문제는 작업해야 할 데이터셋이 수많은 파일에 흩어져 있다는 것이다. 물론 각 파일 안의 데이터 배치 문제도 여전하다. […] 짧은 버전의 해결책은 간단하다. 코드를 작성하라.

기승 전 코딩…!

사람이 보기 쉽게 만든 데이터는 재사용이 어렵기 때문에 다루기가 곤란하다. 이런 데이터를 소프트웨어를 이용해 다른 방식으로 표현하거나 더 탐구해보려면 소프트웨어에 데이터의 포맷을 인식시켜야만 한다. 다행히 우리는 컴퓨터 코드를 이용해 곤란한 포맷으로 인한 문제를 피할 수 있다.

텍스트 파일에 대한 이야기가 많이 나온다. 고민이 필요하다. csv와 텍스트를 다루는 기법을 고민해 보자.

필자는 이번 장에서 플레인 텍스트 파일에 저장된 […] 문제와 이를 극복하고 업무에 복귀하기 위해 사용했던 방법을 소개할 것이다. 필자가 다룰 문제들은 다음과 같다. 1) 알 수 없는 문자 인코딩. 2) 잘못 해석한 문자 인코딩. 3) 애플리케이션 특유의 문자가 들어간 플레인 텍스트

이상하다고 느낀다면 문자 포멧에 대해서 조금 더 많이 알아보자!

ASCII는 알파벳 대문자와 소문자, 숫자, 몇 가지 구두점과 수학 기호등 […] 문자 코드를 포함한 7비트 인코딩이다.

나도 동의한다. editplus 사용할 때 파일 저장 코드를 UTF-8로 바꾸자.

다양한 출처의 데이터를 조합할 때 우선 데이터를 여러분이 사용하는 툴에 따라 UTF-8이나 UTF-16으로 표준화하는 것이 좋다. 필자는 보통 UTF-8로 표준화한다.

작년 파이콘(Pycon Korea 2014)에 이런 주제가 있었다.

필요한 데이트를 모으는 과정은 크게 두 단계로 이루어진다. 첫 번째는 웹 크롤러로 알맞은 데이터를 포함한 페이지를 찾는 단계, 두 번째는 페이지에서 데이터를 “스크랩”해 여러분의 하드 디스크로 옮기는 단계다.

인터넷을 다운 받기 위해서는 하드디스크가 커야 된다. 물론 압축하면 조금 더 절약 할 수 있다.

[…] 연구 조교로 일한 지 3일만에 교내 블랙리스트에 이름을 올리게 되었다. 이것이 데이터를 항상 다운로드한 다음 로컬에서 분석해야 하는 이유다.

뭔가, 눈치게임 하는 느낌이다.

[…] 크롤러가 동작하는 중간중간에 멈춤 코드를 넣는 것이 여러분의 스크립트가 발각되지 않는 가장 좋은 방법이다.

NLTK, gensim 패키지를 좀 더 공부해야겠지? 그런데 하… 이럴 때 대학원 진학하고 싶은 욕망이…

“나쁘지 않은(not good)”과 같은 이중 부정이나 반대, 비꼼, 관용구들은 종종 감정 분석 시스템을 혼동시킬 수 있어 여전히 연구가 진행 중이다.

데이터가 수상할 땐, 접근 방법도 같이 고려해보자.

필자(필립 K. 재너트)는 “나쁜 데이터”라는 것이 정말로 존재한다고 생각하지 않는다. 단지 잘못 접근했을 뿐이다.

접근 방법을 고려할 때, 숨겨진 가정과 명제도 같이 점검하자.

[…] 문제는 어느 누구도 전체 시스템이 기초로 하고 있는 가정을 제때에 명확히 언급하거나 이 가정들이 제대로 만족되었는지 검증하려 하지 않았다는 것이다.

객관적인 데이터 분석이 불가능한 이유 중 하나이다.

[…] 문제는 데이터와 데이터가 어떠해야 한다는 우리의 생각 사이의 불일치였다.

검토를 해주는 일을 자동화 해야겠다.

[…] 각 실험 단게에서 나온 숫자들은 동료끼리 서로 검토해야 한다. 측정기로부터 검출된 모든 숫자는 적어도 두 사람 이상이 살펴본다. 이 는 정말로 좋으면서도 나쁜 방법이다. […] 그러나 두 가지 이유로 매우 나쁜 생각이기도 하다. […] 엄청난 인력을 필요로 하며 비용도 많이 든다. 둘째로, 실수를 찾기 위해 수천 개의 숫자를 일일이 검토하는 일은 결코 재미있을 것 같지 않다.

데이터셋을 관리하는건 쉬운 일이 아니다. 데이터 관리자를 둘게 아니라 조직과 방법을 만들어야 한다.

조직을 위한 시스템이라면 데이터셋에 대한 접근을 제어하는 중앙 관리팀을 두는 것이 더 낫다고 확신하다.

이래서 좋은 질문을 하는 방법을 알아야 하는데, 우린 질문 안 하쟈나? 질문하면 역적이 되는 사회니까.

데이터를 그저 이리저리 조작하는 것이 최종적인 목표가 아니라는 점은 반드시 명심해야 한다. 여러분이 정말로 원하는 것은 질문에 대한 답이며 자동화를 할 수 있도록 여러분이 짊어져야 할 부담은 줄어든다.

나도 이런걸 하나 맹글 맹글 해봐야겠다.

필자는 기본적인 검사들을 모두 기억하기 위해 목록을 만들어 보기 편한 곳에 두었다. […] 1) 변수의 타입이 올바른가? 2) 변수가 올바른 크기를 가지고 있는가? 3) 숫자가 값이 아닌 값(NaN)안에 있는 값인가? 4) 문자열이 null이거나 빈 문자열인가? 5) 올바른 포맷으로 되어 있나?

어.. 음..

보기 좋은 코드는 6개월 뒤에 다시 보아도 쉽게 읽을 수 있으며 다른 사람에게 부끄럽지 않게 보여줄 수 있는 코드다.

자동화는 역시 파이썬!

게으름은 미덕이다. 여러분의 일을 가능한 자동화해봐라.

이런 점에서 데이터를 다루기 위해서는 인간에 대한 이해가 정말로 많이 필요하다.

때로는 “명백히” 나쁜 데이터가 옮은 경우도 있다. 이상해 보이는 데이터에는 기술적인 결합이나 비합리적인 사람들로 인한 나쁜 현실이 반영되었을 가능성이 있다.

무응답에 대처하는 다양한 방법들

무응답 대체 데이터를 다루는 방법 1) 그냥 쓴다 2) 대체 가능성이 있는 데이터를 행정 레코드로 바꾼다. 3) 관심 변수가 대체되지 않은 표본 응답자들을 이용해 가중치를 조정. 4) 무응답 대체된 관찰값을 버린다.

작업 기록을 잘 남겨두자.

다시 한 번 강조하지만, 결과물의 타당성과 신뢰도를 높이기 위해서는 데이터가 어떻게 만들어졌는지 또 경우에 따라서는 조사를 수행한 회사나 기관이 어떤 의견을 가지고 있는지 자세히 아는 것이 중요하다.

데이터를 클리닝 하는 작업을 체계화해야겠다.

[…] 하지만 데이터 클리닝과 수정 작업의 중요성은 관련된 모든 사람들이 이해하고 있어야 하며 조직 전체에 이런 원칙을 적용함으로써 지저분한 데이터로 인한 잠재적인 피해를 경감시킬 수 있다.

툴이 중요한게 아니라 툴을 다루는 사람이 중요하다.

[…] 다만 자신이 사용하는 툴을 잘 모르면 어떻게 부정적인 결과를 얻게 되는지를 보여주고 싶었다.

CSV, 테스트와 같은 범용적인 방법에 대한 권고가 많이 나온다.

때로는 데이터베이스를 생략하고 파일 시스템을 데이터의 저장소처럼 사용하는 편이 나을 때도 있다.

‘프로세스 중심적인 작업’이란게 뭘까?

[…] 클라우드 컴퓨팅은 애플리케이션 서버와 같이 상태가 없고 프로세스 중심적인 작업에 제격이다.

혼자서 모든걸 할 순 없다. 사람과 사람이 만나야 한다.

물론 데이터 과학자들은 데이터 먼징, 모데링부터 시각화, 발표까지 데이터와 관련된 많은 일을 기꺼이 해낼 수 있지만 데이터 과학의 모든 부분을 아우르는 경험을 가진 인재는 상당히 드물다.

“데이터가 변화된 기록을 지원하는 시스템” 오… 이런 주제는 스타트업으로 하기에 적합한 아이템 같다.

시간과 원본 데이터를 기록하면 그 출처로 인한 변화도 추적할 수 있다.

Written on September 21, 2015