Python для Data Science: 8 понятий, которые важно помнить
В последнее время использование Python для Data Science стало популярным, и мы подготовили памятку с темами, которые полезно знать.
Затрагиваемые понятия и техники будут сопровождаться коротким описанием и по необходимости видеороликами для получения дополнительного опыта.
Однострочные списки
Работа со списками (например, в цикле for) скучна и утомительна, но Python имеет встроенный инструмент для решения этой проблемы всего в одну строку. Чтобы лучше понять синтаксис, рассмотрите пример:
И еще один пример – сравнительный анализ сразу двух способов (с циклом и без):
x = [1,2,3,4] out = [] for item in x: out.append(item**2) print(out) [1, 4, 9, 16] # vs. x = [1,2,3,4] out = [item**2 for item in x] print(out) [1, 4, 9, 16]
Лямбда-выражения
Если вам надоело создавать функции для операции, которая выполнится всего один раз – используйте лямбда-выражения. Эти функции широко используются в Python для Data Science при создании одноразовых, маленьких и анонимных объектов. “Лямбды” зачастую выглядят меньше, они понятнее и позволяют создать функцию, не создавая ее.
lambda arguments: expression
Лямбда-выражения могут делать все, что могут делать обычные функции, даже если они состоят всего из одного выражения.
double = lambda x: x * 2 print(double(5)) 10
Если что-то не понятно, рекомендуем посмотреть видео для закрепления.
https://www.youtube.com/watch?v=25ovCm9jKfA
Карты и фильтры
В дополнение к лямбда-выражениям вам нужно уметь оперировать картами и фильтрами. Map может принимать список и преобразовывать его в новый список, выполняя какую-то операцию над каждым элементом. В примере ниже производятся операции с каждым элементом, а в новый список кладутся значения, умноженные на два.
# Map seq = [1, 2, 3, 4, 5] result = list(map(lambda var: var*2, seq)) print(result) [2, 4, 6, 8, 10]
Работа функции фильтра схожа с картой: она принимает список и правило, но возвращает новое множество исходного списка, сравнивая каждый элемент с булевым правилом фильтрации.
# Filter seq = [1, 2, 3, 4, 5] result = list(filter(lambda x: x > 2, seq)) print(result) [3, 4, 5]
И снова видео для лучшего понимания:
https://www.youtube.com/watch?v=cKlnR-CB3tk
arange и linspace
Для создания быстрых и простых массивов NumPy еще не придумали ничего лучше, чем функции arrange и linspace. Каждая из них имеет свое конкретное назначение, достоинства и недостатки. Но основная привлекательность (в отличие от range) в том, что они выводят массивы NumPy, с которыми обычно легче работать Data Science.
arrange возвращает равномерно расположенные значения в пределах заданного интервала. Кроме начальной и конечной точек, можно определить размер шага или тип данных.
# np.arange(start, stop, step) np.arange(3, 7, 2) array([3, 5])
linspace очень похож на arrange, но с небольшим отличием. linspace возвращает равномерно расположенные числа в пределах заданного интервала, но вместо шага используется количество выводимых элементов. Таким образом, учитывая начальную и конечную точки, а также ряд значений, linspace равномерно распределит их в массиве NumPy.
Это особенно полезно для визуализации данных и объявления осей при построении графика – в Python для Data Science пригодится точность чисел с плавающей запятой.
# np.linspace(start, stop, num) np.linspace(2.0, 3.0, num=5) array([ 2.0, 2.25, 2.5, 2.75, 3.0])
Что такое axis?
Возможно, вы сталкивались с этим при удалении столбцов в Pandas или при суммировании значений в матрице NumPy. Если нет, то давайте пока воспользуемся примером удаления столбца:
df.drop('Column A', axis=1) df.drop('Row A', axis=0)
Параметр axis используется для указания на то, с чем вы хотите работать:
- 1 – столбец;
- 0 – строка.
Тема непростая, поэтому вот видео для закрепления:
https://www.youtube.com/watch?v=PtO3t6ynH-8
concat, merge и join
Направление Python для Data Science очень тесно связано с огромными массивами данных, и Pandas очень помогает в этом. Если вы знакомы с SQL, то эти понятия будут для вас более понятными. Данные функции являются способами объединения. Может казаться сложным для понимания, какой метод лучше всего использовать и в каком случае, поэтому давайте их рассмотрим.
concat позволяет пользователю добавлять один или несколько фреймов данных ниже или рядом с ним (в зависимости от того, как вы определяете ось).
merge объединяет несколько фреймов данных в общих столбцах, которые служат первичным ключом.
join, как и merge, объединяет два фрейма данных, но соединяет он их на основании их индексов, а не по указанному столбцу.
Вот официальный мануал по Pandas в качестве “домашнего задания” и еще один ролик:
https://www.youtube.com/watch?v=XMjSGGej9y8
Использование apply в Pandas
Думайте об apply как о функции карты, но для фреймов Pandas или для рядов. Ряды очень сильно похожи на массивы NumPy. apply применяет функцию к каждому элементу столбца или строки в зависимости от того, что вы укажете. Это может быть полезно при форматировании и обработке значений по всему столбцу DataFrame, без использования цикла.
https://www.youtube.com/watch?v=P_q0tkYqvSk
Сводные таблицы
И напоследок не менее важное – сводные таблицы. Они похожи на одноименные таблицы в Microsoft Excel. Сводная таблица принимает на вход данные из отдельных столбцов и переводит все в многомерное представление. Встроенная в Pandas функция pivot_table создает сводную таблицу в виде электронной таблицы.
Вот немного теории и видео:
https://www.youtube.com/watch?v=xPPs59pn6qU