Начинаем программировать на Python
Рассказываем, зачем учить Python и как это поможет при работе в Data Science. Идём пошагово: от установки дистрибутива до первых практических опытов.


vlada_maestro / shutterstock
Статья подготовлена на основе нашего вебинара с Валентином Пановским.
Python — высокоуровневый язык программирования, названный так в честь британского комедийного телешоу «Летающий цирк Монти Пайтона».
Зачем учить Python, где и кому он нужен
Почему именно Python? Причин много:
- благодаря простой структуре и синтаксису это один из лучших языков для начинающих;
- он быстро развивается;
- в Python простой и хорошо читаемый синтаксис;
- высокая востребованность разработчиков Python;
- язык широко используется в веб-разработке, автоматизации и Data Science.
Data Science, или наука о данных, сочетает в себе математику, статистику, IT и знания о бизнесе. Python фактически стал отраслевым стандартом в Data Science: чаще всего разработка ведётся именно на нём. Специалисты в этой области занимаются анализом данных и работают над их визуализацией. Data Science сейчас быстро развивается, поэтому разработчики нужны компаниям всё чаще.
Особенности Python
Плюсы:
- минималистичный синтаксис;
- динамическая типизация (не надо писать тип переменной);
- большое количество библиотек.
Минусы:
- низкая скорость в базовом варианте;
- неточности в работе с числами.
Важная особенность: в Python не указывается тип переменных. Это даёт большую гибкость, потому что в одну переменную можно записать сначала int (целое число), а потом float (число с плавающей точкой) или str (строка, текст), и тип поменяется сам. За эту гибкость, к сожалению, приходится расплачиваться скоростью.
По Python много мануалов как на английском, так и на русском языке. Однако знание английского вам сильно поможет: во-первых, большинство команд переводится с английского буквально (если вы знаете язык, вам не придётся их зубрить), а во-вторых, подсказки к командам и описания ошибок выводятся тоже на английском.
Начало работы в Python
Чтобы начать программировать, нужно скачать и установить дистрибутив. Для новичков хорошо подойдёт Anaconda.

Чем он хорош: в нём есть всё, что понадобится в работе.
В Anaconda уже встроены:
- все библиотеки машинного обучения и библиотеки для работы с данными (например, NumPy и Pandas);
- библиотека для визуализации (Matplotlib);
- надстройка Jupyter, чтобы программировать прямо в браузере.
После того как вы установили и открыли Anaconda, у вас появится вот такое окно:

Кнопкой Launch запустим «тетрадку» Jupyter, которая откроет ваш дефолтный браузер. После этого ваше рабочее пространство будет выглядеть так:

Или так:

По функциональности они абсолютно одинаковые.
Важная особенность: комментарии в Python делаются с помощью решетки, вот так:
#комментарий
Комментарии — это часть кода, которая не будет выполняться. Для чего используется комментирование?
Во-первых, чтобы написать небольшое пояснение (например, к какой-то функции).
Во-вторых, можно закомментировать часть кода, чтобы посмотреть, как остальной код работает без этой части.
Выполнение кода. Для этого используется Shift+Enter, Ctrl+Enter или значок «Пуск».
В чём разница?
Если нажать Shift+Enter, то курсор перескочит на следующую ячейку.
Если нажать Ctrl+Enter — останется в той, где вы работали.
Если ячейка выполнилась, это значит, что выполнились все действия, которые были в ней записаны.
Работа с базовыми функциями
Разберём, как устроены базовые функции в Python.
Чтобы записать в переменную V сумму 1 и 1, мы напишем так:
V = 1+1
Если мы захотим напечатать переменную V, мы используем функцию:
print(V)
Напоминаем, что в Python мы не пишем тип переменных.
При спуске этот код выведет нам 2.

Если вы забыли, что делает функция, или нашли новую, вам поможет команда help (): она выпишет основную информацию о функции. Если мы используем ее на функцию print (), это будет выглядеть так:

В программировании мы будем много работать с числами. Все основные математические операции записываются в Python привычным образом, примерно как в калькуляторе:
A+B #А плюс В
A-B #А минус В
A*B #А умножить на В
A/B #А разделить на В
Есть и операции поинтереснее, менее очевидные:
A**B #А в степени В
A//B #Деление без остатка
A%B #Остаток при делении
Иногда в Python можно встретить артефакты вроде такого:
1 – 1.3 = -0.30000000004.
В конце получившегося числа мы неожиданно видим 4. Это просто особенность компьютерного представления данных, и бояться этого не стоит, в большинстве случаев это не имеет значения. Но не забывайте об этой особенности, если вам важны точные числа (как, например, в астрофизике).
Вывод текста. Уже сложилась традиция, что первые слова, которые человек выписывает кодом, это «Hello, World!». Сделаем это и мы.
Мы уже выводили выше переменную, теперь выведем текст. Сделать это в Python очень просто:
print(“Hello, World!”)
Иногда (например, в цикле) надо выводить одно и то же с небольшим изменением. Для этого используется форматированный вывод. Это делается так: заменим часть, которая будет меняться, фигурными скобками, а за фразой напишем .format (). В скобки вставим переменную с нужным значением. Вот как это выглядит:
name = “Valentin”
print(“Hello, {}!”.format(name))
>>> Hello, Valentin!
В некоторых версиях Python можно сделать то же самое и другим способом:
print(f“Hello, {name}!”)
Результат будет один и тот же. Если у вас работают обе версии, то делайте так, как вам больше нравится.
Как устроены операции сравнения в Python
- Операции сравнения будут возвращать ответ в виде правда/неправда: True/False.
- Для проверки на равенство используются два знака «равно».
- Для проверки на неравенство используется восклицательный знак (знак отрицания) со знаком «равно».
Например:
A = 5
B = 10
A > B
>>>False
A < B
>>>True
A == B
>>>False
A != B
>>>True
A == 5
>>>True
Работа с циклами и условиями
Теперь посмотрим, как в Python устроены условия и циклы, которые позволяют направить вычисления в ту или иную сторону.
Для условий используются классические структуры if — else. Давайте с их помощью проверим число на чётность:
num = 13
if num % 2 == 0:
print(“Чётное”)
else:
print(“Нечётное”)
Важная особенность синтаксиса (хорошо видна в примере выше): для создания иерархии в Python используется отступ, а не фигурные скобки, как в некоторых других языках. Сначала это непривычно, но не пугайтесь: вы быстро привыкнете.
Циклы позволяют выполнять какое-то действие больше чем один раз. Виды циклов:
- while: действие будет выполняться до тех пор, пока выполняется условие;
- for: действие будет выполнено определённое количество раз.
Посмотрим на примерах, как это работает.
ПРИМЕР 1
i = 10
while i >= 0:
print(i)
i = i – 1
Такой код выведет нам последовательность чисел от 10 до 0, а потом остановится.
ПРИМЕР 2
i = 10
while i >= 0:
if i == 0:
print(“Hurray!”)
else:
print(i)
i = i – 1
Здесь мы получим последовательность от 10 до 1 и напечатанное «Hurray!» в конце.
Перед работой с For-циклом надо узнать, что такое массив.
Массив — это набор информации, который представляется так:
array = [1, 2.4, -4.2, “5”]
В одном массиве можно хранить переменные разных типов. Например, в нашем массиве array хранится один int, два float и один str. Индексы в Python начинаются с нуля, поэтому чтобы получить информацию с первого места (в нашем случае цифру 1), напишем вот так:
array[0]
С элементом массива можно работать как с обычным числом, то есть если написать array[0] +1, мы получим 2.
Напишем простенький цикл:
for v in array:
print(v)
Он выведет нам все элементы нашего массива и остановится. В каждом витке цикла переменная v получает значение соответствующего элемента.
Как создавать новые функции в Python
Дефолтных функций бывает недостаточно, и часто случается, что один и тот же набор операций надо выполнить много раз, причём с разными переменными. Чтобы сохранить время и избежать огромного кода, который сложно понять, мы можем создавать собственные функции.
Давайте напишем функцию, которая увеличит значение числа, которое мы ей передадим, на единицу:
def increase_by_1(x):
return x + 1
Команда def (от англ. define — определить) означает, что мы определяем собственную функцию, increase_by_ 1 — это её название, а x — это переменная, с которой она работает.
increase_by_1(11)
>>> 12
increase_by_1(0)
>>>1
Иногда функция уже существует, но её нет в базовой версии Python. Тогда её можно импортировать из библиотеки. Например, чтобы работать с более сложными математическими функциями, чем те, о которых мы говорили, нам понадобится библиотека math. Подключить можно всю библиотеку или только одну-две команды, в зависимости от того, что вам нужно. Для этого используется функция import. Это выглядит так:
import math #вся библиотека
from math import sin #только функция синус
Внимание!
Будьте осторожны с названиями функций! Если вы напишете свою функцию, а потом импортируете функцию с таким же названием, вы сможете использовать только импортированную.
Практика: делаем график курса доллара
Приступим к последнему заданию — сделаем в Python график курса доллара с начала 2019 года.
Для начала импортируем библиотеки Numpy (в ней удобно работать с массивами и матрицами), Pandas (работа с CSV-файлами) и Matplotlib (визуализация).
Вы можете дать библиотеке имя, которое будете использовать вместо настоящего названия, — это часто делается для экономии времени.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
На сайте Центрального Банка РФ скачаем CSV-файл с курсом от начала года.
Записываем скачанный файл в переменную money:
money = pd.read_csv(“название файла.csv”, sep = “;”)
#часть sep = “;” нужна, потому что вместо запятых в этом файле использованы знаки «;», у обычного csv это делать не нужно
Теперь если мы выведем money, то увидим таблицу с курсом.
Вот такую:

В России принято отделять десятичную часть запятой, поэтому перед созданием графика мы напишем маленькую функцию, которая заменит запятые точками.
def convert(str_money):
return float(str_money.replace(“,”, “.”))
money[“curs”] = money[“curs”].apply(convert)
Теперь осталось только показать график командой:
plt.plot(money[“curs”])
Если вы всё сделали правильно, то сейчас вы видите график курса доллара США, у нас получилось вот так:
