Код
#статьи

Галопом по Python: языковой минимум, необходимый начинающему дата-сайентисту

Для первых шагов в науку о данных достаточно самых основ «змеиного» языка. Разбираемся, каких именно.

 vlada_maestro / shutterstock

Python (он же пайтон, питон, питончик) — основной язык программирования в Data Science, без него просто никуда. Он несложен в изучении, имеет ясный и читаемый код. Для языка создано огромное количество дополнений-библиотек, вокруг него сформировалось многочисленное сообщество, которое не даст пропасть новичку.

Итак, начинающему дата-сайентисту для старта достаточно знать:

  • что такое переменные, строки, списки и как с ними работать;
  • что такое срезы, цикл for и почему важны отступы.

Кажется, немного. Но этих знаний хватит, чтобы закодить несложную модель машинного обучения (например, Random Forest) для рекомендательной системы в туризме, предсказания курса доллара или прогноза цены недвижимости.

Питонить удобнее всего в Google Colaboratory. Это бесплатная веб-среда корпорации Google для вычислений и анализа данных. Чтобы получить к ней доступ, требуется лишь почта на Gmail — всё работает прямо в браузере, на компьютер ничего устанавливать не нужно.

Числа, строки, списки

Числа (целые и дробные), строки и списки — это самые фундаментальные типы данных в Python. Первые примеры кода практически во всех руководствах связаны именно с ними.

Для начала достаточно запомнить, что дробные числа, в отличие от целых, пишутся через точку: 23.0 — это дробное число для Python, а 23 — целое. Строки состоят из букв, символов и цифр и заключены в одинарные или двойные кавычки, а списки — это несколько элементов через запятую в квадратных скобках.

Код и текст в ячейках

Традиционно начнём с вывода строки Hello, Skillbox. В ячейке своего ноутбука Colab наберите:

print("Hello, Skillbox")

Затем нажмите:

  • либо треугольник «Запустить код» слева от ячейки;
  • либо комбинацию клавиш Ctrl+Enter.

И в том, и в другом случае код в ячейке запустится на выполнение. В нашем случае код из ячейки ноутбука говорит: «Напечатай на экране строку Hello, Skillbox». Должно получиться что-то вроде:

В ноутбуках два основных вида ячеек: «код» и текст». Ту, что с кодом, мы только что запустили. Ячейки текстового типа нужны для пояснений, создания заголовков или оглавлений ноутбуков. В ячейках используется так называемая маркдаун-разметка: здесь подробная шпаргалка по ней.

Потренируйтесь: самостоятельно создайте и удалите ячейки с кодом и текстом. Попробуйте использовать кодовые ячейки как калькулятор — наберите выражение, например, 2 + 2, 3 * 5 (звёздочка означает умножение) или 5 / 20, и запустите ячейку на выполнение. И, наконец, переименуйте ноутбук из Untitled0.ipynb в The_Greatest_DS_Project_Ever.ipynb или что-нибудь поскромнее.

Переменные и их вывод

Переменные в Python — это именованные сущности, в которые мы, как в коробочку с надписью, кладём какие-то значения или данные. Значения переменным задаются с помощью оператора присваивания: =.

а_chislo = 20
print(a_chislo)

Этот код, запущенный в ячейке, сначала присвоит переменной а_chislo значение 20, затем выдаст его нам с помощью функции print ().

Старайтесь использовать осмысленные, говорящие названия переменных. Эта привычка сбережёт вам дни и недели, если не месяцы жизни — без преувеличения. Используйте маленькие латинские буквы, символ подчёркивания и цифры.

В переменные можно класть и строки:

b_string = "Data Science" 
print(b_string)

Можно сочетать переменные прямо внутри скобок функции print через запятую:

print("Я изучаю", b_string, "уже", a_chislo, "минут")

Python понимает и одинарные, и двойные кавычки. Главное правило: не закрывать одинарные кавычки двойными, и наоборот. Двойные кавычки закрывают двойные, одинарные — одинарные. Машины, порядок, красота!

Более продвинутый способ вывода использует форматированные строки,
или f-strings:

print(f"Я изучаю {b_string} уже {a_chislo + 5} минут") 

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

Кстати, если переносите код в ячейку прямо из текста этой статьи копипастом (а кто из нас без греха), то Python может выдать ошибку. Причина — кавычки и другие специальные символы. Они могут быть немного другими, в зависимости от настроек шрифта в вашем браузере. Надёжнее всего перепечатать код вручную.

F-строки удобны тем, что не надо постоянно лезть внутрь скобок функции print (), чтобы изменить вывод: достаточно изменить переменную.

Изменим значение переменной b_string:

b_string = "Machine Learning"  
print(f"Я изучаю {b_string} уже {a_chislo + 5} минут"). 

Списки и что с ними делать

Список — это структура данных в Python, состоящая из произвольных элементов, перечисленных через запятую. Элементы списка заключаются в квадратные скобки.

