データベースへの接続とデータの取得
Kotlin Notebookは、最も一般的なSQLデータベースをサポートしています。
Kotlin DataFrameライブラリを活用することで、Kotlin Notebookはデータベースへの接続を確立し、SQLクエリを実行し、その結果をインポートしてさらなる操作を行うことができます。
詳細な例については、KotlinDataFrame SQL ExamplesのGitHubリポジトリにあるNotebookを参照してください。
始める前に
Kotlin NotebookはKotlin Notebookプラグインに依存しており、このプラグインはデフォルトでIntelliJ IDEAにバンドルされ、有効になっています。
Kotlin Notebookの機能が利用できない場合は、プラグインが有効になっていることを確認してください。詳細については、環境のセットアップを参照してください。
このチュートリアルに従うには:
Notebookの最初のセルで、使用するデータベースのJDBC(Java Database Connectivity)ドライバの依存関係を追加します。
例えば、MariaDBデータベースに接続するには、以下を追加します:
kotlinUSE { dependencies("org.mariadb.jdbc:mariadb-java-client:$version") }Kotlin DataFrameをインポートします。
kotlin%use dataframe
DataFrameライブラリとそのAPIをNotebookで利用できるようにするため、他のどのコードセルよりも先に
%use dataframeの行を含むコードセルを実行してください。
データベースへの接続
データベースに接続するには、DbConnectionConfig()関数を使用して接続設定を作成します。
以下の機能をインポートします:
kotlinimport org.jetbrains.kotlinx.dataframe.io.DbConnectionConfig import org.jetbrains.kotlinx.dataframe.schema.DataFrameSchemaDbConnectionConfig()関数を使用して、接続パラメータ(URL、ユーザー名、パスワード)を定義します。kotlinval URL = "YOUR_URL" val USER_NAME = "YOUR_USERNAME" val PASSWORD = "YOUR_PASSWORD" val dbConfig = DbConnectionConfig(URL, USER_NAME, PASSWORD)
SQLデータベースへの接続の詳細については、Kotlin DataFrameドキュメントの「Read from SQL databases」を参照してください。
データベーススキーマの検査
データを読み込む前に、データベーススキーマを検査して、どのようなテーブルがあり、どのような列が含まれているかを把握します。スキーマを確認することで、どのテーブルをDataFrameに読み込むかを決定できます。
データベース内のすべてのユーザー作成テーブルのスキーマを取得するには、DataFrameSchema.readAllSqlTables()関数を使用します。
val dataSchemas = DataFrameSchema.readAllSqlTables(dbConfig)
dataSchemas.forEach { (tableName, schema) ->
println("---Schema for table: $tableName---")
println(schema)
println()
}データの読み込み
データベーススキーマを検査してデータを選択したら、そのデータをDataFrameに読み込みます。
Kotlin DataFrameは、データベースからデータを読み込むための2つの方法を提供しています:
- テーブルから直接データを読み込む。
- カスタムSQLクエリの結果を読み込む。
どちらのアプローチも、Kotlin Notebookで検査、変換、分析が可能なDataFrameを返します。
テーブルからデータを読み込む
テーブルからデータを読み込むには、DataFrame.readSqlTable()関数を使用します。
以下の例では、moviesテーブルから最初の100行を読み込みます。
val moviesDf = DataFrame.readSqlTable(
dbConfig = dbConfig,
tableName = "movies",
limit = 100
)
moviesDfSQLクエリでデータを読み込む
データベースに対して特定のSQLクエリを実行するには、DataFrame.readSqlQuery()関数を使用します。 このアプローチは、特定の列の読み込み、テーブルの結合、行のフィルタリング、またはデータベース内でのデータの集計が必要な場合に便利です。
クエンティン・タランティーノが監督した映画に関する特定のデータセットを取得してみましょう。 このクエリは映画の詳細を選択し、各映画のジャンルを結合します。
val TARANTINO_FILMS_SQL_QUERY = """
SELECT name, year, rank, GROUP_CONCAT(genre) as "genres"
FROM movies JOIN movies_directors ON movie_id = movies.id
JOIN directors ON directors.id=director_id LEFT JOIN movies_genres ON movies.id = movies_genres.movie_id
WHERE directors.first_name = "Quentin" AND directors.last_name = "Tarantino"
GROUP BY name, year, rank
ORDER BY year
"""
val tarantinoMoviesDf = DataFrame.readSqlQuery(dbConfig, TARANTINO_FILMS_SQL_QUERY)
tarantinoMoviesDfデータの処理
データベースをDataFrameに読み込んだ後、DataFrameの操作を使用して取得したデータを処理できます。
例えば、前のセクションのデータを操作してみましょう。以下のコードは:
.fillNA()関数を使用してyear列の欠損値を置き換えます。.convert()関数を使用して列をIntに変換します。.filter()関数を使用して、2000年以降に公開された映画のみを保持します。
val filteredTarantinoMovies = tarantinoMoviesDf
.fillNA { year }.with { 0 }
.convert { year }.toInt()
.filter { year > 2000 }
filteredTarantinoMoviesデータの分析
Kotlin NotebookとDataFrameライブラリを使用して、データのグループ化、ソート、集計を行い、データ内のパターンを発見し理解することができます。
例えば、actorsテーブルからアクターデータを読み込み、最も一般的なアクターの名前(first name)の上位20個を見つけてみましょう:
// actorsテーブルからデータを抽出
val actorDf = DataFrame.readSqlTable(dbConfig, "actors", 10000)
val top20ActorNames = actorDf
// first_name列でデータをグループ化
.groupBy { first_name }
// 各ユニークな名前の出現回数をカウント
.count()
// カウントの降順で結果をソート
.sortByDesc("count")
// 分析のために上位20個の最も頻繁な名前を選択
.take(20)次のステップ
- Kandyライブラリを使用したデータの可視化を試す
- Kandyを使用したKotlin Notebookでのデータの可視化でデータの可視化に関する追加情報を見つける
- Kotlinでのデータサイエンスと分析に利用可能なツールとリソースの広範な概要については、データ分析用のKotlinおよびJavaライブラリを参照してください
