背景介紹
Netflix是最受歡迎的媒體和視頻流平臺之一。他們的平臺上有超過 8000 部電影或電視節(jié)目。截至 2021 年年中,他們在全球擁有超過 2 億訂閱者。
博主看美劇也較為多,像《怪奇物語》、《性愛自修室》等高分美劇都是網(wǎng)飛的。
對于網(wǎng)飛的影視劇,我們可以分析其電影和電視劇的成分占比,發(fā)行年份、國家,影視劇類型,收視率,簡介關(guān)鍵詞等,進行一定程度的描述性統(tǒng)計及其可視化。從而可以得到哪些類型影視劇更受歡迎,哪些國家發(fā)行影視劇更多等等結(jié)論。
注:(本文不涉及高級復(fù)雜的數(shù)學(xué)模型,主要的核心是數(shù)據(jù)的描述性分析和可視化。)?
關(guān)于數(shù)據(jù)集介紹
此表格數(shù)據(jù)集來源kaggle,包含 Netflix 上可用的所有電影和電視節(jié)目的列表,以及演員、導(dǎo)演、評級、發(fā)行年份、持續(xù)時間等詳細(xì)信息。
不方便的同學(xué)可以參考這個獲取數(shù)據(jù)集:網(wǎng)飛數(shù)據(jù)。
數(shù)據(jù)讀取和清洗
導(dǎo)入數(shù)據(jù)分析常用的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams ['font.sans-serif'] ='SimHei' #顯示中文
plt.rcParams ['axes.unicode_minus']=False #顯示負(fù)號
下面讀取數(shù)據(jù)集轉(zhuǎn)化為pandas數(shù)據(jù)框?qū)ο?,刪除所有值都為空白的列,把第一列節(jié)目標(biāo)號設(shè)置為索引,查看數(shù)據(jù)前五行
df=pd.read_csv('netflix_titles.csv',encoding='ANSI').dropna(how='all',axis=1).set_index('show_id')
df.head()
可以看到主要都是文本類型數(shù)據(jù)。
?數(shù)據(jù)變量介紹和分析
變量信息介紹
‘type’為影視劇類型,即屬于電影還是電視劇,分類型變量
‘title’為影視劇名稱,文本型變量
‘director' 為導(dǎo)演名字,文本變量
‘cast’為所有演員名稱,文本變量
‘ country’為發(fā)行制作國家,分類變量
‘date_added’該影視劇在 Netflix 上添加的日期,時間變量
‘release_year’該影視劇實際發(fā)布年份,時間變量
‘rating’電影/節(jié)目的電視評級,分類變量
‘duration’總持續(xù)時間, 分類變量
‘listed_in’影視劇節(jié)目類型,多組分類變量
‘description’影視劇簡介,文本變量
查看數(shù)據(jù)的所有變量信息
df=df.infer_objects()
print(df.shape)
df.info()
?從上面數(shù)據(jù)信息可以看到該數(shù)據(jù)總共有8798條,11個變量, 有些變量存在一定的缺失值,下面對缺失值進行處理,
數(shù)據(jù)清洗
對缺失值進行可視化
#觀察缺失值
import missingno as msno
msno.matrix(df)
可以看出導(dǎo)演這一列出現(xiàn)缺失值較多,演員和發(fā)行國家也存在一些缺失值。 由于每個影視劇的導(dǎo)演和演員都是第一無二的,而且是文本型數(shù)據(jù),所以這里不能采用均值或者是眾數(shù)進行填充,我們使用‘無數(shù)據(jù)’代替空值。
發(fā)行國家采用已有數(shù)據(jù)里面發(fā)行影視劇最多的國家進行填充, 其他列存在缺失值的樣本可以進行刪除。
填充修改
df['country'] = df['country'].fillna(df['country'].mode()[0])
df['cast'].fillna('No Data',inplace = True)
df['director'].fillna('No Data',inplace = True)
df.dropna(inplace=True)
去除重復(fù)值
df.drop_duplicates(inplace=True)
將時間變量轉(zhuǎn)化為時間格式
便于后面分析,這里將影視劇添加到網(wǎng)飛版塊時間的年月作為分類變量提取出來
df["date_added"] = pd.to_datetime(df['date_added'])
df['year_added'] = df['date_added'].dt.year
df['month_name_added']=df['date_added'].dt.month_name()
df['release_year']=df['release_year'].astype('int')
再次查看數(shù)據(jù)信息
df.info()
?最終剩余8774條樣本數(shù)據(jù),變量都無缺失值,變量類型都正確,可以進行下面的分析和可視化
分析及其可視化
網(wǎng)飛影視劇中電影和電視劇的各自占比分析
plt.figure(figsize=(2,2),dpi=180)
p1=df.type.value_counts()
plt.pie(p1,labels=p1.index,autopct="%1.3f%%",shadow=True,explode=(0.2,0),colors=['royalblue','pink']) #帶陰影,某一塊里中心的距離
plt.title("網(wǎng)飛影視劇中電影和電視劇的各自占比")
plt.show()
?可以看出網(wǎng)飛影視劇中電影數(shù)量占比更多,將近七層,電視劇占比30%左右。
網(wǎng)飛影視劇中發(fā)行國家分析
import squarify
p2=df.country.value_counts()[:15]
fig = plt.figure(figsize = (8,4),dpi=256)
ax = fig.add_subplot(111)
plot = squarify.plot(sizes = p2, # 方塊面積大小
label = p2.index, # 指定標(biāo)簽
#color = colors, # 指定自定義顏色
alpha = 0.8, # 指定透明度
value = p2, # 添加數(shù)值標(biāo)簽
edgecolor = 'white', # 設(shè)置邊界框
linewidth =0.1 # 設(shè)置邊框?qū)挾? )
# 設(shè)置標(biāo)題大小
ax.set_title('網(wǎng)飛影視劇數(shù)量發(fā)行量排名前15的國家',fontsize = 22)
# 去除坐標(biāo)軸
ax.axis('off')
# 去除上邊框和右邊框刻度
ax.tick_params(top = 'off', right = 'off')
# 顯示圖形
plt.show()
可以看到,由于網(wǎng)飛是美國的公司,在其本土上的影視作品數(shù)量最多,幾乎占據(jù)了所有影視作品的一半,其次是印度、英國、日本、韓國、加拿大,這五個國家的網(wǎng)飛影視劇也較多。
(只選取了前15的國家,因為國家太多了圖就會很亂)
網(wǎng)飛影視劇發(fā)行量前10的國家電影和電視劇數(shù)量對比分析?
def check0(txt):
if txt in p2.index[:10]:
a=True
else:
a=False
return a
df_bool=df.country.astype('str').apply(check0)
p3=pd.crosstab(df[df_bool].type,df[df_bool].country,normalize='columns').T.sort_values(by='TV Show')
m =np.arange(len(p3))
plt.figure(figsize = (8,4),dpi=256)
plt.bar(x=m, height=p3.iloc[:,0], label=p3.columns[0], width=0.3,alpha=0.5, hatch='.',color='orange')
plt.bar(x=m , height=p3.iloc[:,1], label=p3.columns[1], bottom=p3.iloc[:,0],width=0.3,alpha=0.5,hatch='*',color='lime')
plt.xticks(range(len(p3)),p3.index,fontsize=10,rotation=30)
plt.legend()
plt.ylabel('頻率')
plt.title("網(wǎng)飛影視劇發(fā)行量前10的國家電影和電視劇數(shù)量對比")
plt.show()
從網(wǎng)飛發(fā)行量前十的國家來看,印度的網(wǎng)飛影視劇的電影占比非常高,其次是埃及,美國。
電視劇占比較高的是韓國、日本、英國。
說明網(wǎng)飛在印度,埃及,美國地區(qū)制作拍攝影視劇是更偏向與電影。而在韓國,日本,英國更偏向于電視劇發(fā)行。
(只選取了前10的國家,因為國家太多了圖就會很亂,國家名稱都堆疊在一起放不下去)
影視劇評級分析
p4=df.rating.value_counts()
plt.figure(figsize = (6,3),dpi=256)
sns.barplot(x=p4.index,y=p4)
plt.ylabel('數(shù)量')
plt.xlabel('評價')
plt.xticks(fontsize=10,rotation=45)
plt.title("網(wǎng)飛所有影視劇不同評級數(shù)量對比")
plt.show()
?可以看到絕大多數(shù)的評價都是TV-MA和TV-14,即適合成年人的影視劇和合適14歲以上影視劇的評級。
df_bar=pd.crosstab(df.type,df.rating).T.sort_values(by='Movie',ascending=False).unstack().reset_index().rename(columns={0:'number'})
plt.subplots(figsize = (10,4),dpi=128)
sns.barplot(x=df_bar.rating,y=df_bar.number,hue=df_bar.type,palette = "copper")
?可以看到評級是TV-MA,TV-14和TV-PG的電影和電視劇都有,評級為R和PG的都是電影。
不同發(fā)行國家的影視劇評級分析
df_heatmap=df[df_bool].groupby('country')['rating'].value_counts().unstack().sort_index().fillna(0).astype(int).T#.sort_values(by='Movie',ascending=False).T
for col in df_heatmap.columns:
df_heatmap[col]=df_heatmap[col]/df_heatmap[col].sum()
corr = plt.subplots(figsize = (8,6),dpi=256)
corr= sns.heatmap(df_heatmap,annot=True,square=True,annot_kws={'size':6,'weight':'bold', 'color':'royalblue'},fmt='.2f',cmap='cubehelix_r')
plt.title('不同發(fā)行國家的網(wǎng)飛影視劇評級對比')
plt.show()
?從上圖可以直觀的看出絕大多數(shù)的網(wǎng)飛影視劇評級都是TV-MA和TV-14,這與前面的結(jié)論一致。
從不同發(fā)行國家的角度來看,加拿大,法國,墨西哥,西班牙,英國,美國制作發(fā)行的網(wǎng)飛影視劇數(shù)量更多偏向于適合成年人觀看的。
埃及、印度、日本、韓國制作發(fā)行的網(wǎng)飛影視劇有較大的頻率被評價為適合14歲以上觀看的。
這與傳統(tǒng)觀念一致,歐美等西方國家的影視劇會更加開放一點,而印度日本韓國亞洲國家的影視劇則會更加保守一點。
影視劇上映年份分析
plt.figure(figsize=(8,3.5),dpi=128)
colors=['tomato','orange','royalblue','lime','pink']
for i, mtv in enumerate(df['type'].value_counts().index):
mtv_rel = df[df['type']==mtv]['year_added'].value_counts().sort_index()
plt.plot(mtv_rel.index, mtv_rel, color=colors[i], label=mtv)
plt.fill_between(mtv_rel.index, 0, mtv_rel, color=colors[i], alpha=0.8)
plt.legend()
plt.ylabel('網(wǎng)飛發(fā)行影視劇數(shù)量')
plt.xlabel('年份')
plt.title('網(wǎng)飛在不同年份上映影視劇數(shù)量')
plt.show()
?可以看出網(wǎng)飛從2014年開始,影視劇數(shù)量開始達到一個爆發(fā)式的增長狀況,尤其在2019年上映的影視劇作品最多。
19年之后受到疫情等影響上映影視作品數(shù)量又呈現(xiàn)慢慢下降趨勢。
影視劇上映月份分析
plt.figure(figsize=(5,5),dpi=128)
colors=['tomato','orange','royalblue','lime','pink','brown']
p5=df.month_name_added.value_counts()
plt.pie(p5,labels=p5.index,autopct="%1.3f%%",shadow=True,explode=(0.2,0.1,0.08,0.06,0.04,0.02,0,0,0,0,0,0),colors=colors) #帶陰影,某一塊里中心的距離
plt.title('網(wǎng)飛影視劇上映月份分析')
plt.show()
可以看出網(wǎng)飛影視劇數(shù)量上映的月份較為均勻,其中七月和十二月上映的電視劇較多,正好也對應(yīng)了西方的暑假和寒假,假期上映電視劇較多。
上映影視劇最少的是二月和三月。
上映影視劇的年齡分析
df_age=df.assign(age=df.year_added-df.release_year)[['type','age']]
plt.figure(figsize=(3,4),dpi=128)
sns.boxplot(x='type',y='age',width=0.8,data=df_age,orient="v")
plt.show()
可以看出絕大部分的電影或是電視劇的上映時間和發(fā)行時間相差不大,中位數(shù)在2到3年左右,電影會稍微偏大點,這也反應(yīng)了好電影比電視劇能一直流傳的特點
電影電視劇的異常值都較多,極大值偏多,主要可能是網(wǎng)飛上映收錄了不少以前的經(jīng)典電視劇和電影。
影視劇類型分析
p6=df.assign(kind=df.listed_in.str.split(',')).explode('kind')['kind'].value_counts()[:15]
plt.figure(figsize=(10,4),dpi=128)
sns.barplot(y=p6.index,x=p6,orient="h")
plt.xlabel('影片數(shù)量')
plt.ylabel('影視劇類型')
plt.xticks(fontsize=10,rotation=45)
plt.title("網(wǎng)飛不同影視劇類型數(shù)量對比")
plt.show()
可以看清楚的看到網(wǎng)飛的影視劇最多的類型是國際電影,然后是戲劇,喜劇,動作冒險片,紀(jì)錄片
只看美國的影視劇類型
p7=df.assign(kind=df.listed_in.str.split(',')).explode('kind').where(lambda d:d.country=='United States').dropna()['kind'].value_counts()[:12]
plt.figure(figsize=(5,5),dpi=128)
plt.pie(p7,labels=p7.index,autopct="%1.2f%%",shadow=True,explode=(0.15,0.1,0.08,0.06,0.04,0.02,0,0,0,0,0,0),colors=['c', 'b', 'g', 'tomato', 'm', 'y', 'lime', 'w','orange','pink','grey','tan'])
plt.title('在美國制作發(fā)行的網(wǎng)飛影視劇類型數(shù)量對比')
plt.show()
?從上餅圖得知在美國網(wǎng)飛上映的影視劇中,紀(jì)錄片類型的最多,其次是戲劇,喜劇,家庭片,獨立電影等。
網(wǎng)飛影視劇的導(dǎo)演和演員分析
p8=df.assign(directo=df.director.str.split(',')).explode('directo')['directo'].value_counts()[1:11]
p9=df.assign(cas=df.cast.str.split(',')).explode('cas')['cas'].value_counts()[1:11]
plt.subplots(1,2,figsize=(12,5),dpi=128)
plt.subplot(121)
sns.barplot(y=p8.index,x=p8,orient="h")
plt.ylabel('導(dǎo)演姓名')
plt.xlabel('導(dǎo)演影視劇的數(shù)量',fontsize=14)
plt.title("(a)網(wǎng)飛影視劇導(dǎo)演數(shù)量前十的導(dǎo)演")
plt.subplot(122)
sns.barplot(y=p9.index,x=p9,orient="h")
plt.ylabel('演員名字')
plt.xlabel('出演影視劇的數(shù)量',fontsize=14)
plt.title("(b)網(wǎng)飛影視劇出演數(shù)量前十的演員")
#plt.legend()
plt.tight_layout()
plt.show()
從上圖得知網(wǎng)飛的影視劇數(shù)量前十名的導(dǎo)演,和出演數(shù)量前十名的演員。(只能看到名字我也不認(rèn)識他們.....) ((只選取了前10,因為人名太多了圖就會顯得很亂))
網(wǎng)飛的影視劇名稱的詞云圖
背景使用網(wǎng)飛的logo
from wordcloud import WordCloud
import random
from PIL import Image
import matplotlib
# Custom colour map based on Netflix palette
mask = np.array(Image.open('wf.png'))
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", ['#221f1f', '#b20710'])
text = str(list(df['title'])).replace(',', '').replace('[', '').replace("'", '').replace(']', '').replace('.', '')
wordcloud = WordCloud(background_color = 'white', width = 500, height = 200,colormap=cmap, max_words = 150, mask = mask).generate(text)
plt.figure( figsize=(9,5),dpi=1028)
plt.imshow(wordcloud, interpolation = 'bilinear')
plt.axis('off')
plt.tight_layout(pad=0)
plt.show()
?
?可以看到網(wǎng)飛影視劇標(biāo)題用詞數(shù)量最高的是'LOVE','World','Day','Life','Girl'等詞匯。
網(wǎng)飛的影視劇簡介的詞云圖
text2=str(list(df['description'])).replace(',', '').replace('[', '').replace("'", '').replace(']', '').replace('.', '')
wordcloud = WordCloud(background_color = 'white', width = 500, ?height = 200,colormap='coolwarm', max_words =30).generate(text2)
plt.figure( figsize=(8,4),dpi=512)
plt.imshow(wordcloud, interpolation = 'bilinear')
plt.axis('off')
plt.tight_layout(pad=0)
plt.show()
?可以看到網(wǎng)飛影視劇簡介用詞頻率最高的是'life','family','love','find','new'等詞匯。
總結(jié)
通過分析網(wǎng)飛的八千多部影視劇的數(shù)據(jù),我們能得到如下的一些結(jié)論:
1、網(wǎng)飛影視劇中電影數(shù)量占比更多,將近七層,電視劇占比30%左右
2、由于網(wǎng)飛是美國的公司,在其本土上的影視作品數(shù)量最多,幾乎占據(jù)了網(wǎng)飛所有影視作品的一半, 其次是印度、英國、日本、韓國、加拿大,這五個國家的網(wǎng)飛影視劇也較多。
3、網(wǎng)飛在印度,埃及,美國地區(qū)制作拍攝影視劇是更偏向與電影。而在韓國,日本,英國更偏向于電視劇發(fā)行。
4、網(wǎng)飛絕大多數(shù)的影視劇評級都是TV-MA和TV-14,即適合成年人的影視劇和合適14歲以上影視劇的評級。
5、網(wǎng)飛影視劇的發(fā)行國家和影視劇的評級有關(guān),歐美等西方國家的影視劇會更加開放一點,而印度日本韓國亞洲國家的影視劇則會更加保守一點。
6、2014年開始,影視劇數(shù)量開始達到一個爆發(fā)式的增長狀況,尤其在2019年上映的影視劇作品最多。19年之后受到疫情等影響上映影視作品數(shù)量又呈現(xiàn)慢慢下降趨勢。
7、網(wǎng)飛影視劇數(shù)量上映的月份較為均勻,其中七月和十二月上映的電視劇較多,正好也對應(yīng)了西方的暑假和寒假,假期上映電視劇較多。上映影視劇最少的是二月和三月。
8、網(wǎng)飛的大部分的電影或是電視劇的上映時間和發(fā)行時間相差不大,電影會稍微偏大點,反應(yīng)了好電影比電視劇能一直流傳的特點。電影電視劇的異常值都較多,極大值偏多,主要可能是網(wǎng)飛上映收錄了不少以前的經(jīng)典電視劇和電影
9、網(wǎng)飛的影視劇最多的類型是國際電影,然后是戲劇,喜劇,動作冒險片,紀(jì)錄片。
10、在美國網(wǎng)飛上映的影視劇中,紀(jì)錄片類型的最多,其次是戲劇,喜劇,家庭片,獨立電影等。
11、得知網(wǎng)飛的影視劇數(shù)量前十名的導(dǎo)演,和出演數(shù)量前十名的演員。
12、網(wǎng)飛影視劇標(biāo)題用詞數(shù)量最高的是'LOVE','World','Day','Life','Girl'等詞匯。
13、網(wǎng)飛影視劇簡介用詞頻率最高的是'life','family','love','find','new'等詞匯
本文由于沒有用很復(fù)雜的數(shù)學(xué)模型,得到的結(jié)論不算很高級,但是也很有效有意義了。excel可做不出來這效果...大家可以核心地學(xué)學(xué)這些畫圖的方法吧,畢竟漂亮的圖像和有效地結(jié)論才是可視化的意義。文章來源:http://www.zghlxwxcb.cn/news/detail-480377.html
創(chuàng)作不易,看官覺得寫得還不錯的話點個關(guān)注和贊吧,本人會持續(xù)更新python數(shù)據(jù)分析領(lǐng)域的代碼文章~(需要定制代碼可私信)文章來源地址http://www.zghlxwxcb.cn/news/detail-480377.html
到了這里,關(guān)于Python數(shù)據(jù)分析案例12——網(wǎng)飛影視劇數(shù)據(jù)分析及其可視化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!