Например:

freddy_list = [1, 2, "Фредди заберёт тебя", [3, 4, "Запирайте дверь в квартире"]]

Обратите внимание, что последним элементом в списке freddy_list является другой список, а именно [3, 4, «Запирайте дверь в квартире»]. В списках могут содержаться и числа, и строки, и, как видим, другие списки.

Давайте создадим список income_list, содержащий в себе поступления и расходы:

income_list = [2000, 1000, 500, 8000, -45]
print(income_list)  # выведет список 

Слова «выведет список» в примере — это строчный комментарий. Такие комментарии в Python используют для пояснения к командам. Они отделяются от исполняемого кода с помощью двух пробелов, знака решётки # и ещё одного пробела. Уместные комментарии — это хорошо.

В одной переменной income_list теперь содержится целый список из чисел.

Что с ним можно сделать:

sum(income_list)  # посчитает сумму всех элементов списка
len(income_list)  # посчитает длину списка, т.е. количество элементов в нём; len — от слова length, «длина». 

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

sum(income_list) / len(income_list)

Циклы, отступы и срезы в Python

Циклы позволяют организовать код более компактно, а отступы улучшают его структуру и повышают читаемость. Срезы предназначены для корректного выделения определённого диапазона значений: это одна из наиболее частых операций над данными.

Циклы

Чтобы сделать какую-то операцию нужное количество раз, в Python используют циклы: во-первых, это красиво, во-вторых, это правильно. Например, чтобы вывести фразу «Я изучаю Data Science» пять раз, можно написать такой код:

Без цикла (неправильно):

print("Я изучаю Data Science")
print("Я изучаю Data Science")
print("Я изучаю Data Science")
print("Я изучаю Data Science")
print("Я изучаю Data Science")

С циклом (правильно):

for i in range(0, 5):
    print("Я изучаю Data Science")

В первой строке правильного кода мы говорим: для всех i (эта переменная называется итератор — «перечислитель») в промежутке range от 0 до 5 сделай следующее — и ставим двоеточие. И Python, последовательно перебирая целые значения итератора i от 0 до 5, раз за разом выполняет команду после двоеточия. Это тело цикла, которое печатает нужную фразу.

Отступы

Обратите внимание на отступ перед командой print () в примере кода с циклом. Отступы очень важны: именно с их помощью Python понимает, что эта команда принадлежит циклу, а не стоит сама по себе. Если интерпретатор Python не увидит отступа там, где он должен, по его мнению, быть, то выдаст ошибку типа Indentation Error (ошибка отступа).

Colab, как и другие современные редакторы кода, сам поставит отступ, когда вы нажмёте Enter после двоеточия. Чтобы начать писать команду, уже не относящуюся к циклу, надо вернуться в начало строки с помощью клавиши Backspace.

Срезы

Запустим простой цикл:

for i in range(5):
    print(i)

В первой строке мы снова указываем итератору бежать от 0 до 5; сам ноль при этом не указываем, Python его поставит по умолчанию. Во второй строке печатаем значение самого итератора i. Что же мы видим:

0
1
2
3
4

Стоп-стоп, а где же 5? Там же в скобках ясно написано число!

Если коротко, то при указании начального и конечного значения какого-либо промежутка в Python подразумевается, что начальное значение в него входит, а конечное нет.

Проще всего это объяснить рисунком:

Сначала идёт срез (чёрные пунктирные линии на рисунке) с индексом, и только затем сам элемент (серый квадратик) с этим же индексом. Поскольку срез идёт впереди элемента, то элемент, отрезанный по индексу, не попадает в промежуток.

Тем более что элемент с индексом 5 по факту шестой — посчитайте. В программировании и data science отсчёт всегда начинается не с единицы, а с нуля.

Для списков и даже для строк действует аналогичное правило.

# переменная-список:
list_a = ['элемент_a', 'элемент b', 'c', 18, 12, 45]  

# элементы списка с индексами с 2-го по 4-й, исключая 4-й:
list_a[2:4] 

# переменная-строка:
string_b = 'Я изучаю Machine Learning' 

# символы строки с 7-го по 14-й, исключая 14-й:
string_b[7:14]  

Такая конструкция (для строк, списков и некоторых других типов данных) в Python так и называется: срез (slice). Его внешнее отличие от range () в том, что границы среза пишутся через двоеточие и в квадратных скобках.

Что дальше

Конечно, это только начало: в следующих статьях покажем, как применить эти знания. Самые нетерпеливые могут посмотреть интенсивы по Python и Data Science на нашем YouTube-канале. Сделать чат-бота с ИИ, предсказать курс доллара, рекомендовать туристу город для поездки — всё возможно!

На курсах «Профессии Data Scientist» Python посвящены несколько модулей. Там вы ещё ближе познакомитесь с этим языком программирования и с его возможностями в области анализа данных.

Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована