DataFrames.jl

Представляем вам документацию по DataFrames.jl.

Цель этого ресурса — научить вас всему, что нужно знать, чтобы приступить к работе с табличными данными с помощью пакета DataFrames.jl.

Чтобы получить другие примеры использования DataFrames.jl, в частности в сочетании с другими пакетами, ознакомьтесь со следующими ресурсами (они обновляются с выходом новых версий DataFrames.jl).

Если вы хотите почитать книги о DataFrames.jl, то вот неплохие варианты:

Что такое DataFrames.jl

Пакет DataFrames.jl предоставляет инструментарий для работы с табличными данными в Julia. Его структура и возможности аналогичны таковым у пакетов pandas (в Python) и data.frame, data.table и dplyr (в R), что делает его отличным универсальным средством для анализа и обработки данных.

Пакет DataFrames.jl занимает центральное место в экосистеме Julia для работы с данными и тесно интегрирован с рядом других библиотек. Пакет DataFrames.jl — это не единственное средство для работы с табличными данными в Julia; как будет указано ниже, есть и другие отличные библиотеки для определенных ситуаций, однако он предоставляет широкие возможности для первичной обработки данных через привычный интерфейс.

Для более детального изучения набора инструментальных средств ознакомьтесь с учебными пособиями в составе данного руководства. Новички могут начать с раздела First Steps with DataFrames.jl.

При реализации более сложных преобразований данных могут оказаться полезными пакет DataFramesMeta.jl или один из других вспомогательных пакетов, рассматриваемых в разделе Data manipulation frameworks данного руководства, особенно если у вас нет большого опыта в программировании. Эти пакеты предлагают удобный синтаксис наподобие dplyr в языке R.

Если при работе с DataFrames.jl вы используете метаданные, полезным может оказаться пакет TableMetadataTools.jl. В нем определен ряд удобных функций для выполнения стандартных операций с метаданными.

DataFrames.jl и экосистема Julia для работы с данными

