YouTube视频数据分析报告
一.数据来源及内容
Kaggle 是一个流行的数据科学竞赛平台。由 Goldbloom 和 Ben Hamner 创建于 2010 年(官网地址:Your Home for Data Science)。
数据来源于kaggle的公开数据。该数据集包含有关YouTube每日热门视频的数据。Kaggle提供的数据集包括了4个国家的热门Youtubo视频的每日记录,每个国家的数据文件为一个csv文件以及一个json文件。(CA加拿大 DE 德国 GB 英国 US 美国)
Csv文件:
Video_id | 视频id | 字符串 |
---|---|---|
Trending_date | 视频上榜的日期 | 字符串 |
title | 视频标题 | 字符串 |
Channel_titie | 所属频道标题 | 字符串 |
Category_id | 所属类别编号 | 整型 |
Publish_time | 视频发布时间 | 时间类型 |
tags | 视频标签 | 字符串 |
views | 观看次数 | 整型 |
likes | 点赞次数 | 整型 |
dislikes | 被踩次数 | 整型 |
Comment_count | 评论次数 | 整型 |
Comments_disabled | 评论是否被关闭 | 布尔值 |
Ratings_disabled | 打分是否关闭 | 布尔值 |
Video_error_or_removed | 视频出错或者被删 | 布尔值 |
description | 视频详情 | 字符串 |
Json文件:
包含了category_id用于Csv文件的category_id做匹配,从而获取category的标题。
数据问题简单分析
1)统计所得
1、利用极值可以解决诸如以下的问题:
哪类视频播放量最高/最低?
哪类视频评论率最高/最低?
哪类视频的点赞率最高/最低?
2、利用箱型图可以描述不同类别的总体情况:
各类视频的观看数、点赞数、评论数的总体情况
3、利用正态分布可以:
得知观看数、点赞数、不喜欢数、评论数等分别是否符合正态分布,
进而可以再验证它们之间是否存在线性相关
2)问题分析
1、用户最感兴趣的是什么类别的视频?最不感兴趣的是什么类别的视频?
2、视频的发布日期和被推荐日期之间是否存在某种关系?
3、视频的标签数越多越好么?视频描述越详细越好么?
4、不同类型电影的上榜数量?不同类型电影的热度如何?
5、发布时间是如何分布的?从发布到上榜的时间差?
6、不同类型之间有区别吗?标签的长短与热度有关系吗?
7、喜欢,不喜欢,评论,甚至关评论等等之间与观看有没有什么关系?
8、不同类别之间,喜欢,不喜欢,评论和观看是怎么样的?
3)重要字段
trending\_date(推荐日期)
publish\_time(发布时间)
2.内容类型:
channel\_title(频道)
category\_id(类型id)
3.用户反馈数据:
views(观看数)
likes(点赞数)
dislikes(不喜欢数)
comment\_count(评论数)
数据导入与预处理(本节以US数据为主)
1导包
import pandas as pd
import numpy as np
import os
import json
import csv
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import cm
from subprocess import check_output
from datetime import datetime
2 查看数据
data = pd.read_csv("C:/Users/long/Desktop/AI/USvideos.csv",index_col=0)
data.head()
3对文件内容进行预处理
#日期格式不一样,所以要对其进行日期格式的转化,这里我们用到datetime函数
data["trending_date"] = pd.to_datetime(data["trending_date"],format ="%y.%d.%m")
data["publish_time"]=pd.to_datetime(data["publish_time"],format ="%Y-%m-%dT%H:%M:%S.%fZ")
data.head()
4 为防止数据缺失造成的数据误差
5将json文件转为csv文件
import json
import csv
jsonFile = open("C:/Users/long/Desktop/AI/US_category_id.json", "r")
categoryId = json.load(jsonFile)
with open('C:/Users/long/Desktop/AI/US_category_id.csv', 'w', newline='') as f:
csvWriter = csv.writer(f)
csvWriter.writerow(['id', 'category'])
for i in categoryId['items']:
csvWriter.writerow([i['id'], i['snippet']['title']])
得到的csv文件如图:
6 接下来我们导入json文件,让其与categor_id匹配
id_to_category = {}
with open (r"C:/Users/long/Desktop/AI/US_category_id.json") as f:
js = json.load(f)
for category in js ["items"]:
id_to_category[category["id"]] = category["snippet"]["title"]
data["category_id"] = data["category_id"].map(id_to_category)
data.head()
7提取需要的信息
data["dzb"] = data["likes"]/data["dislikes"]
data["plb"] = data["comment_count"]/data["views"]
data["djl"] = (data["dislikes"]+data["likes"])/data["views"]
data["publish_timi"] = data["publish_time"].dt.time
data["publish_ymd"] = data["publish_time"].dt.date
data.head()
数据图像绘制及数据分析(本节以US数据为主)
1. 不同类型电影的上榜数量?
plt.figure(figsize=(16,9))
view_num=data.groupby("category").video_id.count().sort_values(ascending=False)
sns.barplot(y=view_num.index,x=view_num.values,orient="h")
plt.title("各类型上榜数量")
Entertainment娱乐版块位居第一。位居第二的是音乐版块。说明娱乐类型的视频受众比较广泛,大家都爱看,比较容易上热门。
2. 不同类型电影的热度如何?
avg_view=data.groupby("category").apply(lambda x:int(x.views.sum()/x.views.count()))
view=data.groupby("category").views.sum()
fig,axes=plt.subplots(2,1,sharex=True,figsize=(16,9))
sns.barplot(x=view.index,y=view.values,ax=axes[0]) #左图
plt.xticks(rotation=45)
sns.barplot(x=avg_view.index,y=avg_view.values,ax=axes[1])
axes[0].set_title('不同类别视频的浏览情况')
axes[1].set_title('不同类别视频平均浏览情况')
plt.show()
娱乐版块的上榜率高,但是视频浏览量总量和视频平均浏览情况,音乐类别都有所反超。数据反常的数据,为Nonprofits & Activism,非营利组织和行动主义的数据,总量少但是平均播放量位居第一
plt.figure(figsize=(16,9))
sns.boxplot(x="category",y="views",data=data)
plt.xticks(rotation=45)
plt.title("不同类别之间的观看箱型图")
|数据离散太大,箱型图并不能太直观的展现娱乐和音乐的播放上线比较高,超高播放量都是从这2个类别里出的电影整体的播放量很集中(相较于其他而言),且中位数较高,一旦上榜,其播放量必有较好的反响。music也有较好的中位数,上四分位数较高,view整体的表现较好。
作为一个新人youtube博主,选择一个平均浏览量高较高,且上榜数量较多(至少说明受众较多)的领域作为开拓较好。目标选定为娱乐,音乐,以及film&animation。
3. 发布时间是如何分布的?
plt.figure(figsize=(16,9))
data.groupby("p_h").video_id.count().plot(linewidth=6,color="g",alpha=0.6)
plt.xticks(range(0,24),range(0,24))
plt.title("发布时间")
下午15点是发布的高峰期,猜测可能是因为发布过后的几个小时(16-17点左右),是用户刷youtube的高峰期,这段时间的观看量可能是能否上热门的重要评判条件。因此可以考虑在下午15点—下午17点之间发布。
4. 从发布到上榜的时间差?不同类型之间有区别吗?
data["timedelta"]=(data["trending_date"]-data["publish_time"]).dt.days
data["time_cut"]=pd.cut(data["timedelta"],[0,1,3,5,7,3650],labels=["0-1天","1-3天","3-5天","5-7天","7以上"])
time_pie=data.groupby("time_cut").timedelta.count()
time_pie.plot(kind = "pie", autopct='%.2f%%', fontsize=20, figsize=(16, 9))
plt.title("上榜时间")
plt.show()
可以看到,有90.32%的youtube热门视频在7天之内上了热搜,其中1-3天内上热搜的占29.66%,其中3-5天上热搜的占30.21%。建议更新时长2控制在一周之内。
5. 标签的长短与热度有关系吗?
plt.figure(figsize=(16,9))
data["length"]=data.tags.apply(lambda x :len(x.split("|")))
tag_num=data.groupby("category").length.mean()
avg_view
axi=sns.barplot(x=avg_view.index,y=avg_view.values)
plt.xticks(rotation=45)
ax2=axi.twinx()
ax2=sns.lineplot(x=tag_num.index,y=tag_num.values,label="标签数量")
plt.legend()
plt.title("标签数量和平均阅读量")
可以很明显的看到,2个变量之间是没有相关性的
6. 喜欢,不喜欢,评论,甚至关评论等等之间与观看之间有没有什么关系?
data_list=[]
for i in['Music', 'Comedy', 'Entertainment', 'News & Politics',
'People & Blogs', 'Howto & Style', 'Film & Animation',
'Science & Technology']:
data_list.append(data[data["category"]==i])
data_list2=[]
for i in[ 'Gaming', 'Sports', 'Pets & Animals',
'Travel & Events', 'Autos & Vehicles', 'Education', 'Shows',
'Movies']:
data_list2.append(data[data["category"]==i])
category_a=pd.concat(data_list,axis=0)
category_b=pd.concat(data_list2,axis=0)
sample=category_a[['views','likes','dislikes','comment_count','category']]
sns.pairplot(sample,hue="category")
sample=category_b[['views','likes','dislikes','comment_count','category']]
sns.pairplot(sample,hue="category")
新人入坑指南
可以从娱乐,音乐,以及film&animation 三个类型的视频去切入战场。娱乐账号的上榜视频数量多,占总体上榜视频数的33%,有着非常广泛的受众,是一个很好的切入口。而音乐和film&animation的单个视频的观看量高切勿轻易踏入人和博客这个领域.这个领域分化比较严重,好的视频获赞不错,差的视频常常遭到用户的不喜欢。
下午15点是发布的高峰期,猜测可能是因为发布过后的几个小时(16-17点左右),是用户刷youtube的高峰期,这段时间的观看量可能是能否上热门的重要评判条件。因此可以考虑在下午15点—下午17点之间发布。
视频更新的间隔时间可以为7天。可以看到,有90.32%的youtube热门视频在7天之内上了热搜,其中1-3天内上热搜的占29.66%,其中3-5天上热搜的占30.21%。建议更新时长2控制在一周之内。