データベースに接続してデータを取得する
Kotlin Notebook は、MariaDB、PostgreSQL、MySQL、SQLite などのさまざまな種類の SQL データベースに接続してデータを取得する機能を提供します。 Kotlin DataFrame library を利用することで、Kotlin Notebook はデータベースへの接続を確立し、SQL クエリを実行し、結果をインポートしてさらなる操作を行うことができます。
詳細な例については、KotlinDataFrame SQL Examples GitHub リポジトリの Notebook を参照してください。
開始する前に
-
最新バージョンの IntelliJ IDEA Ultimate をダウンロードしてインストールします。
-
IntelliJ IDEA に Kotlin Notebook plugin をインストールします。
または、IntelliJ IDEA 内の Settings | Plugins | Marketplace から Kotlin Notebook プラグインにアクセスします。
-
File | New | Kotlin Notebook を選択して、新しい Kotlin Notebook を作成します。
-
MariaDB や MySQL などの SQL データベースにアクセスできることを確認します。
データベースに接続する
Kotlin DataFrame library の特定の関数を使用して、SQL データベースに接続して操作できます。
DatabaseConfiguration
を使用してデータベースへの接続を確立し、getSchemaForAllSqlTables()
を使用してデータベース内のすべてのテーブルのスキーマを取得できます。
例を見てみましょう。
-
Kotlin Notebook ファイル (
.ipynb
) を開きます。 -
JDBC (Java Database Connectivity) ドライバーの依存関係を追加し、JDBC ドライバーのバージョンを指定します。 この例では MariaDB を使用します。
USE {
dependencies("org.mariadb.jdbc:mariadb-java-client:$version")
} -
データ操作タスクに不可欠な Kotlin DataFrame ライブラリと、SQL 接続とユーティリティ関数に必要な Java ライブラリをインポートします。
%use dataframe
import java.sql.DriverManager
import java.util.* -
DatabaseConfiguration
クラスを使用して、URL、ユーザー名、パスワードなど、データベースの接続パラメーターを定義します。val URL = "YOUR_URL"
val USER_NAME = "YOUR_USERNAME"
val PASSWORD = "YOUR_PASSWORD"
val dbConfig = DatabaseConfiguration(URL, USER_NAME, PASSWORD) -
接続したら、
getSchemaForAllSqlTables()
関数を使用して、データベース内の各テーブルのスキーマ情報を取得して表示します。val dataschemas = DataFrame.getSchemaForAllSqlTables(dbConfig)
dataschemas.forEach {
println("---Yet another table schema---")
println(it)
println()
}SQL データベースへの接続の詳細については、Kotlin DataFrame ドキュメントの SQL データベースからの読み取り を参照してください。
データを取得および操作する
SQL データベースへの接続を確立 した後、Kotlin DataFrame ライブラリを利用して、Kotlin Notebook でデータを取得および操作できます。
readSqlTable()
関数を使用してデータを取得できます。データを操作するには、filter
、groupBy
、convert
などのメソッドを使用できます。
IMDB データベースに接続し、クエンティン・タランティーノが監督した映画に関するデータを取得する例を見てみましょう。
-
readSqlTable()
関数を使用して「movies」テーブルからデータを取得し、効率のためにlimit
を設定してクエリを最初の 100 レコードに制限します。val dfs = DataFrame.readSqlTable(dbConfig, tableName = "movies", limit = 100)
-
SQL クエリを使用して、クエンティン・タランティーノが監督した映画に関連する特定のデータセットを取得します。 このクエリは、映画の詳細を選択し、各映画のジャンルを結合します。
val props = Properties()
props.setProperty("user", USER_NAME)
props.setProperty("password", PASSWORD)
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
"""
// クエンティン・タランティーノの映画のリストを、名前、年、ランク、およびすべてのジャンルを連結した文字列を含めて取得します。
// 結果は名前、年、ランクでグループ化され、年でソートされます。
var dfTarantinoMovies: DataFrame<*>
DriverManager.getConnection(URL, props).use { connection `->`
connection.createStatement().use { st `->`
st.executeQuery(TARANTINO_FILMS_SQL_QUERY).use { rs `->`
val dfTarantinoFilmsSchema = DataFrame.getSchemaForResultSet(rs, connection)
dfTarantinoFilmsSchema.print()
dfTarantinoMovies = DataFrame.readResultSet(rs, connection)
dfTarantinoMovies
}
}
} -
タランティーノの映画データセットを取得した後、データをさらに操作およびフィルタリングできます。
val df = dfTarantinoMovies
// 'year' 列の欠損値を 0 に置き換えます。
.fillNA { year }.with { 0 }
// 'year' 列を整数に変換します。
.convert { year }.toInt()
// 2000 年以降に公開された映画のみを含むようにデータをフィルタリングします。
.filter { year > 2000 }
df
結果の出力は、fillNA
メソッドを使用して year 列の欠損値が 0 に置き換えられた DataFrame です。
year 列は convert
メソッドを使用して整数値に変換され、データは filter
メソッドを使用して 2000 年以降の行のみを含むようにフィルタリングされます。
Kotlin Notebook でデータを分析する
SQL データベースへの接続を確立 した後、Kotlin DataFrame library を利用して、Kotlin Notebook を詳細なデータ分析に使用できます。 これには、データのグループ化、ソート、集計の機能が含まれており、データ内のパターンを発見して理解するのに役立ちます。
映画データベースから俳優データを分析し、俳優の最も頻繁に出現する名前 (名) に焦点を当てた例を見てみましょう。
-
readSqlTable()
関数を使用して、「actors」テーブルからデータを抽出します。val actorDf = DataFrame.readSqlTable(dbConfig, "actors", 10000)
-
取得したデータを処理して、最も一般的な俳優の名前 (名) の上位 20 件を特定します。この分析には、いくつかの DataFrame メソッドが含まれます。
val top20ActorNames = actorDf
// 俳優の名前 (名) に基づいてデータを整理するために、first_name 列でデータをグループ化します。
.groupBy { first_name }
// 一意の名前 (名) の出現回数をカウントし、頻度分布を提供します。
.count()
// 最も一般的な名前を特定するために、カウントの降順で結果をソートします。
.sortByDesc("count")
// 分析のために、上位 20 件の最も頻繁な名前を選択します。
.take(20)
top20ActorNames
次のステップ
- Kandy library を使用したデータ視覚化について調べる
- Kotlin Notebook での Kandy を使用したデータ視覚化 でデータ視覚化に関する追加情報を見つける
- Kotlin でのデータサイエンスと分析に利用できるツールとリソースの包括的な概要については、データ分析用の Kotlin および Java ライブラリ を参照してください