基于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/

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

  • 27
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
### 回答1: Hive是一款基于Apache Hadoop的数据仓库工具,具有高扩展性和容错性。通过Hive可以方便地进行数据分析,包括对电影数据的分析和可视化。 针对电影数据的分析,可以将数据导入Hive表中,然后使用Hive SQL语言进行数据查询和聚合。例如,可以通过Hive查询每个月的电影票房收入、不同类型电影的产量等信息,也可以对电影评分数据进行分析,了解用户对电影的喜好倾向,找到受欢迎的电影和顶级演员等信息。 通过Hive Tableau等进行可视化分析可以更加直观地展示数据。例如,在Tableau中可以使用电影票房收入、电影类型等信息建立热力图、堆积柱状图或散点图等图表,展现电影市场和受众的状况。还可以建立电影推荐模型,利用机器学习算法,将电影数据和用户喜好进行匹配,从而给用户推荐最适合自己观看的电影。 总之,基于Hive的电影数据分析和可视化可以帮助我们更好地了解电影市场及用户信息,从而为电影行业的决策和发展提供有利的支持。 ### 回答2: 基于hive的电影数据分析及可视化是一种利用大数据技术来探索电影市场的方法。通过对海量电影数据进行收集、存储和分析,可以找出电影市场的趋势及热点,为电影产业提供决策支持。 在这个过程中,hive数据库是执行数据清洗和预处理的关键工具。它能够使用Hadoop集群处理大量的电影数据,并将结果存储在Hadoop服务器上,以便在需要时方便地进行查询和分析。 电影数据分析通常涵盖电影票房、受欢迎程度、观众反应和地域分布等多个方面。在hive中,可以通过SQL语句进行查询,比如:找出某个月份内最受欢迎的五部电影、查看某个地区电影票房排名、分析电影类型在不同地区的流行程度等。 可视化是另一个重要的方面,通过采用数据可视化工具,可以将hive数据库中的数据以图形的方式展示出来。这种方法可以使数据变得更加生动且易于理解,通过可视化图表或热力图等形式,帮助用户更清晰地了解电影市场的情况,为电影行业的业务和市场调研提供有力支持。 总之,基于hive的电影分析及可视化是应用大数据技术来探索电影市场的一种新型方式,它能够让我们更深入地理解电影市场的情况,为电影产业的决策者提供更详尽的数据支撑,对于推动电影行业的发展具有重要的意义。 ### 回答3: Hive是一种流行的分布式数据存储和查询系统,它提供了一个类似于SQL的查询语言,用于处理大规模数据集。基于Hive的电影数据分析和可视化是一种有效的方法来了解电影产业的趋势和偏好。通过使用Hive查询语言,分析电影数据集并使用可视化工具呈现结果,可以从多个维度了解电影市场的特点。 首先,我们可以使用Hive查询语言对电影数据进行初步的数据清洗和过滤,例如去除无用字段和重复数据。然后,我们可以使用Hive的聚合函数来计算电影数量、票房总额、平均票价等重要指标,并利用Hive的窗口函数来计算每个电影类型和地区的排名。从排名结果中我们可以发现用户对不同电影类型和地区有着不同的好恶。 其次,通过使用可视化工具如Tableau、PowerBI等,我们可以将Hive查询结果转换为各种图表,如柱形图、折线图、地图等,以更加生动形象地展示电影市场的情况。例如,可以制作图表以显示电影类型的销售情况、票房收入的时间趋势以及地域销售情况。 最后,从分析结果中可以发现一些有趣的趋势,如好莱坞大片和爆笑喜剧通常是最受欢迎的电影类型,而中国内地和北美是电影销售最为火爆的区域。通过层层拆解和可视化电影数据,可以对电影市场有全面了解,有助于电影从业人员做出更明智的决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值