Skip to content

ファイルからデータを取得する

Kotlin Notebook は、Kotlin DataFrame ライブラリと組み合わせることで、非構造化データと構造化データの両方を扱うことができます。この組み合わせにより、TXT ファイルに含まれるデータなどの非構造化データを、構造化されたデータセットに変換する柔軟性が得られます。

データの変換には、.add().split().convert().parse() などのメソッドを使用できます。さらに、このツールセットを使用すると、CSV、JSON、XLS、Parquet、Apache Arrow など、さまざまな構造化ファイル形式からデータを取得し、操作することができます。 サポートされているすべての形式については、DataFrame のドキュメントを参照してください。

このガイドでは、複数の例を通して、データの取得、精製、および処理の方法を学ぶことができます。

始める前に

Kotlin Notebook は、IntelliJ IDEA にデフォルトでバンドルされ、有効になっている Kotlin Notebook プラグインに依存しています。

Kotlin Notebook の機能が利用できない場合は、プラグインが有効になっていることを確認してください。詳細については、「環境の設定」を参照してください。

このチュートリアルに従うには:

  1. 新しい Kotlin Notebook を作成します。

  2. Kotlin DataFrame をインポートします:

    kotlin
    %use dataframe

DataFrame ライブラリとその API をノートブックで確実に利用できるようにするために、他のコードセルを実行する前に %use dataframe の行を含むコードセルを実行してください。

データの取得

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

    このコードにより、映画のタイトルが 1 つの列に保持され、公開年が別の列に移動します。

  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")
  • .writeArrowIPC() および .writeArrowFeather() 関数を使用した Apache Arrow ファイル

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

また、.toStandaloneHTML() 関数を使用して、ブラウザでスタンドアロンの HTML テーブルを開くこともできます:

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

次のステップ