«Анализ данных на Python» в двух частях / Блог компании Образовательные проекты JetBrains / Хабр

«Анализ данных на Python» в двух частях / Блог компании Образовательные проекты JetBrains / Хабр Аналитика

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

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

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

# 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% скидки

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

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

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

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

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

  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

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

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


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

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

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

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

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

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

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

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

Дополнительный анализ:  Работа: риск аналитик - 982 вакансии от прямых работодателей | Jobeka

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

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

Работа с данными временных рядов

Для импортирования данных мы использовали pandas_datareader. В результате возник объект aapl — это DataFrame, то есть двумерная именованная структура данных со столбцами потенциально разных типов. Первое, что следует сделать при работе с таким фреймом — запустить функции head() и tail() для того, чтобы взглянуть на первый и последний столбцы датафрейма. Для получения полезной статистической сводки по скачанным данным можно воспользоваться функцией describe().

Пример этого кода можно найти на странице исходного материала.

Данные содержат четыре столбца с ценой открытия и закрытия торгового периода, а также максимальной и минимальной ценой — мы рассматриваем дневные интервалы и акции Apple. Также мы получаем два дополнительных столбца: Volume и Adj Close. Первый из них используется для того, чтобы зафиксировать количество акций, с которыми совершались сделки в торговый день.

Если нужно сохранить данные в CSV-файл, это можно сделать с помощью функции to_csv(), а прочитать файл можно с помощью read_csv() — это полезно для ситуаций, когда источник данных меняется и доступ к ним временно теряется.

import pandas as pd
aapl.to_csv('data/aapl_ohlc.csv')
df = pd.read_csv('data/aapl_ohlc.csv', header=0, index_col='Date', parse_dates=True)

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

Для того, чтобы посмотреть на индекс и столбцы данных следует использовать атрибуты index и columns. Затем можно выделить подмножество из десяти последних наблюдений в столбце column. Для изолирования этих значений следует использовать квадратные скобки. Последнее значение помещается в переменную ts, а проверка ее типа осуществляется с помощью функции type().

# Inspect the index 
aapl.index
 
# Inspect the columns
aapl.columns
 
# Select only the last 10 observations of `Close`
ts = aapl['Close'][-10:]
 
# Check the type of `ts` 
type(ts)

Использование квадратных скобок удобно, но это не самый характерный способ при работе с Pandas. Поэтому также стоит рассмотреть функции loc() и iloc(): первая из них используется для label-based индексирования, а последняя для позиционального индексирования.

На практике, это значит, что можно передать ярлык ряда вроде 2007 или 2006-11-01 в функцию loc(), а целые числа вроде 22 или 43 передаются функции iloc().

# Inspect the first rows of November-December 2006
print(aapl.loc[pd.Timestamp('2006-11-01'):pd.Timestamp('2006-12-31')].head())
 
# Inspect the first rows of 2007 
print(aapl.loc['2007'].head())
 
# Inspect November 2006
print(aapl.iloc[22:43])
 
# Inspect the 'Open' and 'Close' values at 2006-11-01 and 2006-12-01
print(aapl.iloc[[22,43], [0, 3]])

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

Помимо индексирования есть несколько способов узнать о данных больше. Можно, к примеру, попробовать создать семпл из 20 строк данных, а затем переформатировать их таким образом, чтобы appl стал не дневным значением и месячным. Сделать это можно с помощью функций sample() и resample():

# Sample 20 rows
sample = aapl.sample(20)
 
# Print `sample`
print(sample)
 
# Resample to monthly level 
monthly_aapl = aapl.resample('M').mean()
 
# Print `monthly_aapl`
print(monthly_aapl)

Прежде чем перейти к визуализации данных и проведению финансового анализа, можно начать вычислять разницу между ценами открытия и закрытия торгового периода. Эту арифметическую операцию можно с помощью Pandas — нужно вычесть значения столбца Open данных appl из столбца Close.

# Add a column `diff` to `aapl` 
aapl['diff'] = aapl.Open - aapl.Close
 
# Delete the new `diff` column
del aapl['diff']

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

Часть 1

1. Описательные статистики. Квантили, квартили. Гистограммы. Ядерные оценки плотности.

2. Описательные статистики. Ящики с усами. Выбросы. Медиана и среднее арифметическое как типичные наблюдения. Диаграмма рассеивания. Матрица диаграмм рассеивания.


Столбиковая и круговая диаграмма.

4. Метод к-средних. Примеры (теоретическая часть лекции пропущена).

5. Проверка статистических гипотез (теоретическое введение).

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

Критерии Шапиро-Уилка и Колмогорова-Смирнова. Несущественные отклонения от нормальности. Сравнение выборок. Независимые и парные выборки. Выбор между t-критерием Стъюдента, критерием Манна-Уитни-Вилкоксона и критерием Муда. Разновидности t-критериев Стъюдента и сравнение дисперсий.

6. Проверка статистических гипотез (процедуры Python).

Критерий Шапиро-Уилка. Критерий Манна-Уитни-Вилкоксона. t-критерий Стъюдента. Критерий Флигнера-Килина.

Независимые и парные выборки. Критерий хи-квадрат. Критерий Пирсона.

7. A/B тестирование. Тест для пропорций.

8. Линейный регрессионный анализ. Модель, интерпретация оценок коэффициентов, множественный коэффициент детерминации. Интерпретация множественного коэффициента детерминации, ограничения на область его применения. Выявление наиболее значимых предикторов и оценка вклада каждого предиктора. Алгоритмы корректировки построенных моделей. Коллинеарность.

9. Прогнозирование на основе регрессионной модели с сезонными индикаторными (фиктивными, структурными) переменными. Тренд, сезонные составляющие, смена характера ряда, выбросы. Логарифмирование – прием для преобразования мультипликативной сезонности в аддитивную.


Индикаторные переменные. Переобучение.

Случай нескольких сезонных составляющих.

10. Распознавание образов/классификация.Параметры модели, внутренние и внешние.Критерии качества. Обучающая и тестовая выборки.Деревья классификации CART. Геометрическое представление. Представление в виде набора логических правил. Представление в виде дерева.

11. Случайные леса. Bagging. Ключевые параметры модели. Out-of-bag error. Информативность переменных. Анализ несбалансированных выборок. Определение числа деревьев.

12. Boosting. Gradient boosting machine. Ключевые параметры модели.

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

Adblock
detector