基于Hadoop+Java的地区旅游大数据可视化管理(IDEA+Zookeeper+Hive+HBase+Echarts)
Jsoup拥有十分方便的api来处理html文档,比如参考了DOM对象的文档遍历方法,参考了CSS选择器的用法等等,因此我们可以使用Jsoup快速地掌握爬取页面数据的技巧。数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。通过Jsoup对网页中有用的数据进行解析,之后我们将得到想要的数据。使用Jsoup获取到的是整个页面的资源,其中包含html的
目录
地区旅游大数据可视化管理 1
最终数据可视化样式 1
绪论 3
研究背景 3
研究现状 4
开发环境 4
数据抓取和清洗 5
相关技术 5
Jsoup 5
数据抓取 5
利用Jsoup抓取旅游网站数据 5
数据清洗 5
清洗无意义数据 7
获取所有酒店信息 7
数据存储 7
相关技术 7
HBase 7
结构介绍 7
存储格式 8
存储酒店数据 8
HBaseUtil工具类设计 8
酒店信息表 10
酒店评论信息表 11
MapReduce程序——统计平均价格 11
MapReduce程序——统计词频 12
数据可视化 14
相关技术 14
Echarts 14
可视化图表设计 14
酒店价格分布图 15
酒店平均价格对比图 15
酒店房型统计图 15
数据可视化展示 16
结语 16
参考文献 17
开发环境
本文用到的开发环境如下:
1.IDEA 2018.3
2.Hadoop 2.7.2
3.Zookeeper 3.4.10
4.Hive 1.2.1
5.HBase 1.3.1
6.Echarts 5.1.1
数据抓取和清洗
相关技术
Jsoup
Java中支持的爬虫框架有很多,比如WebMagic、Spider、Jsoup等。我们使用Jsoup来实现一个简单的爬虫程序。
Jsoup拥有十分方便的api来处理html文档,比如参考了DOM对象的文档遍历方法,参考了CSS选择器的用法等等,因此我们可以使用Jsoup快速地掌握爬取页面数据的技巧。
数据抓取
利用Jsoup抓取旅游网站数据
通过Jsoup对网页中有用的数据进行解析,之后我们将得到想要的数据。获取城市所有信息,首先需要获取到城市名称也就是获取所有
数据清洗
数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。
使用Jsoup获取到的是整个页面的资源,其中包含html的代码,也就会包含无意义的数据,需将它进行清洗。
获取所有 标签。
Elements all_dd = pinyin_filter.getElementsByTag(“dd”);
获取 标签下的所有a标签。
String cityID = StringUtil.getNumbers(element.attr(“href”));
获取所有a标签中的文本并添加到HotelCity类中,HotelCity实体类信息
package F_ChartsData;
import Util.Connected;
import Util.HBaseUtil;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class chartsData {
/**
* 获取前number个澳门酒店名称和价格
* @param number 指定获取几个酒店的数据
* @return
* @throws IOException
*/
public static Map<String, String> dataOfAoMen(int number) throws IOException {
List<Result> databyCName = HBaseUtil.getDatabyCName("澳门", "t_city_hotels_info", number);
Map<String, String> dataByColumn = HBaseUtil.getDataByColumn(databyCName,
"hotel_info", "name",
"hotel_info", "price");
return dataByColumn;
}
/**
* 获取前number个香港酒店名称和价格
* @param number 指定获取几个酒店的数据
* @return
* @throws IOException
*/
public static Map<String, String> dataOfHongKong(int number) throws IOException {
List<Result> databyCName = HBaseUtil.getDatabyCName("香港", "t_city_hotels_info", number);
Map<String, String> dataByColumn = HBaseUtil.getDataByColumn(databyCName,
"hotel_info", "name",
"hotel_info", "price");
return dataByColumn;
}
/**
* 获取各城市的酒店平均价格
* @return
* @throws Exception
*/
public static Map<String,String> dataOfPrice() throws Exception {
Connection conn = Connected.getHbase();
Table table = conn.getTable(TableName.valueOf("AveragePrice"));
HashMap<String, String> soult = new HashMap<>();
Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner) {
String k = Bytes.toString(result.getRow());
String v = Bytes.toString(result.getValue(Bytes.toBytes("info"), Bytes.toBytes("price")));
soult.put(k,v);
}
table.close();
conn.close();
return soult;
}
}

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)