Введение в аналитику больших массивов данных

Основные библиотеки для Data Mining

Показывать лекцию целиком

 

Здравствуйте, в предыдущей лекции мы говорили о языке R, как о инструменте для Data Mining'a. Сейчас хотелось бы провести сравнительный анализ языка Python, относительно языка R.

Собственно, почему следует использовать Python для работы с интеллектуальным анализом данных? Ну, во-первых, это мощное сообщество в области научных вычислений. Несмотря на то, что язык R занимает лидирующие позиции на данный момент, язык Python, собственно, уже подкрадывается к нему и занимает уверенную вторую позицию в данной области. На данный момент также активно увеличивается количество библиотек для анализа данных под Python. Конечно, он не может похвастаться таким же огромным количеством библиотек, как R, но всё равно наблюдается положительная тенденция в количестве таких библиотек, и мне кажется, что в будущем это число сравняется. Также следует отметить скорость работы языка Python. Несмотря на то, что это динамический язык программирования и многие бы сказали, что он уступает по скорости тому же C или C++, но тем не менее следует помнить, что большинство библиотек интеллектуального анализа данных под Python написаны именно на языке C и поэтому основные вычисления выполняются довольно быстро, так как язык Python просто вызывает эти библиотеки. Вместе с тем он предоставляет удобные инструменты для разработки интерфейса и на нем просто удобнее писать. Также очень немаловажный факт - язык подходит как для прототипирования, так и для создания конечного продукта, чего нельзя сказать об R. На R мы не можем создать конечный продукт, который потом поставим заказчику, потому что на нём, скажем, не хватает средств выразительности, интерфейс очень трудно реализовывать и вообще это, скорее, инструмент именно работы с данными, чем язык для написания конечных решений. Python такими проблемами не страдает, и на нём можно делать именно конечное решение.

Почему не стоит использовать Python? Опять же скорость работы, когда мы уходим от стандартных алгоритмов, реализованных в библиотеках на C, и хотим реализовать свой алгоритм, мы сталкиваемся со всеми проблемами динамических языков. Также Python не особо предназначен для многопоточного программирования. Несмотря на то, что, конечно, он поддерживает эти функции, тем не менее в нем недостаточно возможностей для полноценной работы с многопоточностью.

Рассмотрим основные библиотеки, которые понадобятся для работы с алгоритмами анализа данных и, в принципе, для обработки данных. Это, прежде всего, две библиотеки: NumPy и SciPy, которые являются базовыми и с которыми интегрируются все остальные библиотеки, которые претендуют на то, чтобы быть использоваными в области интеллектуального анализа данных. Об остальных расскажем чуть подробнее в следующих слайдах.

Итак, NumPy. Что он предоставляет? Это основной набор, основной пакет для научных вычислений на Python. Среди прочего он предоставляет быстрые и эффективные многомерные массивы, то есть очень оптимизированные массивы, которые работают быстро, не те, которые реализованны изначально в Python. Функции, реализующий математические операции над массивами. То есть также, как и в R, благодаря этим функциям, мы сможем работать с массивом поэлементно, как будто с одной переменной. Инструменты для чтения и записи данных ввиде массивов, операции линейной алгебры, преобразование Фурье и генератор случайных чисел. также стоит отдельно отметить, что существуют инструменты для интеграции с кодом на C, C++ и Fortran, так как на этих языках уже написано достаточно много библиотек для научных вычислений.

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

Следующая библиотека, которая тоже необходима это библиотека визуализации matplotlib. Если говорить о визуализации на Python, то, безусловно, эта библиотека удерживает сейчас полное лидерство в этой области, а IPython - это усовершенствованная оболочка. Если сравнивать с грубой натяжкой, то это что-то вроде R-studio. Тут видно, что также присутствуют консоль с построением графиков, как в R-studio, и подсветка синтаксиса.

Далее идет библиотека Pandas. Представляет собой набор различных структур и типов данных. Для нас она интересна тем, что в ней присутствуют те самые DataFrame, как и в языке R, которые ничуть не уступают по удобству и работе с данными, чем в языке R.

Итак, рассмотрим теперь более подробно возможности основной нашей библиотеки - NumPy. В первую очередь она использует векторизированные операции для фильтрации выделения подмножество трансформаций данных, использование общих алгоритмов для сортировки преобразования массива, скажем, во множество, получения общих статистических сведений о данных, слияние и объединение разнородных данных. Собственно, для нас наибольший интерес представляют именно её многомерные массивы. Ndarray (N-dimensional array) можно расшифровать, как массив нескольких измерений. На примере показано, как создать такой массив. Видно, что его можно создать, например, из какой-нибудь последовательности. Там массив из двух массивов. И у нас получится в итоге двумерный массив. Собственно, у него есть свойство «ndim», которое укажет на цифру «2», то есть у нас два измерения, и «shape», которая покажет, если его представить в виде матрицы, сколько на сколько эта матрица.

Следующая операции над массивами. Важно заметить, что можно выполнять без оператора «for». это очень удобно и стоит опять же обратить внимание, что абсолютно ничем не отличается от подобных операций в R. Также поэлементно массивы будут перемножаться, вычитаться. Видно, что со скалярами абсолютно идентично происходит.

Работа с индексами массивов. Тут важно помнить, что при работе с индексами у нас не происходит копирование, у нас происходит именно передача по ссылке, если можно так выразиться. То есть, когда мы возьмем в последнем примере срез массивов от пятого до восьмого элемента и присвоим им всем число 12, то увидим, что в исходном массиве также данные изменятся. В остальном у нас довольно привычная работа с массивами, которой они ничем не отличается от других языков. Вот ещё один пример того, что данные не копируются. Более хитрый пример. Мы сначала берем срез массива, потом у среза массива первый элемент изменяем, и видно, что в исходном массиве также элемент изменился. Можно также изменить весь слайд, и видно, что в исходном массиве также поменяется этот слайд.

Теперь такой пример, как транспонирование массивов. Транспонирование удобно тем, что не происходит копирование, и просто возвращается транспонированная матрица. Транспонированная матрица доступна по атрибуту «T».

Также существуют универсальные функции. Универсальные функции - это те функции, которые способны работать с массивом поэлементно. Например, создадим массив от нуля до десяти и вычислим квадратный корень из каждого его элемента. Видно, что очень просто и легко это происходит, как и в R. Никаких сложностей мы с этим не испытываем, просто передаем массив в функцию.

Также существуют функции, которые могут принимать на вход два массива и возвращать один. Например, вычисление максимума из пары чисел. Мы передаем два рандомно-сгенерированных массива и получаем на выходе один массив, в котором попарно сравнены элементы и выбран максимум. Также существуют математические и статистические методы и они тоже работают с массивом поэлементно. Более того, такие функции зачастую могут иметь возможность выбрать по какой оси им работать. То есть, если в данном случае у нас матрица 5 на 4, то есть из двух измерений у нас есть x и y, мы можем ему указать ось первую, и видно, что он вернет массив, в котором высчитаны по столбцам. А нет, это в данном случае по строкам, а вот во втором случае по столбцам. Следующий пример - это сортировка. Ну, сортировка просто определяется функцией «sort», и у неё также имеется возможность указать ось, по которой сортировать. Ну, по сути, измерения, по которым мы производим сортировку.

Вернуться к учебному плану