丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
算是自己做的一个小课题吧,自己搭建平台,自己爬取数据,自己进行数据清洗和分析,自己进行可视化展示,写这篇博客不为别的,只是记录下自己做这个课题的整个过程,大神们勿喷
环境说明:hadoop2.7集群,包含Hbase,Hive,Spark,Sqoop,Mahout组件
过程:平台部署->数据采集->数据存储->数据ETL->数据分析->可视化
的采集,本地存储形式为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_summary.txt,两列(电影ID,剧情摘要)
首先爬取的数据是存储在本地电脑上的,我们将其上传至HDFS,作为原始数据存储
上传至HDFS:
bin/hdfsdfs-put/home/master/桌面/*.csv/file/douban_movie_databin/hdfsdfs-put/home/master/桌面/*.txt/file/douabn_movie_dataweb查看显示为:
PS:这里要注意的是,这样不做任何处理直接加载到hive表中,在进行终端查询时会出现乱码情况
解决办法:将本地文件另存为UTF-8格式,然后再进行导入到Hive中
#创建category数据表createtablemovie_category(cate_namestring,cate_countint)comment"thistableaboutmoviecategory"rowformatdelimitedfieldsterminatedby",";#将category.csv加载到表中loaddatainpath'/file/douabn_movie_data/category.csv'intotablemovie_category;
预处理
#创建存储表createtablemovie_message(idint,titlestring,daoyanarray,bianjuarray,leixingarray,zhuyanarray,yearint,monthint,shichangint,disnumint,scorefloat)comment"thistableaboutmovie'smessage"rowformatdelimitedfieldsterminatedby","collectionitemsterminatedby'/';#加载数据loaddatalocalinpath"/home/master/mycode/new_movies_load.csv"intotablemovie_message;4)创建movie_summary表,并加载数据
#加载数据loaddatalocalinpath"/home/master/mycode/new_movies_load.csv"intotablemovie_message;#创建剧情摘要表createtablemovie_summary(idint,summarystring)comment"thistableaboutmoviesummary"rowformatdelimitedfieldsterminatedby"\t";#加载数据loaddatalocalinpath"/home/master/mycode/movie_summary.txt"intotablemovie_summary;
根据标签和对应的电影数目,进行Top10显示,如下:
首先将影评信息进行初步的ETL存入hive数据表,方便分析时直接导出需要的列即可,下面直接给出分析结果,代码和源文件参考github,链接在博客开头已给出。
内容为”这篇影评可能有剧透“在所有的影评中所占的比例
hive中执行:
selectround(sum(casewhencontent="这篇影评可能有剧透"then1else0end)/count(*),2)fromyingping_dayu;结果为:0.43
内容为”这篇影评可能有剧透“在每天中的数目变化
我们可以将影评变化和剧透影评在一张图上显示如下:
这个部分主要是针对每个影评进行自动评级,豆瓣电影对影评的评级分为五个等级('很差','较差','还行','推荐','力荐'),这里使用的是朴素贝叶斯分类算法,首先对每个等级的影评进行分词,提取高频词作为分类的依据
第一步:针对影评的等级和影评内容分词并写入相应的文件
代码就不贴了(github上有),处理结果如下:
0代表很差,依次类推,5代表力荐
第二步:结合朴素贝叶斯算法和以上的数据,进行学习分类
把需要分类的影评写入test.txt文件,然后运行程序,结果显示如图(红色部分为中文分词的过程,不必理会):
需要说明的是,这里分类的效果很差,原因是豆瓣影评分级的依据是自己提取的高频词,但是从某种程度上说,这是不靠谱的,如果大家有什么好的意见可以提一下,一起学习。
但是上边的链接所展示的不足之处为数据为静态的,即不能实时的从豆瓣获取数据,而且展示的数据维度比较单一