Python

Материал из MachineLearning.

Перейти к: навигация, поиск

Python — высокоуровневый, объектно-ориентированный, интерпретируемый язык программирования, основными целями которого являются повышенная читаемость кода и способность написания намного меньших по объему программ по сравнению с такими языками как Java или C++. Правила оформления кода интегрированы в язык и закреплены его стилевыми правилами. Python и R являются стандартными языками программирования для анализа данных де-факто [1][1].


Содержание

Версии языка

Основными поддерживаемыми версиями Python являются вторая и третья (2.7.11 и 3.5.1 на момент написания статьи), которые, вообще говоря, не являются обратно совместимыми. Вторая версия на момент написания статьи распространена в индустрии больше из-за количества написанного на нем кода, однако его поддержка будет закончена раньше, и все основные модули совместимы с Python 3.


Установка Python

Python является интерпретируемым языком программирования, что означает, что для работы кода на Python нужен интерпретатор. Основной реализацией Python является CPython. В академической и исследовательской распространен IPython, который расширен более продвинутым автодополнением и другими вспомогательными конструкциями. В частности, довольно распространен Jupyter, в котором можно писать код (не только на Python 2 или 3, но и на Matlab, R и других) и вставлять документацию на Markdown с поддержкой LaTeX. Основным достоинством этого подхода является написание кода и технического отчета одновременно, который может сопровождаться самой разнообразной визуализацией[1].

Linux и OS X

Интерпретатор Python встроен в OS X и почти во все Linux дистрибутивы. С большой вероятностью, команда python вызывает интерпретатор Python по умолчанию, python3 — интерпретатор для третьей версии.

Для установки дополнительных пакетов необходимо воспользоваться пакетным менеджером Python — pip. Единственный верный способ установки менеджера на любой \*nix системе указан здесь. Если вы используете Ubuntu/Mint/Debian, то код, устанавливающий основные зависимости и библиотеки анализа данных приведен ниже (работает на Ubuntu 14.04). Обратите внимание, что пакеты собираются pip'ом из исходников на Linux, так что установка может занять некоторое время.

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt-get -y  install htop gcc g++ vim libxrender1 libxrender-dev gfortran build-essential libatlas-dev libatlas3gf-base libsm6 git \
pkg-config libblas3gf libblas-doc libblas-dev liblapack3gf liblapack-doc liblapack-dev libpng-dev libjpeg8-dev libfreetype6-dev
sudo apt-get -y  install python-pip python-dev python-setuptools
sudo apt-get -y  install python3-pip python3-dev python3-setuptools
 
sudo pip install --upgrade pip
sudo pip3 install --upgrade pip
 
sudo pip3 install numpy scipy matplotlib pandas jupyter sklearn seaborn # если устанавливать пакеты для Python 2 используйте pip вместо pip3

Все дополнительные библиотеки, jupyter и ipython могут быть установлены с помощью команды (приведен пример для установки pandas).

pip install pandas

Обратите внимание, что, если вы используете Linux, рекомендуется использовать pip без прав администратора, так как вы рискуете своей ошибкой нарушить работоспособность системы. Для безопасной работы с pip существует virtualenv.

Альтернативой pip является anaconda.

Windows

Для корректной работы всех библиотек анализа данных практически единственным реалистичным методом является anaconda.

Anaconda

Anaconda — это дистрибутив Python и R вместе с основными библиотеками для анализа данных и пакетным менеджером conda. С помощью последнего удобно устанавливать и удалять пакеты. Также сильным достоинством является установка без компилирования из исходного кода, что значительно ее ускоряет по сравнению с pip. После установки дистрибутива с официального сайта (в этом разделе рассматриваем случай Windows) в приложениях появляется "Anaconda Prompt". Именно в этом приложении коммандной строки и придется работать. Для выведения помощи по коммандам:

conda help

Обновление всех установленных пакетов

conda update --all

Выведение списка установленных пакетов

conda list

Из комманд терминала Windows пригодится cd foldername — изменить директорию, dir — вывести содержимое текущей директории. Расширенную справку можно почитать, например, тут.

Краткое введение в Python

Будем использовать для знакомства третью версию языка Python.

Программа "Hello, World"

# this is comment
print("Hello, World!")

В арифметических операции Python помимо стандартных есть возведение в степень. Длинная арифметика, а также необходимые преобразования типов происходят "под капотом"

bags = 20
apples = 40
variants = apples ** bags
print(variants) # 109951162777600000000000000000000

Целочисленное деление, остаток от деления

a = 23 / 4  # 5.75
            # в Python 2 было бы 5
a = 23 // 4 # 5
a = 23 % 4  # 3

Булевы операции

print(5 in [1, 2, 5])       # True
condition = 2 * 2 == 5
if condition:
    call_police()

Python — язык с динамической типизацией

value = "Who is John Galt?"
print(value)
value = 9
print(value + 1)

В Python богатый встроенный набор коллекций

# список (изменяемый, расширяемый)
fruit = ['apples', 'peaches', 'bananas'] 
# словарь (множество пар ключ-значение)
cities = {"London":"UK", "Nizhny Novgorod":"Russia"}
cities["Bristol"] = "Ireland"
# кортеж (неизменяемый)
point = (12, 21)

Индексация в списках

pi_list = [3, 1, 4, 1, 5, 9, 2, 6]
pi_list[0:4]                        # [3, 1, 4, 1], то есть берется полуинтервал с левым включением
pi_list[:4] == pi_list[0:4]         # True, крайние значения можно опускать
pi_list[:3:-1]                      # [4, 1, 3], -1 инвертирует направление списка
pi_list[::2]                        # [3, 4, 5, 2]  каждый второй элемент
pi_list[:-4:-2]                     # [6, 9]           это можно понять :)

Цикл for. Обратите внимание, что блок выделяется однотипным отступом (то есть с помощью Tab или одинакового количества пробелов).

for i in range(5):
    print(i)                      # 0 1 2 3 4
for letter in ["alpha", "beta", "gamma"]:
    print(letter.upper()) # ALPHA BETA GAMMA

Цикл while

value = 0
while value < 5:
    value += 1

Модуль math

import math
 
print(math.sqrt(math.pi))

или

from math import pi
from math import sqrt
 
print(sqrt(pi))

Некоторые трюки с присваиваниями

val1, val2 = val2, val1
###
def func(a, b):
    return (a, b+a)          # кортеж
val1, val2 = func(2, 3)  # в val1 теперь 2, в val2 — 5
###
a = [1, 2, 3]
b = a
b.append(4)                  # добавляем 4 в конец b
a == b                            # True, при присваивании в b записалась ссылка на a
 
###
b = a[:]                           # В b теперь копия a


Определение функций в Python

def centrize(array):
    mean = sum(array)/len(array)
    array = [item - mean for item in array]   # генератор
    return array
print(centrize([1, 2, 3]))      # [-1.0, 0.0, 1.0]

Python и анализ данных

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

Литература

Полезные ссылки

Личные инструменты