Тема: Создание Kotlin API для Grammar of graphics
Закажите новую по вашим требованиям
Представленный материал является образцом учебного исследования, примером структуры и содержания учебного исследования по заявленной теме. Размещён исключительно в информационных и ознакомительных целях.
Workspay.ru оказывает информационные услуги по сбору, обработке и структурированию материалов в соответствии с требованиями заказчика.
Размещение материала не означает публикацию произведения впервые и не предполагает передачу исключительных авторских прав третьим лицам.
Материал не предназначен для дословной сдачи в образовательные организации и требует самостоятельной переработки с соблюдением законодательства Российской Федерации об авторском праве и принципов академической добросовестности.
Авторские права на исходные материалы принадлежат их законным правообладателям. В случае возникновения вопросов, связанных с размещённым материалом, просим направить обращение через форму обратной связи.
📋 Содержание
Постановка задачи 5
Обзор литературы 7
1. Визуализация данных. Структура графика 9
1.1. Модель данных 9
1.2. Визуальная структура графика 10
1.2.1 Компоненты графика 10
1.2.2 Визуализация и чтение графика 10
1.3. Процесс визуализации 12
2. Промежуточное представление графика 14
2.1. Данные 14
2.2. Скейлы 14
2.2.1 Гиды 16
2.3. Эстетические атрибуты 16
2.4. Связывание 17
2.5. Слой 18
2.6. Особенности 19
2.7. График 19
2.8. Схема промежуточного представления 19
3. Предметно-ориентированный язык 22
3.1. Контексты 22
3.1.1 Базовый контекст 22
3.1.2 Контекст графика 22
3.1.3 Контекст слоя 23
3.2. Данные 23
3.3. Скейлы 23
3.4. Связывание 25
3.5. Добавление особенностей 26
3.6. Схема предметно-ориентированного языка 26
4. Трансляторы и особенности движков 27
4.1. Lets-Plot 27
4.1.1 Особенности 27
4.1.2 Транслятор 29
4.2. ECharts 29
4.2.1 Особенности 29
4.2.2 Транслятор 31
5. Технические детали и аналоги 32
5.1. Интеграции 32
5.1.1 Kotlin Jupyter Kernel 32
5.1.2 Kotlin Dataframe 32
5.2. Тестирование 33
5.3. Используемые технологии 33
5.4. Сравнение с аналогами 34
Заключение 36
Список литературы 37
📖 Введение
Постановка задачи
Первоначально, данная работы была направлена на разработку удобного предметно-ориентированного языка на Kotlin для построения графиков в библиотеке Lets-Plot, использую идеи Grammar of graphics.
Однако, в дальнейшем, задача была в значительной мере изменена. Было принято решение сделать API более универсальным, а именно:
1. Разработать универсальное промежуточное представление графика, которое можно перевести в представления графиков в различные движки для визуализации графиков.
2. Разработать предметно-ориентированный язык на Kotlin для построения графиков, генерирующая данное представление, с возможностью (опционально) добавлять в него элементы, основанные на особенностях движка, для которого строится график
Помимо этого, в задачу входило написании трансляторов, преобразующих получаемое при создании на разработанном предметно-ориентированном языке промежуточное представление графика во внутренние представления графиков конкретных движков. Такими движками были выбраны, разумеется, Lets-Plot, а также библиотека ECharts [7] на языке JavaScript [8]. ECharts был выбран по ряду причин. Во-первых, формат, в котором в ECharts представлен график, - это JSON, который несложно сгенерировать средствами Kotlin. Во-вторых, он использует подход описания графиков, отличный от Lets-Plot и ggplot2, а также написан на другом языке. Таким образом, реализация трансляции ECharts демонстрирует универсальность разработанного представления.
Другой немаловажной задачей было интегрировать разработанную библиотеку с существующими продуктами в экосистеме Kotlin for Data Science. А именно:
1. Kotlin Jupyter Kernel [9] - это ядро для Jupyter Notebook [10], позволяющее запускать на нем код на Kotlin. Необходимо было реализовать визуализацию создаваемых графиков на движках внутри ноутбука.
2. Kotlin Dataframe [11] - это библиотека для работы с данными. В рамках работы нужно реализовать визуализации данных, используя Dataframe как источник данных.
✅ Заключение
Разработанное промежуточное представление графика позволяет эффективно использовать один и тот же код для построения графика для визуализации в различных движках рендеринга. Благодаря простоте и универсальности, трансляции осуществляться во многие движки и несложно реализуется.
Реализованные трансляторы позволяют использовать разработанный язык для построения графиков и визуализировать их с помощью движков Lets-Plot и Apache Echarts.
Реализованные интеграции позволяют работать с важнейшими элементами экосистемы Kotlin for Data Science.
В результате работы все поставленные задачи были выполнены.
Разработанная библиотека в ближайшем будущем будет опубликована как часть официальных библиотек для языка Kotlin — kotlinx.
Весь код разработанного программного обеспечения доступен в публичных репозиториях на платформе GitHub:
• https://github.com/AndreiKingsley/ggdsl
• https://github.com/AndreiKingsley/ggdsl-lets-plot
• https://github.com/AndreiKingsley/ggdsl-echarts
• https://github.com/AndreiKingsley/ggdsl-dataframe



