Dyzzet|
C++ Data Science Алгоритмы Темы · Блог · YouTube
Анализ рейтингов сериалов

Небольшая практика по разведочному анализу данных (exploratory data analysis).

«Теория Большого взрыва» (The Big Bang Theory, 2007—2019)

Данные должны быть в формате CSV (comma-separated values):

season, episode, rating
     0,       1,    6.7
     1,       1,    8.3
     1,       2,    8.4
     1,       3,    7.8
     1,       4,    8.2
     1,       5,    8.0
   ...,     ...,    ...

Для начала расставим рейтинги серий в таблице и раскрасим ячейки в соответствии с ними, таким образом получим тепловую карту (heat map). На языке R это легко сделать с помощью функции heatmap.2, заодно она строит гистограмму.

heatmap.2(matrix,
    cellnote = matrix, notecol = "black",
    main = show.title, xlab = "Episodes", ylab = "Seasons",
    trace = "none", tracecol = "black",
    key = TRUE, key.title = NA, key.xlab = NA, key.ylab = NA,
    breaks = 0:10,
    dendrogram = "none", Colv = F, Rowv = F, scale = "none",
    col = colors,
    ColSideColors(c("black", "black")),
    labRow = levels(factor(df$season))
)

Хорошо видно, что сериал со временем посветлел и чаще стали появляться серии с низким рейтингом. В «нулевой» сезон попала не показанная официально пилотная серия без Раджа и Говарда, с другой актрисой в роли Пенни и некой подругой Леонарда.

Построим коробчатую диаграмму (box plot), по-другому — ящик с усами.

print(ggplot(df, aes(factor(season), rating)) +
    ylim(min(df$rating, na.rm = TRUE), max(df$rating, na.rm = TRUE)) +
    geom_boxplot() +
    labs(size = "", x = "Season", y = "Rating"))

Процентиль — такое значение, что \(p\) процентов принимает данное значение или меньшее. К примеру, медиана — это 50-й процентиль. Тогда легко понять принцип построения диаграммы: верхней границей коробки будет 75-й процентиль, нижней — 25-й, посередине — 50-й. «Усы» показывают размах, но в данном случае они не длиннее, чем полторы высоты коробки (она называется межквартильным размахом, interquartile range, IQR, встретится далее).

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

Скрипичный график (violin plot) показывает оценки плотности распределения. На нём видно больше нюансов, но коробчатая диаграмма лучше показывает выбросы.

print(ggplot(df, aes(factor(season), rating)) +
    ylim(min(df$rating, na.rm = TRUE), max(df$rating, na.rm = TRUE)) +
    geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) +
    labs(size = "", x = "Season", y = "Rating")
)

Давайте совместим их для сравнения.

Немного посчитаем. К счастью, на языке R это делается элементарно (df — кадр данных):

  • mean(df$rating) вычисляет среднее,
  • mean(df$rating, trim = 0.1) вычисляет усечённое среднее, то есть среднее после отсечения 10 процентов лучших и худших серий,
  • median(df$rating) вычисляет медиану,
  • sd(df$rating) вычисляет среднеквадратическое отклонение (standard deviation), то есть корень из дисперсии,
  • IQR(df$rating) вычисляет межквартильный размах (interquartile range),
  • mad(df$rating) вычисляет медианное абсолютное отклонение из медианы (median absolute deviation) по формуле \(median(|X_{i}-median(X)|)\); эта оценка менее чувствительна к выбросам, чем среднеквадратическое отклонение.
Mean: 7.88
Trimmed mean (0.1): 7.868
Median: 7.9
Standard deviation (SD): 0.514
Interquartile range (IQR): 0.7
Median absolute deviation (MAD): 0.593

«Детство Шелдона» (Young Sheldon, 2017—)

Приквел «Теории Большого взрыва», который пока продолжают снимать.

Mean: 7.772
Trimmed mean (0.1): 7.749
Median: 7.7
Standard deviation (SD): 0.273
Interquartile range (IQR): 0.3
Median absolute deviation (MAD): 0.148

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

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

print(ggplot(subset(df, show.title %in% shows.titles), aes(season, rating)) +
    stat_binhex(colour = "white", na.rm = TRUE, bins = 15) +
    theme_bw() +
    scale_fill_gradient(low = "slategray1", high = "blue", name = "Frequency") +
    facet_wrap(factor(df$show, levels = shows.titles)) +
    geom_density2d(colour = "black") +
    labs(size = "", x = "Season", y = "Rating") +
    scale_x_continuous(n.breaks = max(df$season))
)

