Экзамен по курсу “Основы программирования в R”

Алла Тамбовцева

Задание 1

Политолог Мебейн (Walter R. Mebane) считает, что большая доля избирательных участков со значениями явки, заканчивающихся на 0 или 5, свидетельствует о фальсификациях результатов выборов. Аргументирует он это чисто психологическими причинами: если значения явки сочиняют люди, то они более склонны записывать круглые числа и числа, кратные 5.

Перед Вами вектор значений явки на избирательных участках в районе F страны Флатландии:

turnout <- c(100, 124, 121, 130, 150, 155, 144, 132, 189, 145, 125, 110, 118, 129, 127)
  1. (1 балл) Выведите на экран индексы избирательных участков, где явка, согласно Мебейну, выглядит подозрительной (значения явки, кратные 10 или 5).

  2. (1 балл) Определите долю таких подозрительных участков, выразите ее в процентах и округлите ответ до второго знака после запятой.

В заданиях 2-4 Вы будете работать с базой данных, которая посвящена выступлениям TED (сокращенная версия базы с Kaggle).

  • comments - число комментариев;

  • description - описание выступления;

  • duration - продолжительность видео в секундах;

  • event - название мероприятия;

  • main speaker - главный спикер;

  • title - название;

  • occupation - профессия/статус спикера.

Задание 2

  1. (1 балл) Загрузите файл TED.csv.

  2. (1 балл) Сколько видеозаписей выступлений в датасете? Сколько переменных в датасете? Приведите код для ответов на вопросы и запишите ответ в виде комментария.

  3. (1 балл) Сколько в датасете строк, содержащих пропущенные значения? Приведите код для ответа на вопрос и запишите ответ в виде комментария.

  4. (1 балл) Удалите из датасете строки с пропущенными значениями (если они есть).

  5. (1 балл) Выведите описательные статистики для всех переменных в датафрейме.

Задание 3

Все необходимые действия должны быть выполнены с помощью библиотеки dplyr.

  1. (2 балла) Сгруппируйте все наблюдения в соответствии со значениями переменной event. Сколько в базе данных выступающих на каждом мероприятии? Приведите код.

  2. (2 балла) Добавьте в базу данных переменную duration_hour - продолжительность видео в часах. Добавьте в базу переменную comm, которая принимает значение 0, если комментариев к видео меньше 500, и значение 1, если комментариев не менее 500.

  3. (3 балла) Чего в базе данных больше: видео, у которых комментариев больше 800 или видео, у которых продолжительность менее 100 секунд? Приведите код и ответ на вопрос в виде комментария.

  4. (3 балла) Чего в базе данных больше: выступлений с более 100 комментариями, которые готовили активисты (занятость Activist) или выступлений с менее 400 комментариями, которые готовили представители социальных наук (занятость Social scientist)? Приведите код и ответ на вопрос в виде комментария.

  5. (3 балла) Постройте (необязательно с помощью ggplot2) график, который бы показывал распределение показателя comments. Поменяйте цвет, подпишите оси и дайте название графику.

Задание 4 (6 баллов)

Отберите в новый датафрейм df1 три самых «объемных» мероприятия (events с наибольшим числом видео). Постройте с помощью библиотеки ggplot2 скрипичные диаграмы (violin plots) для показателя число комментариев (comments) так, чтобы все диаграммы были в пределах одного графика, но график для каждого мероприятия был в отдельном окне. Дайте название графику, подпишите оси.

Задание 5 (5 баллов)

Дан вектор явки (в процентах).

turnout <- c(17.5, 32, 64, 78, 69, 82, 90, 42, 146, 123, 98, 16)

Напишите код, который делает следующее. До тех пор, пока значение явки не превышает 100 процентов, R выводит на экран значение явки, но если значение больше 100, R сразу останавливается, пишет “Are you sure?” и дальше ничего не делает (то есть перестает выводить значения на экран).

Задание 6 (5 баллов)

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

```
BMI = m / h^2, где m - масса тела в килограммах, h - рост в МЕТРАХ
```

Задание 7 (4 балла)

Напишите функцию dante(), которая выводит на экран вопрос “В каком круге Ада по Данте находится Платон?”, сохраняет ответ пользователя, введенный с клавиатуры, и если ответ верный (принимаются ответы Лимб, первый и 1), то выводит на экран сообщение “Верный ответ!”, если нет – выводит сообщение “Неверно. Перечитайте Данте!”.

Задание 8 (4 балла)

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

  • ФИО депутата (name);
  • пол депутата (gender);
  • партия (party).

Посмотреть на саму страницу (в сверстанном виде) можно здесь:

https://www.w3schools.com/code/tryit.asp?filename=FSHGYZTU2PBH.

Ссылка на html-файл.

Подсказка: на вход функциям для парсинга html-страницы можно подавать не только ссылки на страницу, но и название html-файла или путь к нему. При необходимости добавьте опцию encoding=UTF-8 для кодировки.

Задание 9 (6 баллов)

Напишите функцию get_info(), которая принимает на вход ссылку на персональную страницу преподавателя ВШЭ, и возвращает список (list), содержащий следующие элементы:

  • ФИО преподавателя.
  • Научно-педагогический стаж (лет).
  • Языки, которыми владеет преподаватель (в виде вектора из строк).
  • Курсы, которые читает преподаватель (в виде вектора из строк).