YouTube热门视频的分析

1 概述

Youtube视频网站是美国最大的视频分享平台,youtube官网在中国也有很多用户。数据来源于kaggle网站,本文主要选取CA国家,探究YouTube在CA国家Top20热门视频数据。

2 数据的预处理

1、导包

 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt`
 import seaborn as sns
 import json
 from datetime import datetime
 import pandas as pd
 data = pd.read_csv("3D Objects/CAvideos.csv",index_col=0)

2、查看数据集

data

在这里插入图片描述

data["trending_date"]``

在这里插入图片描述
我们发现trending_date日期格式不一样,所以要对其进行日期格式的转化,这里我们用到datetime函数

data["trending_date"] = pd.to_datetime(data["trending_date"],format ="%y.%d.%m")

同理pubulish_time也一样

data["publish_time"] = pd.to_datetime(data["publish_time"],format = "%Y-%m-%dT%H:%M:%S.%fZ")
data["category_id"] = data["category_id"].astype(str)#转换成字符型

处理后的data

data.head()

在这里插入图片描述
对数据进行简单描述:
data.info()
在这里插入图片描述
从数据的初始描述可以得出该数据总共有15个指标,共有40881行记录
,且description有缺失值。
由于数据原本量就很大,且缺失的数占少数,因此可以对数据有缺失的行进行删除。

data = data.dropna()#删除有缺失值的行

在这里插入图片描述
通过对缺失值的处理,我们得到我们的完整的数据集。接下来我们对数据集中数值型变量做一个描述数据表,得到最初的对数据集的了解
在这里插入图片描述

接下来我们导入json文件,让其与category匹配

id_to_category = {}
with open (r"C:\Users\Desktop\4549_466349_bundle_archive/CA_category_id.json") as f:
    js = json.load(f)
    for category in js ["items"]:
        id_to_category[category["id"]] = category["snippet"]["title"]
data["category"] = data["category_id"].map(id_to_category)

处理过后的data如下:
在这里插入图片描述
查看json文件category_id和category匹配

id_to_category

在这里插入图片描述
利用已知的指标创建新变量。

1、“idrate”点赞量和不点赞量比例是一种用来衡量用户对某种类型视频的赞同与不赞同的重要指标
2、"perc_comment",评论占比等于"comment_count"/views
3、"perc_click",点击率等于("likes"+"dislikes")/"views"
data["idrate"] = data["likes"]/data["dislikes"]
data["per_comment"] = data["comment_count"]/data["views"]
data["perc_click"] = (data["dislikes"]+data["likes"])/data["views"]
data

添加新变量之后的数据在这里插入图片描述
为了方便我们后期对YouTube在2017-2018年用户的浏览次数做分析,此时我们对发布时间进行提取。

data["publish_timi"] = data["publish_time"].dt.time
data["publish_ymd"] = data["publish_time"].dt.date
data

在这里插入图片描述
数据的预处理完成后,接下来我们对YouTube数据进行探索性分析

3. YouTube数据集的探索性分析

3.1 简单的描述性分析

data.describe()

在这里插入图片描述
绘制箱线图

f = scale(rs)
plt.boxplot( x = f,labels = dt.columns,whis=0.5,widths = 0.5)
plt.show()

在这里插入图片描述

可以看出各个指标的均值、标准差、最大值和分位数,其中views平均浏览量为1.17e+06次。

3.2 相关性分析

rs = pd.concat([pd.DataFrame(data.views),pd.DataFrame(data.likes),pd.DataFrame(data.dislikes),pd.DataFrame(data.comment_count)],axis=1)#提取
views,likes,dislikes,comment_count等四个指标做相关性分析。
rs

在这里插入图片描述
rs.corr()
相关性矩阵
在这里插入图片描述
相关性散点矩阵图
sns.pairplot(rs,height= 3 )
在这里插入图片描述
热图1

mask = np.zeros_like(rs.corr(),dtype = np.bool)#mask:用于突出显示某些数据
mask[np.tril_indices_from(mask)] = True
sns.heatmap(rs.corr(),mask = mask ,vmax = 0.3,center = 0,square = True , linewidths = 0.5,cbar_kws={"shrink":0.5})
plt.show()

在这里插入图片描述
热图2在这里插入图片描述
相关性分析,从相关性散点矩阵图可以得出各变量间都存在着的正相关性,特别是likes与views,相关性系数达到了0.83,具有很强的正相关性。

3.3 gropby分组函数

3.3.1 gropby分组函数搜寻YouTube Top20的频道

by_channel = data.groupby(["channel_title"]).size().sort_values(ascending = False).head(20)
sns.barplot( by_channel.values,by_channel.index.values,palette="rocket")
plt.title("Top 20 channels of YouTube")
plt.xlabel("video count")
plt.show()

在这里插入图片描述
从上图中可以看到排名前三的频道分别为SET India ,MSNBC,FBC。

3.3.2 gropby分组函数 category类别出现的频率排序

y_cat = data.groupby(["category"]).size().sort_values(ascending = False)
sns.barplot(y_cat.values,y_cat.index.values,palette = "rocket")
plt.title("Most Frenquent Trending Youtube Categories")
plt.xlabel("video count")

在这里插入图片描述
从图中可以得到,出现次数最多的类别排名前三的分别为Entertainment,News&Politics,People&Blogs。

3.3.3 gropby分组函数 浏览量最多的Top20频道

by_channels2  = data.groupby("channel_title").size().sort_values(ascending = False)
top_channels2 = list(by_channels2[by_channels2.values>=20].index.values)
only_top2 = data
for i in list(data["channel_title"].unique()):
    if i  not in top_channels2:
        only_top2 = only_top2[only_top2["channel_title"]!= i ]
 by_views = only_top2.groupby(["channel_title"]).mean().sort_values(by = "views",ascending  = False).head(20)
 sns.barplot(by_views["views"],by_views.index.values,palette="rocket")
plt.title("Top 20 most viewed trending Youtube channels")
plt.xlabel("Average  Views")
plt.show()
  

在这里插入图片描述
从上图中我们能得出浏览量最多的频道排名前三的分别为Marvel Entertainment,Ed Sheeran ,Sony Pictures Entertainment 。

3.3.4 gropby分组函数 通关浏览量对类别进行排名

  by_views_cat = data.groupby(["category"]).mean().sort_values(by = "views",ascending = False)   
sns.barplot(by_views_cat["views"],by_views_cat.index.values,palette="rocket")
plt.title(" Category of Youtube viewed")
plt.xlabel("Average Views")
plt.show()

在这里插入图片描述
从图中可以看到浏览量排名前三的类别为Music,Movies,Film&Animation,其中最不受欢迎的频道为Travel & Events。
绘制CA国家2017-11-14~2018-6-14,YouTube视频在CA国家受欢迎程度变化。

def show_time(data, var):
    averages = data[data["dislikes"] != 0].groupby("trending_date").mean()
    plt.plot(averages.index.values, averages[var])
    plt.xticks(rotation = 90)
    plt.xlabel("Date")
    plt.ylabel(f"Average {var}")
    plt.title(f"Average {var} Over Time (11/14/17 - 6/14/18)")
    plt.show()
show_time(data,"idrate")

在这里插入图片描述

4 结论:

正如您在上面的图表中看到的,CA国家的人对Music、Entertainment、,Movies关注程度很高。视频的评论越多,它的受欢迎程度就越高,视频的观看数与点赞数也是成很强的正相关性,浏览次数越多,点赞次数就越高。