天天看點

netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

目錄

介紹

導入庫

讀取資料

檢視資料

資料可視化

 電影與電視的對比

哪些月份添加影視資源到netfix的最多

電影适合觀看的年齡級别

釋出電影最多的15個年份

電影制作最多的10個國家

電影時長分析

電影類型詞雲圖

各電影類型統計

 釋出電視劇最多的15個年份

電視劇制作最多的10個國家

季數最長的10個電視劇

根據電影名推薦

介紹

   netfix影視資源項目主要通過Python進行資料預處理,分析netfix上釋出電影、電視資源的對比情況,制作電影、電視最多的年份、國家,以及生成電影類型的詞雲圖,影視資源的關聯推薦等。

   資料集

導入庫

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import os
import plotly.express as px
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
from PIL import Image
from datetime import datetime
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.simplefilter('ignore')
from collections import Counter
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import linear_kernel
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
           

讀取資料

df=pd.read_csv('netflix_titles.csv')
           

檢視資料

df.info()
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化
  • 缺失值:director,cast,country,date_added,rating
df.describe()
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化
df.describe(include='object')
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化
data_movie=df[df['type']=='Movie']#電影
data_tv=df[df['type']=='TV Show']#電視
           

資料可視化

 電影與電視的對比

grouped_type=df.groupby(['type'])
data_type=grouped_type.count().show_id
px.bar(data_type,x=data_type.index,y=data_type.values)
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

哪些月份添加影視資源到netfix的最多

df.isna().sum()
data_date_added=DataFrame([])
data_date_added['date_added']=df['date_added'].dropna()
data_date_added.date_added=data_date_added.apply(lambda x:pd.to_datetime(x))
data_date_added['year']=data_date_added.date_added.dt.year
data_date_added['month']=data_date_added.date_added.dt.month
grouped_date=data_date_added.groupby(['year','month']).count()
grouped_date.reset_index(inplace=True)
grouped_date.rename(columns={'date_added':'count_num'},inplace=True)
pivot_date=grouped_date.pivot_table(index='month',columns='year',values='count_num',fill_value=0)
pivot_date
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負号
plt.figure(figsize=[15,15])
sns.heatmap(pivot_date,annot=True,linewidths=.5,cmap="YlGnBu")
plt.title('每個月份添加影視資源到netfix的數量',fontsize=22)
plt.xlabel('年份',fontsize=18)
plt.ylabel('月份',fontsize=18)
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化
  • 每年的9月份到次年的1月份添加影視資源較多
  • 2017年以後添加影視資源較多

電影适合觀看的年齡級别

data_rating=data_movie.groupby('rating').count().loc[:,'show_id'].reset_index()
data_rating.sort_values('show_id',ascending=False,inplace=True)
plt.figure(figsize=[8,15])
px.bar(data_rating,x='rating',y='show_id',labels={'show_id':'count_num'},text='show_id',title='電影适合觀看的年齡級别')
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

釋出電影最多的15個年份

plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負号
plt.figure(figsize=[12,10])
sns.set(style='darkgrid')
sns.countplot(data=data_movie,y='release_year', order=data_movie['release_year'].value_counts().index[0:15])#取釋出年份最多的15條資料
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

2018年釋出的資源最多,2017,2019, 2016, 2020年釋出的資源也較多

電影制作最多的10個國家

data_movie.isna().sum()
data_country=DataFrame([])
data_country['country']=data_movie.country.fillna('unknow')
data_country.country.value_counts()
data_country['country_name']=data_country.country.apply(lambda x: x.split(',')[0])
plt.figure(figsize=[12,16])
sns.countplot(data=data_country,y='country_name',order=data_country['country_name'].value_counts().index[0:10])
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負号
plt.title('電影制作最多的10個國家')
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

電影時長分析

data_movie.duration.apply(lambda x: x.split(' ')[1]).value_counts()
data_movie['duration_min']=data_movie.duration.apply(lambda x: int(x.split(' ')[0]))
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負号
plt.figure(figsize=[12,10])
data_movie.duration_min.plot(kind='kde',label='電影時長(分)')
plt.xlabel('電影時長(分)',fontsize=15)
plt.title('電影時長分析')
plt.legend(loc='best')
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

