大數據分析作業-怎麼從導演及演員判斷電影值不值得看?
首先,本文的數據下載自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多條的數據分析可以初步得到以下結論:
- 總體上看導演在facebook上面獲得的點贊數與電影的好壞呈現正相關,而一號演員在facebook獲得的點贊數與電影的好壞呈負相關,通過導演的好壞來判斷一部電影的好壞往往更加靠譜;
- 有一些非主流的導演雖然在facebook上獲得的點贊數不多,但是也不排除會拍出一些好電影的可能性。
需要說明一定的是,在對於count較少的數據這裡沒有剔除,如果設置不同的噪音門檻得出的結論略有不同,特別是演員的趨勢上,得出的結論會變化較大。
另外,本文的源碼以及輸出結果均已經上傳到:
jijiwhywhy/IMDB-Analysis
推薦閱讀:
※用大數據精準預測地震,每年將有1.3萬人免於受難!
※R和Python數據結構對比
※一篇文章告訴你,該學R還是Python
※第一份數據報告的誕生