Spec-Zone.ru › Kotlin 2

Получение данных из веб-источников и API

С помощью библиотеки Kotlin DataFrame можно получать и обрабатывать данные из различных веб-источников и API. Она также помогает преобразовывать эти данные для всестороннего анализа и визуализации.

Изучите примеры DataFrame на GitHub.

Перед началом

Начиная с IntelliJ IDEA 2026.2, Kotlin Notebook больше не будет входить в состав IDE и официально поддерживаться JetBrains. Исходный код останется доступен на GitHub.

Подробнее читайте в публикации в блоге.

Создайте новую записную книжку Kotlin Notebook:

  1. Выберите Файл | Создать | Kotlin Notebook.

  2. Импортируйте библиотеку Kotlin DataFrame, выполнив следующую команду:

    %use dataframe
    

Чтобы следовать этому руководству, можно также подключить DataFrame как зависимость Gradle или Maven.

Получение данных из API

Для получения данных из API с помощью библиотеки Kotlin DataFrame используется функция .read(). Она аналогична получению данных из файлов, например CSV или JSON. Однако при работе с веб-источниками может потребоваться дополнительное форматирование, чтобы преобразовать необработанные данные API в структурированный формат.

Рассмотрим пример получения данных из YouTube Data API:

  1. Безопасно добавьте ключ API в новую ячейку кода. Он необходим для аутентификации запросов к YouTube Data API. Получить ключ API можно на вкладке учетных данных:

    val apiKey = "YOUR-API_KEY"
    
  2. Создайте функцию загрузки, которая принимает путь в виде строки и использует функцию .read() из DataFrame для получения данных из YouTube Data API:

    fun load(path: String): AnyRow = DataRow.read("https://www.googleapis.com/youtube/v3/$path&key=$apiKey")
    
  3. Организуйте полученные данные в строки и обработайте пагинацию YouTube API с помощью nextPageToken. Это позволит собрать данные с нескольких страниц:

    fun 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() 
    }
    
  4. Используйте ранее определенную функцию load(), чтобы получить данные и создать DataFrame в новой ячейке кода. В этом примере загружаются данные — в данном случае видео, связанные с Kotlin, — не более 50 результатов на странице и не более чем с 5 страниц. Результат сохраняется в переменной df:

    val df = load("search?q=kotlin&maxResults=50&part=snippet", 5)
    df
    
  5. Наконец, извлеките и объедините элементы из DataFrame:

    val items = df.items.concat()
    items
    

Очистка и уточнение данных

Очистка и уточнение данных — важные этапы подготовки набора данных к анализу. Библиотека Kotlin DataFrame предлагает мощные возможности для решения этих задач. Такие методы, как move, concat, select, parse и join, помогают упорядочивать и преобразовывать данные.

Рассмотрим пример, в котором данные уже получены с помощью YouTube Data API. Цель — очистить и реорганизовать набор данных, подготовив его к углубленному анализу:

  1. Для начала можно реорганизовать и очистить данные. Это включает перемещение некоторых столбцов под новые заголовки и удаление ненужных столбцов для большей наглядности:

    val videos = items.dropNulls { id.videoId }
        .select { id.videoId named "id" and snippet }
        .distinct()
    videos
    
  2. Разбейте идентификаторы на фрагменты и загрузите соответствующую статистику видео. Для этого нужно разделить данные на небольшие группы и получить дополнительные сведения:

    val statPages = clean.id.chunked(50).map {
        val ids = it.joinToString("%2C")
        load("videos?part=statistics&id=$ids")
    }
    statPages
    
  3. Объедините полученные статистические данные и выберите нужные столбцы:

    val stats = statPages.items.concat().select { id and statistics.all() }.parse()
    stats
    
  4. Объедините существующие очищенные данные с новой статистикой. Так два набора данных будут сведены в единый DataFrame:

    val joined = clean.join(stats)
    joined
    

Этот пример демонстрирует, как с помощью различных функций Kotlin DataFrame очищать, реорганизовывать и дополнять набор данных. Каждый шаг помогает уточнить данные и сделать их более подходящими для углубленного анализа.

Анализ данных в Kotlin Notebook

После того как вы успешно получили и очистили и уточнили данные с помощью функций из библиотеки Kotlin DataFrame, следующим шагом будет анализ подготовленного набора данных для извлечения значимых выводов.

Особенно полезны такие методы, как groupBy для категоризации данных, sum и maxBy для вычисления сводной статистики, а также sortBy для сортировки данных. Эти инструменты позволяют эффективно выполнять сложные задачи анализа данных.

Рассмотрим пример: с помощью groupBy распределим видео по каналам, с помощью sum вычислим общее количество просмотров для каждой категории, а с помощью maxBy найдем самое новое или самое просматриваемое видео в каждой группе:

  1. Упростите доступ к определенным столбцам, создав ссылки на них:

    val view by column<Int>()
    
  2. Используйте метод groupBy, чтобы сгруппировать данные по столбцу channel и отсортировать их.

    val channels = joined.groupBy { channel }.sortByCount()
    

    В полученной таблице можно интерактивно изучать данные. Нажмите на поле group в строке канала, чтобы развернуть эту строку и просмотреть дополнительные сведения о видео канала.

    Expanding a row to reveal more details

    Чтобы вернуться к сгруппированному набору данных, нажмите значок таблицы в левом нижнем углу.

    Click on the table icon in the bottom left to return
  3. Используйте aggregate, sum, maxBy и flatten, чтобы создать DataFrame со сводкой по общему количеству просмотров каждого канала и сведениями о его самом новом или самом просматриваемом видео:

    val 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
    

Результаты анализа:

Analysis results

Дополнительные сведения о продвинутых методах см. в документации Kotlin DataFrame.

Что дальше

  • Изучите визуализацию данных с помощью библиотеки Kandy

  • Дополнительные сведения о визуализации данных см. в разделе Визуализация данных с помощью Kandy

  • Подробный обзор инструментов и ресурсов для анализа и обработки данных в Kotlin см. в разделе Библиотеки Kotlin и Java для анализа данных

12 августа 2026 г.
Получение данных из файловПодключение к базам данных и получение данных

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/data-analysis-work-with-api.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API