Kotlin
A concise multiplatform language developed by JetBrains
Kotlin Notebook, DataFrame과 Kandy를 사용하여 데이터 분석
대화형으로 데이터를 탐색하고 시각화하면 정적인 분석에서는 명확하게 보이지 않는 숨겨진 패턴, 추세나 관계를 찾을 수 있습니다. 이러한 즉각적인 피드백을 활용하여 가정을 빠르게 검증하고, 이상 수치나 상태를 식별하고 분석을 조정할 수 있습니다.
Kotlin Notebook은 IntelliJ IDEA에서 데이터를 탐색할 때 편리하게 쓸 수 있는 도구입니다. 이 도구는 Kotlin 커널을 사용하여 셀 내의 Kotlin 코드 스니펫을 실행한 다음 에디터에서 데이터를 렌더링합니다. 또한 데이터 처리에는 Kotlin DataFrame과 같은 라이브러리를, 차트 생성에는 Kandy를 통합하여 데이터 분석을 간소화합니다.
최근 Roman과 Anton은 데이터 분석 도구의 성능을 살펴보았습니다. 이들의 라이브스트림 녹화본은 아래에서 확인할 수 있습니다. 이 블로그 글에서는 DataFrame 및 Kandy 라이브러리를 포함하여 Kotlin Notebook 플러그인을 편리하게 사용해 볼 수 있도록 해당 세션의 예시를 추가하였습니다.
여러분의 편의를 위해 준비한 프로젝트에서 여러분은 GitHub 저장소를 살펴볼 수 있습니다. 이 프로젝트에는 라이브스트림 중에 사용되었던 CSV 파일도 포함되어 있으므로, 시연되었던 똑같은 예시를 직접 재구성해 볼 수 있습니다.
Kotlin Notebook 시작하기
Kotlin Notebook을 시작하려면 간단히 IntelliJ IDEA Ultimate에서 Settings(설정) | Plugins(플러그인) 탭으로 이동한 다음 JetBrains Marketplace에서 플러그인을 설치하면 됩니다. 플러그인을 설치하면 New(새로 만들기) | Kotlin Notebook 액션으로 첫 Notebook을 생성할 수 있습니다.
처음 Notebook을 생성하면 빈 셀만 들어 있습니다. 셀은 Notebook의 주요 구성 요소이며 코드 또는 텍스트를 포함할 수 있습니다. 코드 셀을 실행하려면 Run(실행) 버튼을 클릭하거나 Ctrl+Enter 단축키를 사용하세요. 코드가 실행되고 출력 또는 오류가 셀 아래에 표시됩니다.
셀을 증분 실행할 수도 있습니다. 이는 이전 셀에서 실행된 계산을 다시 실행하지 않아도 사용할 수 있다는 의미입니다. Kotlin Notebook의 기초를 빠르게 알아보고 싶은 경우 이 블로그 글을 참조하세요.
DataFrame으로 데이터를 읽고 탐색
이제 Notebook으로 실험하고 DataFrame 라이브러리로 데이터를 분석하는 방법을 알아보겠습니다. 데이터 소스는 암스테르담 지역에서 수집된 기상 정보를 담고 있는 CSV 파일입니다.
Project(프로젝트) 뷰에서 Notebook 셀로 CSV 파일을 드래그 앤 드롭하세요. Notebook이 자동으로 부트스트랩 코드를 생성하여 DataFrame 라이브러리를 종속성으로서 추가하고 CSV 파일을 읽습니다.
데이터가 서로 다른 형식을 사용하기 때문에 사용 사례에 맞춰 분석 옵션을 변경해야 합니다. 예를 들어 분석 시에 구분 기호나 날짜 형식을 지정할 수 있습니다. 자세한 정보는 API 문서를 참조하세요.
열 타입은 기본적으로 CSV 데이터에서 추론됩니다. 그 결과로 Kotlin 컴파일러가 지원하는 타입에 안전한 방식으로 데이터 작업을 할 수 있습니다. 데이터를 읽은 다음에는 DataFrame 인스턴스에 다음과 같이 schema 함수를 사용하여 추론된 타입을 간단히 검사할 수 있습니다.
또한, describe 함수를 사용하면 데이터의 통계 요약을 빠르게 확인할 수 있습니다.
describe 함수는 숫자 열의 최댓값/최솟값, 고유한 값 및 null의 개수 등과 같은 데이터에 관한 통계를 제공합니다. 이러한 통계는 추후에 데이터를 살펴보아야 할 때 참고할 수 있습니다.
DataFrame API는 선택, 필터링, 누적 연산 등과 같이 데이터 조작에 필요한 다양한 옵션을 제공합니다.
아래의 이미지는 필터링의 예시입니다. ‘datetime’ 열과 제목에 “wind”가 포함된 모든 열의 데이터가 2023년까지 필터링되었습니다.
데이터를 탐색해서 통계적으로 온도가 가장 높은 년도를 찾으려 한다고 가정해 보겠습니다. 다음의 절차를 수행합니다. 첫 번째로 DataFrame 인스턴스의 요소를 ‘temp’ 속성을 기준으로 내림차순으로 정렬하겠습니다. 그런 다음 정렬된 목록에서 첫 30개만 남깁니다. 그런 다음 ‘datetime’의 ‘year’ 속성을 기준으로 중복되는 요소를 모두 제거해야 합니다. 결과 목록에는 최고 temp 값이 있는 30개의 요소 중에서 뚜렷이 구분되는 요소(년도 기준)가 포함됩니다.
‘datetime’ 열의 값에서 ‘year’를 추출해야 합니다. 이를 위해 expr 함수를 사용해서 년도만 포함하는 임시 표현식 열을 생성합니다. 이 식은 최종 결과를 얻기 위해 ‘distinct’ 함수에 매개변수로 제공되었습니다.
통계적으로 최근 년도가 더 더웠습니다. 그러나 수치만 보고는 추세를 알아내기가 쉽지 않습니다. 이때 데이터를 시각화한다면 더 이해하기 쉽습니다. 이를 위해 Kandy 라이브러리를 사용해서 그래프를 그려보겠습니다.
Kandy로 데이터 시각화
그래프 생성을 위한 Kandy 라이브러리가 최근에 도입되었습니다. Kandy는 독립형 라이브러리로 사용하여 그래프를 생성할 수도 있으나 Kotlin Notebook에 편리하게 통합되어 있기도 합니다. 이 라이브러리는 다양한 종류의 그래프를 생성할 수 있는 간단한 DSL을 제공합니다. 풍부한 예시 갤러리에는 Kandy로 생성할 수 있는 다양한 다이어그램이 시연되어 있습니다.
Kotlin Notebook과 Kandy를 같이 사용하려면 ‘%use kandy‘ 행을 셀에 추가하고 실행하세요. 그러면 자동으로 Kandy의 최신 안정화 버전이 로드되고, 모든 필수 가져오기 항목이 추가되고 플롯 렌더링이 추가됩니다.
DataFrame을 위해 Kandy는 데이터 시각화에 필요한 ‘plot‘ 확장 함수를 제공합니다. 이를 사용하면 예시의 그래프를 빠르게 그릴 수 있습니다.
예를 들어 날짜를 기준으로 온도 값의 그래프를 생성해 보겠습니다. 이를 위해 ‘선’ 그래프 타입을 선택하고 값을 매핑하기만 하면 됩니다. 그러면 온도 값은 y축으로 매핑되고 년도는 x축에 나타납니다. 추가적으로 습도에 따라 선의 색상을 변경할 수도 있습니다. 이를 통해 온도와 습도의 상관관계에 관한 인사이트를 얻을 수 있습니다. 결과를 보니 온도가 낮으면 더 습하다는 결론이 도출됩니다.
요약
Kotlin Notebook은 다양한 출력 형식을 지원하는 대화형 워크시트로서, 이를 이용해 추가적인 환경 설정 없이 Kotlin 코드로 실험하고 탐색할 수 있습니다.
Kotlin DataFrame 및 Kandy와 같이 통합된 라이브러리를 사용하면 데이터를 탐색, 시각화하고 패턴을 찾은 다음 흥미로운 사실을 알아낼 수 있습니다. 이 글에 있는 예시 저장소를 살펴보면서 Kotlin Notebook을 빠르게 시작해 볼 수 있습니다.
데이터 과학을 위한 Kotlin에 관해 자세히 알아보고 싶은 경우 문서의 도입부를 확인하고 Kotlin Slack의 #datascience 채널에 참여해 보세요.
게시물 원문 작성자