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

Снимок экрана 2018-12-05 в 14.49.55

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

Снимок экрана 2018-12-05 в 14.50.09

Снимок экрана 2018-12-05 в 14.50.04

На данный момент наиболее быстрым методом загрузки является загрузка с использованием пакета data.table:

Снимок экрана 2018-12-05 в 14.50.15

Для оценки производительности функции попробуем сравнить время выполнения с использованием пакета rbenchmark:

Снимок экрана 2018-12-05 в 14.50.23

Достаточно часто, когда работаешь с временными рядами необходимо преобразовать текст в формат дата-время:

Снимок экрана 2018-12-05 в 14.50.46

Но существует и более быстрый способ сделать это:

Снимок экрана 2018-12-05 в 14.50.53

Сравним производительность этих двух методов:

Снимок экрана 2018-12-05 в 14.51.01

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

Снимок экрана 2018-12-05 в 14.51.09

Испробуем этот же метод аггрегирования из пакета data.table:

Снимок экрана 2018-12-05 в 14.51.17

Сравним производительность этих двух методов:

Снимок экрана 2018-12-05 в 14.51.22

Рассмотрим вопросы скорости упорядочивания массива данных:

Снимок экрана 2018-12-05 в 14.51.28

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

 

Снимок экрана 2018-12-05 в 14.51.39

Это можно вычислить и более простым методом, если один цикл заменить векторной операцией:

Снимок экрана 2018-12-05 в 14.51.46

Или возможно использовать функцию apply:

Снимок экрана 2018-12-05 в 14.51.50

Сравним производительность:

Снимок экрана 2018-12-05 в 14.52.00

Когда у нас имеется многоядерный процессор, можно распараллелить вычисления. Для этого в R существуют специальный метод:

Снимок экрана 2018-12-05 в 14.52.09

После создания 2 процессов R можно для каждого из них отправлять задание:

Снимок экрана 2018-12-05 в 14.52.16

Кроме того в R есть возможность имлиментации C++ кода, вычисления на котором будут более производительными. Рассмотрим на примере последовательности Фибоначчи:

Снимок экрана 2018-12-05 в 14.52.23

Реализуем эту функции на C++ коде:

Снимок экрана 2018-12-05 в 14.52.29

Сравним:

Снимок экрана 2018-12-05 в 14.52.35

Задание:

На основе минутных данных о торгах акциями компании Apple выполните следующие задания: (данные находятся на G:/105/1/arbuzov/AAPL.csv)
1. Вывести те дни, когда цена была более 700$
2. Вывести цены закрытия торгов по дням
3. Вычислить минуту в которую в среднем проходит наибольший объем торгов
4. Вывести месяц с наименьшим объемом торгов
5. Отранжировать минутные бары по показателю (High-Low)/Close
6. Вычислить день для которого автокорреляция приростов цен первого порядка имела наибольшее абсолютное значение

 

 

Занятие 9. HPC in R

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *