Работа представляет собой экплораторный анализ данных на основе датасета о фильмах с сайта Netflix с привлечением дополнительных данных от пользователей сервиса. Главный датасет, c которым ведется работа, включает в себя следующие наиболее информативные переменные: title
, budget
, genre
, keywords
, overview
, popularity
, production country
, revenue
. Дополняют данные такие показатели как rating
и movie year
.
top_10_movies = movies_final %>% arrange(-rating) %>% top_n(10, rating)
ggplot(top_10_movies)+
geom_bar(aes(x = reorder(title, -rating), y = rating, fill = genre), stat = "identity", position = "dodge", color = "black")+
theme_bw()+
labs(title = "Топ 10 фильмов по агрегированному рейтингу пользователей\nс указанием жанра", x = "Название фильма", y = "Рейтинг, 0-5")+
coord_cartesian(ylim=c(4,4.5))+
scale_y_continuous(breaks = seq(4, 4.5, 0.05))+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Mожно сказать, что топовые позиции агрегированного рейтинга пользователей занимают фильмы довольно разных жанров, поэтому можно сделать вывод о том, что рекомендовать 1-2 “безпроигрышных” жанра - не получится. Также, топовая десятка фильмов по рейтингу находится в пределах [4.20, 4.35], что является достаточно маленькой вариацией и говорит об определенном успехе данных фильмов, которые, в свою очередь, могут быть рекомендованы к просмотру как “безпроигрышный” вариант в пределах своего жанра.
#нормализуем шкалу популярности(не особо помогает):
movies_final <- movies_final %>% mutate(popularity_norm = (popularity - mean(popularity)) / sd(popularity))
movies_final$popularity_norm = round(movies_final$popularity_norm, 2)
top_10_year <- movies_final %>% arrange(-popularity_norm) %>% top_n(10, popularity_norm)
ggplot(top_10_year)+
geom_bar(aes(x = reorder(title,popularity_norm), y = popularity_norm), stat = "identity", position = position_dodge(), color = "black")+
geom_label(aes(x = title, y = popularity_norm, label = movie_year))+
labs(title = "Топ 10 самых популярных фильмов\nс указанием года выпуска", y = "Популярность", x = "Название фильма")+
ylim(0,13)+
theme_bw()+
coord_flip()
Столбчатая диаграмма показывает, что десятка самых популярных фильмов была выпущена в период с 1950х до 2000х. Принимая во внимание тот факт, что старые фильмы могли получить непропорционально большее количество оценок за долго время их существования, нежели новые, мы всё равно можем говорить об их успехе, поскольку популярность является агрегированной метрикой. Тем не менее, возможно сделать предположение о том, что современные фильмы не менее популярны,учитывая временной период рилизов фильмов в датасете (1916-2005).
movies_budget <- movies_final %>% group_by(genre) %>% summarise(mean_budget = mean(budget, na.rm = T)) %>% arrange(-mean_budget) %>% top_n(10,mean_budget)
movies_budget$mean_budget = round(movies_budget$mean_budget, 1)
ggplot(movies_budget)+
geom_bar(aes(x = reorder(genre, -mean_budget), y = mean_budget),stat = "identity", color = "black")+
theme_bw()+
geom_label(aes(x = genre, y = mean_budget, label = mean_budget), vjust = -0.1, size = 2.5)+
theme(axis.ticks = element_blank(), axis.text.y = element_blank())+
labs(title = "Средний бюджет фильмов с определенным жанром", x = "Жанр фильма", y = "Бюджет")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Анимация, Вестерны и Приключения как правило получают самое большое финансирование, в то время как Мистика и Мелодраммы - намного меньшее. Вероятнее всего это связанно с наивысшим зрительским спросом на эти жанры, и поэтому, Анимацию,Вестерны и Приключения можно рекомендовать новым пользователям, о которых ещё не собрано никакой информации, поскольку вероятность, что пользователю понравятся фильмы этих жанров - довольно высокая, по сравнению с рандомной рекомендацией.
# Разбиваем слова из слоганов фильмов на токены
movies_keywords_tok <- movies_final %>%
unnest_tokens(words, key_words)
# Убираем стоп слова
enstopwords = data.frame(words = stopwords("en"),stringsAsFactors=FALSE)
movies_keywords_tok_nonstop = movies_keywords_tok %>%
anti_join(enstopwords)
# Убираем другие неинформативные слова
words_bad = c("film","based","director","of","on")
bad = movies_keywords_tok_nonstop %>% filter(words %in% words_bad)
# Финальный датасет с репрезентативными словами
movies_key = movies_keywords_tok_nonstop %>% anti_join(bad, by = "words")
movies_key %>% count(words, sort = TRUE) %>% top_n(10, n) %>%
ggplot(aes(x = reorder(words, n), y = n))+
geom_col(color = "black") +
labs(title = "Топ 10 наиболее распрострaненных ключевых\nслов по тематике фильма", y = "Частота", x = "Ключевое слово") +
coord_flip() +
scale_y_continuous(breaks = 0:60*5)+
theme_bw()
Как видно из графика, на практике чаще всего снимают про любовные отношения, независимость женщин, секретные убийства и школу :)
movies_key_rating = movies_key %>% group_by(words) %>% summarise(mean_rating = mean(rating)) %>% arrange(-mean_rating) %>% top_n(10, mean_rating)
formattable(movies_key_rating,
align =c("c","c"),
list(`Indicator Name` = formatter(
"span", style = ~ style(color = "grey",font.weight = "bold"))))
words | mean_rating |
---|---|
cannibalism | 4.307535 |
credits | 4.307535 |
psychological | 4.307535 |
thriller | 4.307535 |
carol | 4.302752 |
charles | 4.302752 |
dickens | 4.302752 |
lesson | 4.302752 |
scrooge | 4.302752 |
ealism | 4.284385 |
enemy | 4.284385 |
independence | 4.284385 |
revolt | 4.284385 |
tyranny | 4.284385 |
Оказывается, самые высокооцениваемые фильмы - это психологические триллеры про каннибализм, фильмы по мотивам Чарльза Дикенса и фильмы про независимость, но только уже не женщин, а народов (слово revolt и tyranny). Неожиданный поворот!
movies_overview <- movies_final %>%
unnest_tokens(words, overview)
# Убираем стоп слова
enstopwords = data.frame(words = stopwords("en"),stringsAsFactors=FALSE)
movies_overview_nonstop = movies_overview %>%
anti_join(enstopwords)
movies_overview_nonstop %>% count(words, sort = TRUE) %>% top_n(10, n) %>%
ggplot(aes(x = reorder(words, n), y = n))+
geom_col(color = "black") +
labs(title = "Топ 10 наиболее распростарненных\nслов в описании фильма", y = "Частота", x = "Ключевое слово") +
coord_flip() +
scale_y_continuous(breaks = 0:95*5)+
theme_bw()
Интересно, что самые частотные слова в описании сюжета едва ли следуют паттерну самых частотных ключевых слов. Стоит заметить, что слово “мужчина” входит в четверку самых частотных слов в описаниях, в то время как слово “женщина” (предыдущий график) - в тройке частотных только по ключевым словам, а в описании сюжета фигурирует не часто. Однако, слова “любовь” и “новый” занимают лидирующие позиции по частотности употребления в обоих случаях. Наконец, в описании сюжета чаще используют более позитивную лексику (“молодость”, “семья”), в то время как в ключевых словах достаточно часто фигурируют “убийство” и “наркотики/лекарства”.
Данный анализ был направлен на выявление основных характеристик данныx о фильмах.
Во-первых, пользователи располагают довольно разнообразным вкусом, и поэтому не стоит делать упор на идею рекомендации 1-2 самых популярных жанров.
Во-вторых, существует несколько фильмов, которые можно безпроигрышно рекомендовать в качестве “золотой классики”, но в общем и целом самые популярные фильмы были сняты в конце 1990-х и начале 2000-х. С учетом того, что данный датасет содержит фильмы с 1916 по 2005 годы выпуска, можно сделать вывод, что пользователи ценят как старые, так и современные фильмы.
В-третьих, агрегированная статистика по данным показывает, что Анимация, Вестерны и Приключения являются самыми высокофинансируемыми фильмами. Вероятно, именно на эти жанры есть большой зрительский спрос.
Наконец, следует отметить, что существую смысловые различия между словами, которые наиболее часто употребляются в ключевых словах фильма и описании. Например, в описании чаще всего фигурирует слова “мужчина”, в то время как тэги с ключевыми словами чаще отмеают слово “женщина”.