Skip to content

從檔案獲取資料

Kotlin Notebook 結合了 Kotlin DataFrame 程式庫,讓您能夠處理非結構化與結構化資料。這種組合提供了將非結構化資料(例如 TXT 檔案中的資料)轉換為結構化資料集的彈性。

對於資料轉換,您可以使用 .add().split().convert() 以及 .parse() 等方法。此外,此工具集還能獲取與操作來自各種結構化檔案格式的資料,包括 CSV、JSON、XLS、Parquet 和 Apache Arrow。 請參閱 DataFrame 文件以了解所有支援的格式。

在本指南中,您可以透過多個範例學習如何獲取、調整與處理資料。

開始之前

Kotlin Notebook 仰賴 Kotlin Notebook 外掛程式,該外掛程式預設已隨附並啟用於 IntelliJ IDEA 中。

如果 Kotlin Notebook 功能不可用,請確保已啟用該外掛程式。如需更多資訊,請參閱設定環境

若要進行本教學:

  1. 建立一個新的 Kotlin Notebook

  2. 匯入 Kotlin DataFrame:

    kotlin
    %use dataframe

請在執行任何其他程式碼資料格之前,先執行包含 %use dataframe 這一行的程式碼資料格,以確保 DataFrame 程式庫及其 API 在筆記本中可用。

獲取資料

若要將檔案中的資料獲取到您的 Kotlin Notebook 中,請使用 DataFrame.read() 函式:

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

DataFrame.read() 函式會根據檔案副檔名和內容自動偵測輸入格式。

您還可以傳遞額外的引數來控制 DataFrame 程式庫讀取輸入資料的方式。例如,以下程式碼為 CSV 檔案指定了自訂的分隔符號 (;):

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

如需其他檔案格式的全面概覽以及各種讀取函式,請參閱 Kotlin DataFrame 程式庫文件

顯示資料

一旦您將資料載入筆記本中,就可以將其顯示出來。最簡單的方法是將資料儲存在變數中,然後將其傳回:

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

這段程式碼會將檔案中的資料顯示為互動式表格:

顯示資料

您可以使用此檢視來檢查值、確認欄位名稱,並輕鬆了解資料集的狀態。

檢查資料結構

若要深入了解資料的結構或架構,請對您的 DataFrame 變數套用 .schema() 函式。

例如,執行 jsonDf.schema() 來列出您 JSON 資料集中每個欄位的型別:

架構範例

使用 Kotlin Notebook,您還可以使用自動補全功能。它讓您能快速存取並操作 DataFrame 的屬性。載入資料後,只需輸入 DataFrame 變數後接一個點號 (.),即可查看可用欄位及其型別的清單。

可用屬性

調整資料

Kotlin DataFrame 提供了各種調整資料集的操作。例如:群組篩選更新新增新欄位。這些函式對於資料分析至關重要,讓您能有效地組織、清理與轉換資料。

例如,讓我們看看 movies.csv 資料集。它在同一個資料格中儲存了電影標題和上映年份。目標是調整此資料集以便於分析:

  1. 載入資料

    使用 .read() 函式將檔案載入到 DataFrame 中:

    kotlin
    val movies = DataFrame.read("movies.csv")
  2. 新增欄位

    若要從 title 欄位中提取上映年份,請新增一個新的 year 欄位:

    kotlin
    val moviesWithYear = movies
        .add("year") { 
            "\\d{4}".toRegex()
                .findAll(title)
                .lastOrNull()
                ?.value
                ?.toInt()
                ?: -1
        }
    
    moviesWithYear
  3. 更新值

    若要從電影標題中移除上映年份,請更新 title 欄位:

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

    這段程式碼會將電影標題保留在一個欄位,並將上映年份移至另一個欄位。

  4. 篩選資料列

    若要專注於特定資料,請使用 .filter() 函式。例如,若要僅保留 1986 年之後上映的電影,請執行:

    kotlin
    val newMovies = moviesTitle.filter { 
        year >= 1996 
    }
    
    newMovies
  5. 移除欄位

    若要移除不需要的欄位,請使用 .remove() 函式:

    kotlin
    val refinedMovies = newMovies.remove { 
        movieID 
    }
    
    refinedMovies

作為對照,這是調整前的資料集:

原始資料集

調整後的資料集:

資料調整結果

如需更多使用案例與詳細範例,請參閱 Kotlin Dataframe 範例

匯出資料

在 Kotlin Notebook 中調整資料後,您可以輕鬆地匯出處理後的資料。

您可以為此目的利用各種 .write() 函式。它支援儲存為多種格式,包括 CSV、JSON、XLS、XLSX、Apache Arrow,甚至是 HTML 表格。 請參閱 DataFrame 文件以了解所有支援的格式。 這對於分享您的發現、建立報告或讓您的資料可用於進一步分析特別有用。

例如,讓我們將結果儲存為:

  • 使用 .writeJson() 函式的 JSON 檔案:

    kotlin
    refinedMovies.writeJson("movies.json")
  • 使用 .writeCsv() 函式的 CSV 檔案:

    kotlin
    refinedMovies.writeCsv("movies.csv")
  • 使用 .writeArrorIPC().writeArrorFeather() 函式的 Apache Arrow 檔案

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

您還可以使用 .toStandaloneHTML() 函式在瀏覽器中開啟獨立的 HTML 表格:

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

接續步驟