💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐
基于大数据的旅游上榜景点评论数据可视化分析系统介绍
本系统是一套面向旅游行业的大数据分析平台,聚焦国内热门上榜景点的游客评论数据挖掘与可视化呈现。系统底层采用Hadoop分布式文件系统(HDFS)存储海量评论文本,通过Spark计算引擎完成数据清洗、特征提取和统计分析任务。后端基于Spring Boot框架构建RESTful接口,前端使用Vue+ElementUI搭建交互界面,借助Echarts图表库将分析结果转化为直观的柱状图、饼图、词云图等多维度可视化图表。系统核心功能涵盖用户身份管理、个人信息维护、景点评论数据的多维度统计分析(如情感倾向分布、热门关键词提取、时间序列趋势等)。整个技术架构体现了从数据采集、分布式存储、并行计算到前端展示的完整大数据处理链路,为旅游管理部门和景区运营方提供数据驱动的决策参考依据,同时也为计算机专业学生提供了一个涵盖主流大数据技术栈的实践项目范本
基于大数据的旅游上榜景点评论数据可视化分析系统演示视频
基于大数据的旅游上榜景点评论数据可视化分析系统演示图片
基于大数据的旅游上榜景点评论数据可视化分析系统代码展示
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.functions;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class TourismDataAnalysisService {
private SparkSession spark = SparkSession.builder().appName("TourismCommentAnalysis").master("local[*]").config("spark.sql.warehouse.dir", "/user/hive/warehouse").getOrCreate();
public Map<String, Object> analyzeCommentSentiment(String scenicSpotName) {
Dataset<Row> commentData = spark.read().format("csv").option("header", "true").option("inferSchema", "true").load("hdfs://localhost:9000/tourism/comments/" + scenicSpotName + ".csv");
commentData.createOrReplaceTempView("comments");
Dataset<Row> sentimentStats = spark.sql("SELECT sentiment, COUNT(*) as count FROM comments WHERE sentiment IS NOT NULL GROUP BY sentiment ORDER BY count DESC");
List<Row> sentimentList = sentimentStats.collectAsList();
Map<String, Object> resultMap = new HashMap<>();
List<Map<String, Object>> sentimentDistribution = new ArrayList<>();
int totalComments = 0;
for (Row row : sentimentList) {
Map<String, Object> item = new HashMap<>();
item.put("sentiment", row.getString(0));
item.put("count", row.getLong(1));
sentimentDistribution.add(item);
totalComments += row.getLong(1);
}
for (Map<String, Object> item : sentimentDistribution) {
long count = (long) item.get("count");
double percentage = (count * 100.0) / totalComments;
item.put("percentage", String.format("%.2f", percentage) + "%");
}
resultMap.put("sentimentDistribution", sentimentDistribution);
resultMap.put("totalComments", totalComments);
Dataset<Row> positiveRate = spark.sql("SELECT (SUM(CASE WHEN sentiment='positive' THEN 1 ELSE 0 END) * 100.0 / COUNT(*)) as positive_rate FROM comments");
double rate = positiveRate.first().getDouble(0);
resultMap.put("positiveRate", String.format("%.2f", rate) + "%");
return resultMap;
}
public Map<String, Object> extractHotKeywords(String scenicSpotName, int topN) {
Dataset<Row> commentData = spark.read().format("csv").option("header", "true").load("hdfs://localhost:9000/tourism/comments/" + scenicSpotName + ".csv");
Dataset<Row> words = commentData.selectExpr("explode(split(content, ' ')) as word");
words.createOrReplaceTempView("word_table");
Dataset<Row> wordFreq = spark.sql("SELECT word, COUNT(*) as frequency FROM word_table WHERE LENGTH(word) >= 2 AND word NOT IN ('的','了','在','是','有','和','就','都','而','及','与','着','或','一个','不是','什么') GROUP BY word ORDER BY frequency DESC LIMIT " + topN);
List<Row> wordList = wordFreq.collectAsList();
Map<String, Object> resultMap = new HashMap<>();
List<Map<String, Object>> keywordList = new ArrayList<>();
long maxFreq = wordList.isEmpty() ? 1 : wordList.get(0).getLong(1);
for (Row row : wordList) {
Map<String, Object> keyword = new HashMap<>();
keyword.put("word", row.getString(0));
keyword.put("frequency", row.getLong(1));
double weight = (row.getLong(1) * 100.0) / maxFreq;
keyword.put("weight", (int) weight);
keywordList.add(keyword);
}
resultMap.put("keywords", keywordList);
resultMap.put("totalKeywords", keywordList.size());
Dataset<Row> avgWordCount = spark.sql("SELECT AVG(SIZE(split(content, ' '))) as avg_words FROM (SELECT content FROM word_table GROUP BY content)");
resultMap.put("avgCommentLength", avgWordCount.first().getDouble(0));
return resultMap;
}
public Map<String, Object> analyzeTimeSeriesTrend(String scenicSpotName, String startDate, String endDate) {
Dataset<Row> commentData = spark.read().format("csv").option("header", "true").option("inferSchema", "true").load("hdfs://localhost:9000/tourism/comments/" + scenicSpotName + ".csv");
commentData.createOrReplaceTempView("time_comments");
String dateFilter = String.format("comment_date >= '%s' AND comment_date <= '%s'", startDate, endDate);
Dataset<Row> dailyStats = spark.sql("SELECT DATE(comment_date) as date, COUNT(*) as comment_count, AVG(rating) as avg_rating FROM time_comments WHERE " + dateFilter + " GROUP BY DATE(comment_date) ORDER BY date");
List<Row> dailyList = dailyStats.collectAsList();
Map<String, Object> resultMap = new HashMap<>();
List<String> dateList = new ArrayList<>();
List<Long> countList = new ArrayList<>();
List<Double> ratingList = new ArrayList<>();
for (Row row : dailyList) {
dateList.add(row.getDate(0).toString());
countList.add(row.getLong(1));
ratingList.add(row.getDouble(2));
}
resultMap.put("dates", dateList);
resultMap.put("commentCounts", countList);
resultMap.put("avgRatings", ratingList);
Dataset<Row> peakDay = spark.sql("SELECT DATE(comment_date) as date, COUNT(*) as count FROM time_comments WHERE " + dateFilter + " GROUP BY DATE(comment_date) ORDER BY count DESC LIMIT 1");
if (!peakDay.isEmpty()) {
Row peak = peakDay.first();
resultMap.put("peakDate", peak.getDate(0).toString());
resultMap.put("peakCount", peak.getLong(1));
}
Dataset<Row> trendSlope = spark.sql("SELECT CORR(unix_timestamp(comment_date), rating) as trend_coefficient FROM time_comments WHERE " + dateFilter);
double coefficient = trendSlope.first().getDouble(0);
resultMap.put("trendDirection", coefficient > 0 ? "上升" : coefficient < 0 ? "下降" : "平稳");
resultMap.put("trendCoefficient", String.format("%.4f", coefficient));
return resultMap;
}
}
基于大数据的旅游上榜景点评论数据可视化分析系统文档展示
💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