Здесь стала ещё виднее тенденция к ухудшению сериала «Теория Большого взрыва», а вот у «Детства Шелдона» старт был хуже, но всё же лучше, чем последние сезоны «Теории». Движение вверх обнадёживает.

«Во все тяжкие» (Breaking Bad, 2008—2013)

Практически всегда очень высокие рейтинги, конец последнего сезона — 9,9. И после такого финала сезона они смогли сделать ещё один, более сильный (весь сезон «темнее», у 14 серии высочайший рейтинг).

Mean: 9.019
Trimmed mean (0.1): 9.022
Median: 8.9
Standard deviation (SD): 0.511
Interquartile range (IQR): 0.75
Median absolute deviation (MAD): 0.593

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

«Лучше звоните Солу» (Better Call Saul, 2015—)

Приквел сериала «Во все тяжкие», его ещё пока тоже снимают.

Mean: 8.862
Trimmed mean (0.1): 8.838
Median: 8.8
Standard deviation (SD): 0.428
Interquartile range (IQR): 0.5
Median absolute deviation (MAD): 0.445

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

Сравним и эти сериалы.

Заметно, что у сериала «Во все тяжкие» было два пика, причём второй выше первого. «Лучше звоните Солу» показывал небольшой рост до пятого сезона и резкий подъём в пятом. Складывается впечатление, что эти два графика будто бы продолжают друг друга. Исполнитель главной роли, Боб Оденкерк, переживал, что приквел окажется хуже, чем основной сериал, но эти переживания, очевидно, были напрасными.

«Игра престолов» (Game of Thrones, 2011—2019)

Ещё один сериал с толпами поклонников и печальным финалом.

Mean: 8.838
Trimmed mean (0.1): 8.983
Median: 8.9
Standard deviation (SD): 0.935
Interquartile range (IQR): 0.7
Median absolute deviation (MAD): 0.445

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

«Кремниевая долина» (Silicon Valley, 2014—2019)

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

Mean: 8.292
Trimmed mean (0.1): 8.27
Median: 8.2
Standard deviation (SD): 0.406
Interquartile range (IQR): 0.6
Median absolute deviation (MAD): 0.445

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

«Как я встретил вашу маму» (How I Met Your Mother, 2005—2014)

Лёгкий сериал о молодом человеке в поисках своей идеальной женщины и его друзьях. Продержался примерно с одинаковым успехом почти все сезоны.

Mean: 8.157
Trimmed mean (0.1): 8.172
Median: 8.1
Standard deviation (SD): 0.576
Interquartile range (IQR): 0.7
Median absolute deviation (MAD): 0.445

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

«Друзья» (Friends, 1994—2004)

Долгоиграющее шоу, на которое чем-то похож сериал «Как я встретил вашу маму». Десять сезонов с высоким рейтингом и редкими падениями.

Mean: 8.455
Trimmed mean (0.1): 8.435
Median: 8.4
Standard deviation (SD): 0.391
Interquartile range (IQR): 0.5
Median absolute deviation (MAD): 0.297

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

«Сайнфелд» (Seinfeld, 1989—1998)

Уже довольно старый сериал о комике Джерри Сайнфелде, которого в каком-то мультсериале назвали «президентом 90-х».

Mean: 8.385
Trimmed mean (0.1): 8.388
Median: 8.4
Standard deviation (SD): 0.428
Interquartile range (IQR): 0.6
Median absolute deviation (MAD): 0.445

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

«Клиника» (Scrubs, 2001—2010)

Многие фанаты отрицают существование девятого сезона.

Mean: 8.137
Trimmed mean (0.1): 8.205
Median: 8.15
Standard deviation (SD): 0.673
Interquartile range (IQR): 0.4
Median absolute deviation (MAD): 0.222

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

«Мир Дикого Запада» (Westworld, 2016—)

Фантастический сериал, продолжающий показывать высокий, хотя и постепенно снижающийся результат.

Mean: 8.6
Trimmed mean (0.1): 8.596
Median: 8.6
Standard deviation (SD): 0.513
Interquartile range (IQR): 0.7
Median absolute deviation (MAD): 0.519

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

«Викинги» (Vikings, 2013—)

Видно, что эта сага немного сдала в последних сезонах.

Mean: 8.237
Trimmed mean (0.1): 8.24
Median: 8.2
Standard deviation (SD): 0.551
Interquartile range (IQR): 0.8
Median absolute deviation (MAD): 0.593

Ссылки: коробчатая диаграмма, скрипичный график, совмещённые графики.

Приложение: исходный код.

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

Также может быть интересным
© MMXI—MMXXIII. RSS. Поддержать сайт
Светлая тема / тёмная тема