Перейти к содержанию

322 гр., спец. СМ. Спецкурс «Введение в обработку данных»

Место и время проведения: вторник, третья пара (13:40-15:15), ауд. 3534
Преподаватель: Гученко Роман Александрович

Программа

Занятие 1:

metacritic_games

Занятие 2:

r_intro:

  1. R как калькулятор: +, -, *, /, ^; abs, sqrt, log, sin, cos, exp; %%, %/%
  2. Встроенная справка, функция ?
  3. Ввод длинных строк
  4. Экспоненциальная запись чисел
  5. Округление: функции floor, ceiling, round
  6. Операторы присваивания в R: <-, ->, =
  7. Названия переменных, правила
  8. Workspace: ls, rm

r_vector1:

  1. Создание векторов: c, :
  2. Векторы и “скаляры” (векторы длины 1)
  3. Типы (atomic) векторов: numeric (integer, double, complex), character, logical, raw
  4. Конверсия типов векторов
  5. Проверка типа вектора (typeof, is.numeric, is.integer, is.double, is.logical, is.complex, is.raw)
  6. Изменение типа вектора (as.numeric, as.integer, as.double, as.logical, as.complex, as.raw)
  7. seq, length
  8. Доступ к элементам вектора (оператор [], как работает со “скалярами” и integer векторами)
  9. Поэлементная арифметика с векторами
  10. Векторы, правило переписывания
  11. Сравнение векторов. Операторы <, <=, ==, >=, >, !=
  12. min, max, which.min, which.max, which, sum, prod, sort, rev
  13. Два слова про картинки. Функция plot
  14. Задание 1: про нахождение максимумов функции на сетке
  15. Объекты в R как C-struct’ы; размеры векторов в памяти, размеры “скаляров”

r_vector2:

  1. NULL object
  2. Векторы длины 0
  3. factorial, mean, diff
  4. : для создания double и убывающих последовательностей
  5. [] в связке с logical векторами, [] и отрицательные индексы
  6. logical векторы: !, &, |, XOR; && и || для “скаляров”; isTRUE
  7. Присваивание значений части вектора; правило переписывания в этом случае
  8. T, F; арифметика с logical
  9. Missing values, NA и арифметика, NA и логические операции, NA при сравнении, NA и функции для работы с векторами
  10. -Inf, Inf, NaN
  11. is.na, is.nan
  12. Задание 2: про замену части синусоиды на квадратичную функцию

Занятие 3:

r_vector3:

  1. pmin, pmax
  2. cumsum, cumprod, cummin, cummax
  3. rep
  4. Равенство векторов: all.equal, identical
  5. order
  6. Задание 3: численное интегрирование и дифференцирование; посчитать функцию распределения для нормального распределения на отрезке [-4,4]
  7. median; когда лучше использовать вместо mean
  8. Character векторы и string pool; размер character вектора
  9. Работа со строками: nchar - длина строк в character векторе, substr - выбор подстрок, paste и paste0 - конкатенация строк
  10. unique
  11. Имена для элементов вектора
  12. factor; factor vs character vector; потребление памяти; скорость поэлементного сравнения с заданной строкой

r_list:

  1. Создание списков, функция list
  2. Доступ к элементам, разница между операторами [] и [ [ ] ]
  3. Имена для элементов списка
  4. Обновление элементов списка
  5. Конкатенация списков с помощью c()
  6. Конвертация списка в вектор с помощью unlist
  7. Пустой список, append
  8. Списки и память. Список как массив указателей на произвольные объекты. Почему список из “скаляров” - не всегда хорошая идея

Control flow (https://adv-r.hadley.nz/control-flow.html; самостоятельное изучение):

  1. Условный оператор: if(){}, if(){}else{}, if(){}else if(){}else{}; что можно передавать в качестве условия, а что - нельзя
  2. Функции ifelse и switch
  3. Циклы for, while и repeat

Занятие 4:

r_matrix1:

  1. Создание матриц; numeric, character и logical матрицы
  2. Доступ к элементам, выделение строк, столбцов, подматриц
  3. Размерность: dim vs length
  4. rbind, cbind
  5. Поэлементная арифметика
  6. Транспонирование, выделение и изменение диагонали
  7. rowSums, colSums: разница в скорости; sum в случае матриц
  8. rowMeans, colMeans
  9. Логические операции, замена части элементов матрицы по условию
  10. Как матрицы хранятся в памяти? Как сделать матрицу из вектора с помощью изменения атрибута dim? Приводит ли это к изменениям основных данных?
  11. Про атрибуты объектов в R
  12. Дополнительные атрибуты матриц: имена строк и столбцов
  13. Умножение матриц, оператор %*%; Умножение матрицы на вектор слева и справа, вектор-строка и вектор-столбец

r_matrix2:

  1. Задание 4: решение систем линейных уравнений, интерполяция полиномом
  2. Задание 5: умножение матриц, поиск компонент связности в графе
  3. Задание 6: умножение матриц, поиск стационарного распределения марковской цепи, PageRank

Занятие 5:

r_function:

  1. Синтаксис создания функций
  2. Копирует ли R объекты при передаче их в функцию в качестве аргументов? Хитрое поведение в стиле: передаю по указателю, но если надо изменить объект во время исполнения, создаю копию внутри пространства имен функции, работаю дальше с ней, не меняя исходный объект. Исключения из этого правила
  3. Анонимные функции
  4. Функции от функций; встроенные функции от функций: apply, lapply, sapply
  5. Функции возвращающие функции
  6. Ленивые вычисления
  7. Правила передачи аргументов

r_data_frame:

  1. Создание data.frame’ов “руками”; функция data.frame; правило переписывания при создании колонок
  2. Имена строк и столбцов (функции row.names и names)
  3. typeof и class data.frame’а
  4. Структура data.frame’а, функция str, получение информации о типе столбцов
  5. nrow, ncol, dim
  6. Доступ к столбцам data.frame’а:
    1. поведение оператора [,] при передаче “скаляра”, положительного integer вектора, отрицательного integer вектора, character вектора, logical вектора;
    2. повторяющиеся integer индексы в [,];
    3. правило переписывания при передаче в [,] logical векторов;
    4. поведение [,] при добавлении drop=F;
    5. оператор [] и оператор [ [ ] ], аналогия с list
    6. оператор \$
  7. Доступ к строкам:
    1. [,] для integer, character, logical;
    2. выделяем строчки по логическому условию на столбцы;
    3. правило переписывания
  8. Доступ к элементам, выделение подdata.frame’ов
  9. summary, что показывает для numeric, logical, character и factor колонок; отступление про quantile
  10. rbind и cbind для data.frame’ов; дубликаты в именах колонок
  11. Добавление строк в конец data.frame’а; стоимость этой операции
  12. Добавление столбцов
  13. Сортировка строк data.frame’а через order; сортировка по одной и нескольким колонкам
  14. Сортировка столбцов data.frame’а; копирование указателей на колонки data.frame’а и стоимость этой операции; реальная копия данных при попытке изменения колонки, последствия для производительности
  15. with и within
  16. join’ы, функция merge: inner, left, right, full

Дополнительное чтение на дом:

https://adv-r.hadley.nz/names-values.html

  1. подробнее про то, когда R делает копию объекта при выполнении оператора присваивания, а когда создает новый объект
  2. еще раз про допустимые названия переменных
  3. функция tracemem для лучшего понимания механизма копирования
  4. еще раз про копирование указателей на элементы списка и колонки data.frame’а при выполнении оператора присваивания
  5. еще раз про дороговизну изменения строк в data.frame’е
  6. еще раз про string pool
  7. modify-in-place без копирования
  8. немного про garbage collector

https://adv-r.hadley.nz/vectors-chap.html

  1. atomic vector, list, data.frame - все это vector’ы
  2. подробнее про атрибуты объектов в R; names и dim атрибуты
  3. array - массив с произвольным dim
  4. factor как надстройка над integer векторами (уже обсуждали)
  5. date и date-time как надстройка над double векторами
  6. tibble - осовремененный data.frame
  7. синтаксис создания list-колонок в data.frame и tibble

https://adv-r.hadley.nz/subsetting.html

  1. x[] и оператор присваивания

https://adv-r.hadley.nz/functions.html

  1. еще раз про lazy evaluation
  2. оператор … (ellipsis, три точки)

https://adv-r.hadley.nz/environments.html

  1. про объекты типа environment; для эрудиции

Занятие 6:

r_iris:

  1. Функция data для загрузки встроенных данных
  2. Данные iris
  3. Функция aggregate
  4. Концепция split-apply-combine (https://vita.had.co.nz/papers/plyr.pdf - для исторического контекста, мы будем потом изучать более новые пакеты, чем plyr)
  5. Создание векторов с именованными элементами с помощью функции setNames
  6. do.call, передача произвольного количества аргументов в функцию с ellipsis-оператором
  7. Использование регулярных выражений в strsplit (ChatGPT в этом деле - отличный помощник; чтобы научиться писать регулярные выражения самостоятельно, есть отличный сайт: https://regexone.com)
  8. Рисование гистограмм, функция hist
  9. Работа с цветом, функция rgb, прозрачность
  10. Разбор аргументов из ellipsis-оператора; list(…)
  11. Оператор %in% для проверки наличия конкретных элементов в векторе
  12. Аргумент breaks функции hist; custom breaks
  13. Функция hist с параметром plot = FALSE; объект histogram; plot от объекта histogram
  14. Подробнее про функцию plot и рисование в целом; аргументы col, xlim, ylim, xlab, ylab, main
  15. Добавление графиков на текущее графическое устройство; add = TRUE в функциях для рисования
  16. Функция plot и рисование scatter plot’ов; как раскрашивать точки на scatter plot’ах в разные цвета
  17. Графические параметры и функция par
  18. Несколько графиков рядом, разбиение графического устройства на части с помощью параметра mfrow
  19. scatter matrix своими руками
  20. Функция legend

Дополнительное чтение на дом:

https://adv-r.hadley.nz/fp.html

https://adv-r.hadley.nz/functionals.html

https://adv-r.hadley.nz/function-factories.html

https://adv-r.hadley.nz/function-operators.html

Занятие 7:

r_iris2:

  1. Split-apply-combine, другой вариант через split, lapply и rbind
  2. Функция expand.grid; data.frame из комбинаций входящих в качестве аргументов векторов
  3. Функция split; физическое разделение data.frame‘а по значению в одной из колонок на список из data.frame’ов - get - нахождение объекта в environment’е по имени - Pipeline оператор |> - Изменение атрибутов в пайплайне на примере rownames - Функция density; plot от объекта типа density - Гистограммы и плотности на одном графике - Функция lines - Аргумент type функции plot; использование type = ’n’
  4. Функция polygon
  5. Функция pairs для рисования scatterplot матрицы

tracemem.R:

  1. tracemem и матрицы; присваивание значений элементам, строкам, столбцам и подматрицам in-place
  2. tracemem и data.frame’ы; копирование при изменении

r_gradient_method:

  1. contour, рисование линий уровня, данные volcano
  2. Поточечный поиск максимума в матрице, функция which с аргументом arr.ind = TRUE
  3. Функция двух переменных, векторизованный вариант
  4. Пакет rgl, рисование трехмерных графиков поверхностей и scatterplot’ов с помощью функции plot3d
  5. **Задание 7: градиентный метод для функции с двумя “скалярными” аргументами **
  6. Функция arrow, рисование пути градиентного метода стрелочками поверх линий уровня
  7. Градиентный метод для функции с одним векторным аргументом
  8. Самодельная функция для вычисления градиента; случаи, когда циклов не избежать
  9. Напоминание: добавление элементов в вектор в цикле; почему это плохо, когда на это можно не обращать внимания
  10. Самодельная версия expand.grid, которая возвращает матрицу, а не data.frame; аргументы times и each функции rep
  11. Библиотека numDeriv, пакетная функция grad для вычисления градиента
  12. Функция optim для нахождения минимума функции с векторным аргументом

r_gradient_method2_:

  1. Градиентный метод для функции с двумя “скалярными” аргументами; более продвинутая функция с возможностью выбора критерия остановки
  2. Использование ленивых вычислений для задания функции со значениями аргументов по умолчанию, использующими еще не определенные переменные
  3. Градиентный метод для функции с одним векторным аргументом; более продвинутая функция с возможностью выбора критерия остановки и способа вычисления градиента
  4. Сравнение количества итераций алгоритма для разных критериев остановки
  5. Сравнение пакетного, самописного и аналитически вычисленного градиента
  6. Изучение кода функции optim, правила хорошего тона при обработке аргументов в динамически типизированном языке внутри самописных функций, функции warning и stop для обработки исключений

Misc

  1. динамическая генерация кода и его исполнение с помощью функции eval
  2. optim, integrate
  3. Замечание про копирование при df[df[col] == col.val,]
  4. uniroot, multiroot
  5. градиентный метод руками и с помощью готовых функций

Домашние задания

Задание 1 Задание 2 Задание 3 Задание 4 Задание 5 Задание 6 Задание 7
Плоткин Глеб NA NA NA NA NA NA NA
Погребников Николай + + + + + + NA
Поликанин Евгений + + + + + + +
Симоненко Вадим + + + + + + +
Яковлев Денис + + + + + + +

Литература