15 библиотек Python для Data Science

Для чего они нужны и какие задачи могут решить?

Язык Python часто применяется в Data Science, потому что, во-первых, по сравнению с другими языками код для сложных задач на Python проще и короче. А во-вторых, есть много мощных прикладных библиотек для решения разных задач: первичной обработки и анализа данных, обработки естественного языка и визуализации. Эта подборка будет полезна аналитикам данных, математикам и тем, кто занимается Data Science на разных уровнях. Составить ее нам помогли эксперты Константин Башевой (старший аналитик «Ростелеком»), Петр Ермаков (руководитель отдела аналитики в Mail.ru) и Анна Агабекян (ментор курса SkillFactory).

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

Основные библиотеки Python

Вот базовые библиотеки, которые делают из языка программирования Python инструмент для анализа и визуализации данных. Иногда их называют SciPy Stack. На них основываются более специализированные библиотеки.

Jupyter

Интерактивная оболочка для языка Python. В ней есть дополнительный командный синтаксис; она сохраняет историю ввода во всех сеансах, подсвечивает и автоматически дополняет код. Если вы когда-либо пользовались Mathematica или MATLAB, то разберетесь и в Jupyter.

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

Пример небольшого анализа данных в браузере:

анализ расходов по источникам
загрузка данных
загрузка данных в dataframe
размер таблицы
платежи по каналам
платежи по каналам

NumPy

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

Библиотека SciPy основывается на NumPy и расширяет ее возможности. SciPy похожа на Matlab. Включает методы линейной алгебры и методы для работы с вероятностными распределениями, интегральным исчислением и преобразованиями Фурье. Пример расчета определителя двумерной матрицы:

from scipy import linalg
import numpy as np
#define square matrix
two_d_array = np.array([ [4,5], [3,2] ])
#pass values to det() function
linalg.det( two_d_array )

Matplotlib

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 для анализа данных, Machine Learning и обучения сложных нейронных сетей.

Scikit-learn

Scikit-learn основана на NumPy и SciPy. В ней есть алгоритмы для машинного обучения и интеллектуального анализа данных: кластеризации, регрессии и классификации. Это одна из самых лучших библиотек для компаний, работающих с огромным объемом данных — ее используют Evernote, OKCupid, Spotify и Birchbox.

Пример визуализации частичной зависимости стоимости домов в Калифорнии в зависимости от особенностей местности:

Используемый код:

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import fetch_california_housing
from sklearn.inspection import plot_partial_dependence
X, y = fetch_california_housing(return_X_y=True, as_frame=True)
features = [‘MedInc’, ‘AveOccup’, ‘HouseAge’, ‘AveRooms’]
est = RandomForestRegressor(n_estimators=10)
est.fit(X, y)
display = plot_partial_dependence(
est, X, features, kind=»individual», subsample=50,
n_jobs=3, grid_resolution=20, random_state=0
)
display.figure_.suptitle(
‘Partial dependence of house value on non-location features\n’
‘for the California housing dataset, with BayesianRidge’
)
display.figure_.subplots_adjust(hspace=0.3)

TensorFlow

Библиотеку создали в Google, чтобы заменить DistBelief — фреймворк для обучения, настройки и тренировки нейронных сетей. Благодаря этой библиотеке Google может определять объекты на фотографиях, а приложение для распознавания голоса — понимать речь.

Пример архитектуры сверточной нейронной сети:

Model: «sequential»
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 30, 30, 32) 896
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 15, 15, 32) 0
_________________________________________________________________
conv2d_1 (Conv2D) (None, 13, 13, 64) 18496
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 6, 6, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 4, 4, 64) 36928
_________________________________________________________________
flatten (Flatten) (None, 1024) 0
_________________________________________________________________
dense (Dense) (None, 64) 65600
_________________________________________________________________
dense_1 (Dense) (None, 10) 650
=================================================================
Total params: 122,570
Trainable params: 122,570
Non-trainable params: 0
_________________________________________________________________

Keras

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

Пример кода обучения модели по классификации изображений:

epochs = 50
callbacks = [
keras.callbacks.ModelCheckpoint(«save_at_{epoch}.h5»),
]
model.compile(
optimizer=keras.optimizers.Adam(1e-3),
loss=»binary_crossentropy»,
metrics=[«accuracy»],
)
model.fit(
train_ds, epochs=epochs, callbacks=callbacks, validation_data=val_ds,
)

Библиотеки для интеллектуального анализа и обработки естественного языка

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

Scrapy

Библиотека используется для создания ботов-пауков, которые сканируют страницы сайтов и собирают структурированные данные: цены, контактную информацию и URL-адреса. Кроме этого, Scrapy может извлекать данные из API.

Пример кода для создания бота-паука:

NLTK (Natural Language Toolkit)

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

>>> trainer = NaiveBayesClassifier.train
>>> classifier = sentim_analyzer.train(trainer, training_set)
Training classifier
>>> for key,value in sorted(sentim_analyzer.evaluate(test_set).items()):
… print(‘{0}: {1}’.format(key, value))
Evaluating NaiveBayesClassifier results…
Accuracy: 0.8
F-measure [obj]: 0.8
F-measure [subj]: 0.8
Precision [obj]: 0.8
Precision [subj]: 0.8
Recall [obj]: 0.8
Recall [subj]: 0.8

Pattern

Сочетает функциональность Scrapy и NLTK и предназначена для извлечения данных в интернете, естественной обработки языка, машинного обучения и анализа социальных сетей. Среди инструментов есть поисковик, API для Google, Twitter и Wikipedia и алгоритмы текстового анализа, которые могут выполняться несколькими строками кода.

Пример визуализации графа:

Используемый код:

<!doctype html>
<html>
<head>
<meta charset=»utf-8″>
<style>
#graph { display: block; position: relative; overflow: hidden; }
#graph .node-label { font: 11px sans-serif; }
</style>
<script src=»graph.js»></script>
<script>
function spring() {
SHADOW = 0.65 // slow…
g = new Graph(document.getElementById(«_ctx»));
// Random nodes.
for (var i=0; i < 50; i++) {
g.addNode(i+1);
}
// Random edges.
for (var j=0; j < 75; j++) {
var n1 = choice(g.nodes);
var n2 = choice(g.nodes);
g.addEdge(n1, n2, {weight: Math.random()});
}
g.prune(0);
g.betweennessCentrality();
g.eigenvectorCentrality();
g.loop({frames:500, fps:30, ipf:2, weighted:0.5, directed:true});
}
</script>
</head>
<body onload=»spring();»>
<div id=»graph» style=»width:700px; height:500px;»>
<canvas id=»_ctx» width=»700″ height=»500″></canvas>
</div>
</body>
</html>

Библиотеки 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

Basemap используется для создания карт. На ее основе сделана библиотека Folium, с помощью которой создают интерактивные карты в интернете. Пример карты:

Код:

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’)
# 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, но и их достаточно, чтобы на серьезном уровне анализировать данные, создавать и обучать нейронные сети и визуализировать результаты.

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

Профессия Data Scientist

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

Блог SkillFactory
Добавить комментарий