Курс «Python для анализа данных» — обучение аналитике данных на Python с нуля онлайн

Курс «Python для анализа данных» — обучение аналитике данных на Python с нуля онлайн Аналитика

15 библиотек python для data science: подборка от блога skillfactory

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

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

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

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

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

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

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 и расширяет ее возможности. 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 — низкоуровневая библиотека для создания двумерных диаграмм и графиков. С ее помощью можно построить любой график, но для сложной визуализации потребуется больше кода, чем в продвинутых библиотеках.

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

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

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 основана на 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 featuresn’
‘for the California housing dataset, with BayesianRidge’
)
display.figure_.subplots_adjust(hspace=0.3)

Библиотеку создали в 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 поддерживает как сверточные и рекуррентные сети, так и их комбинации.

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

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,
)

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

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

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

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

>>> 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

Сочетает функциональность 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>

Библиотеки, которые пригодятся в визуализации данных и построении графиков.

Библиотека более высокого уровня, чем 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)

Создает интерактивные и масштабируемые графики в браузерах, используя виджеты 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, с помощью которой создают интерактивные карты в интернете. Пример карты:

Код:

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()

Дополнительный анализ:  Самое ядовитое существо на планете: его яд способен убить более 100 человек сразу

Используется для создания и анализа графов и сетевых структур. Предназначена для работы со стандартными и нестандартными форматами данных. Примеры визуализации:

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

# Author: Aric Hagberg (hagberg@lanl.gov)
# Copyright (C) 2004-2021 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 Science с нуля

За 12 месяцев освоите работу с данными, пройдете минимум 30 собеседований и станете уверенным специалистом.

Получить скидку Промокод “BLOG10” 5% скидки

Добавление Магии в анализ данных Python

Магические команды(magics) – набор удобных функций в Jupyter Notebook, которые предназначены для решения распространённых проблем анализа данных. Посмотрите доступные magics с помощью %lsmagic.

анализ данных python
Список доступных магических функций

Магические команды делятся на два вида:

  • линейные magics, которые начинаются с одного символа % и работают с одной строкой ввода;
  • ячеечные magics, связанные с двойным префиксом %% и работающие с несколькими строками ввода.

Магические функции вызываются без ввода начального %, если установлено значение 1. Вот из них, которые пригодятся в общих задачах анализа данных:

%pastebin загружает код в Pastebin и возвращает URL. Pastebin – онлайн-хостинг, где сохраняем простой текст, такой как фрагменты исходного кода, а затем предоставляем URL-адрес другим пользователям. На самом деле, Github Gist также похож на Pastebin, хотя и с контролем версий.

Python-скрипт file.py с таким содержимым:

#file.py
def foo(x):
    return x

Использование %pastebin в Jupyter Notebook генерирует URL-адрес pastebin.

Функция %matplotlib inline используется для визуализации статических графиков matplotlib в блокноте Jupyter Notebook. Замените inline на notebook, чтобы легко получить масштабирование и изменение размеров графиков. Убедитесь, что функция вызывается перед импортом библиотеки matplotlib.

анализ данных python
%matplotlib inline против %matplotlib notebook

Функция %run запускает Python-скрипт внутри Notebook.

%run file.py

%%writefile записывает содержимое ячейки в файл. Здесь код будет записан в файл с именем foo.py и сохранён в текущем каталоге.

Функция %%latex превращает содержимое ячейки в LaTeX. Это полезно для написания математических формул и уравнений в ячейке.

Анализ входных данных

>Итак, задача сформирована и можно приступить к ее решению.


Для начала загрузим тестовую выборку и посмотрим как она выглядит::

