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

Оригинал

Другие материалы по теме:

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

admin
11 декабря 2018

ООП на Python: концепции, принципы и примеры реализации

Программирование на Python допускает различные методологии, но в его основе...
admin
14 июля 2017

Пишем свою нейросеть: пошаговое руководство

Отличный гайд про нейросеть от теории к практике. Вы узнаете из каких элеме...