Новичкам может быть сложно разобраться в экосистеме Julia для работы с данными, отчасти потому, что ее возможности разнесены по большему числу библиотек, чем в некоторых других языках. Поскольку многие пользователи, приступающие к работе с DataFrames.jl, лишь начинают знакомиться с экосистемой Julia для работы с данными, ниже приведен список хорошо поддерживаемых библиотек, предоставляющих различные инструменты для анализа и обработки данных, с замечаниями об особенностях каждой библиотеки и степени ее интеграции с DataFrames.jl.

  • Статистика

    • StatsKit.jl: вспомогательный метапакет, который загружает набор полезных пакетов для статистической обработки, включая указанные ниже в этом разделе и сам пакет DataFrames.jl.

    • Statistics: в стандартную библиотеку Julia включен широкий набор статистических функций, но для доступа к ним необходимо вызвать using Statistics.

    • LinearAlgebra: как и в случае с Statistics, многие функции линейной алгебры (разложения, обращения и т. д.) сведены в библиотеку, которую нужно загрузить перед использованием.

    • SparseArrays также входит в стандартную библиотеку, но требует загрузки перед использованием.

    • FreqTables.jl: служит для построения таблиц распределения и комбинационных таблиц. Этот пакет тесно интегрирован с DataFrames.jl.

    • HypothesisTests.jl: ряд инструментов для проверки гипотез.

    • GLM.jl: инструменты для оценки линейных и обобщенных линейных моделей. Этот пакет тесно интегрирован с DataFrames.jl.

    • StatsModels.jl: предназначен для преобразования неоднородных объектов DataFrame в однородные матрицы для использования с библиотеками линейной алгебры или приложениями машинного обучения, которые не поддерживают объекты DataFrame напрямую. Позволяет преобразовывать категориальные переменные в индикаторы и кодирования с одним активным состоянием, создавать члены, характеризующие взаимодействие, и т. д.

    • MultivariateStats.jl: инструменты для линейной регрессии, гребневой регрессии, анализа по методу главных компонент (PCA), факторного анализа. Этот пакет не очень хорошо интегрирован с DataFrames.jl, но легко применяется в сочетании с StatsModels.

  • Машинное обучение

    • MLJ.jl: если вы занимаетесь больше прикладными задачами, есть пакет, который использует функции из различных библиотек и обеспечивает единый интерфейс API наподобие scikit-learn — MLJ.jl. MLJ.jl предоставляет общий интерфейс для широкого спектра алгоритмов машинного обучения.

    • ScikitLearn.jl: оболочка Julia вокруг полной библиотеки машинного обучения Python scikit-learn. Этот пакет не очень хорошо интегрирован с DataFrames.jl, но может использоваться в сочетании со StatsModels.jl.

    • AutoMLPipeline: пакет, позволяющий легко создавать сложные структуры конвейеров машинного обучения с применением простых выражений. Он использует встроенные функции макропрограммирования Julia для символьной обработки и операций с выражениями конвейеров, а также позволяет легко определять оптимальные структуры для алгоритмов регрессии и классификации машинного обучения.

    • Глубокое обучение: KNet.jl и Flux.jl.

  • Построение графиков

    • Plots.jl: современная библиотека с широкими возможностями построения графиков, синтаксис которой напоминает matplotlib (в Python) или plot (в R). StatsPlots.jl: предоставляет шаблоны множества стандартных статистических графиков для Plots.jl.

    • Gadfly.jl: высокоуровневая библиотека построения графиков с синтаксисом «грамматики графики» наподобие ggplot (в R).

    • AlgebraOfGraphics.jl: библиотека «грамматики графики» на основе Makie.jl.

    • VegaLite.jl: высокоуровневая библиотека построения графиков с другим синтаксисом «грамматики графики» и упором на интерактивную графику.

  • Первичная обработка данных

    • Impute.jl: различные методы для обработки отсутствующих данных в векторах, матрицах и таблицах.

    • DataFramesMeta.jl: набор вспомогательных функций для DataFrames.jl, которые дополняют select и transform, обеспечивая возможности для пользователей, аналогичные dplyr в R.

    • DataFrameMacros.jl: предоставляет версии функций DataFrames.jl в виде макросов наподобие DataFramesMeta.jl с удобным синтаксисом для операций сразу с несколькими столбцами.

    • Query.jl: предоставляет единый фреймворк для первичной обработки данных, который работает с рядом библиотек, включая DataFrames.jl и другие библиотеки, предназначенные для табличных данных (подробнее см. ниже) и даже нетабличных данных. Предлагает множество вспомогательных функций, подобных имеющимся в dplyr в R или LINQ.

    • Дополнительные сведения об этих пакетах см. в разделе Data manipulation frameworks данного руководства.

  • Другие возможности

    • Graphs.jl: высокопроизводительная библиотека для анализа сетей исключительно на Julia. Списки ребер в объектах DataFrame можно легко преобразовывать в графы с помощью пакета GraphDataFrameBridge.jl.

  • Ввод-вывод

    • DataFrames.jl хорошо работает с рядом форматов, включая следующие:

      • файлы CSV (посредством CSV.jl);

      • Apache Arrow (посредством Arrow.jl);

      • чтение файлов Stata, SAS и SPSS (посредством ReadStatTables.jl; пользователи Queryverse могут также выбрать StatFiles.jl);

      • файлы Parquet (посредством Parquet2.jl);

      • чтение файлов данных R (.rda, .RData) (посредством RData.jl).

Не все эти библиотеки тесно интегрированы с DataFrames.jl, но поскольку объекты DataFrame по сути представляют собой коллекции выровненных векторов Julia, вы можете легко (a) извлечь вектор для использования с библиотекой, не интегрированной с DataFrames, или (b) преобразовать таблицу в однородную по типу матрицу с помощью конструктора Matrix или пакета StatsModels.jl.

Другие библиотеки Julia для работы с табличными данными

Пакет DataFrames.jl — это отличное универсальное средство для манипуляций с данными и их первичной обработки, но не для каждого приложения он подходит одинаково хорошо. Для более узкоспециальных задач можно использовать следующие пакеты:

  • TypedTables.jl: стабильные по типу неоднородные таблицы. Позволяют повысить производительность, если структура таблицы относительно устойчива и не насчитывает тысячи столбцов.

  • JuliaDB.jl: для работы с очень большими данными, которые не помещаются в памяти, мы предлагаем пакет JuliaDB.jl. Он обеспечивает более высокую производительность в случае с большими наборами данных и позволяет производить операции с данными во внешней памяти (пользователи Python могут рассматривать JuliaDB.jl как аналог dask в Julia).

Обратите внимание, что большинство библиотек для работы с табличными данными в экосистеме Julia (включая DataFrames.jl) поддерживают общий интерфейс (определенный в пакете Tables.jl). Поэтому некоторые библиотеки могут работать с различными табличными структурами данных, что упрощает переход с одной библиотеки на другую в случае необходимости. Например, пользователь Query.jl может использовать один и тот же код для операций с данными в объекте DataFrame, объекте Table (определенном в TypedTables.jl) или таблице JuliaDB.

