파일에서 데이터 가져오기

파일에서 데이터 가져오기 (Retrieve data from files)

분석의 첫 단추는 데이터를 잘 불러오는 일이에요. Kotlin DataFrame 라이브러리는 CSV나 JSON 같은 파일에서 데이터를 가져와 다듬고 내보내는 일련의 과정을 여러 예제로 배울 수 있게 해 줘요. 이 글에서 그 흐름을 처음부터 끝까지 살펴볼게요.

출처: Kotlin 공식 문서

본문

Kotlin DataFrame 라이브러리는 비구조화된 데이터와 구조화된 데이터 모두를 다룰 수 있게 해 줘요. 데이터 변환에는 .add(), .split(), .convert(), .parse() 같은 메서드를 사용할 수 있어요. 또한 이 도구셋은 CSV, JSON, XLS, Parquet, Apache Arrow를 포함한 다양한 구조화된 파일 형식에서 데이터를 가져오고 조작할 수 있게 해 줘요. 지원되는 모든 형식은 DataFrame 문서에서 확인할 수 있어요.

이 가이드에서는 여러 예제를 통해 데이터를 가져오고, 다듬고, 처리하는 방법을 배울 수 있어요.

시작하기 전에

IntelliJ IDEA 2026.2부터 Kotlin Notebook은 더 이상 IDE에 번들로 포함되지 않고, JetBrains에서 공식 지원하지도 않게 돼요. 소스 코드는 GitHub에 계속 남아 있어요.

자세한 내용은 블로그 포스트에서 확인할 수 있어요.

이 튜토리얼을 따라 하려면:

  1. File | New | Kotlin Notebook을 선택해요.

  2. Kotlin DataFrame을 가져와요.

    %use dataframe
    

    다른 코드 셀보다 먼저 %use dataframe 줄이 있는 코드 셀을 실행해서, 노트북에서 DataFrame 라이브러리와 그 API를 사용할 수 있게 준비해 두세요.

    튜토리얼을 따라 하려면 DataFrame을 Gradle이나 Maven 의존성으로 사용할 수도 있어요.

데이터 가져오기

파일에서 데이터를 가져오려면 DataFrame.read() 함수를 사용해요.

val movies = DataFrame.read("movies.csv")

DataFrame.read() 함수는 파일 확장자와 내용을 기반으로 입력 형식을 감지해요.

DataFrame 라이브러리가 입력 데이터를 읽는 방식을 제어하기 위해 추가 인자를 전달할 수도 있어요. 예를 들어 다음 코드는 CSV 파일에 대해 사용자 정의 구분자(;)를 지정해요.

val movies = DataFrame.read("movies.csv", delimiter = ';')

추가 파일 형식과 다양한 읽기 함수에 대한 종합적인 개요는 Kotlin DataFrame 라이브러리 문서를 참고해요.

데이터 표시하기

데이터를 얻었다면 표시할 수 있어요. 가장 쉬운 방법은 데이터를 변수에 저장한 뒤 그 변수를 반환하는 거예요.

val jsonDf = DataFrame.read("jsonFile.json")
jsonDf

이 코드는 파일의 데이터를 대화형 테이블로 표시해요.

데이터 표시이 뷰를 사용해 값을 확인하고, 컬럼 이름을 살펴보고, 데이터셋의 상태를 쉽게 파악할 수 있어요.

데이터 구조 확인하기

데이터의 구조나 스키마에 대한 인사이트를 얻으려면 DataFrame 변수에 .schema() 함수를 사용해요.

예를 들어 jsonDf.schema()를 실행해 JSON 데이터셋의 각 컬럼 타입을 나열해 볼게요.

스키마 예제

자동 완성 기능을 사용할 수도 있어요. 이 기능을 이용하면 DataFrame의 속성에 빠르게 접근하고 조작할 수 있어요. 데이터를 로드한 뒤 DataFrame 변수 다음에 점(.)을 입력하면 사용 가능한 컬럼과 그 타입 목록이 나타나요.

