Skip to content

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

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

データ変換には、addsplitconvertparseなどのメソッドを使用できます。さらに、このツールセットは、CSV、JSON、XLS、XLSX、Apache Arrowなどの様々な構造化ファイル形式からのデータの取得と操作を可能にします。

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

始める前に

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

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

新しいKotlin Notebookを作成する:

  1. File | New | Kotlin Notebookを選択します。

  2. Kotlin Notebookで、次のコマンドを実行してKotlin DataFrameライブラリをインポートします。

    kotlin
    %use dataframe

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

Kotlin Notebookでファイルからデータを取得するには:

  1. Kotlin Notebookファイル (.ipynb) を開きます。
  2. ノートブックの先頭にあるコードセルに%use dataframeを追加して、Kotlin DataFrameライブラリをインポートします。

    NOTE

    Kotlin DataFrameライブラリに依存する他のコードセルを実行する前に、%use dataframe行を含むコードセルを必ず実行してください。

  3. Kotlin DataFrameライブラリの.read()関数を使用してデータを取得します。例えば、CSVファイルを読み込むには、DataFrame.read("example.csv")を使用します。

.read()関数は、ファイル拡張子と内容に基づいて入力形式を自動的に検出します。delimiter = ';'でデリミタを指定するなど、関数をカスタマイズするために他の引数を追加することもできます。

TIP

その他のファイル形式と様々な読み取り関数の包括的な概要については、Kotlin DataFrameライブラリのドキュメントを参照してください。

データを表示する

ノートブックにデータを取り込んだら、変数をに簡単に保存し、コードセルで次を実行することでアクセスできます。

kotlin
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ライブラリで利用可能な様々な操作の中でも、主な例としてはグループ化フィルタリング更新新しい列の追加などがあります。これらの関数はデータ分析に不可欠であり、データを効果的に整理、クリーンアップ、変換することができます。

データに映画のタイトルとそれに対応する公開年が同じセルに含まれている例を見てみましょう。目標は、分析を容易にするためにこのデータセットを整形することです。

  1. .read()関数を使用してデータをノートブックにロードします。この例では、movies.csvという名前のCSVファイルからデータを読み込み、moviesというDataFrameを作成します。

    kotlin
    val movies = DataFrame.read("movies.csv")
  2. 正規表現を使用して映画のタイトルから公開年を抽出し、新しい列として追加します。

    kotlin
    val moviesWithYear = movies
        .add("year") {
            "\\d{4}".toRegex()
                .findAll(title)
                .lastOrNull()
                ?.value
                ?.toInt()
                ?: -1
        }
  3. 各タイトルから公開年を削除して、映画のタイトルを修正します。これにより、タイトルが整形され、一貫性が保たれます。

    kotlin
    val moviesTitle = moviesWithYear
        .update("title") {
            "\\s*\\(\\d{4}\\)\\s*$".toRegex().replace(title, "")
        }
  4. filterメソッドを使用して特定のデータに焦点を当てます。この場合、データセットは1996年以降に公開された映画に焦点を当てるようにフィルタリングされます。

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

比較のため、整形前のデータセットを次に示します。

Original dataset

整形されたデータセット:

Data refinement result

これは、KotlinでaddupdatefilterなどのKotlin DataFrameライブラリのメソッドを使用してデータを効果的に整形し、分析する方法を実践的に示すものです。

TIP

追加のユースケースと詳細な例については、Examples of Kotlin Dataframeを参照してください。

DataFrameを保存する

Kotlin DataFrameライブラリを使用してKotlin Notebookでデータを整形した後、処理されたデータを簡単にエクスポートできます。この目的のために、CSV、JSON、XLS、XLSX、Apache Arrow、さらにはHTMLテーブルを含む複数の形式での保存をサポートする様々な.write()関数を利用できます。これは、調査結果の共有、レポートの作成、またはさらなる分析のためにデータを利用可能にするのに特に役立ちます。

DataFrameをフィルタリングし、列を削除し、整形されたデータをJSONファイルに保存し、ブラウザでHTMLテーブルを開く方法を次に示します。

  1. Kotlin Notebookで、.read()関数を使用してmovies.csvという名前のファイルをmoviesDfというDataFrameにロードします。

    kotlin
    val moviesDf = DataFrame.read("movies.csv")
  2. .filterメソッドを使用して、"Action"ジャンルに属する映画のみを含めるようにDataFrameをフィルタリングします。

    kotlin
    val actionMoviesDf = moviesDf.filter { genres.equals("Action") }
  3. .removeを使用して、DataFrameからmovieId列を削除します。

    kotlin
    val refinedMoviesDf = actionMoviesDf.remove { movieId }
    refinedMoviesDf
  4. Kotlin DataFrameライブラリは、異なる形式でデータを保存するための様々な書き込み関数を提供しています。この例では、.writeJson()関数を使用して、変更されたmovies.csvをJSONファイルとして保存します。

    kotlin
    refinedMoviesDf.writeJson("movies.json")
  5. .toStandaloneHTML()関数を使用してDataFrameをスタンドアロンHTMLテーブルに変換し、デフォルトのWebブラウザで開きます。

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

次に