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)