Data analysis. NumPy. Часть 2

Это вторая статья в серии, где мы знакомимся с базовый набор инструментов для первичного анализа данных с помощью Python.
В этой части рассмотрим транслирование(broadcasting), сравнения массивов и маски, "прихотливая" индексация (fancy indexing), сортировки и структурированные данные.

Часть 1. Введение в NumPy
Часть 2. Подробней о NumPy
Часть 3. Первичный анализ. Pandas
Часть 4. Визуализация. Matplotlib и Seaborn
Часть 5. Немного machine learning с помощью scikit-learn
Часть 6. Больше данных. Обучение с Vowpal Wabbit

В статье будет описания и различного рода заметки, а примеры с комментариями написаны в jupyter notebook

Транслирование(Broadcasting) (notebook)
Еще один способ применения векторизации - использовать возможности транслирования(broadcasting). Это набор правил по применению бинарных универсальных функций к массивам различного размера.
Для массивов одного размера бинарные операции выполняются поэлементно. Транслирование дает  возможность выполнять такие операции над массивами различных размеров.
Правила транслирования
  1. Если размерность двух массивов отличаются, форма массива с меньшей размерностью дополняется единицами с ведущей(левой) стороны.
  2. Если форма двух массивов не совпадает в каком-то измерении, массив с формой , равной 1 в данном измерении, растягивается вплоть до соответствия форме другого массива.
  3. Если в каком-либо измерении размеры массивов различаются и ни один не равен 1, генерируется ошибка. 
astroml
Полупрозрачные кубики представляют собой транслируемые значения.

Сравнения и маски (notebook)
Маски удобно использовать для извлечения, модификации, подсчета или других модификаций со значениями в массиве по какому-либо критерию.
Ключевые слова AND и OR определяют истинность или ложность всего объекта, операторы | и & оперируют отдельными битами внутри каждого из объекта.

"Прихотливая" индексация (fancy indexing) (notebook)
Простая индексация: arr[0]
Срезы: arr[: 5]
Маски: arr[arr > 0]
В "прихотливой" индексации передаются массивы индексов. Это дает возможность быстрого доступа к различным подмножествам.
В случае "прихотливой" индексации форма результата отражает форму массивов индексов(index arrays), а не форму индексированного массива.

Сортировка массива (notebook)
По умолчанию np.sort имеет сложность O(n*logn), это алгоритм быстрой сортировки (quicksort). Так же доступны алгоритмы сортировки слиянием (mergesort) и пирамидальная сортировка (heapsort).
Иногда необходимо найти K наименьших значений в массиве, для этой цели можно использовать np.partition. Эта функция принимает массив и число, на выходе получаем массив, где первые K элементов наименьшие в этом массиве.

Структурированные данные (notebook)
Преимущество таких данных в том, что dtype напрямую соответствует структуре С. По этому есть возможность напрямую обращаться к буферу памяти таких массивов из программы на С.
Но в большинстве случаев удобней использовать более высокоуровневый объект DataFrame из пакета Pandas.

Комментарии

Популярные сообщения из этого блога

Асинхронное выполнение процедур или триггера в MS SQL Server

Рекурсивные SQL запросы

Кратко про SQLAlchemy Core