News Feed

“데이터 정제부터 버전 관리까지” 주목 받는 파이썬용 데이터 과학 툴 7가지

컨텐츠 정보

  • 조회 440

본문

파이썬의 풍부한 데이터 과학 툴 생태계는 사용자에게 큰 매력으로 작용한다. 그러나 이렇게 광범위하고 깊이 있는 도구 모음에는 한 가지 단점이 있다. 가장 뛰어난 툴이 때때로 간과된다는 점이다.

여기서는 파이썬에서 사용할 수 있는 새롭거나 덜 알려진 데이터 과학 프로젝트 중 일부를 살펴본다. 폴라스(Polars)처럼 점점 더 많은 관심을 받고 있는 도구들도 있지만, 여전히 더 널리 알려질 가치가 있다. 반면 커넥터X(ConnectorX)와 같은 툴은 숨겨진 보석과도 같다.

커넥터X

대부분의 데이터는 데이터베이스에 저장되어 있지만, 실제 연산은 보통 데이터베이스 외부에서 이뤄진다. 문제는 데이터베이스에서 데이터를 가져오고 다시 전송하는 과정에서 속도가 느려질 수 있다는 점이다. 커넥터X는 이런 병목을 해결하기 위해 설계된 도구로, 파이썬의 다양한 데이터 처리 라이브러리와 데이터베이스를 빠르게 연결한다. 이 도구는 최소한의 작업으로 데이터를 효율적으로 로드할 수 있도록 최적화돼 있다. 실제로 커넥터X를 사용하면 단 몇 줄의 파이썬 코드와 하나의 SQL 쿼리만으로 데이터베이스의 데이터를 불러와 바로 활용할 수 있다. 이를 통해 데이터 과학자가 분석 단계로 이동하기까지의 시간을 크게 단축할 수 있다.

폴라스와 마찬가지로, 커넥터X는 러스트 기반 라이브러리를 사용한다. 이를 통해 데이터 소스를 파티셔닝해 병렬로 로드하는 등 다양한 최적화 기능을 구현할 수 있다. 예를 들어, 포스트그레SQL에서는 파티션 열을 지정하는 방식으로 병렬 로딩이 가능하다.

포스트그레SQL 외에도 커넥터X는 마이SQL과 마리아DB, SQL라이트, 아마존 레드시프트, 마이크로소프트 SQL 서버와 애저 SQL, 오라클 등의 데이터베이스를 지원한다. 불러온 데이터는 판다스(Pandas)나 파이애로우(PyArrow) 데이터프레임으로 변환해 모딘(Modin), 대스크(Dask), 혹은 폴라스와 같은 도구에서 활용할 수 있다. 현재 ODBC 기반 데이터 소스에 대한 일반 지원도 개발이 진행 중이다.

덕DB

파이썬 사용자라면 대부분 SQL라이트를 알고 있을 것이다. SQL라이트는 작지만 강력하고 빠른 관계형 데이터베이스로, 파이썬에 기본으로 포함되어 있다. 별도의 애플리케이션이 아닌 프로세스 내 라이브러리(in-process library) 형태로 실행되기 때문에 가볍고 반응 속도가 빠르다.

덕DB(DuckDB)는 누군가가 “OLAP용 SQL라이트를 만든다면 어떨까?”라는 질문에 답한 것처럼 만들어진 데이터베이스다. 다른 OLAP 데이터베이스 엔진과 마찬가지로 컬럼형 데이터 저장 방식을 사용하며, 장시간 실행되는 분석 쿼리 작업에 최적화되어 있다. 하지만 덕DB는 기존 데이터베이스에서 기대할 수 있는 기능, 예를 들어 ACID 트랜잭션과 같은 요소도 모두 제공한다. 또한 별도의 소프트웨어를 설치하거나 설정할 필요가 없다. pip install duckdb 명령어 단 한 줄만 입력하면 된다.

덕DB는 CSV, JSON, 파케이(Parquet) 형식을 포함해 다양한 일반 데이터 소스를 직접 읽어들일 수 있다. 이렇게 생성된 데이터베이스는 연도나 월 등 키(key) 기준으로 여러 개의 물리적 파일로 파티셔닝해 효율적으로 관리할 수도 있다. 쿼리 수행 방식은 다른 SQL 기반 관계형 데이터베이스와 유사하지만, 덕DB에는 몇 가지 추가 기능이 내장돼 있다. 예를 들어 데이터의 무작위 샘플을 추출하거나, 윈도우 함수(window function)를 구성하는 등의 고급 분석 기능을 기본적으로 지원한다.

덕DB는 규모는 작지만 실용적인 확장 기능 모음을 제공한다. 여기에는 전문(full-text) 검색, 고속 벡터 유사도 검색, 엑셀 파일 가져오기 및 내보내기, SQL라이트와 포스트그레SQL 직접 연결, 파케이 파일 내보내기, 그리고 다양한 지리공간 데이터 형식 및 타입 지원 등이 포함된다.