Обращение с вопросами

Если вы уверены, что в DataFrames реализована некоторая возможность, но не знаете, как ей воспользоваться, задайте вопрос в теме Domains (Предметные области) в разделе Data (Данные) в DataFrames%20Question:%20&body=%23%20Question:%0A%0A%23%20Dataset%20(if%20applicable):%0A%0A%23%20Minimal%20Working%20Example%20(if%20applicable):%0A&category=Domains/Data&tags=question[Discourse]. Кроме того, вы можете пройти вводный курс по DataFrames.jl в JuliaAcademy.

Чтобы сообщить об ошибке, откройте проблему.

При чтении документации вы можете перейти по ссылке исходный код, чтобы перейти к исходным файлам в GitHub и создать запрос на вытягивание с предложением улучшить документацию или добавить функцию.

Прежде чем отправлять свой первый запрос на вытягивание, ознакомьтесь с инструкциями по участию в работе над DataFrames.

Сведения об отдельных версиях можно найти на странице с историей выпусков.

Руководство по пакету

API

Только экспортируемые (то есть доступные для использования без квалификатора DataFrames. после загрузки пакета DataFrames.jl с помощью инструкции using DataFrames) типы и функции считаются входящими в состав общедоступного API пакета DataFrames.jl. Как правило, все такие объекты описываются в данном руководстве (если какая-то информация отсутствует, сообщите о проблеме здесь).

По возможности в общедоступный и задокументированный интерфейс API пакета DataFrames.jl критические изменения не вносятся.

Следующие изменения не считаются критическими.

  • Конкретные значения с плавающей запятой, получаемые в результате вычислений, могут измениться в любой момент. Пользователи должны рассчитывать только на приблизительную точность.

  • В функциях, использующих генератор случайных чисел по умолчанию из состава модуля Base Julia, вычисляемые случайные значения могут меняться в разных версиях Julia.

  • Изменение функциональности классифицируется как ошибка.

  • Изменение поведения не отражено в документации. Два основных случая:

    1. Реализация функции позволяет принимать более широкий диапазон аргументов, чем указано в документации, — изменения в обработке незадокументированных аргументов не считаются критическими.

    2. Тип возвращаемого функцией значения изменяется, но по-прежнему соответствует контракту, указанному в документации. Например, если в документации указано, что функция возвращает вектор, то изменение типа с Vector на PooledVector не считается критическим.

  • Поведение в случае ошибки: код, который выдавал исключение, может начать выдавать исключение другого типа или перестать выдавать исключение.

  • Изменения в форме вывода объектов.

  • Изменения в состоянии глобальных объектов из модуля Base Julia, состояние которых обычно считается непостоянным (например, состояние глобального генератора случайных чисел).

Все типы и функции, входящие в общедоступный API, обязательно проходят период вывода из использования перед внесением критического изменения либо удаляются.

Обычно критические изменения вносятся с выходом новой основной версии DataFrames.jl (например, возможности, объявленные как выводимые из использования в версии 1.x, изменятся в версии 2.0).

В редких случаях критические изменения могут вводиться в дополнительных версиях. В таком случае изменяемое поведение все равно объявляется как выводимое из использования в одной дополнительной версии. Внесение таких критических изменений, если избежать его никак не удается, допускается в следующих ситуациях.

  • Изменяемая функция ранее была явно объявлена в документации как подлежащая изменению (например, такое указание есть в документации к версии DataFrames.jl 1.4 в отношении правил распространения метаданных в стиле :note).

  • Изменение по причине поведения, которое можно считать почти ошибочным (в редких случаях, даже если поведение некоторой функции было отражено в документации, его результат для определенных сочетаний аргументов может быть сочтен непредусмотренным и нежелательным).

  • Изменение требуется в целях корректировки поведения функций DataFrames.jl в соответствии с изменениями в модуле Base Julia.

Учтите, что хотя Julia допускает обращение к внутренним функциям и типам DataFrames.jl, они могут изменяться в новых версиях без уведомления. Например, небезопасно обращаться напрямую к полям типов, входящих в состав общедоступного API пакета DataFrames.jl, с помощью функции getfield. Если какая-либо операция с полями определенных типов считается допустимой, вместо этого следует использовать соответствующую экспортируемую функцию.

Указатель