Библиотеки Python — это файлы с шаблонами кода. Их придумали для того, чтобы людям не приходилось каждый раз заново набирать один и тот же код: они просто открывают файл, вставляют свои данные и получают нужный результат. В этом материале даем описание библиотек, которые используются чаще всего для анализа данных на Python.
В подготовке материала помогали:
- Константин Башевой — старший аналитик «Ростелеком» и преподаватель «Курс по Python для анализа данных».
- Пётр Ермаков — руководитель отдела аналитики в Mail.ru и преподаватель «Курс по Machine Learning».
Для удобства разделили библиотеки на четыре вида:
- Основные
- Для работы с данными
- Для интеллектуального анализа и обработки естественного языка
- Для визуализации

Основные библиотеки Python
Это список базовых библиотек, которые делают из языка программирования Python мощный и надежный инструмент для анализа и визуализации данных. На них основываются более специализированные библиотеки. Иногда их называют набором SciPy.
Jupyter
Интерактивная оболочка для языка программирования Python. Она предоставляет расширенную интроспекцию и дополнительный командный синтаксис; сохраняет историю ввода во всех сеансах, подсвечивает и автоматически дополняет код. Если вы когда-либо пользовались Mathematica или MATLAB, то разберетесь и в Jupyter.
Веб-интерфейс отлично подходит для исследования и первичной обработки данных, тестирования первых версий кода и пошаговой отладки. Используя язык разметки markdown и библиотеки для визуализации, можно формировать аналитические отчеты прямо в браузере. Или преобразовать отчет в слайды HTML-презентации.
С помощью Jupyterhub можно настроить совместную работу команды на сервере с корпоративной авторизацией. Пример небольшого анализа данных в браузере:




Pandas
Библиотека предоставляет структуры данных и инструменты для анализа. Хороша в обработке неполных, неупорядоченных и немаркированных данных (как раз такие чаще всего и встречаются в жизни).
Pandas позволяет заменить довольно сложные операции с данными на одну-две команды. Содержит много готовых методов группировки, фильтрации, объединения данных, а также возможность распознавания разных типов источников.
В библиотеке можно объединять таблицы по аналогии с SQL JOIN. При этом данные берутся прямо из файлов, благодаря чему отпадает необходимость в организации баз данных.
Еще одна особенность Pandas — cкорость работы. Например, чтобы сгруппировать данные таблицы в 10 млн. строк, подсчитать средний чек и отсортировать результаты по убыванию, понадобится одна строчка кода и меньше пяти секунд:



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

Чтобы ее решить, достаточно воспользоваться методом lialg.solve:
import numpy as np
left = np.array( [ [1, 3], [2, -4] ] )
right = np.array( [9, 8] )
np.linalg.solve(left, right)
Ответ: array([6., 1.])
SciPy
Библиотека основывается на NumPy и расширяет ее возможности. Включает методы линейной алгебры и методы для работы с вероятностными распределениями, интегральным исчислением и преобразованиями Фурье. Например, для проведения T-теста двух выборок достаточно вызвать метод ttest_ind: stats.ttest_ind( data_list_1, data_list_2 ). SciPy похожа на Matlab и понимает формат mat.
Matplotlib
Низкоуровневая библиотека для создания двумерных диаграмм и графиков. С ее помощью можно построить любой график. Однако для сложной визуализации потребуется больше кода, чем в продвинутых библиотеках. Примеры визуализации:

Используемый код:
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.xlabel(‘time (s)’)
plt.ylabel(‘voltage (mV)’)
plt.title(‘About as simple as it gets, folks’)
plt.grid(True)
plt.savefig(«test.png»)
plt.show()
Библиотеки Python для работы с данными
Это список библиотек, которые пригодятся в машинном обучении. Их используют для анализа данных и обучения сложных нейронных сетей.
Scikit-learn
Основывается на NumPy и SciPy. Предоставляет алгоритмы для машинного обучения и интеллектуального анализа данных: кластеризации, регрессии и классификации. Одна из самых лучших библиотек для компаний, работающих с огромным объемом данных. Ее используют Evernote, OKCupid, Spotify и Birchbox.
Theano
Библиотека используется для оценки и улучшения математических выражений. Синтаксис, как и в NumPy. Проводит необходимые расчеты с большим объемом данных в 100 раз быстрее, чем CPU, так как использует GPU. За это и ценится теми, кто занимается глубоким обучением и сталкивается с вычислительными задачами.

TensorFlow
Библиотека создана Google на замену DistBelief — фреймворк для обучения нейронных сетей. Используется для настройки, тренировки и применения искусственных нейронных сетей с многочисленными наборами данных. Благодаря этой библиотеке Google может определять объекты на фотографиях, а приложение для распознавания голоса — понимать речь.
Библиотеки Python для интеллектуального анализа и обработки естественного языка
Это список библиотек, которые используются для извлечения данных из интернет-ресурсов и обработки естественного языка.
Scrapy
Используется для создания ботов-пауков, которые сканируют страницы сайтов и собирают структурированные данные: цены, контактную информацию и URL-адреса. Кроме этого, Scrapy может извлекать данные из API.
NLTK
Набор библиотек для обработки естественного языка. Основные функции: разметка текста, определение именованных объектов, отображение синтаксического дерева, раскрывающего части речи и зависимости. Используется для анализа тональности и автоматического обобщения. В наборе есть книга, посвященная анализу текста.

