王 S 聰想要在海外開拓萬 D 電影的市場,這次他在考慮:怎么拍商業電影才 能賺錢?畢竟一些制作成本超過 1 億美元的大型電影也會失敗。這個問題對電影 業來說比以往任何時候都更加重要。 所以,他就請來了你(數據分析師)來幫 他解決問題,給出一些建議,根據數據分析一下商業電影的成功是否存在統一公 式?以幫助他更好地進行決策。
解決的終極問題是:電影票房的影響因素有哪些?
接下來我們就分不同的維度分析:
• 觀眾喜歡什么電影類型?有什么主題關鍵詞?
• 電影風格隨時間是如何變化的?
• 電影預算高低是否影響票房?
• 高票房或者高評分的導演有哪些?
• 電影的發行時間最好選在啥時候?
• 拍原創電影好還是改編電影好?
本次使用的數據來自於 Kaggle 平台(TMDb 5000 Movie Database)。收錄了 美國地區 1916-2017 年近 5000 部電影的數據,包含預算、導演、票房、電影評 分等信息。原始數據集包含 2 個文件:
• tmdb_5000_movies:電影基本信息,包含 20 個變量
• tmdb_5000_credits:演職員信息,包含 4 個變量
請使用 Python 編程,完成下列問題:
(1)使用附件中的 tmdb_5000_movies.csv 和 tmdb_5000_credits.csv 數據集,進 行數據清洗、數據挖掘、數據分析和數據可視化等,研究電影票房的影響因素有 哪些?從不同的維度分析電影,討論並分析你的結果。
(2)附件 tmdb_1000_predict.csv 中包含 1000 部電影的基本信息,請你選擇 合適的指標,進行特征提取,建立機器學習的預測模型,預測 1000 部電影的 vote_average 和 vote_count,並保存為 tmdb_1000_predicted.csv。
————————————————————————————————————————————————————————————————
1.pandas數據導入
movies = pd.read_csv('tmdb_5000_movies.csv', encoding='utf_8') credits = pd.read_csv('tmdb_5000_credits.csv', encoding='utf_8') # 查看信息 movies.info() credits.info()
導入結果:
tmdb_5000_credits.csv表
release_date缺失一條數據;runtime缺失兩條數據,共有數據4803條。
合並表,刪除重復列與不需要的列
(1)刪除重復列:credits.title、movies. original_title
del credits['title'] del movies['original_title']
(2)合並表
merged = pd.merge(movies, credits, left_on='id', right_on='movie_id', how='left')
(3)刪除不需要的字段
df=merged.drop(['homepage','overview','spoken_languages','status','tagline','movie_id'],axis=1)
(4)查看結果
df.info()
release_date缺失一條數據;runtime缺失兩條數據。
2.數據補全
查找缺失記錄
# 查找缺失值記錄-release_date var = df[df.release_date.isnull()] print(var.title) # 查找缺失值記錄-runtime var = df[df.runtime.isnull()] print(var.title)
缺失發布日期的電影為
《America Is Still the Place》
缺失時長的兩部電影為
《Chiamatemi Francesco - Il Papa della gente》
《To Be Frank, Sinatra at 100》
補全數據
df['release_date'] = df['release_date'].fillna('2014-06-01') df.loc[2656] = df.loc[2656].fillna('94, limit=1') df.loc[4140] = df.loc[4140].fillna('240, limit=1') df.info()
3.重復值處理
print(len(df.id.unique()))
有4803個不重復id,與數據總數一致,可以認為無重復數據
4.日期值處理
df['release_year'] = pd.to_datetime(df.release_date, format = '%Y-%m-%d',errors='coerce').dt.year df['release_month'] = pd.to_datetime(df.release_date).apply(lambda x: x.month) df['release_day'] = pd.to_datetime(df.release_date).apply(lambda x: x.day) df.info() print(df['release_year'],df['release_month'],df['release_day'])
查看運行結果
5.篩選數據
票房、預算、受歡迎程度、評分為0的數據應該去除
評分人數過低的電影,評分不具有統計意義,篩選評分人數大於50的數據
df = df[(df.vote_count >= 50) &(df.budget * df.revenue * df.popularity * df.vote_average !=0)].reset_index(drop = 'True') df.info()
運行結果
剩下2961條樣本
博客園字數限制,太長了,接下一篇
—————————————————————————————————————————————————————————————————————————————————————————————
相關:
觀影大數據分析(上) - Arisf - 博客園 (cnblogs.com)