from pandas import read_csv, DataFrame, Series
data = read_csv('Kaggle_Titanic/Data/train.csv')
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
13Braund, Mr. Owen Harrismale221A/5 211717.2500NaNS
211Cumings, Mrs. John Bradley (Florence Briggs Th…female381PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale26STON/O2. 31012827.9250NaNS
411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35111380353.1000C123S
53Allen, Mr. William Henrymale353734508.0500NaNS

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

data.pivot_table('PassengerId', 'Pclass', 'Survived', 'count').plot(kind='bar', stacked=True)

image

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

fig, axes = plt.subplots(ncols=2)
data.pivot_table('PassengerId', ['SibSp'], 'Survived', 'count').plot(ax=axes[0], title='SibSp')
data.pivot_table('PassengerId', ['Parch'], 'Survived', 'count').plot(ax=axes[1], title='Parch')

image


Как видно из графиков наше предположение снова подтвердилось, и из людей имеющих больше 1 родственников спаслись не многие.

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

data.PassengerId[data.Cabin.notnull()].count()

В итоге заполнено всего 204 записи и 890, на основании этого можно сделать вывод, что данное поле при анализе можно опустить.Следующее поле, которое мы разберем будет поле с возрастом (Age). Посмотрим на сколько оно заполнено:

data.PassengerId[data.Age.notnull()].count()

Данное поле практически все заполнено (714 непустых записей), но есть пустые значения, которые не определены. Давайте зададим ему значение равное медиане по возрасту из всей выборки. Данный шаг нужен для более точного построения модели:

data.Age = data.Age.median()


У нас осталось разобраться с полями

TicketEmbarkedFareName

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

data[data.Embarked.isnull()]
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
6211Icard, Miss. Ameliefemale2811357280B28NaN
83011Stone, Mrs. George Nelson (Martha Evelyn)female2811357280B28NaN

Итак у нас нашлось 2 таких пассажира. Давайте присвоим эти пассажирам порт в котором село больше всего людей:

MaxPassEmbarked = data.groupby('Embarked').count()['PassengerId']
data.Embarked[data.Embarked.isnull()] = MaxPassEmbarked[MaxPassEmbarked == MaxPassEmbarked.max()].index[0]

Ну что же разобрались еще с одним полем и теперь у нас остались поля с имя пассажира, номером билета и ценой билета.По сути нам из этих трех полей нам нужна только цена(Fare), т.к. она в какой-то мере определяем ранжирование внутри классов поля Pclass. Т. е. например люди внутри среднего класса могут быть разделены на тех, кто ближе к первому(высшему) классу, а кто к третьему(низший). Проверим это поле на пустые значения и если таковые имеются заменим цену медианой по цене из все выборки:

data.PassengerId[data.Fare.isnull()]


В нашем случае пустых записей нет.

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

Теперь, после удаления всех ненужных полей, наш набор выглядит так:

data = data.drop(['PassengerId','Name','Ticket','Cabin'],axis=1)
SurvivedPclassSexAgeSibSpParchFareEmbarked
3male2817.2500S
11female28171.2833C
13female287.9250S
11female28153.1000S
3male288.0500S

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

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


Авторы пакета

заботливо о нас позаботились и добавили

для извлечения и кодирования текстовых данных. Из них мне больше всего нравятся два:

  1. FeatureHasher
  2. CountVectorizer
  3. HashingVectorizer

FeatureHasher

преобразовывает строку в числовой массив заданной длинной с помощью хэш-функции (32-разрядная версия

CountVectorizer

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

), но работает медленнее.


Для более точного понимания работы CountVectorizer приведем простой пример. Допустим есть таблица с текстовыми значениями:

Значение
раз два три
три четыре два два
раз раз раз четыре

Для начала CountVectorizer собирает уникальные ключи из всех записей, в нашем примере это будет:

[раз, два, три, четыре]

Длина списка из уникальных ключей и будет длиной нашего закодированного текста (в нашем случае это 4). А номера элементов будут соответствовать, количеству раз встречи данного ключа с данным номером в строке:

раз два три –> [1,1,1,0]три четыре два два –> [0,2,1,1]

Соответственно после кодировки, применения данного метода мы получим:

Значение
1,1,1,0
0,2,1,1
3,0,0,1

HashingVectorizer

является смесью двух выше описанных методов. В нем можно и регулировать размер закодированной строки (как в

Дополнительный анализ:  Топ-5 торговых идей на американском рынке акций от инвестдома Oppenheimer

FeatureHasher

) и настраивать токенизатор (как в

CountVectorizer

). К тому же его производительность ближе к FeatureHasher.


Итак, вернемся к анализу. Если мы посмотрим по внимательнее на наш набор данных то можно заметить, что есть похожие строки но записанные по разному например: ”

… республика карелия…

” и ”

… по республике карелия…

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

Для этой задачи хорошо подходит

или

. Я буду использовать первый, т.к. он изначально создавался для работы с русским языком. Итак, функция которая будет отвечать за нормализацию и очиску строки выглядит так:

def f_tokenizer(s):
    morph = pymorphy2.MorphAnalyzer()
    if type(s) == unicode:
        t = s.split(' ')
    else:
        t = s
    f = []
    for j in t:
        m = morph.parse(j.replace('.',''))
        if len(m) <> 0:
            wrd = m[0]
            if wrd.tag.POS not in ('NUMR','PREP','CONJ','PRCL','INTJ'):
                f.append(wrd.normal_form)
    return f


Функция делает следующее:

  • Сначала она преобразовывает строку в список
  • Затем для всех слов производит разбор
  • Если слово является числительным, предикативном, предлогом, союзом, частицей или междометием не включаем его в конечный набор
  • Если слово не попало в предыдущий список, берем его нормальную форму и добавляем в финальный набор

Теперь, когда есть функция для нормализации можно приступить к кодированию с помощью метода

CountVectorizer

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

coder = HashingVectorizer(tokenizer=f_tokenizer, n_features=256)

Как можно заметить при создании метода кроме токенизатора мы задаем еще один параметр

n_features

. Через данный параметр задается длина закодированной строки (в нашем случае строка кодируется при помощи 256 столбцов). Кроме того, у

HashingVectorizer

есть еще одно преимущество перед

CountVectorizer

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


Теперь применим наш кодировщик к обучающему набору:

TrainNotDuble = train.drop_duplicates()
trn = coder.fit_transform(TrainNotDuble.passport_issuer_name.tolist()).toarray()

Говори на языке своей задачи

Языки программирования разрабатываются для разных целей. Поэтому они отличаются по степени сложности, мощности, скорости обработки компилятором. Например, один из первых языков общего назначения – язык C – обладает синтаксисом, который легко компилируется процессором в машинный код.

Поэтому написанные на нем команды работают быстро. Его часто используют системные программисты. Однако, для чтения он не так удобен, особенно если у вас большое полотно кода. Все потому, что в операциях на языке C больше используется символов, а не букв и слов. Буквы набирать быстрее и читать проще. Но у людей и компьютеров – разные предпочтения.

Код программы – победителя международного конкурса запутанного кода на языке С 1998 год.

«Языки программирования развивались вместе с технологиями, – объясняет Андрей Плющенко, приглашенный эксперт статьи,руководитель группы анализа данных Eastwind. – Компьютеры распространялись повсюду, увеличивались мощности ПО, а с ними и требования к программам. Вместе с тем как разработка становилась все сложнее, программисты понимали, что им чего-то не хватает: новых библиотек, формул, автоматизации. Так, появление языков с классами: C , C# и так далее, ознаменовало рождение концепции объектно-ориентированного программирования (ООП). В языках новой парадигмы стало доступно больше функций, которые делают за программиста рутинные вещи».

Библиотеки или функции в языке программирования – это «вшитые» готовые решения. Другими словами, это уже написанные кусочки кода для ряда операций, которые можно вызвать при необходимости. Большое количество таких шаблонов делает работу на языке удобнее и проще, но сами команды программа будет выполнять медленнее.

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

b_5acb1d86761c5.jpgФрагмент кода на Python 3.5.1

Все языки программирования постоянно обновляются. Появляются новые алгоритмы действий, добавляется больше библиотек. Разница в том, что не все языки обновляются одинаково: например, в одном со временем может быть больше примочек для задач web-разработки, в других – для системных решений. При выборе языка важно, как быстро и часто в нем будут появляться обновления, важные в вашей области программирования.

Курс python для анализа данных

Вера Шерман

Мне хочется сказать большое спасибо авторам этого куса и организаторам обучения. Это был мой первый онлайн курс в жизни. Я давно работаю в сфере IT. Очень любопытно было познакомиться с новым инструментом. Курс оказался именно тем, чего хотелось. Для меня все было новым. Несмотря на наличие опыта программирования на разных языках, мне было нелегко.

Наталья Карькова

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

Александр Чесноков

Замечательно подобрано соотношение материала и практики, специалисты курса всегда готовы прийти на помощь, вебинары проводятся в доступной форме.

Несколько раз пытался начинать обучаться, но каждый раз останавливался, если что-то не мог понять. Поэтому в очередной раз решив еще раз начать все сначала, поставил себе задачу обучаться не самостоятельно, а с помощью четкой программы. Все, с кем успел “столкнуться” объясняют доходчиво, помогают постоянно, если возникают вопросы.

Александр Гладких

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

Самообучение с нуля – это не моё, хотя я и освоил основы Python и базы данных самостоятельно. Дедлайны же на курсе сильно стимулируют к занятиям, ну и здорово, когда есть, с кем обсудить возникшие во время обучения проблемы. Всегда старайтесь сделать больше, чем надо для выполнения домашнего задания

После курса я буду искать работу как Full-stack разработчика для веба. Я доволен, курсы проходят отлично. Плюс очень важный момент – очень много людей, с которыми есть общие интересы. Сейчас в свободное время, уже после 3 месяцев курсов я брал несколько заказов на фрилансе. Простенькие landing page. Как раз то, что надо, чтобы «набить скил».

Курс позволяет выбрать удобный ритм обучения. Есть возможность перейти в другой поток и всё также получать обратную связь от менторов и кураторов. Если твой поток выпустился – это не значит, что ты не сможешь закончить обучение.

Кирилл Атаманенко

Экзамен был достаточно интересный, хотя хотелось-бы потруднее. Все модули были сделаны достаточно понятно и было достаточно практики. Из замечаний, хотелось бы больше практики по визуализации.

Андрей Зелепукин

Курс понравился своей интерактивностью, доступной и наглядной подачей материала, обилием ссылок на дополнительные материалы. Представляет собой обязательный минимум знаний и даже несколько больше. Хотелось бы еще больше заданий на работу с Pandas, API и визуализацию.

Нужен ли sql и python бизнес-аналитику

За 10 с лишним лет практической работы в бизнес-анализе мне ни разу не потребовалось самостоятельно писать SQL-запрос или скрипт на Python. Однако, проецировать личный опыт в глобальном масштабе – это ошибка выжившего. Поэтому, чтобы объективно ответить на вопрос «должен ли бизнес-аналитик знать SQL и Python», обратимся к профстандартам и ситуации на рынке труда.

Начнем с последнего: сегодня большинство объявлений о вакансиях на должность системного аналитика включают базовые знания SQL в состав обязательных требований к компетенциям кандидата. А многие работодатели и HR-менеджеры до сих пор путают профессии системного и бизнес-аналитика, о различиях которых мы говорили в этой статье, или стремятся сэкономить ФОТ, получив 2-в-1.

Поэтому такое пожелание можно встретить и в вакансиях бизнес-аналитика. Но, в случае системного аналитика знание SQL действительно является must-have компетенцией для разработки требований к информационным и автоматизированным системам, а также их интеграции между собой.

Классический бизнес-аналитик, согласно российскому профстандарту и руководству BABOK®Guide, работает с требованиями совсем на другом уровне абстракции, фокусируя внимание на оптимальной организации процессов и их экономике. Поэтому знание SQL и теории баз данных – это hard skills системного аналитика.

Впрочем, если бизнес-аналитик умеет писать или хотя бы может читать SQL-запросы, это будет приятным бонусом к его базовым компетенциям, которые мы разбирали здесь и здесь. Если вы не до конца поняли отличия системного и бизнес-аналитика, читайте нашу новую статью с наглядным примером.

Дополнительный анализ:  Рекомендации по акциям Severstal - ao (CHMF) —

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

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

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

Не случайно международный институт бизнес-анализа (IIBA®), под эгидой которого выходит BABOK®Guide, в 2020 году выпустил отдельное руководство по бизнес-аналитике данных (Guide to Business Data Analytics). В этот документ, структура которого похожа на BABOK, вошли задачи и техники анализа данных для получения инсайтов, ценных с точки зрения практического бизнеса.

SQL и Python упоминаются в нем как рабочие инструменты реализации некоторых техник, таких как разведочный анализ данных (Exploratory Data Analysis) и ETL-процессы (Extract-Transform-Load). Поэтому вполне вероятно, что уже в обозримом будущем SQL с Python будут входить в набор профессиональных компетенций системного и бизнес-аналитика.

Построение моделей классификации и их анализ


Ну что же, данные обработаны и можно приступить к построению модели, но для начала нужно определиться с тем, как мы будем проверять точность полученной модели. Для данной проверки мы будем использовать

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

Итак рассмотрим несколько алгоритмов машинного обучения:


Загрузим нужные нам библиотеки:

from sklearn import cross_validation, svm
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
import pylab as pl

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

target = data.Survived
train = data.drop(['Survived'], axis=1) #из исходных данных убираем Id пассажира и флаг спасся он или нет
kfold = 5 #количество подвыборок для валидации
itog_val = {} #список для записи результатов кросс валидации разных алгоритмов

Теперь наша обучающая выборка выглядит так:

PclassSexAgeSibSpParchFareEmbarked
312817.25002
128171.2833
3287.92502
128153.10002
3128 8.05002

Теперь разобьем показатели полученные ранее на 2 подвыборки(обучающую и тестовую) для расчет ROC кривых (для скользящего контроля этого делать не надо, т.к. функция проверки это делает сама. В этом нам поможет функция

модуля

ROCtrainTRN, ROCtestTRN, ROCtrainTRG, ROCtestTRG = cross_validation.train_test_split(train, target, test_size=0.25) 


В качестве параметров ей передается:

  • Массив параметров
  • Массив значений показателей
  • Соотношение в котором будет разбита обучающая выборка (в нашем случае для тестового набора будет выделена 1/4 часть данных исходной обучающей выборки)

На выходе функция выдает 4 массива:

  1. Новый обучающий массив параметров
  2. тестовый массив параметров
  3. Новый массив показателей
  4. тестовый массив показателей

Далее представлены перечисленные методы с наилучшими параметрами подобранные опытным путем:

model_rfc = RandomForestClassifier(n_estimators = 70) #в параметре передаем кол-во деревьев
model_knc = KNeighborsClassifier(n_neighbors = 18) #в параметре передаем кол-во соседей
model_lr = LogisticRegression(penalty='l1', tol=0.01) 
model_svc = svm.SVC() #по умолчанию kernek='rbf'

Теперь проверим полученные модели с помощью скользящего контроля. Для этого нам необходимо воcпользоваться функцией

scores = cross_validation.cross_val_score(model_rfc, train, target, cv = kfold)
itog_val['RandomForestClassifier'] = scores.mean()
scores = cross_validation.cross_val_score(model_knc, train, target, cv = kfold)
itog_val['KNeighborsClassifier'] = scores.mean()
scores = cross_validation.cross_val_score(model_lr, train, target, cv = kfold)
itog_val['LogisticRegression'] = scores.mean()
scores = cross_validation.cross_val_score(model_svc, train, target, cv = kfold)
itog_val['SVC'] = scores.mean()


Давайте посмотрим на графике средний показатель тестов перекрестной проверки каждой модели:

DataFrame.from_dict(data = itog_val, orient='index').plot(kind='bar', legend=False)

image

Как можно увидеть из графика лучше всего себя показал алгоритм RandomForest. Теперь же давайте взглянем на графики ROC-кривых, для оценки точности работы классификатора. Графики будем рисовать с помощью библиотеки matplotlib:

pl.clf()
plt.figure(figsize=(8,6))
#SVC
model_svc.probability = True
probas = model_svc.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
fpr, tpr, thresholds = roc_curve(ROCtestTRG, probas[:, 1])
roc_auc  = auc(fpr, tpr)
pl.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % ('SVC', roc_auc))
#RandomForestClassifier
probas = model_rfc.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
fpr, tpr, thresholds = roc_curve(ROCtestTRG, probas[:, 1])
roc_auc  = auc(fpr, tpr)
pl.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % ('RandonForest',roc_auc))
#KNeighborsClassifier
probas = model_knc.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
fpr, tpr, thresholds = roc_curve(ROCtestTRG, probas[:, 1])
roc_auc  = auc(fpr, tpr)
pl.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % ('KNeighborsClassifier',roc_auc))
#LogisticRegression
probas = model_lr.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
fpr, tpr, thresholds = roc_curve(ROCtestTRG, probas[:, 1])
roc_auc  = auc(fpr, tpr)
pl.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % ('LogisticRegression',roc_auc))
pl.plot([0, 1], [0, 1], 'k--')
pl.xlim([0.0, 1.0])
pl.ylim([0.0, 1.0])
pl.xlabel('False Positive Rate')
pl.ylabel('True Positive Rate')
pl.legend(loc=0, fontsize='small')
pl.show()

