基于Spark和Hive进行的豆瓣电影数据分析

写在前边的话:

算是自己做的一个小课题吧,自己搭建平台,自己爬取数据,自己进行数据清洗和分析,自己进行可视化展示,写这篇博客不为别的,只是记录下自己做这个课题的整个过程,大神们勿喷

环境说明:hadoop2.7集群,包含Hbase,Hive,Spark,Sqoop,Mahout组件

过       程:平台部署->数据采集-> 数据存储->数据ETL->数据分析->可视化

课题github地址:https://github.com/Thinkgamer/Douban_Movies_Analysi  (主要是源代码部分)

1:平台部署

看之前的博客:点击阅读

2:数据采集

数据来源,豆瓣电影,以Tag采集入口,对应标签采集对应的电影,使用Python3.4.3 + BeautifulSoup4.4.1 + urllib进行数据

的采集,本地存储形式为csv格式,代码结构为

-DouBan-Spider         #项目根目录
----download           #下载网页源代码模块
--------__init__.py
-------down_html.py
----fileoutput         #文件输出保存路径
----output             #将抓取的内容写入文件
--------__init__.py
--------output_all.py
----parase             #解析网页代码
--------__init__.py
--------parase_html.py
----urlmanager         #链接管理
--------__init__.py
--------manage_url.py
----main

数据保存格式(csv文件)

category.csv,两列(标签name,对应的电影数目)

movie.csv,10列(电影ID,名字,导演,编剧,类型,主演,上映时间,时长,评论人数,豆瓣评分)

movie_summary.txt,两列(电影ID,剧情摘要)

3:数据存储

首先爬取的数据是存储在本地电脑上的,我们将其上传至HDFS,作为原始数据存储