옵티머스

데이터 과학 프로젝트에서 가장 번거롭고 피하고 싶은 작업 중 하나는 바로 데이터 정제와 준비 과정이다. 옵티머스(Optimus)는 이런 문제를 해결하기 위해 만들어진 올인원 툴셋으로, 데이터를 불러오고, 탐색하고, 정제하고, 다시 다양한 데이터 소스로 내보내는(write) 모든 과정을 지원한다.

옵티머스는 내부 데이터 엔진으로 판다스, 대스크, CUDF, 대스크 + CUDF 조합, 바엑스(Vaex), 스파크(Spark) 등을 사용할 수 있다. 또한 데이터는 애로우(Arrow), 파케이, 엑셀, 여러 일반적인 데이터베이스 소스, 그리고 CSV·JSON과 같은 평문 파일 형식으로 불러오거나 저장할 수 있다.

데이터 조작 API는 판다스와 유사하지만, .rows().cols() 접근자가 추가되어 있다. 이를 통해 데이터프레임을 정렬하거나, 특정 열의 값으로 필터링하거나, 조건에 따라 데이터를 수정하거나, 특정 기준에 맞춰 연산 범위를 좁히는 등의 작업을 손쉽게 수행할 수 있다. 또한 옵티머스는 이메일 주소나 URL과 같은 실제 환경의 일반적인 데이터 유형을 처리할 수 있는 프로세서도 함께 제공한다.

옵티머스의 한 가지 잠재적인 문제는, 프로젝트가 여전히 활발히 개발 중이지만 마지막 공식 릴리스가 2020년에 이뤄졌다는 점이다. 즉, 옵티머스가 현재 사용하는 다른 구성 요소만큼 최신 상태를 유지하지 못할 수 있다.

폴라스

데이터프레임 작업에 많은 시간을 들이면서 판다스의 성능 한계에 답답함을 느낀다면, 폴라스(Polars)를 고려해볼 만하다. 폴라스는 파이썬을 위한 데이터프레임 라이브러리로, 판다스와 유사한 직관적인 문법을 제공한다.

판다스와 달리 폴라스는 러스트로 작성된 라이브러리를 기반으로 동작하며, 하드웨어 성능을 최대한 활용하도록 설계돼 있다. 병렬 처리나 SIMD(single instruction, multiple data) 같은 성능 향상 기능을 활용하기 위해 특별한 문법을 쓸 필요도 없다. 모든 최적화가 자동으로 적용된다. 심지어 CSV 파일을 읽는 단순한 작업조차 판다스보다 더 빠르게 처리된다. 또한 러스트 개발자는 pyo3를 이용해 자신만의 폴라스 확장 기능을 직접 개발할 수도 있다.

폴라스는 즉시 실행 모드와 지연 실행 모드를 모두 지원한다. 이를 통해 쿼리를 바로 실행할 수도 있고, 필요할 때까지 실행을 미룰 수도 있다. 또한 스트리밍 API를 제공해 쿼리를 점진적으로 처리할 수 있다. 다만 현재 스트리밍 기능은 일부 함수에서는 아직 지원되지 않는다. 이런 경우 폴라스는 자동으로 메모리 내 엔진으로 전환해 연산을 수행한다. 추가로, 그래프비즈(Graphviz) 외부 라이브러리를 활용하면 쿼리 실행 과정을 시각화할 수도 있다. 이를 통해 쿼리가 실행되는 동안 메모리나 CPU 사용량이 어떻게 변하는지를 직관적으로 파악할 수 있다.

DVC

데이터 과학 실험에서 흔히 겪는 가장 큰 문제 중 하나는 버전 관리다. 특히 코드가 아닌 데이터 버전 관리가 어렵다는 점이 핵심이다. DVC(Data Version Control)는 이름 그대로 데이터 버전 관리를 지원하는 툴로, 데이터셋에 버전 정보를 부여하고 이를 깃 저장소에 코드와 함께 관리할 수 있게 해 준다. 이를 통해 코드와 데이터의 버전을 일관되게 맞추고 실험 결과의 재현성을 확보할 수 있다.

DVC는 파일 형태로 표현할 수 있는 대부분의 데이터셋을 추적할 수 있다. 데이터가 로컬 스토리지에 있든, 아마존 S3 버킷과 같은 원격 저장소에 있든 상관없다. 또한 DVC에서는 데이터 모델의 관리 및 활용 방식을 ‘파이프라인’ 형태로 정의할 수 있다. DVC 문서에서는 이를 “머신러닝 프로젝트를 위한 메이크파일(Makefile) 시스템”에 비유한다.

