#8 Python для Data Science — import и встроенные модули

В предыдущих материалах этого руководства мы обсудили базовые концепции Python: переменные, структуры данных, встроенные функции и методы, циклы for и инструкции if. Это все — семантическое ядро языка. Но это лишь основа того, что есть в Python. Самое интересное ждет впереди. У Python есть море модулей и пакетов, которые можно импортировать в свой проект. Что это значит? Об этом вы узнаете в статье: о том, как использовать инструкцию import и о самых важных встроенных модулях для работы в сфере data science.

Инструкция import в Python

Итак, что такое инструкция import, и почему она так важна?

Представьте LEGO.

Пока что в руководствах использовались только базовые элементы набора LEGO. Но если нужно построить что-то более сложное, необходимо задействовать более сложные инструменты.

С помощью import можно получить доступ к «инструментам» Python, которые называются модулями.

Они делятся на три группы:

  1. Модули стандартной библиотеки Python:
    Получить к ним доступ проще простого, потому что они поставляются с языком Python3 по умолчанию. Все что нужно — ввести import и название модуля. С этого момента выбранный модуль можно использовать в коде. О том, как это делать, дальше в статье.
  2. Другие более продвинутые и специализированные модули:
    Эти модули не являются частью стандартной библиотеки. Для их использования нужно установить новые пакеты на сервер данных. В проектах data science такие «внешние» пакеты будут использоваться часто. (Вы могли слышать, например, о pandas, numpy, matplotlib, scikit-learn и так далее). Этой теме будет посвящен отдельный материал
  3. Собственные модули:
    Да, их можно писать и самостоятельно (об этом в более продвинутых руководствах по Python)

import — очень мощный элемент Python, потому что именно с его помощью можно постоянно и почти бесконечно расширять свой набор инструментов, особенно в процессе работы с особенно сложными задачами.

Самые важные встроенные модули Python для специалистов Data Science

Теперь, когда вы понимаете, о чем идет речь, можно переходить к практике. В стандартной библиотеке Python есть десятки встроенных модулей. Одними из самых важных для проектов data science являются следующие:

  • random
  • statistics
  • math
  • datetime
  • csv

Импортировать их можно, используя следующий синтаксис:

import [module_name]

Например: import random

Примечание: это импортирует весь модуль целиком со всеми его элементами. Можно взять и отдельную его часть: from [module_name] import [item_name]. Но пока лучше не переусложнять.

Разберем эти пять модулей.

Встроенный модуль №1: random

Рандомизация (случайности) очень важна в data science… например, A/B тестирование. С помощью модуля random можно генерировать случайные числа, следуя разным правилам:

Введем следующее в Jupyter Notebook:

import random

Затем в отдельную ячейку:

random.random()

Это сгенерирует случайное число с плавающей точкой от 0 до 1.

Стоит попробовать и так тоже:

random.randint(1, 10)

Это создаст случайное целое число от 1 до 10.

Встроенный модуль №1: random
Больше о random можно узнать здесь.

Встроенный модуль №2: statistics

Если рандомизация важна, то статистика неизбежна. К счастью, в библиотеке есть встроенный модуль со следующими функциями: среднее значение, медиана, деление с остатком, среднеквадратичное отклонение, дисперсия и многие другие…

Начинаем стандартно:

import statistics

Дальше нужно создать список:

a = [0, 1, 1, 3, 4, 9, 15]

Теперь посчитать все значения для этого списка:
Встроенный модуль №2: statistics

Больше о statistics можно узнать здесь.

Встроенный модуль №3: math

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

import math

И сам код:

math.factorial(5)
math.pi
math.sqrt(5)
math.log(256, 2)

Встроенный модуль №3: math

Больше о math можно узнать здесь.

Встроенный модуль №4: datetime

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

import datetime

На самом деле, модуль datetime слегка переусложнен. Как минимум для новичков. Чтобы разобраться с ним, нужен отдельный материал. Но начать можно с этих двух функций:


datetime.datetime.now()
datetime.datetime.now().strftime("%F")

Встроенный модуль №4: datetime

Встроенный модуль №5: csv