Pattern
Сочетает функциональность Scrapy и NLTK и предназначен для извлечения данных в интернете, естественной обработки языка, машинного обучения и анализа социальных сетей. Среди его инструментов есть поисковик, API для Google, Twitter и Wikipedia и алгоритмы текстового анализа, которые могут выполняться несколькими строками кода.
Библиотеки Python для визуализации
Это список библиотек, которые пригодятся в визуализации данных и построении графиков.
Seaborn
Библиотека более высокого уровня, чем matplotlib. С ее помощью проще создавать специфическую визуализацию: карты тепла, временные ряды и скрипичные диаграммы. Примеры визуализации:

Используемый код:
import seaborn as sns
sns.set(style=»whitegrid», palette=»pastel», color_codes=True)
# Load the example tips dataset
tips = sns.load_dataset(«tips»)
# Draw a nested violinplot and split the violins for easier comparison
sns.violinplot(x=»day», y=»total_bill», hue=»sex», data=tips, split=True,
inner=»quart», palette={«Male»: «b», «Female»: «y»})
sns.despine(left=True)

Bokeh
Создает интерактивные и масштабируемые графики в браузерах, используя виджеты JavaScript. Имеет три уровня интерфейса, от высокого, который позволяет быстро создавать сложные графики, до низкого. Примеры визуализации:

Используемый код:
import numpy as np
from bokeh.layouts import gridplot
from bokeh.plotting import figure, show, output_file
x = np.linspace(0, 4*np.pi, 100)
y = np.sin(x)
TOOLS = «pan,wheel_zoom,box_zoom,reset,save,box_select»
p1 = figure(title=»Legend Example», tools=TOOLS)
p1.circle(x, y, legend=»sin(x)»)
p1.circle(x, 2*y, legend=»2*sin(x)», color=»orange»)
p1.circle(x, 3*y, legend=»3*sin(x)», color=»green»)
p2 = figure(title=»Another Legend Example», tools=TOOLS)
p2.circle(x, y, legend=»sin(x)»)
p2.line(x, y, legend=»sin(x)»)
p2.line(x, 2*y, legend=»2*sin(x)», line_dash=(4, 4), line_color=»orange», line_width=2)
p2.square(x, 3*y, legend=»3*sin(x)», fill_color=None, line_color=»green»)
p2.line(x, 3*y, legend=»3*sin(x)», line_color=»green»)
output_file(«legend.html», title=»legend.py example»)
show(gridplot(p1, p2, ncols=2, plot_width=400, plot_height=400)) # open a browser
Basemap
Используется для создания карт. На ее основе сделана библиотека Folium, с помощью которой создают интерактивные карты в интернете. Примеры визуализации, созданной с помощью Folium и Basemap:

Используемый код:
import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from datetime import datetime
# miller projection
map = Basemap(projection=’mill’,lon_0=180)
# plot coastlines, draw label meridians and parallels.
map.drawcoastlines()
map.drawparallels(np.arange(-90,90,30),labels=[1,0,0,0])
map.drawmeridians(np.arange(map.lonmin,map.lonmax+30,60),labels=[0,0,0,1])
# fill continents ‘coral’ (with zorder=0), color wet areas ‘aqua’
map.drawmapboundary(fill_color=’aqua’)
map.fillcontinents(color=’coral’,lake_color=’aqua’)
# shade the night areas, with alpha transparency so the
# map shows through. Use current time in UTC.
date = datetime.utcnow()
CS=map.nightshade(date)
plt.title(‘Day/Night Map for %s (UTC)’ % date.strftime(«%d %b %Y %H:%M:%S»))
plt.show()
NetworkX
Используется для создания и анализа графов и сетевых структур. Предназначен для работы со стандартными и нестандартными форматами данных. Примеры визуализации:

Используемый код:
# Author: Aric Hagberg (hagberg@lanl.gov)
# Copyright (C) 2004-2018 by
# Aric Hagberg <hagberg@lanl.gov>
# Dan Schult <dschult@colgate.edu>
# Pieter Swart <swart@lanl.gov>
# All rights reserved.
# BSD license.
import sys
import matplotlib.pyplot as plt
import networkx as nx
G = nx.grid_2d_graph(5, 5) # 5×5 grid
try: # Python 2.6+
nx.write_adjlist(G, sys.stdout) # write adjacency list to screen
except TypeError: # Python 3.x
nx.write_adjlist(G, sys.stdout.buffer) # write adjacency list to screen
# write edgelist to grid.edgelist
nx. write_edgelist(G, path=»grid.edgelist», delimiter=»:»)
# read edgelist from grid.edgelist
H = nx.read_edgelist(path=»grid.edgelist», delimiter=»:»)
nx.draw(H)
plt.show()
Эти библиотеки Python лишь малая часть того, что имеется. Будем признательны, если дополните список в комментариях.
Адаптированный перевод статьи 15 Python Libraries for Data Science