H0: нет значительной разницы в средних значениях бюджета и жанром фильма. H1: есть значительная разница в средних значениях бюджета и жанром фильма. Для того, чтобы ответить на этот вопрос, мы делаем следующее: Загружаем данные.
library(readr)
library(ggplot2)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidytext)
library(stringr)
library(tidyr)
movies <- read_csv("movie_info.csv")%>%dplyr::rename(movie_id = id)
## Warning: Duplicated column names deduplicated: 'id' => 'id_1' [7]
## Parsed with column specification:
## cols(
## .default = col_character(),
## id = col_integer(),
## year = col_integer(),
## budget = col_integer(),
## id_1 = col_integer(),
## popularity = col_double(),
## release_date = col_date(format = ""),
## revenue = col_double(),
## runtime = col_integer(),
## vote_average = col_double(),
## vote_count = col_integer()
## )
## See spec(...) for full column specifications.
ratings <- read_csv("ratings.csv")
## Parsed with column specification:
## cols(
## customer_id = col_integer(),
## rating = col_integer(),
## rating_date = col_date(format = ""),
## movie_id = col_integer(),
## movie_year = col_integer(),
## title = col_character()
## )
Приводим переменную жанр в нормальный вид и создаем новую.
movies$genres <- gsub('name', '', movies$genres)
movies$genres <- gsub('id', '', movies$genres)
movies$genres <- gsub('[0-9]', '', movies$genres)
movies.tokens <- movies %>%
unnest_tokens(movies.token, genres)
movies.tokens <- dplyr::rename(movies.tokens, genre = movies.token)
Затем создаем датасет, с которым будем работать
netflix <- movies.tokens %>% left_join(ratings)
## Joining, by = c("movie_id", "title")
Преобразуем переменные бюджет и жанр в количественную и категориальную соответсвенно, а также делим переменную бюджет на 1000000 для удобства.
netflix$budget1 = netflix$budget/1000000
netflix$budget1 <- as.numeric(netflix$budget1)
netflix$genre1 <- as.factor(netflix$genre)
Для того, чтобы посмотреть на распределение бюджета, создаем гистограмму, на которой видно, что средний бюджет фильма составляет 50000000 (красная линия), а медианное значение(черная линия) равняется 40000000.
hist(netflix$budget1, breaks = 20, col="#A9E2F3", main="Распределение бюджета", , xlab="Деньги") + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
## NULL
abline(v = mean(netflix$budget1), col = "red", lwd = 4)
abline(v = median(netflix$budget1), col = "black", lwd = 3)
Создаем боксплот, для того чтобы посмотреть, как распределяется бюджет в зависимости от жанра.
boxplot(budget1 ~ genre1 ,data=netflix, main="Распределение бюджета в зависимости от жанра фильма",
xlab="Жанр", ylab="Количество денег", horizontal = TRUE,
col=("darkgreen"))
Так как у нас больше 5000 наблюдений, нам не нужно проверять assumptions перед ANOVA, мы можем сразу выполнить тест.
res.aov <- aov(budget1 ~ genre1,data=netflix)
summary(res.aov)
## Df Sum Sq Mean Sq F value Pr(>F)
## genre1 21 6.304e+08 30018090 20459 <2e-16 ***
## Residuals 2470737 3.625e+09 1467
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Вывод: согласно ANOVA фильмы с разным жанром имеют значительную разницу в средних значениях бюджета ((F=20344, p-value = 0.2e-16)
Можем проверить результаты с помощью Kruskal test. Согласно тесту результаты ANOVA подтверждаются(p-value < 0.05)
kruskal.test(budget1 ~ genre1,data=netflix)
##
## Kruskal-Wallis rank sum test
##
## data: budget1 by genre1
## Kruskal-Wallis chi-squared = 302740, df = 21, p-value < 2.2e-16
К сожалению, я не могу интерпретировать результаты Tukey Post-hoc test, и более конкретно сказать, какие жанры имеют значительную разницу.
layout(matrix(1:1,2,2))
par(mar=c(6, 25, 3, 2))
plot(TukeyHSD(res.aov), las = 2)