LabHub
배우기 러닝패스 코스

고객 데이터 다루기 · 없음과 같음 · 실습

평균이 두 개다 — 없음과 같음을 규칙으로

LabHub 에서 이어서 보기

목표

없음의 표기를 종류별로 세고, 결측을 0 으로 채웠을 때 평균이 어떻게 달라지는지를 숫자로 보이고, 완전 중복과 키 중복과 사람 눈에만 같은 것을 갈라 정규화·블로킹·판정 규칙으로 같은 사람을 묶는 도구 nulls.py 를 만든다.

왜 중요한가

같은 파일을 보고도 평균이 두 개 나오는 일은 흔하다. 한쪽은 값이 없는 행을 빼고 셌고 다른 쪽은 0 으로 채워 셌기 때문이다. 둘 다 오류를 내지 않아서 아무도 알아채지 못한다. 그래서 평균을 말할 때는 분모를 함께 말해야 하고, 그러려면 표기별 건수를 먼저 세야 한다.
0 과 없음은 다른 사실이다. 0 원인 고객은 "아직 안 샀다" 이고 빈 칸인 고객은 "모른다" 이다. 파일에 0 이라고 적혀 있으면 둘 중 어느 쪽인지 파일만 봐서는 알 수 없으므로, 건수를 따로 세어 보고하고 업무에 묻는다.
중복도 한 가지가 아니다. 글자까지 같은 줄은 하나만 남기면 되지만, 같은 식별자에 내용이 다른 줄은 자동으로 고칠 수 없고, 표기만 다른 같은 대상은 규칙으로 판정해야 한다. 여기서 가장 흔한 사고는 정규화한 값이 같아졌다는 이유로 병합해 버리는 것이다.
채점기는 여러분의 문구를 믿지 않는다. 임시 디렉터리에 채점기가 만든 명부를 차려 놓고 여러분의 도구를 실제로 실행해 건수·평균·묶인 그룹을 채점기가 직접 센 값과 대조한다. 이름과 금액은 실행마다 바뀐다.

단계

1. /root/miss/gen_customers.py 를 만들어 실행해 /root/miss/raw/customers.csv 를 만드세요. 결측 표기와 세 종류의 중복이 들어 있습니다.
2. /root/miss/nulls.pycensus <파일> <칼럼> 을 만들어 없음의 표기를 종류별로 세게 하세요.
3. stats <파일> <칼럼> 을 더해 결측을 0 으로 채운 평균과 빼고 낸 평균과 0 까지 뺀 평균을 나란히 내게 하고, 결과를 /root/miss/stats.json 에 적으세요.
4. aging <파일> 을 더해 보초 날짜가 평균 처리 기간을 어떻게 망가뜨리는지 재고, 결과를 /root/miss/aging.json 에 적으세요.
5. dupes <파일> 을 더해 완전 중복과 키 중복을 갈라 세게 하세요.
6. blocks <파일> 을 더해 정규화한 뒤 전화번호 뒤 네 자리로 블록을 나누고, 견줄 후보 쌍이 몇 개로 줄었는지 내게 하세요.
7. match <파일> 을 더해 판정 규칙으로 같은 사람을 묶고 블로킹이 놓친 쌍까지 재게 하세요. 규칙은 /root/miss/rules.json 에 적습니다.
8. 전체를 한 번에 처리해 /root/miss/miss_report.json/root/miss/miss_report.md 를 만드세요.

참고

단계 8개

  1. 세 시스템에서 합쳐 온 명부 만들기
  2. 없음의 표기를 종류별로 세기
  3. 0 으로 채운 평균과 빼고 낸 평균
  4. 9999-12-31 이 만든 수천 년
  5. 완전 중복과 키 중복 가르기
  6. 정규화하고 블로킹으로 후보 줄이기
  7. 같은 사람 묶기와 블로킹이 놓친 쌍
  8. 결측과 중복을 한 장으로 보고하기