image

Как видно по результатам ROC-анализа лучший результат опять показал RandomForest. Теперь осталось только применить нашу модель к тестовой выборке:

model_rfc.fit(train, target)
result.insert(1,'Survived', model_rfc.predict(test))
result.to_csv('Kaggle_Titanic/Result/test.csv', index=False)

Построение модели

Для начала нам надо задать значения для столбца, в котором будут содержаться метки классов:

target = TrainNotDuble.passport_div_code.values


Задача, которую мы решаем сегодня, принадлежит к классу задач классификации со множеством классов. Для решения данной задачи лучше всего подошел алгоритм

. Остальные алгоритмы показали очень плохие результаты (менее 50%) поэтому я решил не занимать место в статье. При желании любой интересующийся может проверить данные результаты.

Для оценки качества классификации будем использовать количество документов по которым принято правильное решение, т. е.

Курс «Python для анализа данных» — обучение аналитике данных на Python с нуля онлайн

, где

P

— количество документов по которым классификатор принял правильное решение, а

N

– размер обучающей выборки.


В пакете scikit-learn для этого есть функция:

accuracy_score

Перед началом построения собственно модели, давайте сократим размерность с помощью «метода главных компонент», т.к. 256 столбцов для обучения довольно много:

pca = PCA(n_components = 15)
trn = pca.fit_transform(trn)