netfix上的電影普遍在90-120分鐘左右

電影類型詞雲圖

listed_in_list=list(data_movie.listed_in)
gen=[]
for i in listed_in_list:
    gen.extend(i.split(', '))
g=Counter(gen)
text=list(set(gen))

%matplotlib inline
plt.figure(figsize=[10,14])
wordcloud=WordCloud(max_words=10000,background_color="white").generate(str(text))
plt.imshow(wordcloud,interpolation="bilinear")
plt.axis("off")
plt.title('電影類型',fontsize=20)
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

各電影類型統計

g_df=DataFrame({'category':list(g.keys()),'count of movies':list(g.values())})
g_df.sort_values('count of movies',ascending=False,inplace=True)
g_df.reset_index(drop=True,inplace=True)
plt.figure(figsize=(50,20))
sns.barplot(data=g_df,x='category',y='count of movies')
# plt.rcParams["axes.labelsize"] = 40
# plt.rcParams["ytick.labelsize"] = 35
# plt.rcParams["xtick.labelsize"] = 35
plt.xticks(rotation=60,fontsize=40)
plt.yticks(fontsize=40)
plt.xlabel(xlabel='category',fontsize=50)
plt.ylabel(ylabel='count of movies',fontsize=50)
plt.title('各電影類型統計',fontsize=55)
plt.show()
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

出現較頻繁的電影類型有International Movies ,Dramas,Comedies

 釋出電視劇最多的15個年份

plt.figure(figsize=[12,10])
sns.set(style='darkgrid')
sns.countplot(data=data_movie,y='release_year', order=data_tv['release_year'].value_counts().index[0:15])#取釋出年份最多的15條資料
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負号
plt.title(r'釋出電視劇最多的15個年份')
plt.show()
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

2019,2018,2017,2016年電視劇釋出的最多。

電視劇制作最多的10個國家

data_tv.isna().sum()
data_country=DataFrame([])
data_country['country']=data_tv.country.fillna('unknow')
data_country.country.value_counts()
data_country['country_name']=data_country.country.apply(lambda x: x.split(',')[0])
data_country['country_name'].value_counts()

plt.figure(figsize=[12,16])
sns.countplot(data=data_country,y='country_name',order=data_country['country_name'].value_counts().index[0:10])
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負号
plt.title('電視劇制作最多的10個國家')
plt.show()
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

美國制作的電視劇最多

季數最長的10個電視劇

data_tv.duration.isna().sum(),data_tv.title.isna().sum()
data_tv.duration.value_counts()
data_tv_duration=data_tv[['title','duration']]
data_tv_duration.duration=data_tv_duration.duration.str.replace(' Seasons','')
data_tv_duration.duration=data_tv_duration.duration.str.replace(' Season','')
data_tv_duration.duration=data_tv_duration.duration.apply(lambda x:int(x))
duration_top10=data_tv_duration.sort_values(by='duration',ascending=False)[:10]

plt.figure(figsize=[26,18])
duration_top10.plot(kind='bar',x='title',y='duration',fontsize=12)
plt.title('季數最長的10個電視劇',fontsize=20)
plt.xticks(rotation=60)
plt.xlabel('電視劇')
plt.ylabel('季數')
plt.show()
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

根據電影名推薦

tfidf = TfidfVectorizer(stop_words='english')
tfidf_matrix =tfidf.fit_transform(df['description'])
tfidf_matrix.shape
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)
indices = pd.Series(df.index, index=df['title']).drop_duplicates()

def get_recommendations(title, cosine_sim=cosine_sim):
    idx = indices[title]

    # Get the pairwsie similarity scores of all movies with that movie
    sim_scores = list(enumerate(cosine_sim[idx]))

    # Sort the movies based on the similarity scores
    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)

    # Get the scores of the 10 most similar movies
    sim_scores = sim_scores[1:11]

    # Get the movie indices
    movie_indices = [i[0] for i in sim_scores]

    # Return the top 10 most similar movies
    return df['title'].iloc[movie_indices]

get_recommendations('Psychokinesis')
           
netfix影視資源資料分析 介紹導入庫讀取資料檢視資料資料可視化

繼續閱讀