【数据分析】基于大数据的携程酒店评论数据可视化分析系统 | 大数据毕设实战项目 大数据可视化的大屏 大数据选题推荐 Hadoop SPark java
💖💖作者:计算机毕业设计杰瑞
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
深度学校实战项目
计算机毕业设计选题推荐
目录
基于大数据的携程酒店评论数据可视化分析系统介绍
《基于大数据的携程酒店评论数据可视化分析系统》是一套融合Hadoop分布式存储与Spark计算引擎的数据分析平台,专门针对携程平台海量酒店评论数据进行深度挖掘与可视化呈现。系统采用Python与Java双语言实现方案,后端框架支持Django与Spring Boot两种技术栈选择,前端通过Vue+ElementUI构建交互界面,利用Echarts实现数据图表的动态展示。核心技术架构包含Hadoop的HDFS分布式文件系统用于存储海量评论数据,Spark及Spark SQL负责数据清洗、转换与分析计算,结合Pandas和NumPy进行数据处理优化。系统功能涵盖酒店总体评价分析、酒店特征分析、用户行为分析、评论文本挖掘分析以及城市对比分析等八大核心模块,能够从多维度解析酒店服务质量、用户偏好特征、评论情感倾向及区域差异表现。MySQL数据库用于存储分析结果与用户信息,整个系统实现了从数据采集、分布式存储、并行计算到可视化输出的完整大数据处理流程,为理解在线旅游平台的用户反馈规律提供了技术支撑方案。
基于大数据的携程酒店评论数据可视化分析系统演示视频
【数据分析】基于大数据的携程酒店评论数据可视化分析系统 | 大数据毕设实战项目 大数据可视化的大屏 大数据选题推荐 Hadoop SPark java
基于大数据的携程酒店评论数据可视化分析系统演示图片