Модель будет выглядеть так:

model = RandomForestClassifier(n_estimators = 100, criterion='entropy')

TRNtrain, TRNtest, TARtrain, TARtest = train_test_split(trn, target, test_size=0.4)
model.fit(TRNtrain, TARtrain)
print 'accuracy_score: ', accuracy_score(TARtest, model.predict(TRNtest))

accuracy_score: 0.6523456

С чего аналитику начать изучение python

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

В первую очередь, тем кто не знаком с Python я бы рекомендовал установить дистрибутив Anaconda. Это удобнее, чем устанавливать чистый Python, т. к. Anaconda содержит большинство пакетов, необходимых для анализа данных.

Следующий шаг — выбор среды разработки. Для анализа данных лучше всего подойдет Jupyter Notebook. Эта среда разработки устанавливается вместе с Anaconda. Вот простой туториал по работе с Jupyter Notebook.

Тем, кто вообще никогда не сталкивался с языками программирования (например, не писал на Паскале или Бейсике в школе), я бы посоветовал пройти любые курсы базового питона. Например, на Stepik или Codecademy.

Многие аналитики начинают учить Python, но быстро бросают. Чаще всего это происходит потому, что люди начинают изучение с синтаксиса и простых абстрактных примеров. Поначалу это может быть интересным, но потом надоедает. Лучше всего проходить основы языка (на курсах или с помощью учебника), но параллельно попробовать решать простые практические задачи, автоматизируя рутину и сразу же ощущая как Python улучшает вашу жизнь.

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

