觀影大數據分析(上)


  王 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)

觀影大數據分析(中) - Arisf - 博客園 (cnblogs.com)

觀影大數據分析(下) - Arisf - 博客園 (cnblogs.com)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM