본문으로 건너뛰기

파일에서 데이터 검색

Kotlin NotebookKotlin DataFrame 라이브러리와 결합되어 비정형 데이터와 정형 데이터 모두를 사용할 수 있도록 지원합니다. 이러한 조합은 TXT 파일에서 찾은 데이터와 같은 비정형 데이터를 정형 데이터 세트로 변환할 수 있는 유연성을 제공합니다.

데이터 변환을 위해 add, split, convertparse와 같은 메서드를 사용할 수 있습니다. 또한 이 툴셋을 사용하면 CSV, JSON, XLS, XLSX 및 Apache Arrow를 포함한 다양한 정형 파일 형식에서 데이터를 검색하고 조작할 수 있습니다.

이 가이드에서는 여러 예제를 통해 데이터를 검색, 구체화 및 처리하는 방법을 알아볼 수 있습니다.

시작하기 전에

  1. 최신 버전의 IntelliJ IDEA Ultimate을 다운로드하여 설치합니다.

  2. IntelliJ IDEA에 Kotlin Notebook plugin을 설치합니다.

    또는 IntelliJ IDEA 내에서 Settings | Plugins | Marketplace에서 Kotlin Notebook 플러그인에 액세스합니다.

  3. File | New | Kotlin Notebook을 선택하여 새 Kotlin Notebook을 만듭니다.

  4. Kotlin Notebook에서 다음 명령을 실행하여 Kotlin DataFrame 라이브러리를 가져옵니다.

    %use dataframe

파일에서 데이터 검색

Kotlin Notebook에서 파일에서 데이터를 검색하려면 다음을 수행하십시오.

  1. Kotlin Notebook 파일(.ipynb)을 엽니다.

  2. 노트북 시작 부분에 있는 코드 셀에 %use dataframe을 추가하여 Kotlin DataFrame 라이브러리를 가져옵니다.

    Kotlin DataFrame 라이브러리를 사용하는 다른 코드 셀을 실행하기 전에 %use dataframe 줄이 있는 코드 셀을 실행해야 합니다.

  3. Kotlin DataFrame 라이브러리에서 .read() 함수를 사용하여 데이터를 검색합니다. 예를 들어 CSV 파일을 읽으려면 DataFrame.read("example.csv")를 사용합니다.

.read() 함수는 파일 확장자 및 콘텐츠를 기반으로 입력 형식을 자동으로 감지합니다. delimiter = ';'로 구분 기호를 지정하는 등 다른 인수를 추가하여 함수를 사용자 지정할 수도 있습니다.

추가 파일 형식과 다양한 읽기 함수에 대한 포괄적인 개요는 Kotlin DataFrame library documentation을 참조하십시오.

데이터 표시

노트북에 데이터를 저장한 후 코드 셀에서 다음을 실행하여 변수에 쉽게 저장하고 액세스할 수 있습니다.

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

이 코드는 CSV, JSON, XLS, XLSX 또는 Apache Arrow와 같은 선택한 파일의 데이터를 표시합니다.

Display data

데이터의 구조나 스키마에 대한 통찰력을 얻으려면 DataFrame 변수에 .schema() 함수를 적용합니다. 예를 들어 dfJson.schema()는 JSON 데이터 세트의 각 열 유형을 나열합니다.

Schema example

Kotlin Notebook의 자동 완성 기능을 사용하여 DataFrame의 속성에 빠르게 액세스하고 조작할 수도 있습니다. 데이터를 로드한 후 DataFrame 변수를 입력하고 마침표를 입력하면 사용 가능한 열과 해당 유형 목록이 표시됩니다.

Available properties

데이터 구체화

데이터 세트를 구체화하기 위해 Kotlin DataFrame 라이브러리에서 사용할 수 있는 다양한 작업 중에서 주요 예로는 grouping, filtering, updatingadding new columns이 있습니다. 이러한 함수는 데이터 분석에 필수적이며 데이터를 효과적으로 구성, 정리 및 변환할 수 있습니다.

