데이터 과학을 위한 Kotlin
KotlinConf 2019에서 Roman Belov는 데이터 과학에 대한 Kotlin 접근 방식의 개요를 발표했습니다. 이 발표 내용은 모든 사람이 볼 수 있도록 공개되어 있으며, 여기에서는 이를 요약하고 데이터 과학에서 이용할 수 있는 현재 Kotlin 도구 및 라이브러리 상태에 대해 조금 더 이야기해보려고 합니다.
Kotlin은 데이터 과학에 어떤 방식으로 부합할까요? 대량의 데이터 분석에 대한 수요가 늘어남에 따라 지난 몇년간 데이터 과학 분야는 진정한 르네상스를 맞이했습니다. 이러한 데이터 과학의 르네상스는 적절한 도구 없이 불가능했습니다. 이전에는 데이터 과학을 위해 특별히 설계된 프로그래밍 언어가 필요했지만 요즘은 범용 언어로 이를 수행할 수 있습니다. 물론 여기에는 커뮤니티의 도움은 물론이고 올바른 설계 결정을 내리기 위한 범용 언어가 필요합니다. 이러한 배경에 따라 데이터 과학에서는 다른 어떠한 언어보다 Python과 같은 특정 언어가 널리 사용되기도 했습니다.
Kotlin은 Kotlin Multiplatform이라는 개념을 통해 자체 개발자 환경을 복제하여 상호 운용성을 다른 플랫폼으로 확장하는 것을 목표로 삼습니다. Kotlin은 설계상 간결함, 안전성, 상호 운용성이라는 주요 특징을 갖고 있습니다. 이 기본적 언어 특징 덕에 Kotlin은 다양한 작업 및 플랫폼을 지원할 수 있으며 그러한 대상 작업 중 하나가 데이터 과학입니다.
한 가지 좋은 소식은 커뮤니티가 이미 데이터 과학에서 Kotlin을 채택하기 시작했으며 이러한 채택이 빠른 속도로 진행되고 있다는 사실입니다. 다음 간략한 보고서에서는 데이터 과학용 Kotlin 라이브러리 및 도구를 포함하여 Kotlin이 데이터 과학에 얼마나 준비되어 있는지 간략하게 설명하고 있습니다.
Jupyter
Jupyter Notebook은 무엇보다 상호 운용성이 뛰어나 데이터 변환, 시각화, 프리젠테이션에서 매우 편리합니다. Jupyter는 그 확장성과 오픈 소스 특성 덕분에 데이터 과학을 중심으로 거대한 에코시스템을 형성하였으며 데이터와 관련된 수많은 다른 솔루션에 통합되었습니다. 그러한 솔루션 중에는 Jupyter Notebook용 Kotlin kernel이 있습니다. 이 커널을 사용하면 Jupyter Notebook에서 Kotlin 코드를 작성하고 실행할 수 있으며 Java 및 Kotlin으로 작성된 서드파티 데이터 과학 프레임워크를 이용할 수 있습니다.
재현 가능한 Kotlin Jupyter Notebook의 예시는 이 저장소에서 찾을 수 있습니다. Kotlin Notebook을 간단히 체험해 보려면 Binder에서 실행하세요(환경 설정에 보통 1분 정도 소요).
Apache Zeppelin
Apache Zeppelin은 Spark와 Scala를 강력하게 지원하여 데이터 엔지니어들 사이에서 매우 인기가 있습니다. Jupyter와 마찬가지로 Zeppelin에도 다른 도구와 언어를 지원하며 자체 주요 기능을 확장하는 플러그인 API (인터프리터)가 있습니다. 현재 Zeppelin의 최신 릴리스(0.8.2)에는 Kotlin 인터프리터가 번들로 제공되지 않지만 Zeppelin의 마스터 브랜치에서 사용할 수 있습니다. Kotlin 지원이 포함된 Zeppelin을 Spark 클러스터에서 배포하는 방법을 알아보려면 이 지침을 참조하세요.
Apache Spark
Spark에는 강력한 Java API가 있으므로 Jupyter와 Zeppelin의 Spark Java API를 이용한 작업에서 Kotlin을 아무 문제 없이 사용할 수 있습니다. 이에 더해 Spark의 Dataset API에도 Kotlin 클래스에 대한 완벽한 지원을 추가하여 통합 기능을 개선하는 작업을 진행하고 있습니다. Spark의 셸에도 Kotlin을 지원하는 작업이 진행 중입니다.
라이브러리
라이브러리 없이 Kotlin만 데이터 과학에 사용하는 것은 의미가 없습니다. 다행히 최근 커뮤니티의 노력 덕분에 당장 사용할 수 있는 멋진 Kotlin 라이브러리가 많이 있습니다.
가장 유용한 라이브러리 중 일부를 소개하면 다음과 같습니다.
- kotlin-statistics는 예비 및 프로덕션 통계를 실행하기 위한 확장 함수 모음을 제공하는 라이브러리입니다. 기본 숫자 목록/시퀀스/배열 함수(합계에서 비대칭까지), 슬라이싱 연산자(예: countBy, simpleRegressionBy 등), 비닝 연산, 이산 PDF 샘플링, 나이브 베이즈 분류기, 클러스터링, 선형 회귀 등을 지원합니다.
- kmath는 numpy에서 영감을 얻은 라이브러리입니다. 대수 구조와 연산, 배열과 같은 구조, 수식, 히스토그램, 스트리밍 연산을 비롯해 commons-math와 koma를 감싸는 래퍼 등을 지원합니다.
- krangl은 R의 dplyr과 Python의 Pandas에서 영감을 얻은 라이브러리로, 함수형 API를 사용하여 데이터 조작을 위한 기능을 제공합니다. 이 라이브러리를 이용하면 테이블 형식의 데이터를 필터링, 변환, 집계 및 재구성할 수 있습니다.
- lets-plot은 테이블 형식 데이터를 기반으로 플롯을 선언적으로 생성하기 위한 라이브러리입니다. R의 ggplot과 The Grammar of Graphics에서 영감을 얻었으며 Kotlin 커널과 긴밀하게 통합되어 있습니다. 이는 멀티 플랫폼으로 JVM뿐만 아니라 JS 및 Python에서도 사용할 수 있습니다.
- kravis는 R의 ggplot에서 영감을 얻은 또 다른 라이브러리로, 테이블 형식 데이터를 시각화합니다.
유용한 링크의 전체 목록은 Thomas Nield의 Kotlin 데이터 과학 리소스를 참조하세요.
Kotlin용 Lets-Plot
Lets-Plot은 완전히 Kotlin으로 작성된, 통계 데이터용 오픈 소스 그래프 작성 라이브러리입니다. 멀티 플랫폼 라이브러리이기 때문에 Kotlin을 위해 특별히 설계된 API가 있습니다. 이 API를 사용하는 방법은 사용자 가이드를 읽으며 익힐 수 있습니다.
상호 운용성을 위해 Lets-Plot은 Jupyter Notebook용 Kotlin 커널과 긴밀하게 통합되어 있습니다. Kotlin 커널을 설치하고 활성화한 후 Jupyter Notebook에 다음 줄을 추가하세요.
%use lets-plot
그런 다음 셀에서 Lets-Plot API 함수를 호출하면 일반적으로 R 또는 Python의 ggplot을 사용할 때 표시되는 것과 마찬가지로 결과를 셀 바로 아래에서 확인할 수 있습니다.
Kotlin bindings for NumPy
NumPy는 Python을 사용한 과학 컴퓨팅에 널리 이용되는 패키지입니다. 다차원 배열 처리, 선형 대수, 푸리에(Fourier) 변환, 난수 및 기타 수학 작업을 위한 강력한 기능을 제공합니다. Kotlin Bindings for NumPy는 NumPy 함수에 정적으로 유형화된 래퍼를 제공하여 Kotlin 코드에서 NumPy 함수를 호출할 수 있도록 지원하는 Kotlin 라이브러리입니다.
기여하기
Kotlin의 전체 에코시스템은 오픈 소스라는 아이디어를 기반으로 하므로 수많은 기여자들의 도움 없이는 존재할 수 없습니다. 데이터 과학을 위한 Kotlin은 최근에 시작되었으며 지금 그 어느 때보다 여러분의 도움이 절실합니다. 기여 방법은 다음과 같습니다.
- 진행 중인 데이터 과학 작업에서 겪는 고충에 관해 얘기하고 Kotlin을 데이터 과학 작업에 더 적합하게 만들 수 있는 아이디어를 공유해주세요.
- 데이터 과학 관련 오픈 소스 라이브러리에 기여하고 Kotlin이 데이터 과학용 언어가 되는 데 도움이 될 것 같은 라이브러리와 도구를 자유롭게 만들어 보세요.
Kotlin 커뮤니티의 Slack에는 #datascience라는 전용 채널이 있습니다. 이 채널에 참여하여 질문하고, 도움이 필요한 영역을 파악하여 자신이 기여할 수 있는 방법을 알아보고, 의견과 작업물을 커뮤니티와 공유해 주세요.
Kotlin은 여전히 데이터 과학자가 선택하는 도구가 되기 위한 초기 단계에 있으며 발전 과정은 흥미진진하고 도전적인 여정이 될 것입니다. 데이터 관련 작업의 요구 사항을 충족하기 위해 언어 설계를 조정해야 할 뿐만 아니라 도구 및 라이브러리의 풍부한 에코시스템도 구축해야 합니다. 예상대로 작동하지 않는 부분이 있으면 경험을 공유하거나 참여하여 문제해결에 도움을 부탁드립니다. 특히 Jupyter 커널과 라이브러리를 사용해 보고 JetBrains에 의견을 공유해 주세요.
리소스
이 게시물에 나온 대부분의 정보는 공식 Kotlin 웹사이트에서 확인할 수 있습니다.
KotlinConf 2019에서는 Alexander Nozik의 Kotlin for Science 및 Erik Meijer의 Gradient Descent with Kotlin을 비롯하여 데이터 과학에 관한 영감을 얻을 수 있는 다양한 발표가 있었습니다.
또한 지난 KotlinConf 컨퍼런스에서 있었던 Holger Brandl(Python Pandas와 유사한 Kotlin 라이브러리, krangl 크리에이터)의 발표와 Thomas Nield(kotlin-statistics 크리에이터)의 발표 내용도 시청해 보세요.
간단히 요약하면, 커뮤니티는 데이터 과학에서 Kotlin을 긍정적인 속도로 채택하고 있습니다.
Let’s Kotlin!
본문은 Andrey Cheptsov의 Making Kotlin Ready for Data Science를 번역한 글입니다.