В последние десятилетия цифровизация и автоматизация привели к накоплению больших объемов информации. Эти накопленные данные стали полезным источником информации для бизнеса, но принесли с собой много инфраструктурных проблем и головной боли разработчиков. Так появилась потребность в Data Mining — глубоком анализе данных с применением методов машинного обучения. Он выявляет неочевидные закономерности и таким образом решает бизнес-задачи.
Стандартные типы языка Python и его встроенные методы помогают решать разные аналитические задачи с данными. Но изначально Python не задумывался для таких задач, и поэтому не всегда стандартных инструментов достаточно. Для решения более сложных аналитических задач была разработана библиотека Numpy ("Numerical Python extensions"). В основном она направлена на удобство работы с массивами данных и ускорение вычислений с ними.
Особенности библиотеки Numpy
В Numpy используется особый тип данных — массив. Чтобы его создать, нужно конвертировать данные из списка (list
). Посмотрим, как это выглядит в коде:
# Импортируем библиотеку numpy
import numpy
# Создаем пример списка языка Python
list_of_numbers = [1, 2, 3, 4, 5]
# Конвертируем созданный список в массив Numpy
ndarray_of_numbers = numpy.array(list_of_numbers)
# Тип созданного объекта
print(type(ndarray_of_numbers))
# => <class 'numpy.ndarray'>
# Результат стандартного вывода
print(ndarray_of_numbers)
# => [1 2 3 4 5]
Работа с массивами в некоторых операциях аналогична действиями над списками, но предоставляет ряд дополнительных возможностей. Например, различие есть в операциях получения элементов по списку индексов — типом list
она не поддерживается:
indexes = [0,3,4]
print(ndarray_of_numbers[indexes])
# => [1 4 5]
Еще Numpy упрощает логику арифметических операций. Например, вот так выглядят операции сложения и умножения массива на число:
print(ndarray_of_numbers)
# => [1 2 3 4 5]
print(2 * ndarray_of_numbers)
# => [ 2 4 6 8 10]
print(5 + ndarray_of_numbers)
# => [ 6 7 8 9 10]
Если бы мы работали со списками, для тех же операций потребовался бы еще и генератор списков:
print(list_of_numbers)
# => [1, 2, 3, 4, 5]
print([2 * num for num in list_of_numbers])
# => [2, 4, 6, 8, 10]
print([5 + num for num in list_of_numbers])
# => [6, 7, 8, 9, 10]
Кроме того, Numpy ускоряет многие операции, что особенно заметно при работе с большими массивами. На примере ниже посмотрим, за какое время находится максимальный элемент списка и массива Numpy с аналогичным набором элементов:
# Импортируем модуль time для замера времени
import time
# Создаем список из 1,000,000 элементов
large_list_of_numbers = list(range(1_000_000))
# Конвертируем созданный список в массив Numpy
ndarray_of_numbers = numpy.array(large_list_of_numbers)
# Замеряем время выполнения 100 итераций
# нахождения максимального элемента списка
start_time = time.time()
for _ in range(100):
max(large_list_of_numbers)
end_time = time.time()
print(f'Total time for a large list: {round(end_time - start_time, 2)} s')
# => Total time for large list: 1.49 s
# Замеряем время выполнения 100 итераций
# нахождения максимального элемента массива Numpy
start_time = time.time()
for _ in range(100):
ndarray_of_numbers.max()
end_time = time.time()
print(f'Total time for a ndarray: {round(end_time - start_time, 2)} s')
# => Total time for ndarray: 0.06 s
Время выполнения в примере выше может отличаться в зависимости от производительности среды. Тем не менее операции над массивом Numpy в любом случае происходят в разы быстрее аналогичных операций над списком.
Еще одно преимущество библиотеки Numpy — широкая функциональность. Она включает в себя разные математические функции, модули для работы со случайными числами и матрицами, а также с преобразованиями Фурье.
Производительность Numpy, широкий спектр методов работы с массивами и удобный интерфейс подтолкнули разработчиков использовать библиотеку в качестве основы для модулей. Например, есть такие модули для работы с:
- Табличными данными — Pandas
- Визуализацией данных — Matplotlib, Plotly, Seaborn
- Алгоритмами машинного обучения — Sklearn
- Тензорами и глубокими нейронными сетями — TensorFlow
- Изображениями — OpenCV
Выводы
В самом начале курса мы познакомимся с основным компонентом библиотеки Numpy — массивом numpy.ndarray
. Далее вы научитесь конвертировать стандартные структуры языка Python в указанный тип данных, а также использовать разные методы работы с данными.
Чтобы доступнее объяснить такие непростые темы, мы воспользуемся примерами из практики — поможем гипотетическому бизнесу с анализом данных по работе сети магазинов.
Даже если вы не работаете аналитиком, вы почерпнете из курса много полезных практик. Эти знания помогут оптимизировать программы так, чтобы они работали в разы быстрее благодаря библиотеке Numpy.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.