WebソースおよびAPIからのデータ取得
Kotlin Notebookは、さまざまなWebソースやAPIからデータにアクセスし、操作するための強力なプラットフォームを提供します。これにより、すべてのステップを明確に可視化できる反復的な環境を提供することで、データ抽出と分析タスクを簡素化します。このため、慣れていないAPIを探索する際に特に役立ちます。
Kotlin DataFrameライブラリと組み合わせて使用すると、Kotlin NotebookはAPIからJSONデータに接続して取得できるだけでなく、包括的な分析と可視化のためにこのデータを整形するのにも役立ちます。
TIP
Kotlin Notebookの例については、GitHub上のDataFrameの例を参照してください。
はじめる前に
Kotlin Notebookは、Kotlin Notebookプラグインに依存しています。このプラグインは、IntelliJ IDEAにデフォルトでバンドルされ、有効化されています。
Kotlin Notebookの機能が利用できない場合は、プラグインが有効になっていることを確認してください。詳細については、環境のセットアップを参照してください。
新しいKotlin Notebookを作成するには:
File | New | Kotlin Notebookを選択します。
Kotlin Notebookで、次のコマンドを実行してKotlin DataFrameライブラリをインポートします:
kotlin%use dataframe
APIからのデータ取得
Kotlin NotebookとKotlin DataFrameライブラリを使用してAPIからデータを取得するには、.read()
関数を使用します。これは、CSVやJSONなどのファイルからのデータ取得と同様です。 ただし、Webベースのソースを扱う場合、生のAPIデータを構造化された形式に変換するために、追加のフォーマットが必要になる場合があります。
YouTube Data APIからデータを取得する例を見てみましょう:
Kotlin Notebookファイル (
.ipynb
) を開きます。データ操作タスクに不可欠なKotlin DataFrameライブラリをインポートします。これは、コードセルで次のコマンドを実行することで行われます:
kotlin%use dataframe
YouTube Data APIへのリクエストを認証するために必要なAPIキーを、新しいコードセルに安全に追加します。APIキーは認証情報タブから取得できます:
kotlinval apiKey = "YOUR-API_KEY"
パスを文字列として受け取り、DataFrameの
.read()
関数を使用してYouTube Data APIからデータを取得するロード関数を作成します:kotlinfun load(path: String): AnyRow = DataRow.read("https://www.googleapis.com/youtube/v3/$path&key=$apiKey")
取得したデータを列として整理し、
nextPageToken
を介してYouTube APIのページネーションを処理します。これにより、複数のページにわたるデータを確実に収集できます:kotlinfun load(path: String, maxPages: Int): AnyFrame { // Initializes a mutable list to store rows of data. val rows = mutableListOf<AnyRow>() // Sets the initial page path for data loading. var pagePath = path do { // Loads data from the current page path. val row = load(pagePath) // Adds the loaded data as a row to the list. rows.add(row) // Retrieves the token for the next page, if available. val next = row.getValueOrNull<String>("nextPageToken") // Updates the page path for the next iteration, including the new token. pagePath = path + "&pageToken=" + next // Continues loading pages until there's no next page. } while (next != null && rows.size < maxPages) // Concatenates and returns all loaded rows as a DataFrame. return rows.concat() }
以前に定義した
load()
関数を使用してデータを取得し、新しいコードセルでDataFrameを作成します。この例では、Kotlin関連の動画データを、1ページあたり最大50件、最大5ページまで取得します。結果はdf
変数に保存されます:kotlinval df = load("search?q=kotlin&maxResults=50&part=snippet", 5) df
最後に、DataFrameからアイテムを抽出して結合します:
kotlinval items = df.items.concat() items
データのクリーンアップと整形
データのクリーンアップと整形は、分析のためにデータセットを準備する上で非常に重要なステップです。Kotlin DataFrameライブラリは、これらのタスクに強力な機能を提供します。move
、concat
、select
、parse
、join
などのメソッドは、データの整理と変換に不可欠です。
データがすでにYouTubeのData APIを使用して取得されている例を見てみましょう。目標は、詳細な分析に備えるためにデータセットをクリーンアップし、再構築することです:
データの再編成とクリーンアップから始めることができます。これには、特定の列を新しいヘッダーの下に移動させたり、明確にするために不要な列を削除したりすることが含まれます:
kotlinval videos = items.dropNulls { id.videoId } .select { id.videoId named "id" and snippet } .distinct() videos
クリーンアップされたデータからIDをチャンク化し、対応する動画統計をロードします。これには、データをより小さなバッチに分割し、追加の詳細を取得することが含まれます:
kotlinval statPages = clean.id.chunked(50).map { val ids = it.joinToString("%2C") load("videos?part=statistics&id=$ids") } statPages
取得した統計情報を結合し、関連する列を選択します:
kotlinval stats = statPages.items.concat().select { id and statistics.all() }.parse() stats
既存のクリーンアップされたデータと、新しく取得した統計情報を結合します。これにより、2つのデータセットが包括的なDataFrameに結合されます:
kotlinval joined = clean.join(stats) joined
この例は、Kotlin DataFrameのさまざまな関数を使用して、データセットをクリーンアップし、再編成し、強化する方法を示しています。各ステップはデータを整形し、詳細な分析により適したものにするように設計されています。
Kotlin Notebookでのデータ分析
Kotlin DataFrameライブラリの関数を使用してデータを正常に取得し、クリーンアップおよび整形した後、次のステップは、この準備されたデータセットを分析して有意義な洞察を抽出することです。
データのカテゴリ分けにはgroupBy
、要約統計量にはsum
とmaxBy
、データの順序付けにはsortBy
といったメソッドが特に役立ちます。これらのツールを使用すると、複雑なデータ分析タスクを効率的に実行できます。
では、groupBy
を使用して動画をチャンネルごとに分類し、sum
を使用してカテゴリごとの総視聴回数を計算し、maxBy
を使用して各グループの最新または最も視聴された動画を見つける例を見てみましょう:
参照を設定することで、特定の列へのアクセスを簡素化します:
kotlinval view by column<Int>()
groupBy
メソッドを使用して、channel
列でデータをグループ化し、ソートします。kotlinval channels = joined.groupBy { channel }.sortByCount()
結果のテーブルでは、データをインタラクティブに探索できます。チャンネルに対応する行のgroup
フィールドをクリックすると、その行が展開され、そのチャンネルの動画に関する詳細が表示されます。
左下にあるテーブルアイコンをクリックすると、グループ化されたデータセットに戻ることができます。
aggregate
、sum
、maxBy
、flatten
を使用して、各チャンネルの総視聴回数とその最新または最も視聴された動画の詳細を要約するDataFrameを作成します:kotlinval aggregated = channels.aggregate { viewCount.sum() into view val last = maxBy { publishedAt } last.title into "last title" last.publishedAt into "time" last.viewCount into "viewCount" // Sorts the DataFrame in descending order by view count and transform it into a flat structure. }.sortByDesc(view).flatten() aggregated
分析結果:
より高度なテクニックについては、Kotlin DataFrameドキュメントを参照してください。
次にすること
- Kandyライブラリを使用したデータ可視化を探索する
- Kandyを使用したKotlin Notebookでのデータ可視化でデータ可視化に関する追加情報を探す
- Kotlinでのデータサイエンスと分析に利用できるツールとリソースの広範な概要については、KotlinとJavaのデータ分析ライブラリを参照してください