大數據分析作業-怎麼從導演及演員判斷電影值不值得看?

首先,本文的數據下載自IMDB 5000 Movie Dataset From Kaggle

原作者爬取了IMDB 5000多條觀測數據,然後用回歸對IMDB各個電影的評分進行建模,作者的文章如下:

Predict Movie Rating - NYC Data Science Academy Blog

本文主要藉助該數據完成大數據分析第4講複雜數據和分析的作業,對該講的內容和知識點練練手。

導入相關包

library(ggplot2)library(stringr)library(dplyr)

數據導入

#當前項目運行根路徑#例如:G:/DataCruiser/workspace/IMDB AnalysisprojectPath <- getwd()#movie_metadata.csv路徑#例如G:/DataCruiser/workspace/IMDB Analysis/data/movie_metadata.csvservicePath <- str_c(projectPath, "data", "movie_metadata.csv", sep = "/")#導入數據movies <- read.csv(servicePath, header = T, stringsAsFactors = F)

導演與電影評分數據處理

disDirector <- function(){ #選擇子集 mymovies <- select(movies, title_year, imdb_score, director_facebook_likes, actor_1_facebook_likes) #列名重命名,等號左邊是新列名,右邊是就列名 mymovies <- rename(mymovies, year = title_year, scores = imdb_score, direcotrlikes = director_facebook_likes, actorlikes = actor_1_facebook_likes) #刪除缺失數據 mymovies <- filter(mymovies, !is.na(year), !is.na(scores), !is.na(direcotrlikes), !is.na(actorlikes)) #數據排序 mymovies <- arrange(mymovies, desc(year)) #數據計算:facebook上導演點贊數與相應導演所導的電影IMDB評分數之間的關係 disDirector <- mymovies %>% group_by(year) %>% summarise( count = n(), mean_scores = mean(scores, na.rm = TRUE), mean_likes = mean(direcotrlikes, na.rm = TRUE) ) %>% filter(count > 0) return(disDirector)}

演員與電影評分數據處理

disActor <- function(){ #選擇子集 mymovies <- select(movies, title_year, imdb_score, director_facebook_likes, actor_1_facebook_likes) #列名重命名,等號左邊是新列名,右邊是就列名 mymovies <- rename(mymovies, year = title_year, scores = imdb_score, direcotrlikes = director_facebook_likes, actorlikes = actor_1_facebook_likes) #刪除缺失數據 mymovies <- filter(mymovies, !is.na(year), !is.na(scores), !is.na(direcotrlikes), !is.na(actorlikes)) #數據排序 mymovies <- arrange(mymovies, desc(year)) #數據計算:facebook上一號演員點贊數與相應導演所導的電影IMDB評分數之間的關係 disActor <- mymovies %>% group_by(year) %>% summarise( count = n(), mean_scores = mean(scores, na.rm = TRUE), mean_likes = mean(actorlikes, na.rm = TRUE) ) %>% filter(count > 0) return(disActor)}

導演與評分圖形繪製

#導演評分散點圖directorView <- ggplot(data = disDirector) + geom_point(mapping = aes(x = mean_likes, y = mean_scores))+ geom_smooth(mapping = aes(x = mean_likes, y = mean_scores))

結果如下:

演員與評分圖形繪製

#演員評分散點圖actorView <- ggplot(data = disActor) + geom_point(mapping = aes(x = mean_likes, y = mean_scores))+ geom_smooth(mapping = aes(x = mean_likes, y = mean_scores))

結果如下:

結果保存

#保存分析結果outputpath <- str_c(projectPath,"output","movieScore vs direcetorLikes.jpg",sep="/")ggsave(filename=outputpath, plot=directorView)#保存分析結果outputpath <- str_c(projectPath,"output","movieScore vs actorLikes.jpg",sep="/")ggsave(filename=outputpath, plot=actorView)

結果分析

在假定IMDB評分高低決定著電影好壞的前提下,從對IMDB 5000多條的數據分析可以初步得到以下結論:

  1. 總體上看導演在facebook上面獲得的點贊數與電影的好壞呈現正相關,而一號演員在facebook獲得的點贊數與電影的好壞呈負相關,通過導演的好壞來判斷一部電影的好壞往往更加靠譜;

  2. 有一些非主流的導演雖然在facebook上獲得的點贊數不多,但是也不排除會拍出一些好電影的可能性。

需要說明一定的是,在對於count較少的數據這裡沒有剔除,如果設置不同的噪音門檻得出的結論略有不同,特別是演員的趨勢上,得出的結論會變化較大。

另外,本文的源碼以及輸出結果均已經上傳到:

jijiwhywhy/IMDB-Analysis

推薦閱讀:

用大數據精準預測地震,每年將有1.3萬人免於受難!
R和Python數據結構對比
一篇文章告訴你,該學R還是Python
第一份數據報告的誕生

TAG:R编程语言 | 数据分析 | IMDb |