上传至HDFS:

    bin/hdfs dfs -put /home/master/桌面/*.csv /file/douban_movie_data
    bin/hdfs dfs -put /home/master/桌面/*.txt /file/douabn_movie_data

web查看显示为:

4:数据ETL

1) category.csv直接可放入hive中,创建category表,并加载数据

PS:这里要注意的是,这样不做任何处理直接加载到hive表中,在进行终端查询时会出现乱码情况

解决办法:将本地文件另存为UTF-8格式,然后再进行导入到Hive中

#创建category数据表
create table movie_category(
	cate_name string,
	cate_count int
)
comment "this table about movie category"
row format delimited fields terminated by ",";

#将category.csv加载到表中
load data inpath ‘/file/douabn_movie_data/category.csv‘ into table movie_category;

2) 对movie_links.csv 进行预处理,提取出id,进行hive的两列式存储

预处理

#-*-codinf:utf-8-*-

fp_w = open("new_movies_links.csv","a")

with open("movies_links.csv" ,"r") as fp:
    links = fp.readlines()
    for link in links:
        id = link.strip().split("/")[-2]
        href = link
        fp_w.write(id+"," +href)

fp_w.close()
print "ETL OK" 

创建表movie_links,并载入数据

#创建表movie_links
create table movie_links(
id int,
href string
)
comment "this table about every movie links"
row format delimited fields terminated by ",";
#从本地加载数据
load data local inpath "/home/master/mycode/new_movies_links.csv" into table movie_links;

3) 对movie.csv进行预处理,并存入hive

预处理

# -*-coding:utf-8-*-

#encoding="utf-8"  保证导入hive之后查询时不会出现中文乱码
fp_w = open("new_movies_load.csv","a",encoding="utf-8")

with open("movie.csv","r") as fp_r:
    for line in fp_r.readlines():
        movies=line.strip().split(",")

        s = ""
        #对上映时间进行处理
        try:
            year = int(movies[6].replace("/","-").split("-")[0])
        except:
            yesr = ""
        try:
            month = int(movies[6].replace("/","-").split("-")[1])
        except:
            month = ""
        movies[6] = str(year) + "," + str(month)
        for m in movies:
            s += m+","
        fp_w.write(s[:-1]+"\n")
    print("OK !!!")
    fp_w.close()

创建movie_message表,并加载数据

#创建存储表
create table movie_message(
    id int,
	title string,
	daoyan array<string>,
	bianju array<string>,
	leixing array<string>,
	zhuyan array<string>,
	year int,
	month int,
	shichang int,
	disnum int,
	score float
)
comment "this table about movie‘s message"
row format delimited fields terminated by ","
collection items terminated by ‘/‘;
#加载数据
load data local inpath "/home/master/mycode/new_movies_load.csv" into table movie_message;

4) 创建movie_summary表,并加载数据

#加载数据
load data local inpath "/home/master/mycode/new_movies_load.csv" into table movie_message;

#创建剧情摘要表
create table movie_summary(
id int,
summary string
)
comment "this table about movie summary"
row format delimited fields terminated by "\t";
#加载数据
load data local inpath "/home/master/mycode/movie_summary.txt" into table movie_summary;<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">     </span>

5) 影评数据存入表中(以大鱼海棠为例,下边也将以大鱼海棠作为分析入口)

5:数据分析

1):电影类别统计

根据标签和对应的电影数目,进行Top10显示,如下:

2):电影剧情统计

3):厉年影片数量走势图

4):电影数目最多的十年

5):影评分析

首先将影评信息进行初步的ETL存入hive数据表,方便分析时直接导出需要的列即可,下面直接给出分析结果,代码和源文件参考github,链接在博客开头已给出。

(1):影价等级比例

(2):影评时间分析

(3):影评高频词统计

使用spark进行中文分词统计请移步:点击阅读,jar包下载:github

(4):剧透类影评分析

内容为”这篇影评可能有剧透“在所有的影评中所占的比例

hive中执行:

select
round(sum(case when content="这篇影评可能有剧透" then 1 else 0 end)/count(*),2)
from yingping_dayu;

结果为:0.43

内容为”这篇影评可能有剧透“在每天中的数目变化

我们可以将影评变化和剧透影评在一张图上显示如下:

(5):影评情感分类

这个部分主要是针对每个影评进行自动评级,豆瓣电影对影评的评级分为五个等级(‘很差‘,‘较差‘,‘还行‘,‘推荐‘,‘力荐‘),这里使用的是朴素贝叶斯分类算法,首先对每个等级的影评进行分词,提取高频词作为分类的依据

第一步:针对影评的等级和影评内容分词并写入相应的文件

代码就不贴了(github上有),处理结果如下:

0代表很差,依次类推,5代表力荐

第二步:结合朴素贝叶斯算法和以上的数据,进行学习分类

把需要分类的影评写入test.txt文件,然后运行程序,结果显示如图(红色部分为中文分词的过程,不必理会):

需要说明的是,这里分类的效果很差,原因是豆瓣影评分级的依据是自己提取的高频词,但是从某种程度上说,这是不靠谱的,如果大家有什么好的意见可以提一下,一起学习。

附:分享一个针对豆瓣电影数据做的比较好看的可视化web展示:  http://zhanghonglun.cn/data-visualization/

但是上边的链接所展示的不足之处为数据为静态的,即不能实时的从豆瓣获取数据,而且展示的数据维度比较单一

时间: 2024-10-13 11:21:42

基于Spark和Hive进行的豆瓣电影数据分析的相关文章

基于Spark MLlib平台的协同过滤算法---电影推荐系统

基于Spark MLlib平台的协同过滤算法---电影推荐系统 又好一阵子没有写文章了,阿弥陀佛...最近项目中要做理财推荐,所以,回过头来回顾一下协同过滤算法在推荐系统中的应用. 说到推荐系统,大家可能立马会想到协同过滤算法.本文基于Spark MLlib平台实现一个向用户推荐电影的简单应用.其中,主要包括三部分内容: 协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析     一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,

基于vue2.0的一个豆瓣电影App

1.搭建项目框架 使用vue-cli 没安装的需要先安装 npm intall -g vue-cli 使用vue-cli生成项目框架 vue init webpack-simple vue-movie 然后一路回车 接着 进入项目目录 cd vue-movie 然后安装项目依赖包 cnpm install 没安装cnpm的先执行这个命令 npm install -g cnpm --registry=https://registry.npm.taobao.org 接着 npm run dev 看到

大数据实时处理-基于Spark的大数据实时处理及应用技术培训

随着互联网.移动互联网和物联网的发展,我们已经切实地迎来了一个大数据 的时代.大数据是指无法在一定时间内用常规软件工具对其内容进行抓取.管理和处理的数据集合,对大数据的分析已经成为一个非常重要且紧迫的需求.目前对大数据的分析工具,首选的是Hadoop/Yarn平台,但目前对大数据的实时分析工具,业界公认最佳为Spark.Spark是基于内存计算的大数据并行计算框架,Spark目前是Apache软件基金会旗下,顶级的开源项目,Spark提出的DAG作为MapReduce的替代方案,兼容HDFS.H

微信小程序豆瓣电影项目的改造过程经验分享

在学习微信小程序开发过程中,一部分的难点是前端逻辑的处理,也就是对前端JS的代码编辑:一部分的难点是前端界面的设计展示:本篇随笔基于一个豆瓣电影接口的小程序开源项目进行重新调整,把其中遇到的相关难点和改进的地方进行讨论介绍,希望给大家提供一个参考的思路,本篇随笔是基于前人小程序的项目基础上进行的改进,因此在开篇之前首先对原作者的辛劳致敬及感谢. 1.豆瓣电影接口的小程序项目情况 豆瓣电影接口提供了很多相关的接口给我们使用,豆瓣电影接口的API地址如下所示:https://developers.d

基于Spark的用户行为路径分析

研究背景 互联网行业越来越重视自家客户的一些行为偏好了,无论是电商行业还是金融行业,基于用户行为可以做出很多东西,电商行业可以归纳出用户偏好为用户推荐商品,金融行业可以把用户行为作为反欺诈的一个点,本文主要介绍其中一个重要的功能点,基于行为日志统计用户行为路径,为运营人员提供更好的运营决策.可以实现和成熟产品如adobe analysis类似的用户行为路径分析.最终效果如图.使用的是开源大数据可视化工具.如图所示,用户行为路径的数据非常巨大,uv指标又不能提前计算好(时间段未定),如果展示5级,

基于spark排序的一种更廉价的实现方案-附基于spark的性能测试

排序可以说是很多日志系统的硬指标(如按照时间逆序排序),如果一个大数据系统不能进行排序,基本上是这个系统属于不可用状态,排序算得上是大数据系统的一个"刚需",无论大数据采用的是hadoop,还是spark,还是impala,hive,总之排序是必不可少的,排序的性能测试也是必不可少的. 有着计算奥运会之称的Sort Benchmark全球排序每年都会举行一次,每年巨头都会在排序上进行巨大的投入,可见排序速度的高低有多么重要!但是对于大多数企业来说,动辄上亿的硬件投入,实在划不来.甚至远

hadoop、spark、hive、solr、es与YDB在车辆即席分析上的对比分析

自2012年以来,公安部交通管理局在全国范围内推广了机动车缉查布控系统(简称卡口系统),通过整合共享各地车辆智能监测记录等信息资源,建立了横向联网.纵向贯通的全国机动车缉查布控系统,实现了大范围车辆缉查布控和预警拦截.车辆轨迹.交通流量分析研判.重点车辆布控.交通违法行为甄别查处及侦破涉车案件等应用.在侦破肇事逃逸案件.查处涉车违法行为.治安防控以及反恐维稳等方面发挥着重要作用. 随着联网单位和接入卡口的不断增加,各省市区部署的机动车缉查布控系统积聚了海量的过车数据.截至目前,全国32个省(区.

Node.js学习 爬虫下载豆瓣电影top250图片

利用node.js实现爬虫,并且爬取豆瓣电影top250的列表和图片. 1 什么是node.js 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎 2 什么是爬虫 (又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 3

飞谷云六期第三组——基于Spark的机器学习

项目正式开始时间:2015.10.15. 随笔内容:本次项目的主题是基于Spark的ML.对于ML的学习有大概半年了,正好在网上关注到了由上海交通大学所主办的这个飞谷云的大数据项目,我所报名的这期已经是飞谷云的第六期了,在网上和群里了解了一段时间后大算报名参与一次,毕竟之前没有参与过真正的项目开发,也刚好趁着在学习ML的这个时间通过项目把理论和实践都加强.在这篇随笔中,我打算把这次项目的每个过程都写进来,一是为了给正在进行的项目提供一个全程记录:二是给自己一个留念,毕竟是自己独立完成的一个ML方