Тип работы:
Предмет:
Язык работы:


Создание Kotlin API для Grammar of graphics

Работа №127725

Тип работы

Бакалаврская работа

Предмет

информатика

Объем работы34
Год сдачи2022
Стоимость4290 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
11
Не подходит работа?

Узнай цену на написание


Введение 4
Постановка задачи 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


Grammar of graphics — это грамматика для задания графиков, описанная Леландом Уилкинсоном в одноименной работе [1]. На основе этой работы была создана библиотека ggplot2 [2][3] для построения графиков на языке программирования R [4]. В ней для описания графиков используется синтаксис, вдохновленный грамматикой Уилкинсона. На основе библиотеки ggplot2 в компании JetBrains была разработана библиотека Lets-Plot [5] для языка программирования Kotlin [6]. Однако API для построения графика был взят почти напрямую из ggplot2, и унаследовал его существенные недостатки — отсутствие типизации и типобезопасности, проблемы со структурой (такие как отсутствие иерархии элементов графика, разделение взаимосвязанных элементов графика). Он не задействует средства Kotlin для создания идиоматичного синтаксиса, — например, внешних контекстов с получателями.
Постановка задачи
Первоначально, данная работы была направлена на разработку удобного предметно-ориентированного языка на 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



[1] L. Wilkinson: The Grammar of Graphics, Springer, 1999. ISBN 0-387-98774¬
6.
[2] Документация ggplot2. URL: https://ggplot2.tidyverse.org/
index.html
[3] H. Wickham, D. Navarro, T. L. Pedersen: ggplot2: elegant graphics for data analysis. URL:https://ggplot2-book.org
[4] Язык программирования R. URL:https://www.r-project.org
[5] Библиотека Lets-Plot. URL:https://github.com/JetBrains/lets-plot-kotlin
[6] Язык программирования Kotlin. URL:https://kotlinlang.org
[7] Библиотека Apache ECharts. URL:https://echarts.apache.org/en/index.html
[8] Язык программирования JavaScript. URL: https://
developer.mozilla.org/en-US/docs/Web/JavaScript
[9] Kotlin Jupyter Kernel. URL:https://github.com/Kotlin/kotlin-jupyter
[10] Jupyter Notebook. URL:https://jupyter.org
[11] Библиотека Kotlin Dataframe. URL:https://github.com/Kotlin/dataframe
[12] The official U.S. government source for fuel economy information. URL: https://fueleconomy.gov
[13] A. Nozik: An introduction to context-oriented programming in Kotlin. URL:https://proandroiddev.com/an-introduction-context-oriented-programming-in-kotlin-2e79d316b0a2
[14] Система сборки Gradle. URL:https://gradle.org
[15] Библиотека Kotlin Test. URL:https://kotlinlang.org/api/latest/kotlin.test/
[16] Библиотека kravis. URL:https://github.com/holgerbrandl/kravis
[17] Библиотека plotly.kt. URL:https://github.com/mipt-npm/plotly.kt
[18] Библиотека plotly. URL:https://plotly.com


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