사용 가능한 속성

데이터 다듬기

Kotlin DataFrame은 데이터셋을 다듬기 위한 다양한 연산을 제공해요. 예를 들어 그룹화, 필터링, 업데이트, 새 컬럼 추가 같은 것들이 있어요. 이러한 함수는 데이터를 정리하고, 정돈하고, 변환할 수 있게 해 주는 데이터 분석의 핵심이에요.

예를 들어 movies.csv 데이터셋을 살펴볼게요. 이 데이터셋은 영화 제목과 개봉 연도를 같은 셀에 저장해요. 목표는 분석하기 쉽도록 이 데이터셋을 다듬는 것이에요.

  1. 데이터 로드.read() 함수로 파일을 DataFrame에 로드해요.

    val movies = DataFrame.read("movies.csv")
    
  2. 컬럼 추가title 컬럼에서 개봉 연도를 추출하기 위해 새 year 컬럼을 추가해요.

    val moviesWithYear = movies
        .add("year") { 
            "\\d{4}".toRegex()
                .findAll(title)
                .lastOrNull()
                ?.value
                ?.toInt()
                ?: -1
        }
    
    moviesWithYear
    
  3. 값 업데이트 — 영화 제목에서 개봉 연도를 제거하려면 title 컬럼을 업데이트해요.

    val moviesTitle = moviesWithYear
        .update("title") {
            "\\s*\\(\\d{4}\\)\\s*$".toRegex().replace(title, "") 
    }
    
    moviesTitle
    

    이 코드는 영화 제목을 한 컬럼에 남기고, 개봉 연도를 다른 컬럼으로 옮겨요.

  4. 행 필터링 — 특정 데이터에 집중하려면 .filter() 함수를 사용해요. 예를 들어 1986년 이후에 개봉한 영화만 남기려면:

    val newMovies = moviesTitle.filter { 
        year >= 1996 
    }
    
    newMovies
    
  5. 컬럼 제거 — 필요 없는 컬럼을 제거하려면 .remove() 함수를 사용해요.

    val refinedMovies = newMovies.remove { 
        movieID 
    }
    
    refinedMovies
    

비교를 위해, 다듬기 전의 데이터셋을 보여줄게요.

원본 데이터셋다듬은 후의 데이터셋은 이렇게 나와요.

데이터 다듬기 결과추가 사용 사례와 자세한 예제는 Kotlin Dataframe 예제를 참고해요.

데이터 내보내기

데이터를 다듬은 다음에는 쉽게 내보낼 수 있어요.

이를 위해 다양한 .write() 함수를 활용할 수 있어요. CSV, JSON, XLS, XLSX, Apache Arrow, 심지어 HTML 테이블까지 여러 형식으로 저장하는 것을 지원해요. 지원되는 모든 형식은 DataFrame 문서에서 확인할 수 있어요. 이 기능은 결과를 공유하거나, 보고서를 만들거나, 데이터를 추가 분석에 사용할 수 있게 준비할 때 특히 유용해요.

예를 들어 결과를 다음 형식으로 저장해 볼게요.

  • .writeJson() 함수로 JSON 파일로 저장:

    refinedMovies.writeJson("movies.json")
    
  • .writeCsv() 함수로 CSV 파일로 저장:

    refinedMovies.writeCsv("movies.csv")
    
  • Apache Arrow 파일로 저장 — .writeArrorIPC().writeArrorFeather() 함수 사용:

    refinedMovies.writeArrowIPC("movies.arrow")
    refinedMovies.writeArrowFeather("movies.feather")
    

.toStandaloneHTML() 함수로 브라우저에서 열 수 있는 독립형 HTML 테이블을 만들 수도 있어요.

refinedMoviesDf
    .toStandaloneHTML(DisplayConfiguration(rowsLimit = null))
    .openInBrowser()

다음 단계