Проблема
Если вы когда-либо «гуглили» одни и теже вопросы, термины или синтаксис снова и снова, знайте — вы не одиноки.
Я делаю это постоянно! Это нормально, если вы постоянно заглядываете на StackOverflow или на другие ресурсы в поисках ответов на ваши вопросы. Однако это замедляет ваш рабочий процесс и ставит знак вопроса относительно вашего полного понимания языка. Сегодня, у нас есть бесконечное множество свободных и доступных источников информации, найти которые мы можем по одному запросу в поисковике — в любое удобное для нас время. Однако данное явление может стать как благословением, так и проклятием. Иногда мы просто не в состоянии эффективно обрабатывать большие объемы информации. Кроме того, ежеминутно обращаясь к различным информационным ресурсам, мы начинаем зависеть от них — что в долгосрочной перспективе может стать очень плохой привычкой.Цель
Не так давно я начал изучать онлайн-курс на Udemy под названиями «Python for Data Science and Machine Learning» («О я говорю как этот парень с Youtube»). На первых занятиях мне напомнили некоторые концепции и синтаксис, которые я постоянно упускаю из виду при выполнении анализа данных на Python. Для того чтобы закрепить в памяти изученный материал и немного упростить вам жизнь и сэкономить время — я написал эту статью. В ней мы рассмотрим несколько концепций, которые многие из нас забывают при работе с Python, NumPy и Pandas. Для каждой концепции я написал краткое описание и примеры. Для лучшего усвоения, я добавил ссылки на видео-уроки и другие ресурсы, которые также помогут вам в изучении каждой концепции.Понимание однострочных списков
Писать цикл 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]
Lambda — функции
Вы когда-нибудь уставали от создания функции после функции ограниченного использования? Если да, то Lambda придет к вам на помощь! Лямбда-функции используются для создания небольших, одноразовых и анонимных объектов функций в Python. Они позволяют создавать функции без создания функции. Основной синтаксис Lambda- функции:lambda arguments: expressionОбратите ваше внимание на то, что Lambda- функции могут выполнять все то же самое, что и обычные функции, если есть только одно выражение. Ознакомьтесь с простым примером ниже, и видео, которое будет далее, для того чтобы лучше разобраться с функцией Lambda и познать всю ее мощь:
double = lambda x: x * 2 print(double(5)) 10
Map и Filter
Как только вы полностью разберетесь с Lambda- функциями, изучите возможность их сопряжения с функциями map и filter — в дальнейшем это может стать мощным инструментом для вас. В частности, map берет список и преобразует его в новый список, выполняя определенные операции над каждым элементом. В примере ниже она проходит через каждый элемент и выводит результат в новый список. Обратите внимание: функция list просто преобразует вывод в список.# Map seq = [1, 2, 3, 4, 5] result = list(map(lambda var: var*2, seq)) print(result) [2, 4, 6, 8, 10]Функция Filter принимает список и правило фильтрации, подобно функции map, однако возвращает подмножество исходного списка, сравнивая каждый элемент с логическим правилом фильтрации.
# Filter seq = [1, 2, 3, 4, 5] result = list(filter(lambda x: x > 2, seq)) print(result) [3, 4, 5]
Arange и Linspace
Для создания быстрых и простых массивов в NumPy используйте функции arange и linspace. Каждая из этих функций имеет свое специфическое предназначение, но они привлекательны (в отличии от использования диапазона) тем что они выводят массивы NumPy, с которыми зачастую, в дальнейшем, намного проще работать. Arange возвращает равномерно расположенные значения в пределах заданного интервала. Наряду с начальной и конечной точкой вы также можете определить размер шага или тип данных, если это необходимо. Обратите внимание на то, что конечная точка интервала значится как ‘cut-off’, поэтому она не будет включена в выходные данные массива.# np.arange(start, stop, step) np.arange(3, 7, 2) array([3, 5])Linspace очень похож на функцию Arange. Функция Linspace возвращает равномерно расположенные числа за указанный интервал, при этом учитывая начальную и конечную точку интервала и ряд других данных — все это linspace равномерно распределит в массиве NumPy. Это особенно полезно для визуализации данных и при построении осей графика.
# np.linspace(start, stop, num) np.linspace(2.0, 3.0, num=5) array([ 2.0, 2.25, 2.5, 2.75, 3.0])
Что на самом деле обозначает ось?
Вы наверняка сталкивались с этим, когда удаляли столбец в Pandas или складывали значения в матрице NumPy. Если же не сталкивались, готовьтесь к тому, что этот момент обязательно наступит. Сейчас мы рассмотрим эту проблему на примере удаления столбца:df.drop('Column A', axis=1) df.drop('Row A', axis=0)Уже и не помню, сколько раз я писал эти строки кода, прежде чем понял, для чего я прописывал значения осям. Как вы можете догадаться, исходя из вышеприведенного кода, установив значение на 1, вы получите столбцы, а значение 0 дает строки. Но почему именно так? Вот мое мнение на этот счет:
df.shape (# of Rows, # of Columns)Вызов атрибута shape из датафрейма Pandas возвращает нам tuple (кортеж) с первым значением, обозначающим число строк, и вторым значением, обозначающим количество столбцов. Вы можете спросить: «Как это индексируется в Python?». Так вот, строки находятся в 0, а столбцы в 1, так же, как и при значении оси.