유튜브 영상
소개
벤포드 법칙이란?
벤포드 법칙은 "크기를 나타내는 수들의 앞자리는 그 수가 작을수록 많이 나타난다."라는 법칙으로, 1938년 미국의 물리학자 프랭크 벤포드가 발표하였다. 168cm, 9명, 635874개 같은 숫자들의 첫자리는 1, 2, 3, ... 순서대로 많이 나타난다는 뜻이다.
이유
1을 2로 만들려면 몇배를 해야 할까? 1이 2가 되려면 2배, 즉 100%가 늘어야 한다. 그렇다면 2가 3이되려면? 1.5배, 즉 50%가 증가해야 한다. 3이 4가 되려면 33%, 4가 5가 되려면 25%이 필요하다. 이처럼 수가 작을수록, 바뀌기가 힘들다.
수학적 접근
이것을 수학적으로 접근해보자. 1보다 큰 K 에 대하여 logK 의 소수부분이 a 일 때,
logN ≤ a ﹤ log(N+1) (N은 1과 9 사이 자연수)이면 K 의 첫 번째 자리 수는 N 이다. 이를 이용하면 첫 번째 자리 수가 N 일 확률은 log(1+1/N)이라 할 수 있다.
나무위키를 분석해보자!
//이 포스팅의 모든 소스코드는 MIT License로 배포됩니다.1. 나무위키 DB 덤프 다운
나무위키를 직접 크롤링하는 것은 시간도 오래걸리고 서버에 부담을 주기 때문에 나무위키에서 제공하는 데이터베이스 덤프를 받아 사용하자. 나무위키 덤프는 여기서 받을 수 있다. 받아서 압축을 해제하면 8.21GB 가량의 파일(78만여개 문서, 57만개의 실질적 문서가 든 json)이 나올 것이다.
2. 문서 분할
8GB의 문서를 한번에 처리하기는 무리라 판단하고 문서별로 분할하기로 하였다. 하지만 그것은 잘못된 선택이었다. 57만개의 문서 파일이 만들어졌고, 파이참이 버티지 못하는 일이 벌어졌다. 그래도 일단 한 김에 그대로 진행하기로 하였다.
3. 문서 가공 및 숫자 추출
문서에서 날짜, URL, 파일명 등 크기를 나타내는 수가 아닌 숫자들을 제거하였다. 크기를 나타내지 않는 수를 전부 걸러내는 것은 무리여서, 아래 적힌 일부만 정규식을 이용해 제거하였다.
- [0-9]{2,4}년|[0-9]{1,2}월|[0-9]{1,2}[월.][^\s]{1,2}[0-9]{1,2}일 : 날짜
- [0-9]{4}\-[0-9]{2}-[0-9]{2}|[0-9]{1,2}시|[0-9]{1,2}시 [0-9]{1,2}분 : 시간
- [#][a-zA-Z0-9]{6} : 색상 코드
- \[youtube\([a-zA-Z0-9]+\) : 유튜브
- \[\[http[^]]+ : URL
- \[\[파일:[^]]+ : 파일명
- <[a-zA-Z0-9]+>|<[\-a-zA-Z0-9][a-zA-Z0-9]+>|\{\{\{[+-][0-9]
- 1[sS][tT]|2[nN][dD]|3[rR][dD]|[4-9][tT][hH] : 서수
- [0-9.]+%|[0-9.]+[ ~][0-9.]+% : 확률
이렇게 만들어진 문자열에서 숫자만 추출해 앞자리를 카운트했다.
4. 결과 분석
분석한 결과 아래와 같은 결과가 나왔다. 총 47,858,653개의 숫자다.
이 결과값을 카이제곱 검정으로 확인하려 하였으나, 이 방식은 값이 커지면 사용할 수 없다는 것을 알고 포기했다. 이 블로그 글을 보면 Cramer V계수라는 것을 이용하여 확인했다고 한다.
전반적으로 결과가 벤포드 법칙을 만족하는 것처럼 보인다. 2의 비율이 높은 이유는 아마 제거하지 못한 숫자들 때문일 것 같다.
여담
영문 위키피디아를 분석한 친구도 있다. 국문 위키피디아를 분석한 친구도 있지만 그친구는 블로그를 안한다.
소스 코드는 깃허브에서 볼 수 있다.