一、前言
在文章的开始,需要先介绍下这个项目的需求。在这个小程序中,我们首先爬取了b站部分的视频信息,筛选掉罕见的标签(可以将它们当做脏数据),再利用之前写的WordCount程序得到热词,通过聚类分析得出几类较为常用的标签,定义为类别,最后通过Spark GraphX图计算和可视化软件整理数据,分析出在B站哪一类视频热度较高,并且容易出现火爆现象,以及各类别中哪个视频比较火。
二、项目环境
环境:Jdk1.8+scala+spark
工具:PyCharm+MongoDB+Eclipse+Gephi
三、数据准备
在这一部分,我们首先爬取了B站的视频信息,然后将数据存储在MongoDB中。最后获取的数据结果如下图所示。
爬虫的爬取数据的部分代码如下截图所示:
四、聚类分析
在这部分中,先根据获取视频标签,对标签进行分词处理,去除停用词,然后将视频的标签转换为词向量,算出视频标签的tf-idf矩阵,再进行聚类分析。
通过上述操作后,可以将视频标签简单的聚为15个类别,然后再根据再根据之前WordCount得到的热词对这15个类别进行人工打标签的工作。获取的结果如下图所示:
五、Spark Graphx 生成图
在这个部分,根据聚类分析结果,取每个视频的av号和title作为点的属性, 然后根据标签确定每个视频属于哪个类别,并将其与所述类别连接起来,之后用sc.parallelize创建点和边的JavaRDD,用Graph.apply来构图,最后通过toGexf方法生成gexf文件。先聚类,再构图,去除了很多边缘点,使图具有更强的可读性。toGexf()的代码如下:
六、结果展示
图中的一种颜色代表一种类别,每个点代表一个视频,其中的点越大,就表示该视频的播放量越多,同种颜色的视频点越多就说明该类型的视频在B站的数量多。通过上图,不难发现电竞类的视频在B站的数量最多……
七、问题解决
1、生成的gexf文件无法打开:
原因可能是数据里面出现了&等字符,要解决该问题就需要在处理数据之前先对这些特殊字符进行处理
2、Dephi显示中文乱码:解决该问题要将显示的字体设置为宋体等,或者将gexf文件开头将encoding设置为GB2312