저자 책 웹페이지: https://dataninja.me/ipds-kr/

일단은 필수패키지인 tidyverse를 로드하자. (로딩 메시지를 감추기 위해 suppressMessages() 명령을 사용.)

# install.packages("tidyverse")
suppressMessages(library(tidyverse))

1. (IMDB 자료 시각화)

캐글 웹사이트에서 다음 IMDB(Internet Movie Database) 영화 정보 데이터를 다운로드하도록 하자 (https://goo.gl/R08lpm 혹은 https://www.kaggle.com/deepmatrix/imdb-5000-movie-dataset, 무료 캐글 계정이 필요하다).

데이터에 대해서는 3장 연습문제 해답을 참조하자. http://rpubs.com/dataninja/ipds-kr-solutions-ch03

데이터 zip 파일을 다운로드한 후, R로 자료를 읽어들이자:

df2 <- read_csv("imdb-5000-movie-dataset.zip", guess_max = 1e6)
## Parsed with column specification:
## cols(
##   .default = col_integer(),
##   color = col_character(),
##   director_name = col_character(),
##   actor_2_name = col_character(),
##   genres = col_character(),
##   actor_1_name = col_character(),
##   movie_title = col_character(),
##   actor_3_name = col_character(),
##   plot_keywords = col_character(),
##   movie_imdb_link = col_character(),
##   language = col_character(),
##   country = col_character(),
##   content_rating = col_character(),
##   budget = col_double(),
##   imdb_score = col_double(),
##   aspect_ratio = col_double()
## )
## See spec(...) for full column specifications.

a. 이 데이터는 어떤 변수로 이루어져 있는가?

df2 %>% glimpse()
## Observations: 5,043
## Variables: 28
## $ color                     <chr> "Color", "Color", "Color", "Color", ...
## $ director_name             <chr> "James Cameron", "Gore Verbinski", "...
## $ num_critic_for_reviews    <int> 723, 302, 602, 813, NA, 462, 392, 32...
## $ duration                  <int> 178, 169, 148, 164, NA, 132, 156, 10...
## $ director_facebook_likes   <int> 0, 563, 0, 22000, 131, 475, 0, 15, 0...
## $ actor_3_facebook_likes    <int> 855, 1000, 161, 23000, NA, 530, 4000...
## $ actor_2_name              <chr> "Joel David Moore", "Orlando Bloom",...
## $ actor_1_facebook_likes    <int> 1000, 40000, 11000, 27000, 131, 640,...
## $ gross                     <int> 760505847, 309404152, 200074175, 448...
## $ genres                    <chr> "Action|Adventure|Fantasy|Sci-Fi", "...
## $ actor_1_name              <chr> "CCH Pounder", "Johnny Depp", "Chris...
## $ movie_title               <chr> "Avatar ", "Pirates of the Caribbean...
## $ num_voted_users           <int> 886204, 471220, 275868, 1144337, 8, ...
## $ cast_total_facebook_likes <int> 4834, 48350, 11700, 106759, 143, 187...
## $ actor_3_name              <chr> "Wes Studi", "Jack Davenport", "Step...
## $ facenumber_in_poster      <int> 0, 0, 1, 0, 0, 1, 0, 1, 4, 3, 0, 0, ...
## $ plot_keywords             <chr> "avatar|future|marine|native|paraple...
## $ movie_imdb_link           <chr> "http://www.imdb.com/title/tt0499549...
## $ num_user_for_reviews      <int> 3054, 1238, 994, 2701, NA, 738, 1902...
## $ language                  <chr> "English", "English", "English", "En...
## $ country                   <chr> "USA", "USA", "UK", "USA", NA, "USA"...
## $ content_rating            <chr> "PG-13", "PG-13", "PG-13", "PG-13", ...
## $ budget                    <dbl> 237000000, 300000000, 245000000, 250...
## $ title_year                <int> 2009, 2007, 2015, 2012, NA, 2012, 20...
## $ actor_2_facebook_likes    <int> 936, 5000, 393, 23000, 12, 632, 1100...
## $ imdb_score                <dbl> 7.9, 7.1, 6.8, 8.5, 7.1, 6.6, 6.2, 7...
## $ aspect_ratio              <dbl> 1.78, 2.35, 2.35, 2.35, NA, 2.35, 2....
## $ movie_facebook_likes      <int> 33000, 0, 85000, 164000, 0, 24000, 0...

b. 시각화를 통해 다음 질문에 답해보자

(분석 예는 https://goo.gl/pYPzvi 에서 찾을 수 있다 아쉽게도 원링크 https://www.kaggle.com/adhok93/d/deepmatrix/imdb-5000-movie-dataset/eda-with-plotly 는 삭제되었습니다)

i. 연도별 리뷰받은 영화의 편수는?

df2 %>%
  group_by(title_year) %>%
  summarize(n_movies=n()) %>% 
  ggplot(aes(title_year, n_movies)) + geom_point() + geom_line()
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_path).

ii. 연도별 리뷰평점의 변화는?

df2 %>%
  group_by(title_year) %>%
  summarize(avg_imdb_score = mean(imdb_score)) %>%
  ggplot(aes(title_year, avg_imdb_score)) + geom_point() + geom_line()
## Warning: Removed 1 rows containing missing values (geom_point).
## Warning: Removed 1 rows containing missing values (geom_path).

평균 점수는 점점 낮아지고 있음을 볼 수 있다.

(고급 분석: 이러한 평균 점수의 하락 추세의 원인은 무엇일까?)

iii. 영상물 등급(content_rating)에 따라서 리뷰평점의 분포에 차이가 있는가?

우선 등급의 분포부터 살펴보자:

df2 %>%
  ggplot(aes(content_rating)) + geom_bar()