# 实验题目:数据分析系统的设计与实现
# 基于关联规则挖掘的图书推荐
## 实验目的:
随着 Hadoop 与 Spark 产生的影响越来越深,各种基于 Hadoop 与 Spark 平台的数据分析系统也随之出现。本次实验要求各位同学利用之前实验以及所学知识实现一个基于 Hadoop、Spark 或其他大数据平台的数据分析系统,理解其中的实现细节以及各种算法的原理。
## 实验软件和硬件环境:
1. 操作系统:Linux(实验室版本为 Ubuntu17.04,集群环境为 centos6.5);
2. Hadoop 版本:2.9.0;
3. JDK 版本:1.8;
4. Java IDE:Eclipse 3.8。
5. Spark 版本:实验室版本为 2.1.0,集群环境为 2.3.0;
6. Maven
## 实验要求:
基本要求:实现的数据分析系统要有对数据分析结果以及各种功能的图形化、图表化展示界面。
高级要求:在数据分析系统中应用算法解决一些实际问题,例如采用某个推荐系统算法实现产品推荐,或某个挖掘算法产生数据的深度分析结果,算法都是基于大数据系统的并行化算法。
## 实验主题:基于关联规则挖掘的图书推荐
在我国的图书出版和发行行业,经过多年的发展,图书市场在种类规模和总体数量等方面发展和增长迅速。但与此同时也带来了图书过多、读者难以选择的问题。常规的明细分类使得读者可以针对每- - 种类型的图书进行选择,但是每个分类下依然有成千上万种书籍。因此,基于读者的用户评论分析来进行图书推荐是一个具有实际应用价值的研究。
基于 Apriori 关联规则挖掘算法进行图书推荐的应用算法设计和实现,将利用大量图书评论数据,使用 MapReduce 并行化处理技术来完成图书的 k-频繁项集挖掘和图书推荐置信度的计算,在此基础上完成图书的推荐应用,并整合图书评分统计系统。
## 实验原理:
### 频繁项集挖掘
关联规则用来描述事物之间的联系,用来挖掘事物之间的相关性。挖掘关联规则的核心是通过统计数据项获得频繁项集。
设 I={i,i, .,im} 是项的集合,设任务相关的数据 D 是数据库事务的集合,其中每个事务 T 是项的集合,每一个事务有一个标志符,称作 TID。设 A 和 B 是两个项集,A、B 均为 I 的非空子集。关联规则是形如 A->B 的蕴涵式,并且 A∩B=φ。关联规则挖掘涉及到以下几个关键概念。
1 置信度/可信度( Confidence)。 置信度即是“值得信赖性”。设 A, B 是项集,对于事务集 D, A∈D, B∈D, A∩B=φ,A->B 的置信度定义为:置信度(A->B)=包含 A 和 B 的元组数/包含 A 的元组数。
```c++
Confidence(A->B) = P(B|A) = P(AB)/P(A)
```
2 支持度(Support)。 支持度(A->B) =包含 A 和 B 的元组数/元组总数。支持度描述了 A 和 B 这两个项集在所有事务中同时出现的概率。
```c++
Support(A->B) = P(AB)
```
3 强关联规则。设 min_sup 是最小支持度阈值; min_conf 是最小置信度阈值。如果事务集合 D 中的关联规则 A->B 同时满足 Support(A->B)>=min_sup, Confidence(A->B)>=min_conf
### Apriori 频繁项集挖掘算法简介
Apriori 算法是频繁项集挖掘中的经典算法。Apriori 算法通过多轮迭代的方法来逐步挖掘频繁项集。在第一轮迭代中,计算事务数据库中每一个项的支持度并找出所有频繁项。在之后的每一轮迭代中,将前一轮生成的频繁 k-项集作为本轮迭代的种子项集,以此来生成候选(k+1)-项集。这些候选项集在整个事务数据库中可能是频繁的,也可能是非频繁的。在本轮迭代中,需要计算每个候选(k+1)-项集在事务数据库中的实际支持度,以找出全部的(k+1)-频繁项集并将其作为下一轮的种子项集。这样的迭代过程将一直进行 下去,直到不能产生新的频繁项集为止。
根据频繁项集的定义,为了找出所有的频繁项集,需要对一条事务中的全部项穷尽各种组合(即组成项集),并计算每一种组合的支持度,以判定各组合是否为频繁项集。对于一条包含 m 个项的事务,其所有的组合最多可达 2 的 m 次方种。为了减小项集组合的搜索空间,Apriori 算法利用了以下两条性质:
性质 1:频繁项集的任何非空子集都是频繁的。
性质 2:非频繁项集的任何超集都是非频繁的。
## 实验数据:Book-Crossing Dataset
该数据集有 SQL 和 CSV 两种格式。
```c++
`BX-Books`记录了图书信息
CREATE TABLE `BX-Books` (
`ISBN` varchar(13) binary NOT NULL default '',
`Book-Title` varchar(255) default NULL,
`Book-Author` varchar(255) default NULL,
`Year-Of-Publication` int(10) unsigned default NULL,
`Publisher` varchar(255) default NULL,
`Image-URL-S` varchar(255) binary default NULL,
`Image-URL-M` varchar(255) binary default NULL,
`Image-URL-L` varchar(255) binary default NULL,
PRIMARY KEY (`ISBN`)
TYPE=MyISAM;
`BX-Book-Ratings`记录了图书评分信息
CREATE TABLE `BX-Book-Ratings` (
`User-ID` int(11) NOT NULL default '0',
`ISBN` varchar(13) NOT NULL default '',
`Book-Rating` int(11) NOT NULL default '0',
PRIMARY KEY (`User-ID`,`ISBN`)
TYPE=MyISAM;
`BX-Users`记录了用户信息
CREATE TABLE `BX-Users` (
`User-ID` int(11) NOT NULL default '0',
`Location` varchar(250) default NULL,
`Age` int(11) default NULL,
PRIMARY KEY (`User-ID`)
TYPE=MyISAM;
```
## 实验思路:
1. 使用 hadoop 作为大数据处理框架,通过 apriori 进行频繁项集数据挖掘。
2. 使用 Web 项目作为展示平台。
3. 前端 bootstrap,实现响应式布局,适配多种设备。
4. 后端 Java Web。用户交互页面有搜索页面和展示页面。使用 JSP+JavaBean+Servlet。该模式遵循了 MVC 设计模式,
5. 使用 Maven 作为项目管理工具。
6. 搜索页面,用户填入搜索书籍名
![](https://www.writebug.com/myres/static/uploads/2022/1/10/446d8f4473def3bdb9a100113bb90ed4.writebug)
6. 搜索后的结果展示,巨幕展示了所搜索书籍的完整信息,包括平均评分。巨幕下方展示了所推荐的图书,可以通过点击进入到该图书的详细页面。
![](https://www.writebug.com/myres/static/uploads/2022/1/10/9fc057bc56db3463d75b7de84426b4db.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/1/10/3dc52df4a6832ee91b26af0d544ccd5c.writebug)
## 数据处理:
### 1 数据预处理
由于数据中有少量不规则的数据,需要进行预处理,主要使用正则表达式。
数据输入形式:
```c++
User-ID;"ISBN";"Book-Rating",,
276725;"034545104X";"0",,
276726;"0155061224";"5",,
276727;"0446520802";"0",,
276729;"052165615X";"3",,
276729;"0521795028";"6",,
```
数据预处理后:
```
1.0140219854 0312954468 0312983263 0446523747 3498020862
2.068483068X 0743446593
3.0679735909 0744552192
4.0590396056
5.0671673688 0671888587 0771091583 0440211727 0771099975 0553277472 0671759310 0440295653 0671016652
6.0743225082
7.067087146X 0735611807 0764515489 0786881852 0789722097 0806931345 0915811898 1579120636 0688176933 0375702652
8.0375727345 0060937734
9.044021422X
10.0395617693 0395618185 0440405084 0673801012 014034294X 1856978842 0064400204 0743400526
11.9727595553
12.0440224675
13.0749399627 1857992083
```
数据预处理代码
```c++
1.public class PreJob {
2. public static class PreJobMapper ex
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:课程报告word+源码及数据库sql文件 详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125047261
资源推荐
资源详情
资源评论
收起资源包目录
基于hadoop实现的关联规则挖掘的图书数据分析推荐系统.zip (80个子文件)
book-recommend-system
READMEBEFORE.md 2KB
LICENSE 1KB
freq_item.sql 82.81MB
apriori
bin
three
Insert.class 3KB
CountCL$CountCLMapper.class 2KB
FreqItemSet2$FreqItemSet2Reducer.class 2KB
FreqItemSetMain.class 1KB
CountRate$CountRateReducer.class 4KB
PreJob$PreJobReducer.class 3KB
FreqItemSet2.class 2KB
FreqItemSet$FreqItemSetMapper.class 2KB
CountRate.class 2KB
CountRate$CountRateMapper.class 3KB
FreqItemSet.class 2KB
FreqItemSet$FreqItemSetCombiner.class 2KB
PreJob$PreJobMapper.class 3KB
FreqItemSet2$FreqItemSet2Combiner.class 2KB
CountRate$CountRateCombiner.class 2KB
FreqItemSet2$FreqItemSet2Mapper.class 4KB
CountCL$CountCLReducer.class 3KB
PreJob.class 2KB
FreqItemSet$FreqItemSetReducer.class 2KB
CountCL.class 2KB
log4j.properties 13KB
core-site.xml 1KB
hdfs-site.xml 1KB
apriori
CountCL$CountCLMapper.class 2KB
FreqItemSet2$FreqItemSet2Reducer.class 2KB
FreqItemSetMain.class 770B
PreJob$PreJobReducer.class 3KB
FreqItemSet2.class 2KB
FreqItemSet$FreqItemSetMapper.class 2KB
FreqItemSet.class 2KB
FreqItemSet$FreqItemSetCombiner.class 2KB
PreJob$PreJobMapper.class 3KB
FreqItemSet2$FreqItemSet2Combiner.class 2KB
FreqItemSet2$FreqItemSet2Mapper.class 3KB
CountCL$CountCLReducer.class 3KB
PreJob.class 2KB
FreqItemSet$FreqItemSetReducer.class 2KB
CountCL.class 2KB
two
CountCL$CountCLMapper.class 2KB
FreqItemSet2$FreqItemSet2Reducer.class 2KB
FreqItemSetMain.class 1KB
PreJob$PreJobReducer.class 3KB
FreqItemSet2.class 2KB
FreqItemSet$FreqItemSetMapper.class 2KB
FreqItemSet.class 2KB
FreqItemSet$FreqItemSetCombiner.class 2KB
PreJob$PreJobMapper.class 3KB
FreqItemSet2$FreqItemSet2Combiner.class 2KB
FreqItemSet2$FreqItemSet2Mapper.class 4KB
CountCL$CountCLReducer.class 3KB
PreJob.class 2KB
FreqItemSet$FreqItemSetReducer.class 2KB
CountCL.class 2KB
src
three
Insert.java 2KB
FreqItemSetMain.java 2KB
CountRate.java 4KB
CountCL.java 3KB
PreJob.java 3KB
FreqItemSet2.java 4KB
FreqItemSet.java 3KB
log4j.properties 13KB
core-site.xml 1KB
hdfs-site.xml 1KB
apriori
FreqItemSetMain.java 984B
CountCL.java 3KB
PreJob.java 3KB
FreqItemSet2.java 3KB
FreqItemSet.java 2KB
two
FreqItemSetMain.java 2KB
CountCL.java 3KB
PreJob.java 3KB
FreqItemSet2.java 3KB
FreqItemSet.java 2KB
.project 418B
.classpath 24KB
README.md 41KB
课程报告.doc 7.17MB
共 80 条
- 1
shejizuopin
- 粉丝: 9538
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页