DVC의 활용 목적은 단순히 데이터를 코드와 함께 버전 관리하는 것에 그치지 않는다. DVC는 그 이상을 지원한다. 이 도구는 원격 저장소에 있는 데이터를 빠르게 불러오기 위한 데이터 캐시로 동작하며, 데이터를 기반으로 수행한 실험을 추적하는 체계, 그리고 해당 데이터를 활용해 생성한 머신러닝 모델을 관리하는 레지스트리 또는 카탈로그 역할도 수행한다. 또한 비주얼 스튜디오 코드 사용자라면 DVC용 VS 코드 확장 프로그램(DVC VS Code extension)을 통해 DVC 워크플로우를 에디터 환경에 통합할 수 있다.

클린랩

좋은 머신러닝 데이터셋을 확보하는 일은 쉽지 않다. 정확하고 일관된 라벨이 붙은 데이터를 만드는 데에는 많은 시간과 비용이 들기 때문이다. 그러나 현실적으로는 불완전하고 일관성이 부족한 데이터를 사용할 수밖에 없는 경우도 있다. 클린랩(Cleanlab), 이름 그대로 “라벨을 정제한다(clean labels)”의 의미)는 바로 이런 상황을 해결하기 위해 만들어졌다.

클린랩은 기존의 고품질 머신러닝 데이터셋을 활용해 품질이 낮거나 라벨이 누락·오류가 있는 데이터셋을 분석한다. 사용자는 먼저 원본 데이터셋을 기반으로 모델을 학습한 뒤, 클린랩을 이용해 데이터 내에서 개선이 필요한 부분을 찾아내고, 이를 바탕으로 자동으로 정제·보정된 데이터셋으로 다시 학습을 수행한다. 이 과정을 통해 클린랩은 데이터 품질이 모델 성능에 미치는 영향을 정량적으로 확인할 수 있도록 돕는다.

클린랩은 특정 데이터 모델이나 프레임워크에 종속되지 않는 구조를 가지고 있다는 점이 큰 강점이다. 즉, 파이토치, 오픈AI, 사이킷런(scikit-learn), 텐서플로우 등 어떤 머신러닝 프레임워크를 사용하더라도, 클린랩은 모든 분류기와 함께 작동할 수 있다. 또한 토큰 분류, 다중 라벨링, 회귀, 이미지 분할, 객체 탐지, 이상치 탐지 등과 같은 일반적인 머신러닝 작업을 위한 전용 워크플로우도 제공한다. 공식 예제 모음을 살펴보면, 클린랩이 실제로 어떤 방식으로 작동하는지, 그리고 데이터 정제 과정에서 어떤 결과를 얻을 수 있는지 직접 확인할 수 있다.

스네이크메이크(Snakemake)

데이터 과학 워크플로우를 구축하는 일은 쉽지 않다. 특히 일관되고 재현 가능한 방식으로 설정하기는 더욱 어렵다. 스네이크메이크(Snakemake)는 이런 문제를 해결하기 위해 만들어진 도구로, 데이터 분석 워크플로우를 자동화하고, 모든 사용자가 동일한 결과를 얻을 수 있도록 보장한다. 현재 많은 데이터 과학 프로젝트가 스네이크메이크를 기반으로 운영된다. 워크플로우에 포함된 작업 단계가 많고 복잡할수록, 스네이크메이크를 통해 자동화된 실행 체계를 구축했을 때 얻는 이점은 더욱 커진다.

스네이크메이크의 워크플로우는 GNU 메이크(GNU Make)의 워크플로우와 유사한 구조를 가진다. 사용자는 규칙을 정의해 워크플로우의 각 단계를 설정하는데, 각 규칙에는 입력 데이터, 출력 결과, 그리고 작업을 수행하기 위한 명령어가 포함된다. 워크플로우 규칙은 멀티스레드 방식으로 실행될 수 있으며(필요 시 성능 향상 가능), JSON 또는 YAML 파일로부터 구성 데이터를 불러와 사용할 수도 있다. 또한 워크플로우 내에서 데이터 변환 함수를 직접 정의해 규칙에 사용되는 데이터를 처리할 수 있고, 각 단계에서 수행된 작업을 로그로 남길 수 있다.

스네이크메이크의 작업은 높은 이식성을 염두에 두고 설계됐다. 이를 통해 쿠버네티스로 관리되는 어떤 환경에서도 배포할 수 있으며, 구글 클라우드 라이프 사이언스(Google Cloud Life Sciences)나 AWS의 티반나(Tibanna) 같은 특정 클라우드 환경에서도 손쉽게 실행할 수 있다. 또한 워크플로우는 특정 버전의 패키지 세트를 고정해 사용할 수 있도록 ‘동결(freeze)’할 수 있으며, 성공적으로 실행된 워크플로우에는 자동으로 단위 테스트(unit test)를 생성해 함께 저장할 수 있다. 장기 보관이 필요할 경우, 워크플로우 전체를 타볼(tarball) 형식으로 저장해 안전하게 아카이빙할 수도 있다.
dl-itworldkorea@foundryco.com

관련자료

댓글 0
등록된 댓글이 없습니다.
Member Rank