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

  • 缺失值:director,cast,country,date_added,rating
df.describe()

df.describe(include='object')

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的最多

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

 

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)

  • 每年的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='电影适合观看的年龄级别')

发布电影最多的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条数据

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个国家')

电影时长分析

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上的电影普遍在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)

各电影类型统计

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

出现较频繁的电影类型有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()

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

美国制作的电视剧最多

季数最长的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()

根据电影名推荐

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值