«csv» расшифровывается как «comma-separated values». Это один из самых распространенных форматов файлов для хранения журналов данных в виде текстовых данных (простого текста). Поэтому очень важно знать, как открыть файл с расширением .csv в Python. Есть конкретный способ, как это можно сделать.

Предположим, имеется маленький .csv-файл (его даже в Jupyter можно создать) под названием fruits.csv:

2018-04-10;1001;banana
2018-04-11;1002;orange
2018-04-12;1003;apple

Чтобы открыть его в Jupyter Notebook, нужно использовать следующий код:

import csv

with open('fruits.csv') as csvfile:
    my_csv_file = csv.reader(csvfile, delimiter=';')
    for row in my_csv_file:
        print(row)

Встроенный модуль №5: csv

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

Больше о модуле csv можно узнать здесь.

Больше встроенных модулей

Неплохое начало, но полный список встроенных модулей Python намного объемнее. С их помощью можно запаковывать и распаковывать файлы, собирать сетевые данные, отправлять email, декодировать файлы JSON и многое другое. Чтобы взглянуть на этот список, нужно перейти на страницу стандартной библиотеки Python — это часть официальной документации языка.

Есть и другие библиотеки и пакеты, не являющиеся частью стандартной библиотеки (pandas, numpy, scipy и другие). О них чуть позже.

Синтаксис

При обсуждении синтаксиса нужно выделить три вещи:

  1. В скриптах Python все инструкции import нужно оставлять в начале. Почему? Чтобы видеть, какие модули нужны коду. Это также гарантирует, что импорт произойдет до того, как отдельные части модуля будут использованы. Поэтому просто запомните: инструкции import должны находиться в начале.инструкции import должны находиться в начале
  2. В статье функции модуля использовались с помощью такого синтаксиса:
    module_name.function_name(parameters)
    Например, statistics.median(a)
    или
    csv.reader(csvfile, delimiter=';') Это логично. Перед использованием функции нужно сообщить Python, в каком модуле ее можно найти. Иногда бывают даже более сложные выражения, как функции класса в модуле (например, datetime.datetime.now()), но сейчас об этом можно не думать. Лучше просто составить список любимых модулей и функций и изучать, как они работают. Если нужен новый — посмотрите в документации Python, как создать его вместе с определенными функциями.
  3. При использовании модуля (или пакета) его можно переименовать с помощью ключевого слова as:
    Если ввести:
    import statistics as stat, в дальнейшем ссылаться на модуль можно с помощью «stat». Например, stat.median(a), а не statistics.median(a). По традиции две библиотеки, используемые почти во всех проектах Data Science, импортируются с укороченными именами: numpy (import numpy as np) и pandas (import pandas as pd). Об этом также будет отдельный материал.

Так что это? Пакет? Модуль? Функция? Библиотека?

Поначалу вам может быть сложно даже понять, что именно импортируете. Иногда эти элементы называют «модулями», иногда — «пакетами», «функциями» или даже «библиотеками».

Примечание: даже если проверить сайты numpy и pandas, можно обнаружить, что один из них называют библиотекой, а второй — пакетом.

Не все любят теорию в программировании. Но если вы хотите участвовать в осмысленных беседах с другими разработчиками (или как минимум задавать грамотные вопросы на Stackoverflow), нужно хотя бы иметь представление о том, что и как называется.

Вот как можно попытаться классифицировать эти вещи:

  • Функция: это блок кода, который можно использовать по несколько раз, вызывая его с помощью ключевого слова. Например, print() — это функция.
  • Модуль: это файл с расширением .py, который содержит список функций (также — переменных и классов). Например, в statisctics.mean(a), mean — это функция, которую можно найти в модуле statistics.
  • Пакет: это коллекция модулей Python. Например, numpy.random.randint(2, size=10). randint() — это функция в модуле random в пакете numpy.
  • Библиотека: это обобщенное название для определенной коллекции кода в Python.

Эта информация взята из вопроса на Stackoverflow.

Выводы

import — это важная составляющая Python. Чем больше вы будете узнавать о data science, тем лучше будете понимать, как постоянно расширять собственный набор инструментов в зависимости от поставленной задачи. import — это основной инструмент для этих целей. Он открывает тысячи дверей.