대용량 데이터와 엑셀 파일

엑셀과 같은 프로그램을 스프레드 시트라고 한다. 스프레드 시트는 개념상 무한히 큰 종이를 행과 열로 나누고 여기에 데이터와 수식을 넣어서 표를 계산하거나 데이터를 분석하는 프로그램을 말한다. 하지만 ‘무한히 큰 종이’는 말 그대로 개념적인 것이며, 실제로 컴퓨터의 메모리는 유한하기 때문에 스프레드 시트의 크기 역시 실제로는 유한한 크기를 갖는다.

엑셀 파일은 가로세로로 늘어선 표 형식의 값과, 이 값들을 참조하여 자동 계산하는 수식과 셀의 서식, 차트, 피봇 테이블 등 여러가지 데이터들을 포함하는 형식을 가지고 있다. 순수하게 데이터의 크기만을 고려할 때, 엑셀 2013 이전 버전에서 엑셀 파일은 하나의 시트당 최대 65,536행 x 16,384열의 데이터를 포함할 수 있다. 2016이후 버전에서는 1백만행(1,048,576)까지 그 범위가 확장되었다.

엑셀을 사용하지 않고 엑셀 파일을 생성하는 방법이 존재하며, 그런 방법을 사용했을 때에는 실제로 이보다 더 큰 엑셀 파일을 만드는 방법도 존재한다. 하지만 이러한 파일을 엑셀에서 열었을 때에는 해당 버전의 엑셀이 허용하는 범위 외의 데이터는 읽어들이지 않게 된다. 실제로 2020년 영국에서 코로나 검사 결과를 취합하는 과정에서 엑셀 포맷의 데이터를 사용하여 개별 검사 데이터를 취합하는 시스템에서 65,536행 이후의 데이터가 누락되는 일이 있었다. 문제를 발견한 이후에 해당 시스템은 엑셀 파일이 아닌 csv 파일을 사용하도록 변경되었다고 한다.

엑셀에서 정상적으로 열리지 않는 엑셀 파일의 데이터를 열기 위해서는 파이썬 등의 프로그래밍 언어에서 엑셀 파일을 액세스할 수 있게 해주는 라이브러리를 사용할 수 있다. 엑셀 파일을 읽기위해서 많이 사용되는 라이브러리로는 xlrd 나 openpyxl이 있다. xlrd의 경우 백만행을 넘어가는 엑셀 파일은 열지 못하는 것으로 알려져 있다. 그리고 openpyxl에서 큰 엑셀 파일을 열 때에는, 메모리 사용량에 유의해야 한다.

엑셀 파일을 처리하는 과정에서 많은 메모리를 사용한다. 우선 엑셀 파일 전체를 메모리에 올려야 하고, 각 행의 데이터마다 각각의 셀을 키와 값의 쌍으로 변환하고 이 데이터를 다시 데이터프레임으로 변환하여 병합하는 과정을 거치기 때문이다. 또한 시간 역시 엄청나게 오래 걸린다는 문제가 있다. (대략 원본 파일의 50배 크기의 메모리가 필요한 것으로 알려져 있다.)

엑셀 자체는 훌륭한 애플리케이션이나 큰 데이터셋을 처리하기에는 어울리지 않는다. 엑셀의 데이터는 그 데이터로 처리하기가 까다로운 구조를 가직 있다. 따라서 대용량 데이터를 파일로 저장해서 다룰 때에는 csv 포맷이나 json, 파이썬 한정하여 pickle 등의 포맷을 사용하는 편이 권장된다.

이들 데이터는 직렬화되어 있고, 그 포맷이 간단하기 때문에 읽어들이는데 훨씬 적은 시간과 메모리가 소요되고 (csv의 경우 엑셀 파일보다 100배 이상 빠르게 로딩이 가능하다) 엄청 나게 큰 파일인 경우에도 파일에서 필요한 부분만 읽어서 처리하여 메모리 사용량을 줄일 수 있는 방법도 있기 때문이다.

Read more

워드프레스에서 고스트로 이전

워드프레스에서 고스트로 이전

이 글을 쓰면서도 믿기 힘든 사실인데, 블로그라는 걸 처음 시작한지가 20년이 되었습니다. 이글루스에서 처음 시작했다가, SK컴즈가 인수한다고 발표함과 동시에 워드프레스로 플랫폼을 옮겼죠. 워드프레스오 옮긴 이후에는 호스팅 환경을 이리 저리 옮기긴 했지만 거의 18년 가까이 워드프레스를 사용해온 것 같습니다. 그 동안 워드프레스는 블로깅 툴에서 명실상부한 범용CMS로 발전했습니다. 사실 웬만한 홈페이지들은 이제

By sooop
띄어쓰기에 대한 생각

띄어쓰기에 대한 생각

업무 메일을 쓸 때 가장 많이 쓰는 말 중에 하나가 메일 말미에 ‘업무에 참고 부탁 드립니다.‘인데요, 어느 날부터 아웃룩에서 이 ‘부탁 드립니다’가 틀렸다고 맞춤법 지적을 하기 시작했습니다. 맞는 말은 ‘부탁드립니다’라고 붙여 쓰는 거라고. 사실 아래아한글 시절부터 이전의 MS워드까지, 워드프로세서들의 한국어 맞춤법 검사 실력은 거의 있으나 마나 한

By sooop

구글 포토에서 아이클라우드로 탈출한 후기

한 때 구글 포토가 백업 용량을 무제한으로 제공해 주겠다고해서, 구글 포토를 사용해서 사진을 백업해왔습니다. 물론 이 이야기의 결말은 저나 이 글을 읽고 있는 여러분이나 모두 알고 있습니다. 사실 AI에게 학습 시킬 이미지 데이터를 모으기 위한 것일 뿐이라거나 하는 이야기는 그 당시에도 있었습니다만, 에이 그래도 구글인데 용량은 넉넉하게 주겠지…하는 순진한

By sooop

Julia의 함수 사용팁

연산자의 함수적 표기 Julia의 연산자는 기본적으로 함수이며, 함수 호출 표기와 같은 방식으로 호출하는 것이 가능합니다. 또한 그 자체로 함수이기 때문에 filter(), map() 과 같이 함수를 인자로 받는 함수에도 연산자를 그대로 적용하는 것이 가능합니다. 특히 + 연산자는 sum() 함수와 같이 여러 인자를 받아 인자들의 합을 구할 수 있습니다. 2 + 3 # = 5 +(2,

By sooop