На мой взгляд, самая главная библиотека для аналитика — Pandas. Если вы хотите быстро очищать, трансформировать, агрегировать, объединять и вообще всячески манипулировать табличными данными, то Pandas будет в этом надежным помощником. Для аналитика эта библиотека покрывает 90% задач. Про Pandas есть хорошая статья в блоге khashtamov.com (и весь блог годный!). Также советую почитать более хардкорную статью ребят из ODS. Если вы решите выбрать образовательные курсы — это отлично, но не советую надеяться, что выбрав какую-то одну образовательную программу вы получите всеохватывающий спектр знаний, поэтому вашей надёжной подмогой станет постоянное изучение различных материалов: статей в блогах (пример), видео (пример), онлайн-учебников (пример). Не забывайте про документацию и вопросы на стаковерфлоу — почти как кофе и сигареты — это комбинация.

А ещё я подготовил большую подборку ссылок про Pandas.

Начните использовать Python с решения какой-то простой практической задачи, например, выгрузки данных через API Яндекс.Метрики и сохранения полученных данных в Excel. Узнать как начать работать с API Яндекс.Метрики можно из моей статьи.

Данные из Яндекс.Метрики в Python можно получить с помощью вот такого простого сниппета. Начните с получения токена для API Яндекс.Метрики и выполните этот код в Jupyter Notebook. Вы удивитесь как это просто!

Дальше можно усложнять скрипт, например, сделать несколько различных запросов и выгрузить данные на несколько вкладок в одном Excel-файле. Или выгрузить из Метрики данные с множеством dimensions и попробовать на их основе сделать в Pandas несколько таблиц с группировкой с помощью функции groupby, а также сводные таблицы с помощью функции pivot_table.

Успехов в автоматизированной борьбе с рутиной!

Вступайте в группу на Facebook и подписывайтесь на мой канал в Telegram, там публикуются интересные статьи про анализ данных и не только.

Оцените статью
Аналитик-эксперт
Добавить комментарий

Adblock
detector