brunch

You can make anything
by writing

C.S.Lewis

by 지은 x NULL Oct 08. 2018

[R] 어느 날, 엑셀 계산이 맞지가 않는다?

의식의 흐름대로 쓰는 - 왜 R인가? MS Excel로는 안 될까?(1)

올해 초 부서를 옮기고 나서, 데이터를 다룰 일이 생겼다.

업무 분류가 썩 명확하진 않지만 세간의 직무로 나눠보자면 '데이터 엔지니어'와는 약간 다른 '데이터 분석가' 정도의 일이었다.

물론 그때 그 일이 내 일이라고 말한 사람은 없었지만 그런 업무가 있었을 뿐이고. 자연스레 하게 됐다.




엔지니어로부터 처음 넘겨받아 파악한 자료는 수백만 줄짜리 데이터였다.(대략 300~400만 건이었던 것으로 기억한다. 이하 숫자들은 글의 흐름상 문제가 없을 만한 임의의 값으로 적었다.)

확인해야 할 여러 문장들과 각 문장의 빈도가 집계된,

   "문장","횟수"
1 "안녕하세요. 반갑습니다.",1246793
2 "하우아유 아임파인땡큐 앤유?",325878
3 "고맙습니다.",133345
...
3000000 "여기까지 데이터가 있을 줄은 상상도 못했죠?", 1

이런 내용들이었다.


파일 형식은 쉼표 즉 comma(,)로 분리된 CSV 파일이었고 데이터 확인을 위해 MS 엑셀에서 열었다. 300만(!)줄이긴 하지만 컬럼 수는 두 개밖에 안 된다. 용량은 대략 수십 MB쯤이었는데 잠깐의 로-딩 후에 파일이 열렸다. A열에 문장, B열에 숫자.


세 줄 요약은커녕 30줄도, 300줄도 아니고 300만줄이라니.

봐도봐도 한 눈에 안 들어오고 데이터가 너무 많다.

뭔가 데이터를 가공할 필요가 있었다.


그래서 총 얼마지?

=SUM(B:B)

4,000만? 그렇군.


Top 1은 얼마나 비중을 차지할까?

'...?'

잠깐 머뭇했지만 이내

=B2/SUM(B:B)*100

5.678%? 그렇네.

물론 SUM을 매번할 필요는 없으니까 C1에 '=SUM(B:B)'을 입력하고 C2에는 '=B2/$C$1*100' 이라고 절대값을 넣으면 되겠다.

C2셀의 우하단 더블클릭=자동채우기를 이용해서 전체 데이터의 비율들을 구했다.

CPU 점유율이 100%를 나타내고 버벅이기 시작한다. 그래도 큰 문제 없이 계산 끝.

5.678%, 3.098%, 1.876%, ...

최상위는 얼추 알아보겠지만 저~기 아래로 내려가면 0.00012%, 0.00011%, 0.00011%다.

생각해보면 이런 비중이 무슨 의미가 있겠으며, 차트로 나타내기도 어렵다.


누적합을 구해보자. 이렇게 해서 상위 50%, 절반만 살펴보는 것도 괜찮을 듯싶다.

D열에 현재 행 숫자 + 위에서 누적되어 내려온 누계를 적으면 되겠다.

D2에는 우선 '=B2'를 넣고 다음줄부터는

=B3+D2

순환참조까지는 아니지만 앞의 연산 결과가 뒤의 연산에 영향을 주는 수식이 됐다. 이쯤되면 컴퓨터가 현저히 느려지기 시작한다.

잠깐 퀴즈, 누적합에 이어 그 다음 누적비율은 어떻게 구할까?

.

.

.

=D2/$C$1*100

이전과 딱히 다를 게 없다.


수백만*n개의 수식이 열심히 돌고 있다.

한 줄이라도 추가/삭제하거나 중간에 하나라도 숫자가 바뀌면 연산을 열심히 다시 돌리는 엑셀을 볼 수 있다.

뭐 그래도 PC 성능이 나쁘지 않다면,

한두 번 하고 말 일이면 그냥 이렇게 써도 충분하다.

...고 생각했다.


그런데 문제가 생겼다.

처음에 구한 전체 합 '=SUM(B:B)'이 RAW 데이터에서 집계돼 넘겨받은 숫자와 다르다?


어디서 잘못된 걸까?



[본문에 쓴 수식 참고용] 엑셀 파일


*다음 글 : 어느 날, 엑셀의 한계에 봉착했을 때


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari