Изменения

Перейти к: навигация, поиск

Примеры кода на Kotlin в Jupyter Notebook

5 байт добавлено, 21:34, 19 апреля 2020
Функциональный стиль с библиотекой krangl
Также Котлин имеет имеет такую особенность дизайна языка, как ''null-safety'' и предоставляет такие операторы, как: ''safe call operator, elvis operator, not-null assertion operator'', что позволяет ему быть более типобезопасным, по сравнению сравнениюc с Python:'''Kotlin'''
var a: String = "abc"
Помимо функционального синтаксиса и конструкций, Котлин также предоставляет набор математических и machine learning библиотек, а также инструментов для Data Science, в том числе, интегрированность с Jupyter Notebook.
==Установка Kotlin в Jupyter Notebook==
'''Kernel в Jupyter Notebook '''- это вычислительный движок, который исполняет код в данном документе и запускается автоматически при запуске ассоциированного с ним Jupyter Notebook документа. Они существуют для разных языков, например, ipython kernel исполняет Pythod код, а Kotlin kernel - Kotlin код в Jupyter Notebook. Именно '''Kotlin kernel''' позволяет писать и запускать код в Jupyter Notebook, а также использовать библиотеки и фреймворки, написанные на Java и Kotlin.
Обратите внимание, что Kotlin Jupyter требует установленной Java 8:
apt-get install openjdk-8-jre
 
==Поддерживаемые библиотеки==
* '''[https://github.com/thomasnield/kotlin-statistics kotlin-statistics''']''' $-$ предоставляет расширения для функций для подсчета статистики. Поддерживает основные list/sequence/array functions, slicing operators (countBy, simpleRegressionBy, etc), binning operations, discrete PDF sampling, naive bayes classifier, clustering, linear regression, и другое* '''[https://github.com/mipt-npm/kmath kmath''']''' $-$ поддерживает алгебраические структуры и операторы, математические выражения, гистограммы, потоковые операции, обертки над commons-math и koma, и другое. Вдохновлена numpy* '''[https://github.com/holgerbrandl/krangl Krangl''']''' $-$ предоставляет функционал для обработки данных в функциональном стиле(filter, transform, aggregate, reshape и др.) Вдохновлена pandas* '''[https://github.com/JetBrains/lets-plot lets-plot''']''' $-$ Мультиплатформенная библиотека для создания графиков из данных. Может использоваться не только в JVM, но также JS and Python.* '''[https://github.com/holgerbrandl/kravis kravis''']''' $-$ библиотека для визуализации данных.* '''[https://github.com/cbeust/klaxon klaxon''']''' $-$ Котлин JSON парсер* '''[https://github.com/apache/spark spark''']''' $-$ Фреймворк для распределённой обработки неструктурированных и слабоструктурированных данных* '''[https://github.com/eseifert/gral gral''']''' $-$ Java библиотека для отображения графиков* '''[https://koma.kyonifer.com/index.html koma''']''' $-$ Котлин библиотека для научных вычислений* '''[https://github.com/Kotlin/kotlin-numpy numpy''']''' $-$ Kотлин обертка над Python NumPy * '''[https://github.com/JetBrains/Exposed exposed''']''' $-$ Kотлин SQL фреймворк* '''[https://github.com/mysql/mysql-connector-j mysql''']''' $-$ MySql JDBC
==Добавление зависимостей==
==Функциональный стиль с библиотекой krangl==
'''Примеры обработки данных в функциональном стиле с Kotlin stdlib:'''
users.filter{it.eyeColor == "green"}
'''Примеры обработки данных в функциональном стиле с krangl'''
 
Используемые функции:
* '''addColumn''' $-$ добавление новой вычисленной по заданной функции колонки
* '''filter ''' $-$ подвыборка строк по заданному условию:
'''df.filter { it["age"] eq 23 }''' '''df.filter { it["weight"] gt 50 }''' '''df.filter({ it["last_name"].isMatching { startsWith("Do") }})'''
* '''sortedBy''' $-$ сортировка, можно передавать множество значений, которые будут учитываться в сортировке в соответствующем порядке
'''df.sortedBy("age", "weight")''' '''df.sortedByDescending("age")'''
* '''select и remove''' $-$ подвыборка строк
'''df.select2 { it is IntCol } // functional style column selection ''' '''df.select("last_name", "weight") // positive selection ''' '''df.remove("weight", "age") // negative selection ''' '''df.select({ endsWith("name") }) // selector mini-language '''
Обработка строк:
.select("name", "score", "count", "groups")
.sortedByDescending("score")
 
Больше примеров с ипользованием библиотеки krangl - https://github.com/Kotlin/kotlin-jupyter/blob/master/samples/Krangl.ipynb
==Построение графиков==
Подробнее о настройках и параметрах графиков в Lets-plot: https://github.com/JetBrains/lets-plot-kotlin/blob/master/docs/guide/user_guide.ipynb
'''lets_plot(eyes) + stat_count() + ggsize(500,300)'''
[[Файл:I04n3zFx68s.jpg |600px|thumb|center|]]
val rand = java.util.Random()
'''val rand = java.util.Random()''' '''val data = mapOf<String, Any>(''' ''' "rating" to List(200) { rand.nextGaussian() } + List(200) { rand.nextGaussian() * 1.5 + 1.5 },''' ''' "cond" to List(200) { "A" } + List(200) { "B" }''' ''' )''' '''var p = lets_plot(data)''' '''p += geom_density(color="dark_green", alpha=.3) {x="rating"; fill="cond"}''' '''p + ggsize(500, 250)'''
[[Файл:2-_1xADOor0.jpg |700px|thumb|center|]]
'''lets_plot(mapOf(''' '''"date" to usages.select("DateTime").collectAsList().map{(it[0] as Timestamp).getTime()},''' '''"usage" to usages.select("users").collectAsList().map{it[0]}''' ''')) +''' '''geom_bar(stat = Stat.identity){x = "date"; y = "usage"; fill ="usage"} +''' '''scale_x_datetime() +''' '''scale_fill_hue()+''' '''qqsize(800, 400)'''
[[Файл:YG1W2uqtTSc.jpg |700px|thumb|center|]]
'''Библиотека Kravis'''
 Подробнее - https://github.com/holgerbrandl/kravis  '''%use kravis, krangl ''' '''val sleepData = DataFrame.fromJson("data.json"). ''' '''.addColumn("rem_proportion") { it["sleep_rem"] / it["sleep_total"] } ''' '''.plot(x = "sleep_total", y = "rem_proportion", color = "vore", size = "brainwt") ''' ''' .geomPoint(alpha = 0.7) ''' ''' .guides(size = LegendType.none) ''' ''' .title("Correlation between dream and total sleep time") '''
[[Файл:YKNvj0bWuO8.jpg |700px|thumb|center|]]
28
правок

Навигация