基于大数据的携程酒店评论数据可视化分析系统代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, avg, sum, when, regexp_replace, lower, split, explode, desc, row_number, dense_rank
from pyspark.sql.window import Window
from pyspark.ml.feature import Tokenizer, StopWordsRemover, HashingTF, IDF
from pyspark.ml.classification import LogisticRegression
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
import json
spark = SparkSession.builder.appName("CtripHotelAnalysis").config("spark.sql.shuffle.partitions", "200").config("spark.executor.memory", "4g").config("spark.driver.memory", "2g").getOrCreate()
@require_http_methods(["GET"])
def analyze_hotel_overall_rating(request):
hotel_id = request.GET.get('hotel_id')
df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/hotel_db").option("dbtable", "hotel_reviews").option("user", "root").option("password", "password").load()
df_filtered = df.filter(col("hotel_id") == hotel_id) if hotel_id else df
rating_stats = df_filtered.groupBy("hotel_id", "hotel_name").agg(count("review_id").alias("total_reviews"),avg("rating").alias("avg_rating"),sum(when(col("rating") >= 4, 1).otherwise(0)).alias("positive_count"),sum(when(col("rating") <= 2, 1).otherwise(0)).alias("negative_count"))
rating_stats = rating_stats.withColumn("positive_rate", (col("positive_count") / col("total_reviews")) * 100)
rating_stats = rating_stats.withColumn("negative_rate", (col("negative_count") / col("total_reviews")) * 100)
rating_distribution = df_filtered.groupBy("hotel_id", "rating").agg(count("review_id").alias("count"))
rating_pivot = rating_distribution.groupBy("hotel_id").pivot("rating", [1, 2, 3, 4, 5]).agg(sum("count")).fillna(0)
final_result = rating_stats.join(rating_pivot, on="hotel_id", how="left")
monthly_trend = df_filtered.withColumn("review_month", col("review_date").substr(1, 7)).groupBy("hotel_id", "review_month").agg(count("review_id").alias("monthly_reviews"),avg("rating").alias("monthly_avg_rating"))
monthly_trend = monthly_trend.orderBy("hotel_id", "review_month")
result_pandas = final_result.toPandas()
trend_pandas = monthly_trend.toPandas()
response_data = {"rating_stats": result_pandas.to_dict(orient='records'),"monthly_trend": trend_pandas.to_dict(orient='records'),"success": True}
return JsonResponse(response_data, safe=False)
@require_http_methods(["GET"])
def analyze_user_behavior_pattern(request):
df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/hotel_db").option("dbtable", "hotel_reviews").option("user", "root").option("password", "password").load()
user_activity = df.groupBy("user_id").agg(count("review_id").alias("review_count"),avg("rating").alias("avg_user_rating"),sum("helpful_count").alias("total_helpful"))
user_window = Window.orderBy(desc("review_count"))
user_activity = user_activity.withColumn("activity_rank", dense_rank().over(user_window))
active_users = user_activity.filter(col("activity_rank") <= 100)
user_preference = df.join(active_users.select("user_id"), on="user_id", how="inner")
price_preference = user_preference.withColumn("price_range",when(col("hotel_price") < 200, "budget").when((col("hotel_price") >= 200) & (col("hotel_price") < 500), "mid_range").when(col("hotel_price") >= 500, "luxury").otherwise("unknown"))
price_distribution = price_preference.groupBy("user_id", "price_range").agg(count("review_id").alias("count"))
price_pivot = price_distribution.groupBy("user_id").pivot("price_range", ["budget", "mid_range", "luxury"]).agg(sum("count")).fillna(0)
user_behavior = active_users.join(price_pivot, on="user_id", how="left")
review_time_pattern = df.withColumn("review_hour", col("review_time").substr(12, 2).cast("int")).withColumn("review_weekday", col("review_date").cast("date").cast("string"))
time_distribution = review_time_pattern.groupBy("review_hour").agg(count("review_id").alias("hour_count"))
time_distribution = time_distribution.orderBy("review_hour")
user_loyalty = df.groupBy("user_id", "hotel_id").agg(count("review_id").alias("visit_count")).filter(col("visit_count") > 1)
loyal_user_count = user_loyalty.select("user_id").distinct().count()
total_user_count = df.select("user_id").distinct().count()
loyalty_rate = (loyal_user_count / total_user_count) * 100 if total_user_count > 0 else 0
behavior_pandas = user_behavior.toPandas()
time_pandas = time_distribution.toPandas()
response_data = {"user_behavior": behavior_pandas.to_dict(orient='records'),"time_pattern": time_pandas.to_dict(orient='records'),"loyalty_rate": loyalty_rate,"active_user_count": active_users.count(),"success": True}
return JsonResponse(response_data, safe=False)
@require_http_methods(["POST"])
def analyze_review_text_mining(request):
data = json.loads(request.body)
min_word_freq = data.get('min_word_freq', 5)
df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/hotel_db").option("dbtable", "hotel_reviews").option("user", "root").option("password", "password").load()
df_cleaned = df.withColumn("review_text_cleaned", regexp_replace(lower(col("review_text")), "[^a-z0-9\\s\\u4e00-\\u9fa5]", ""))
df_cleaned = df_cleaned.filter(col("review_text_cleaned").isNotNull())
tokenizer = Tokenizer(inputCol="review_text_cleaned", outputCol="words")
df_tokenized = tokenizer.transform(df_cleaned)
chinese_stopwords = ["的", "了", "是", "在", "我", "有", "和", "就", "不", "人", "都", "一", "一个", "上", "也", "很", "到", "说", "要", "去", "你", "会", "着", "没有", "看", "好", "自己", "这"]
remover = StopWordsRemover(inputCol="words", outputCol="filtered_words", stopWords=chinese_stopwords)
df_filtered = remover.transform(df_tokenized)
df_exploded = df_filtered.select("review_id", "rating", explode(col("filtered_words")).alias("word"))
word_freq = df_exploded.groupBy("word").agg(count("review_id").alias("frequency")).filter(col("frequency") >= min_word_freq).orderBy(desc("frequency")).limit(100)
positive_words = df_exploded.filter(col("rating") >= 4).groupBy("word").agg(count("review_id").alias("pos_freq")).filter(col("pos_freq") >= min_word_freq).orderBy(desc("pos_freq")).limit(50)
negative_words = df_exploded.filter(col("rating") <= 2).groupBy("word").agg(count("review_id").alias("neg_freq")).filter(col("neg_freq") >= min_word_freq).orderBy(desc("neg_freq")).limit(50)
hashingTF = HashingTF(inputCol="filtered_words", outputCol="raw_features", numFeatures=1000)
df_tf = hashingTF.transform(df_filtered)
idf = IDF(inputCol="raw_features", outputCol="features")
idf_model = idf.fit(df_tf)
df_tfidf = idf_model.transform(df_tf)
df_labeled = df_tfidf.withColumn("label", when(col("rating") >= 4, 1.0).otherwise(0.0))
train_data, test_data = df_labeled.randomSplit([0.8, 0.2], seed=42)
lr = LogisticRegression(maxIter=10, regParam=0.01, elasticNetParam=0.8)
lr_model = lr.fit(train_data)
predictions = lr_model.transform(test_data)
accuracy = predictions.filter(col("label") == col("prediction")).count() / predictions.count()
word_freq_pandas = word_freq.toPandas()
positive_pandas = positive_words.toPandas()
negative_pandas = negative_words.toPandas()
response_data = {"word_frequency": word_freq_pandas.to_dict(orient='records'),"positive_words": positive_pandas.to_dict(orient='records'),"negative_words": negative_pandas.to_dict(orient='records'),"sentiment_model_accuracy": accuracy,"total_words_analyzed": df_exploded.select("word").distinct().count(),"success": True}
return JsonResponse(response_data, safe=False)
基于大数据的携程酒店评论数据可视化分析系统文档展示

💖💖作者:计算机毕业设计杰瑞
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
深度学校实战项目
计算机毕业设计选题推荐
更多推荐
所有评论(0)