Пакеты, Pkg и работа с данными
Как устроена экосистема Julia: менеджер пакетов Pkg, воспроизводимые окружения и пакет DataFrames для данных.
Pkg — встроенный менеджер пакетов Julia. Он устанавливает библиотеки, разрешает зависимости и создаёт воспроизводимые окружения проекта.
Установка пакетов
В REPL нажмите ] для входа в Pkg-режим. Основные команды:
(@v1.10) pkg> add DataFrames
(@v1.10) pkg> add Plots CSV
(@v1.10) pkg> status
(@v1.10) pkg> update
(@v1.10) pkg> remove CSVВ скрипте пакет подключают так:
using DataFrames
using StatisticsВоспроизводимые окружения
Это большое преимущество Julia. Команда activate . создаёт в папке проекта два файла: Project.toml (прямые зависимости) и Manifest.toml (точные версии всех пакетов, включая транзитивные). Скопировав эти файлы коллеге, он получит в точности то же окружение командой instantiate. Это решает «проблему воспроизводимости», знакомую по requirements.txt в Python, но строже.
Экосистема
Несмотря на молодость языка, у Julia зрелая экосистема для науки и данных:
| Пакет | Назначение |
DataFrames.jl | табличные данные (аналог pandas) |
Plots.jl | построение графиков |
DifferentialEquations.jl | дифференциальные уравнения (один из лучших в мире) |
Flux.jl | машинное обучение |
JuMP.jl | математическая оптимизация |
DataFrames: обзор
DataFrames.jl — стандарт для табличных данных в Julia, по идее близкий к pandas. Типичный код выглядит так (его не запускают здесь — нужен установленный пакет):
using DataFrames
df = DataFrame(name = ["Анна", "Иван", "Ольга"],
age = [30, 25, 35])
# фильтрация: строки, где age > 28
adults = df[df.age .> 28, :]
# новый столбец
df.age_in_5 = df.age .+ 5
# среднее по столбцу
mean_age = sum(df.age) / nrow(df)Обратите внимание на .> и .+ — это уже знакомый вам broadcasting: операции применяются к каждому элементу столбца. Знание точечного синтаксиса напрямую переносится на работу с данными.
Как работает под капотом
Каждый столбец DataFrame — это обычный типизированный Vector Julia, например Vector{Int64} для возрастов. Поэтому операции над столбцами компилируются в быстрый код, как над любым массивом, без отдельного «движка», как у pandas. Это значит, что ваш собственный код для обработки таблиц так же быстр, как встроенные операции, — в отличие от Python, где «голый» цикл по DataFrame медленнее векторизованных методов pandas.
Частые ошибки
Главная путаница новичков с DataFrames — забыть точку в сравнении: df.age > 28 (без точки) пытается сравнить весь столбец-вектор с числом и упадёт, а нужно поэлементное df.age .> 28. Вторая ошибка — коммитить только Project.toml без Manifest.toml, теряя точную воспроизводимость версий.
Итоги
Pkg(режим]) устанавливает пакеты:add,status,update,remove.Project.toml+Manifest.tomlдают строго воспроизводимое окружение.- Экосистема зрелая: DataFrames, Plots, Flux, JuMP, DifferentialEquations.
- Столбцы DataFrame — обычные типизированные векторы, поэтому работа с данными быстра.
- Для фильтрации и вычислений по столбцам используют broadcasting (
.>,.+).