데이터에 영화 제목과 해당 출시 연도가 동일한 셀에 포함된 예제를 살펴보겠습니다. 목표는 더 쉬운 분석을 위해 이 데이터 세트를 구체화하는 것입니다.

  1. .read() 함수를 사용하여 데이터를 노트북에 로드합니다. 이 예에서는 movies.csv라는 CSV 파일에서 데이터를 읽고 movies라는 DataFrame을 만듭니다.

    val movies = DataFrame.read("movies.csv")
  2. 정규식을 사용하여 영화 제목에서 출시 연도를 추출하고 새 열로 추가합니다.

    val moviesWithYear = movies
    .add("year") {
    "\\d{4}".toRegex()
    .findAll(title)
    .lastOrNull()
    ?.value
    ?.toInt()
    ?: -1
    }
  3. 각 제목에서 출시 연도를 제거하여 영화 제목을 수정합니다. 이렇게 하면 제목이 일관성을 위해 정리됩니다.

    val moviesTitle = moviesWithYear
    .update("title") {
    "\\s*\\(\\d{4}\\)\\s*$".toRegex().replace(title, "")
    }
  4. filter 메서드를 사용하여 특정 데이터에 집중합니다. 이 경우 데이터 세트는 1996년 이후에 출시된 영화에 집중하도록 필터링됩니다.

    val moviesNew = moviesWithYear.filter { year >= 1996 }
    moviesNew

비교를 위해 다음은 구체화 전의 데이터 세트입니다.

Original dataset

구체화된 데이터 세트:

Data refinement result

이것은 Kotlin에서 add, updatefilter와 같은 Kotlin DataFrame 라이브러리의 메서드를 사용하여 데이터를 효과적으로 구체화하고 분석하는 방법을 보여주는 실제 데모입니다.

추가 사용 사례 및 자세한 예는 Examples of Kotlin Dataframe을 참조하십시오.

DataFrame 저장

Kotlin DataFrame 라이브러리를 사용하여 Kotlin Notebook에서 데이터를 구체화한 후 처리된 데이터를 쉽게 내보낼 수 있습니다. 이 목적을 위해 다양한 .write() 함수를 활용할 수 있으며, CSV, JSON, XLS, XLSX, Apache Arrow는 물론 HTML 테이블까지 다양한 형식으로 저장을 지원합니다. 이는 결과 공유, 보고서 생성 또는 추가 분석을 위해 데이터를 사용할 수 있도록 하는 데 특히 유용할 수 있습니다.

다음은 DataFrame을 필터링하고, 열을 제거하고, 구체화된 데이터를 JSON 파일에 저장하고, HTML 테이블을 브라우저에서 여는 방법입니다.

  1. Kotlin Notebook에서 .read() 함수를 사용하여 movies.csv라는 파일을 moviesDf라는 DataFrame에 로드합니다.

    val moviesDf = DataFrame.read("movies.csv")
  2. .filter 메서드를 사용하여 "Action" 장르에 속하는 영화만 포함하도록 DataFrame을 필터링합니다.

    val actionMoviesDf = moviesDf.filter { genres.equals("Action") }
  3. .remove를 사용하여 DataFrame에서 movieId 열을 제거합니다.

    val refinedMoviesDf = actionMoviesDf.remove { movieId }
    refinedMoviesDf
  4. Kotlin DataFrame 라이브러리는 다양한 형식으로 데이터를 저장하기 위한 다양한 쓰기 함수를 제공합니다. 이 예에서는 .writeJson() 함수를 사용하여 수정된 movies.csv를 JSON 파일로 저장합니다.

    refinedMoviesDf.writeJson("movies.json")
  5. .toStandaloneHTML() 함수를 사용하여 DataFrame을 독립 실행형 HTML 테이블로 변환하고 기본 웹 브라우저에서 엽니다.

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

다음 단계