Думаю, ни для кого не секрет, что Python может все или почти все. Например, для построения графиков можно использовать matplotlib, для анализа и манипуляции данными можно использовать библиотеку pandas, а для работы с массивами была разработана библиотека numpy. А есть ли библиотека, которая может выполнять различные математические операции, например, интегрирование и дифференцирование, обработка изображений и сигналов, расчет статистических распределений и функций? Конечно есть, это библиотека SciPy.

Предлагаю поговорить об этом по подробнее. SciPy (сокращение от Scientific Python, или научный Python) – библиотека, которая является расширением библиотеки NumPy и предназначена для выполнения сложных инженерных, статистических и научных расчетов, а так же для анализа данных и построения графиков.
Чем SCIPY отличается от NUMPY?
Первое отличие – по типу выполняемых операций. NumPy выполняет стандартные операции, такие как сортировка, индексирование, а так же элементарные операции, связанные с типом данных массива. SciPy используется для выполнения сложных операций, например, расчет алгебраических функций или различных числовых алгоритмов.
Второе отличие – методы и функции, которые содержатся в библиотеках. NumPy содержит немалое количество функций и методов для решения задач линейной алгебры, а также расчета преобразования Фурье и обработки сигналов и изображений, однако они неполноценные. В SciPy, наоборот, эти функции и методы реализованы в полном объеме, и их гораздо больше.
Третье отличие – концепция массивов. Массивы из библиотеки NumPy — это многомерные массивы объектов, которые имеют одинаковый тип, то есть они однородны или гомогенны. В SciPy концепция массивов немного другая, поскольку она более функциональна, и не имеет ограничений на однородность. То есть массивы SciPy могут быть как гомогенными, так и гетерогенными.
Четвертое отличие – язык, написания библиотек и скорость.
Библиотека NumPy написана на языке C и как следствие имеет более высокую скорость вычислений, однако за нее приходится платить функциональностью библиотеки. Библиотека SciPy написана на языке Python и поэтому имеет более низкую скорость выполнения, однако низкая скорость компенсируется предоставляемой функциональностью.
Каковы возможности библиотеки SCIPY?
Возможности библиотеки определятся, функциями и методами, которые в ней реализованы. Сама библиотека SciPy, состоит из нескольких модулей, реализованных для решения определенного типа задач, например, linalg – модуль, содержащий методы линейной алгебры, или optimize, который реализует инструменты оптимизации. Состав библиотеки SciPy можно получить при помощи выполнения следующего кода.
import scipy help(scipy)
Перейдем от слов к делу и посмотрим код.
Предлагаю в качестве демонстрации возможностей библиотеки посмотреть работу некоторых пакетов.
Integrate.
Данный пакет, позволяет проводить численное интегрирование: рассчитывать определенные интегралы, решать обыкновенные дифференциальные уравнения и пр.
# подключим пакет интегрирования из библиотеки scipy from scipy import integrate # опишем подынтегральную функцию def target_function_f(x): return 2.0 * x ** 2 # выполним интегрирование result = integrate.quad(target_function_f, 0.0, 4.0) # посмотрим результат print(result)
(42.66666666666667, 4.736951571734002e-13)
Отмечу, что в пакете integrate помимо функции quad(), которая возвращает кортеж из двух элементов, первый — значение интеграла, второй — точность вычисления, реализованы другие методы нахождения интегралов. Вот некоторые из них: trapz() (метод трапеций), sims() (метод Симпсона), romb() (метод Ромберга) и т.д.
Io.
Данный пакет предоставляет функции для работы и управления файлами самых разных форматов, включая MATLAB, файлы IDL, Matrix Market, Fortran, и даже WAV. Ниже рассмотрим кусок кода, который покажет каким образом можно добавить данные из файла формата MATLAB.
# импортируем пакет io из библиотеки scipy from scipy import io as spio import numpy as np # создадим массив, который запишем в MATLAB файл; x = np.ones((3,3)) # покажем только что созданный массив; print('Array from Python') print(x) # запишем массив в MATLAB файл; spio.savemat('f.mat', {'a':x}) # загрузим массив из MATLAB файла; data = spio.loadmat('f.mat',struct_as_record=True) # покажем только что загруженный массив; print('Array from Matlab File') print(data['a'])
Stats.
Данный модуль, содержит в себе большое количество вероятностных распределений, а также растущую библиотеку статистических функций. Для демонстрации возможностей рассматриваемого модуля, обратимся к коду ниже. В нем мы проведем проверку на нормальное распределение.
В основе проверки на «нормальность» лежит проверка гипотез. Для проверки будем использовать две гипотезы. Истинная гипотеза говорит о нормальном распределении данных, а ложная подтверждает отсутствие нормального распределения.
Для проведения проверки будем использовать критерией Шапиро-Уилка. В результате проверки мы получим значение вычисленной статистики и p-значение. Для определения принадлежности результата к гипотезе, будем использовать критический параметр альфа со значением 0,05. В случае, если p-значение будет меньше 0,05, можно утверждать, что гипотеза ложная и данные не имею нормального распределения, иначе данные распределены нормально.
Для проверки будем использовать набор данных с информацией о продаже видеоигр по всему миру с сайта Kaggle по ссылке: https://www.kaggle.com/datasets/gregorut/videogamesales?resource=download. Проверяемым атрибута выберем EU_Sales (продажи в Европе):
import pandas as pd # загрузим набор данных data = pd.read_csv('vgsales.csv') # просмотрим несколько строк из набора данных data.head()

# выведем некоторые статистики data.describe()

import scipy as sc # запустим тест Шапиро-Уилка statistics, p_Value = sc.stats.shapiro(data['EU_Sales']) # выведем результаты теста Шапиро-Уилка print('Stats=%.3f, pValue=%.3f' % (statistics, p_Value)) alpha = 0.05 #Выведем результаты о принятии или отклонении гипотезы о нормальности if p_Value > alpha: print('Данные распределены нормально') else: print('Данные не имеют нормального распределения')
Stats=0.256, pValue=0.000
Данные не имеют нормального распределения
В заключении
В заключение хочется сказать, что представленная информация в данной статье составляет лишь малую верхушку айсберга от общего объема информации. В данной статье мы рассмотрели, основные моменты связанные с библиотекой SciPy, рассмотрели возможности некоторых модулей. Более подробную и детальную информацию о данной библиотеке можно найти на официальном сайте документации, по ссылке: https://scipy.org/.
ссылка на оригинал статьи https://habr.com/ru/post/701016/
Добавить комментарий