УДК 004.438Julia
ББК 32.973.2
Ш49
Ш49 Осваиваем язык Julia / пер. с анг. А. В. Логунова. – М.: ДМК Пресс, 2017. –
416 с.: ил.
Шеррингтон М.
ISBN 978-5-97060-370-3
Julia – это хорошо структурированный язык программирования с большим быстродействием,
устраняющий классическую проблему выполнения анализа на одном языке и трансляции его
результатов на второй с целью повышения производительности. Приведены этапы инсталляции
и выполнения Julia в разных операционных средах. Описываются различные способы работы с
языком, его ключевой функционал, пошагово разбираются практические примеры. Рассмотрена
работа Julia с внешними процессами, благодаря которым происходит значительное улучшение
качества визуализации графиков и данных. Не обделено вниманием метапрограммирование,
формирующее сетевую и распределенную вычислительную среду языка.
Издание предназначено для специалистов в области анализа данных, а также разработчиков,
желающих познакомиться с новым языком программирования.
УДК 004.438Julia
ББК 32.973.2
Copyright ©Packt Publishing, 2015. First published in the English language under the title
«Mastering Julia -(9781783553310)»
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой
бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев
авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность
технических ошибок все равно существует, издательство не может гарантировать абсолютную
точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности
за возможные ошибки, связанные с использованием книги.
ISBN 978-0-13-407770-3 (анг.)
Copyright © Packt Publishing, 2015.
ISBN 978-5-97060-370-3 (рус.) © Перевод, оформление, издание, ДМК Пресс, 2017
Стр.5
Содержание
Осваиваем язык Julia ......................................................12
Об авторе ......................................................................13
О рецензентах................................................................14
Предисловие .................................................................15
О чем рассказывает эта книга ..................................................................................................16
Что вам потребуется для работы ............................................................................................17
Для кого эта книга .......................................................................................................................17
Соглашения ....................................................................................................................................18
Обратная связь .........................................................................................................................19
Скачивание исходного кода программ ............................................................................19
Ошибки и опечатки ................................................................................................................19
Нарушение авторских прав .................................................................................................19
Вопросы ......................................................................................................................................20
Readme от автора ..........................................................................................................................20
Комментарий переводчика .......................................................................................................20
Выполнение примеров программного кода на Julia ....................................................21
Установка среды разработки Julia .....................................................................................22
Установка пакетов в среду разработки Julia ..................................................................23
Установка и удаление IDE Juno/Atom ............................................................................25
Установка и работа с плагином для Eclipse ....................................................................25
Работа с Julia в облаке JuliaBox ..........................................................................................26
Установка и удаление дистрибутива Anaconda Python .............................................26
Запуск сервера записных книжек Jupyter ......................................................................27
Факультативные настройки среды ...................................................................................27
Среда разработки Julia ....................................................29
Введение ..........................................................................................................................................29
Философия ................................................................................................................................30
Роль в науке о данных и в области больших данных .................................................31
Сопоставление с другими языками ..................................................................................32
Характеристики .......................................................................................................................34
Начало работы ...............................................................................................................................35
Исходные тексты Julia ...........................................................................................................36
Сборка из исходников ...........................................................................................................37
Изучение стека исходного кода .........................................................................................41
Интегрированная среда разработки Juno .......................................................................42
Стр.6
6 Содержание
Плагин JuliaDT для среды программирования Eclipse .............................................43
Среда программирования IJulia .........................................................................................44
Краткий обзор языка Julia ........................................................................................................46
Julia через консоль ..................................................................................................................47
Установка некоторых пакетов .............................................................................................50
Мои эталонные испытания ..................................................................................................52
Управление пакетами .................................................................................................................53
Вывод перечня пакетов, добавление и удаление..........................................................53
Выбор и ознакомление с пакетами ...................................................................................54
Как деинсталлировать Julia .................................................................................................58
Добавление незарегистрированного пакета ..................................................................59
Особенности языка Julia ............................................................................................................59
Параллельная обработка ......................................................................................................59
Множественная диспетчеризация ....................................................................................60
Гомоиконные макрокоманды ..............................................................................................60
Межязыковое взаимодействие ...........................................................................................60
Заключение ....................................................................................................................................61
Разработка на Julia .........................................................62
Целые числа, биты, байты и логические значения ...........................................................62
Целое ...........................................................................................................................................63
Логические и арифметические операторы .....................................................................65
Логический тип ........................................................................................................................65
Массивы ..........................................................................................................................................66
Операции на матрицах ..........................................................................................................68
Поэлементные операции ......................................................................................................68
Простая марковская цепь – кошки и мышки ................................................................69
Символьный и строковый типы .............................................................................................70
Символьный тип .....................................................................................................................70
Строковый тип .........................................................................................................................71
Пример: игра «Быки и коровы» .........................................................................................74
Вещественные, комплексные и рациональные числа .....................................................76
Вещественные ..........................................................................................................................77
Рациональные числа ..............................................................................................................78
Комплексные числа ................................................................................................................78
Составные типы ............................................................................................................................82
Дополнительно о матрицах ......................................................................................................82
Векторизованный и девекторизованный программный код ...................................83
Многомерные массивы .........................................................................................................83
Разреженные матрицы ..........................................................................................................85
Массивы и таблицы данных .....................................................................................................86
Стр.7
Содержание 7
Словари, множества и прочее ..................................................................................................87
Словари ......................................................................................................................................87
Множества .................................................................................................................................89
Другие структуры данных....................................................................................................90
Заключение ....................................................................................................................................91
Типы и диспетчеризация ..................................................92
Функции..........................................................................................................................................92
Объекты первого класса .......................................................................................................92
Передача аргументов .............................................................................................................96
Область видимости.............................................................................................................. 100
Задача о восьми ферзях ..................................................................................................... 103
Система типов Julia .................................................................................................................. 104
Обзор рационального типа ............................................................................................... 104
Тип данных для транспортных средств ........................................................................ 107
Перечисляемый тип ............................................................................................................ 116
Множественная диспетчеризация ...................................................................................... 118
Параметрические типы ...................................................................................................... 119
Операции преобразования и приведения .................................................................... 121
Модуль для фиксированного 3D-вектора ................................................................... 122
Заключение ................................................................................................................................. 124
Функциональная совместимость .....................................125
Взаимодействие с другими программными средами ................................................... 125
Обращение к программам на C и Fortran .................................................................... 126
Язык Python ........................................................................................................................... 131
Некоторые другие языки ................................................................................................... 133
Программный интерфейс Julia ........................................................................................ 133
Обращение к API из C ........................................................................................................ 134
Метапрограммирование ......................................................................................................... 136
Символические имена ........................................................................................................ 136
Макрокоманды ...................................................................................................................... 138
Тестирование ......................................................................................................................... 141
Макрокоманда enum ........................................................................................................... 143
Объект Task и многозадачность ........................................................................................... 145
Параллельные операции .................................................................................................... 146
Распределенные массивы .................................................................................................. 148
Простая модель MapReduce ............................................................................................. 151
Исполнение команд .................................................................................................................. 152
Запуск команд на исполнение ......................................................................................... 153
Работа с файловой системой ............................................................................................ 155
Стр.8
8 Содержание
Перенаправление ввода-вывода и конвейеры ........................................................... 157
Заключение ................................................................................................................................. 160
Работа с данными .........................................................161
Базовая система ввода-вывода ............................................................................................. 161
Терминальный ввод-вывод ............................................................................................... 161
Дисковые файлы .................................................................................................................. 163
Обработка текста .................................................................................................................. 165
Двоичные файлы .................................................................................................................. 167
Структурированные наборы данных ................................................................................. 169
Файлы CSV и DLM ............................................................................................................. 169
Файлы HDF5 ......................................................................................................................... 173
Файлы XML ........................................................................................................................... 176
DataFrames и RDatasets .......................................................................................................... 179
Пакет DataFrames ................................................................................................................ 179
Таблицы данных DataFrame ............................................................................................. 180
Пакет RDatasets .................................................................................................................... 183
Статистика ................................................................................................................................... 187
Простые статистики ............................................................................................................ 188
Выборки и их оценка .......................................................................................................... 190
Модуль Pandas ...................................................................................................................... 190
Отдельные темы ........................................................................................................................ 192
Временные ряды ................................................................................................................... 192
Распределения вероятностей ........................................................................................... 195
Проверка статистических гипотез ................................................................................. 197
Обобщенная линейная модель ........................................................................................ 199
Заключение ................................................................................................................................. 202
Научное программирование ...........................................203
Линейная алгебра ...................................................................................................................... 204
Система уравнений .............................................................................................................. 204
Разложение матриц ............................................................................................................. 206
Собственные значения и собственные векторы ........................................................ 207
Матрицы специального вида ........................................................................................... 210
Обработка сигналов ................................................................................................................. 211
Частотный анализ ................................................................................................................ 211
Фильтрация и сглаживание .............................................................................................. 211
Цифровые фильтры ............................................................................................................. 214
Обработка изображений .................................................................................................... 214
Дифференциальные уравнения ........................................................................................... 217
Решение обыкновенных дифференциальных уравнений ...................................... 217
Стр.9
Содержание 9
Нелинейные обыкновенные дифференциальные уравнения .............................. 219
Дифференциальные уравнения в частных производных ...................................... 222
Оптимизационные задачи ...................................................................................................... 224
Пакет JuMP ............................................................................................................................ 225
Пакет Optim ........................................................................................................................... 227
Пакет NLopt ........................................................................................................................... 229
Стохастические задачи ............................................................................................................ 233
Стохастическое моделирование ...................................................................................... 233
Байесовские методы и марковские процессы ............................................................ 237
Заключение ................................................................................................................................. 243
Графика ......................................................................244
Базовая графика в Julia ........................................................................................................... 245
Построение текстовых графиков .................................................................................... 245
Пакет Cairo ............................................................................................................................. 246
Пакет Winston ....................................................................................................................... 248
Визуализация данных ............................................................................................................. 251
Пакет Gadfly ........................................................................................................................... 252
Пакет Compose ...................................................................................................................... 257
Графические движки ................................................................................................................ 259
Пакет PyPlot .......................................................................................................................... 259
Пакет Gaston .......................................................................................................................... 262
Пакет PGFPlots .................................................................................................................... 264
Использование сети Интернет ............................................................................................. 267
Пакет Bokeh ........................................................................................................................... 267
Пакет Plotly ............................................................................................................................ 268
Растровая графика .................................................................................................................... 271
Возвращаясь к пакету Cairo ............................................................................................. 272
Возвращаясь к пакету Winston ........................................................................................ 273
Пакеты Images и ImageView ............................................................................................. 274
Заключение ................................................................................................................................. 276
Базы данных ................................................................278
Общий обзор баз данных ........................................................................................................ 278
Вот две таблетки: красная и синяя. Выбирай! ........................................................... 279
Взаимодействие с базами данных .................................................................................. 280
Другие соображения ........................................................................................................... 282
Реляционные базы данных .................................................................................................... 283
Создание и загрузка ............................................................................................................ 283
Нативные интерфейсы ....................................................................................................... 286
Программный интерфейс ODBC ................................................................................... 289
Стр.10
10 Содержание
Другие методы взаимодействия...................................................................................... 293
Интерфейс DBI ..................................................................................................................... 294
Пакет PyCall .......................................................................................................................... 296
Стандарт взаимодействия JDBC .................................................................................... 298
Хранилища данных NoSQL ................................................................................................... 299
Системы «ключ-значение» ............................................................................................... 300
Документоориентированные хранилища данных .................................................... 303
Взаимодействие с RESTful .................................................................................................... 306
Данные в формате JSON .................................................................................................... 307
Интернет-СУБД ................................................................................................................... 308
Графовые системы хранения данных ............................................................................ 311
Заключение ................................................................................................................................. 314
Сетевое взаимодействие ...............................................315
Сокеты и серверы ...................................................................................................................... 315
Стандартные порты ............................................................................................................. 315
Сокеты UDP и TCP в Julia ............................................................................................... 316
«Зазеркальный» эхо-сервер.............................................................................................. 317
Именованные каналы ......................................................................................................... 320
Работа в сети Интернет ........................................................................................................... 321
Веб-служба на основе TCP ............................................................................................... 321
Группа пакетов JuliaWeb .................................................................................................... 323
Сервер цитат .......................................................................................................................... 326
Технология WebSocket ....................................................................................................... 328
Обмен сообщениями ................................................................................................................ 332
Электронная почта .............................................................................................................. 332
Социальная сеть Twitter .................................................................................................... 333
СМС-сообщения .................................................................................................................. 335
Облачные службы ..................................................................................................................... 338
Введение в веб-службы Amazon ...................................................................................... 339
Пакет AWS.jl .......................................................................................................................... 340
Платформа Google Cloud .................................................................................................. 344
Заключение ................................................................................................................................. 347
Работа с Julia ...............................................................348
Внутреннее устройство ........................................................................................................... 348
Язык Femtolisp ...................................................................................................................... 349
Программный интерфейс Julia ........................................................................................ 350
Генерация машинных кодов ............................................................................................. 352
Советы относительно производительности .................................................................... 355
Наиболее успешная практика .......................................................................................... 355
Стр.11
Содержание 11
Профилирование .................................................................................................................. 357
Статический анализ кода .................................................................................................. 359
Отладка .................................................................................................................................... 361
Разработка пакета ..................................................................................................................... 363
Анатомия ................................................................................................................................. 363
Классификация ..................................................................................................................... 366
Использование Git............................................................................................................... 367
Публикация ............................................................................................................................ 369
Сообщества программистов .................................................................................................. 370
Классификации .................................................................................................................... 371
Группа пакетов JuliaAstro .................................................................................................. 371
Группа пакетов JuliaGPU .................................................................................................. 378
Что не вошло в книгу? ............................................................................................................. 381
Заключение ................................................................................................................................. 382
Символическая математика с Julia ..................................384
Введение ....................................................................................................................................... 384
О пакете ................................................................................................................................... 385
Уравнения ............................................................................................................................... 386
Элементарная алгебра ........................................................................................................ 386
Решение уравнений ............................................................................................................. 387
Построение графиков выражений ................................................................................. 390
Пределы ................................................................................................................................... 392
Производные ......................................................................................................................... 393
Экстремумы ........................................................................................................................... 394
Интегрирование.................................................................................................................... 394
Применения ........................................................................................................................... 395
Глоссарий основных терминов и сокращений ....................398
Предметный указатель ..................................................406
Стр.12