透過 Kaggle datasets 上面提供的資料 — Netflix Movies and TV Shows,影片分為電影與影集兩類,提供的影片資訊包含 title、type、director、country、release_year、duration、description
Movie、TV show 佔比
pie_df = netflix_data.groupby('type', axis=0).count()
pie_df['title'].plot(kind='pie',
figsize=(8,8),
autopct='%1.1f%%',
pctdistance=0.5,
explode=(0.1,0),
fontsize=15,
colors=maincolors,
labels=["Movie", "TV Show"])
影片製作國家排名
許多人訂閱 Netflix 就是為了快樂追美劇,美國製作的影片數量穩坐第一,最近很紅的《后翼棄兵》 The queen’s gambit、《同學麥娜絲》 Classmates Minus,或是經典美劇 《六人行》 Friends,都十分受到觀眾的青睞。
( 個人小猜測~有些想學英文的人會透過美劇以輕鬆、生活化的方式學習,全世界龐大的英文學習人數會不會是促進美國影視產業發展的推動力之一?)
第二名的國家 — 印度,寶萊塢是印度影視產業發展的重要城市,平均每天有 3 部新片,以電影呈現印度獨特的文化,歌舞、宗教、種姓制度,例如《三個傻瓜》、《心中的小星星》。
bar_df["title"][:10].plot(kind='bar',
figsize=(7,7),
color = maincolors[0],
fontsize=15)
plt.xlabel("Country", fontsize=15)
plt.ylabel("Number of Country", fontsize=15)
IMDB 電影排行
加入 IMDb movies extensive dataset 的資料,以 innerjoin 的方式將兩個資料合在一起,分析 Netfilx 電影在影片評論網站的排名
joint_data=imdb_data.merge(netflix_data,left_on='Title',right_on='title',how='inner')
joint_data = joint_data.sort_values(by='Rating', ascending=False)
joint_data['release_year'].astype('int64', copy=False)
joint_data = joint_data[joint_data['release_year'] > 2015]
ranking_data = joint_data[:10][["Title", "Rating", "Genre", "director"]]
多加一個條件 release_year > 2015
第一名的電影 Ani… Dr. Kashinath Ghanekar (…不是太長省略,電影名稱真的是長這樣),2018 年的印度電影,Kashinath Ghanekar 是一名牙科醫生也是一位電影巨星,電影主要是講述他的身平故事。
WordCloud
影片各自出現在哪些分類中,以分類出現的頻率高低產生圖片
分類數量統計,前三名為 International, Comedies, Independent,在上圖的 WordCloud 中可看出這些單字比較明顯。
wordcloud = WordCloud(max_words=1000000,background_color="white", colormap="Blues",mask=mask, collocations=False).generate(text)
plt.imshow(wordcloud,interpolation="bilinear")
電影時長
以十分鐘為一個間隔計算,影片數量最多的是 90 分鐘,共有 1198部。
大多數的電影時長落在80–120 分鐘,主要有三個原因:
- 大腦保持高度專注力的極限大約是兩個小時
- 人類生理需求
一場兩小時的電影結束,廁所就會出現排隊人潮 - 電影票價與成本之間的平衡
不論是拍攝成本還是電影院的成本都會隨著片長提升而增加
fig, ax = plt.subplots(figsize=(10,6))
ax.plot(x_data, count_data, color=maincolors[0], marker='o', linestyle='solid', linewidth=2, markersize=5)
ax.set_xlabel("mins")
ax.set_ylabel("Count")
ax.set_title("Duration", fontsize=20)
影片推薦演算法
簡單介紹一下 TF-IDF 演算法,TF (term frequency)單詞出現的頻率,單字出現在影片描述中的頻率高,就能獲得較高的分數。而 IDF (inverse document frequency) 是為了解決有些單詞出現頻率高,但是重要度低的問題,所以當同一個單字出現在越多部影片中,這個字的分數越低,出現在較少部影片中,則獲得較高的分數。例如:「這是一部關於金融犯罪的電影」,很多電影介紹都會出現「這是、電影」這些詞,獲得較低的分數,「金融犯罪」只會出現在相關種類的電影介紹中,獲得較高的分數。
TF-IDF 演算法得到 tfidf_matrix,表示每部電影描述中不同單字的重要性高低,以 tfidf_matrix 資料計算 cosine similarity ,根據電影描述來判斷不同影片的相似程度。
# TFIDF algorithm
tfidf = TfidfVectorizer()
netflix_data['description'] = netflix_data['description'].fillna('')
tfidf_matrix = tfidf.fit_transform(netflix_data['description'])
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)def get_recommendations(title, cosine_sim=cosine_sim):
idx = indices[title]
sim_scores = list(enumerate(cosine_sim[idx]))
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
sim_scores = sim_scores[1:11]
movie_indices = [i[0] for i in sim_scores]
return netflix_data.iloc[movie_indices]
輸入喜歡的影集名字到 get_recommendations function,就會輸出推薦的相關影片哦!
文中只有放部分程式碼,完整的包含資料處理、轉換等等
Github: Netflix analysis