Функции — одно из главных преимуществ языка Python как минимум при использовании их в проектах Data Science. Это третья часть серии материалов «Python для Data Science», в которой речь пойдет о функциях и методах.
Из нее вы узнаете не только о базовых концепциях, но познакомитесь с наиболее важными функциями и методами, которые будете использовать в будущем.
Это практическое руководство!
Желательно повторять те части, где нужно писать код, и решать задачи в конце статьи! Также рекомендуется вернуться к прошлым материалам, если вы еще не ознакомились с ними.
Что такое функции и методы Python?
Начнем с основ. Предположим, что существует переменная:
a = 'Hello!'
Вот простейший пример функции Python:
len(a)
# Результат: 6
А вот пример метода Python:
a.upper()
# Результат: HELLO!
Так что такое функции и методы Python? По сути, они превращают что-то в нечто другое. В случае этого примера ввод 'Hello!'
дал вывод длины строки (6) и версию строки, переписанную с большой буквы: 'HELLO!'
. Конечно, это не единственные функции. Их намного больше. Их комбинация пригодится в разных частях проекта — от очистки данных до машинного обучения.
Встроенные vs. пользовательские методы и функции
Круто то, что помимо огромного списка встроенных функций/методов, пользователи могут создавать собственные. Также они поставляются с различными Python-библиотеками. Для доступа к ним библиотеку нужно скачать и импортировать. Выходит, что возможности безграничны. Но к этому стоит вернуться позже, а сейчас сосредоточимся на встроенных элементах.
Самые важные встроенные функции Python для проектов Data Science
Функция в Python работают очень просто — ее нужно вызвать с заданными аргументами, а она вернет результат. Тип аргумента (например, строка, число, логическое значение и так далее) может быть ограничен (например, иногда нужно, чтобы это было именно целое число), но чаще аргументом может выступать значение любого типа. Рассмотрим самые важные встроенные функции Python:
print()
Эта функция уже использовалась в прошлых статьях. Она выводит различные значения на экран.
print("Hello, World!")
abs()
Возвращает абсолютную величину числа (то есть, целое число или число с плавающей точкой). Результат не может быть строкой, а только числовым значением.
abs(-4/3)
round()
Возвращает округленное значение числа
round(-4/3)
min()
Возвращает наименьший объект в списке или из общего числа введенных аргументов. Это может быть в том числе и строка.
min(3,2,5)
min('c','a','b')
max()
Несложно догадаться, что это противоположность min()
.
sorted()
Сортирует список по возрастанию. Он может содержать и строки и числа.
a = [3, 2, 1]
sorted(a)
sum()
Суммирует значения списка. Он может содержать разные типы числовых значений, но стоит понимать, что с числами с плавающей запятой функция справляется не всегда корректно.
a = [3, 2, 1]
sum(a)
b = [4/3 , 2/3, 1/3, 1/3, 1/3]
sum(b)
len()
Возвращает количество элементов в списке или количество символов в строке.
len('Hello!')
type()
Возвращает тип переменной
a = True
type(a)
b = 2
type(b)
Это встроенные функции Python, которые придется использовать регулярно. Со всем списком можно ознакомиться здесь: https://docs.python.org/3/library/functions.html
С многими другими вы познакомитесь в следующих руководствах.
Самые важные встроенные методы Python
Большую часть методов Python необходимо применять по отношению к конкретному типу. Например, upper()
работает со строками, но не с целыми числами. А append()
можно использовать на списках, но со строками, числами и логическими значениями он бесполезен. Поэтому дальше будет список методов, разбитый по типам.
Методы для строк Python
Строковые методы используются на этапе очистки данных проекта. Например, представьте, что вы собираете информацию о том, что ищут пользователи на сайте, и получили следующие строки: 'mug'
, 'mug '
, 'Mug'
. Человеку известно, что речь идет об одном и том же, но для Python это три уникальные строки. И здесь ему нужно помочь. Для этого используются самые важные строковые методы Python:
a.lower()
Возвращает версию строки с символами в нижнем регистре.
a = 'MuG'
a.lower()
a.upper()
Противоположность lower()
a.strip()
Если в строке есть пробелы в начале или в конце, метод их удалит.
a = ' Mug '
a.strip()
a.replace(‘old’, ‘new’)
Заменяет выбранную строку другой строкой. Метод чувствителен к регистру.
a = 'muh'
a.replace('h', 'g')
a.split(‘delimiter’)
Разбивает строку и делает из нее список. Аргумент выступает разделителем.
a = 'Hello World'
a.split(' ')
Примечание: в этом случае разделителем выступает пробел.
’delimeter’.join(a)
Объединяет элементы списка в строку. Разделитель можно указать заново.
a = ['Hello', 'World']
' '.join(a)
Это были самые важные методы, для работы со строками в Python.
Методы Python для работы со списками
В прошлом материале речь шла о структурах данных Python. И вот к ним нужно вернуться снова. Вы уже знаете, как создавать списки и получать доступ к их элементам. Теперь узнаете, как менять их.
Используем уже знакомую собаку Freddie:
[dog] = ['Freddie', 9 , True, 1.1, 2001, ['bone', 'little ball']]
Теперь посмотрим, как можно изменять список.
a.append(arg)
Метод append
добавляет элемент к концу списка. Предположим, что нужно добавить количество лап Freddie (4).
dog.append(4)
dog
a.remove(arg)
Удалить любой из элементов можно с помощью метода .remove()
. Для этого нужно указать элемент, который необходимо удалить, а Python уберет первый такой элемент в списке.
dog.remove(2001)
dog
a.count(arg)
Возвращает количество указанных элементов в списке.
dog.count('Freddie')
a.clear()
Удаляет все элементы списка. По сути, он полностью удалит Freddie. Но не стоит волноваться, потом его можно вернуть.
dog.clear()
dog
Список всех методов для работы с Python можно найти здесь: https://docs.python.org/3/tutorial/datastructures.html
Методы Python для работы со словарями
Как и в случае со списками, есть набор важных методов для работы со словарями, о которых нужно знать.
И снова Freddie:
dog_dict = {'name': 'Freddie',
'age': 9,
'is_vaccinated': True,
'height': 1.1,
'birth_year': 2001,
'belongings': ['bone', 'little ball']}
dog_dict.keys()
Вернет все ключи словаря.
dog_dict.values()
Вернет все значения словаря.
dog_dict.clear()
Удалит все из словаря.
Для добавления элемента в словарь не обязательно использовать метод; достаточно просто указать пару ключ-значение следующим образом:
dog_dict['key'] = 'value'
dog_dict['name'] = 'Freddie'
Это все методы на сегодня.
Проверьте себя
В этом задании вам нужно использовать не только то, что узнали сегодня, но и знания о структурах данных из прошлого материала, а также о переменных — из первого.
- Есть список:
test_yourself = [1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5]
- Посчитайте среднее значение элементов списка, используя знания, полученные из прошлых частей руководства.
- Посчитайте медиану, следуя тем же условиям.
.
.
.
.
.
.
Решение
sum(test_yourself) / len(test_yourself)
sum()
суммирует значения элементов, а len()
подсчитывает их количество. Если поделить одно значение на другое, то выйдет среднее. Результат: 2.909090
test_yourself[round(len(test_yourself) / 2) - 1]
Повезло, что в списке нечетное количество элементов.
Примечание: эта формула не сработает, если элементов будет четное количество.
len(test_yourself) / 2
подскажет, где в списке искать среднее число — это и будет медиана. Результат равен 5,5
, но результат len() / 2
всегда будет на 0,5
меньше, чем реальное число, если в списке нечетное количество элементов (можете проверить на списке с 3 или 5 элементами). Округлим 5,5
до 6
с помощью round(len(test_yourself) / 2)
. Все верно — в данном случае внутри функции используется другая функция. Затем нужно вычесть единицу, потому что индексация начинается с нуля: round(len(test_yourself) / 2) - 1
.
В конце концов результат можно подставить в качестве индекса для поиска его в списке: test_yourself[round(len(test_yourself) / 2 - 1]
; или взять полученное число: test_yourself[5]
. Результат — 3
.
В чем разница между функциями и методами в Python?
После прочтения этой статьи у вас наверняка появился вопрос: «Зачем нужны и функции и методы, если они делают одно и то же?»
Это один из самых сложных вопросов для тех, кто только знакомится с Python, а ответ включает много технических деталей, поэтому вот некоторые подсказки, чтобы начать разбираться.
Сперва очевидное. Отличается синтаксис. Функция выглядит вот так: function(something)
, а метод вот так: something.method()
.
Так зачем и методы и функции нужны в Python? Официальный ответ заключается в том, что между ними есть небольшие отличия. Так, метод всегда относится к объекту (например, в dog.append(4)
методу append()
нужно объект dog
). В функции объект не нужно использовать. Если еще проще, метод — это определенная функция. Все методы — это функции, но не все функции являются методами.
Если все равно не понятно, но стоит волноваться. Работая с Python и дальше, вы разберетесь в различиях, особенно, когда начнете создавать собственные методы и функции.
Вот еще один дополнительный совет: функции и методы — это как артикли (der, die, das) в немецком языке. Нужно просто выучить синтаксис и использовать их по правилам.
Как и в немецком, есть эмпирические правила, которые также должны помочь. Так, функции можно применять к разным типам объектов, а методы — нет. Например, sorted()
— это функция, которая работает со строками, списками, числами и так далее. Метод upper()
работает исключительно со строками.
Но главный совет в том, чтобы не пытаться понять различия, а учиться их использовать.
Итого
Теперь вы знакомы более чем с 20 методами и функциями Python. Неплохое начало, но это только основы. В следующих руководствах их количество будет расти в том числе за счет функций и методов из сторонних библиотек.
Далее нужно будет разобраться с циклами и инструкциями if
.