不会大数据毕设怎么办?基于Hadoop+Spark的火锅店数据可视化分析系统

60 阅读7分钟

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

💕💕文末获取源码

@TOC

基于Hadoop+Spark的火锅店数据可视化分析系统-功能介绍

基于Hadoop+Spark的火锅店数据可视化分析系统主要对火锅餐饮行业进行数据分析,该系统采用Hadoop分布式存储架构和Spark内存计算引擎作为核心技术框架,能够处理火锅店运营过程中产生的数据。系统通过整合火锅店的基本信息、客户评分、价格体系、地理位置等多维度数据,运用Python数据科学库进行深度数据挖掘和统计分析,结合Django后端框架构建稳定的数据处理服务,并通过Vue+ElementUI+Echarts前端技术栈实现直观的数据可视化展示。系统涵盖价格区间分布分析、城市火锅店密度统计、评分维度综合分析、人气热度分层研究、价格与评分相关性分析、高评分店铺特征挖掘、评分差异化分析、区域消费水平对比、综合竞争力评估以及用户满意度聚类分析等核心功能模块。

基于Hadoop+Spark的火锅店数据可视化分析系统-选题背景意义

火锅作为中国餐饮市场中占比非常大的细分领域,呈现出显著的地域分布特征,其中重庆拥有两万多家火锅店,成都紧随其后也达到2万家,随着消费者行为日趋复杂化,大部分消费者年龄在35岁以下,对火锅的偏好呈现多元化趋势,不同人群偏好不一样,有些偏好川渝风味,也有些偏好粤式火锅,如果搭建一套数据分析工具来对该行业的经营决策进行分析,将会得到重要的信息。

本课题开发的火锅店数据可视化分析系统具有理论探索价值和现实应用意义,虽然只是在数据分析领域做了一些微小的尝试,但也希望为火锅餐饮行业的数字化转型贡献一份力气。从技术层面来看,系统将Hadoop分布式存储与Spark内存计算相结合,为处理餐饮行业的海量异构数据提供了一种可行的解决方案,这种大数据技术在餐饮垂直领域的应用实践可能为其他传统行业的数字化改造提供一定的参考借鉴。从行业角度而言,该系统能够帮助火锅店经营者更好地理解消费者行为模式、优化定价策略、改善服务质量,虽然作用有限,但或许能在一定程度上提升店铺的运营效率和盈利能力。从消费者视角考虑,系统通过综合评分分析和店铺特征挖掘,能够为消费者提供更加客观透明的选择依据,在一定程度上提升消费体验。

基于Hadoop+Spark的火锅店数据可视化分析系统-技术选型

大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 开发语言:Python+Java(两个版本都支持) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy 数据库:MySQL

基于Hadoop+Spark的火锅店数据可视化分析系统-视频展示

演示视频

基于Hadoop+Spark的火锅店数据可视化分析系统-图片展示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述

基于Hadoop+Spark的火锅店数据可视化分析系统-代码展示

def price_range_analysis(spark_session, data_path):
    df = spark_session.read.csv(data_path, header=True, inferSchema=True)
    df = df.filter(df.avgPrice.isNotNull() & (df.avgPrice > 0))
    price_ranges = [(0, 100, '经济型(0-100元)'), (101, 200, '中档型(101-200元)'), 
                   (201, 300, '高档型(201-300元)'), (301, 500, '豪华型(301-500元)'), 
                   (501, float('inf'), '奢华型(500元以上)')]
    result_data = []
    total_count = df.count()
    for min_price, max_price, range_name in price_ranges:
        if max_price == float('inf'):
            range_df = df.filter(df.avgPrice >= min_price)
        else:
            range_df = df.filter((df.avgPrice >= min_price) & (df.avgPrice <= max_price))
        count = range_df.count()
        percentage = round((count / total_count) * 100, 2) if total_count > 0 else 0
        avg_score = round(range_df.agg({'avgScore': 'avg'}).collect()[0][0], 2) if count > 0 else 0
        avg_comment = round(range_df.agg({'count': 'avg'}).collect()[0][0], 2) if count > 0 else 0
        result_data.append({
            'price_range': range_name,
            'restaurant_count': count,
            'percentage': percentage,
            'avg_score': avg_score,
            'avg_comment_count': avg_comment
        })
    result_df = spark_session.createDataFrame(result_data)
    result_df.coalesce(1).write.mode('overwrite').option('header', 'true').csv('/hdfs/output/price_analysis')
    pandas_df = result_df.toPandas()
    pandas_df.to_csv('./price_range_analysis.csv', index=False, encoding='utf-8')
    return result_data
def city_density_analysis(spark_session, data_path):
    from pyspark.sql.functions import regexp_extract, when, col, count, avg, sum as spark_sum
    df = spark_session.read.csv(data_path, header=True, inferSchema=True)
    df = df.filter(df.areaName.isNotNull())
    df = df.withColumn('city_name', 
                      when(col('areaName').contains('西安'), '西安')
                      .when(col('areaName').contains('丽江'), '丽江')
                      .when(col('areaName').contains('澳门'), '澳门')
                      .when(col('areaName').contains('北京'), '北京')
                      .when(col('areaName').contains('上海'), '上海')
                      .when(col('areaName').contains('广州'), '广州')
                      .when(col('areaName').contains('深圳'), '深圳')
                      .when(col('areaName').contains('成都'), '成都')
                      .when(col('areaName').contains('重庆'), '重庆')
                      .when(col('areaName').contains('杭州'), '杭州')
                      .otherwise('其他城市'))
    city_stats = df.groupBy('city_name').agg(
        count('*').alias('restaurant_count'),
        avg('avgScore').alias('avg_rating'),
        spark_sum('count').alias('total_comments'),
        avg('avgPrice').alias('avg_price')
    )
    city_stats = city_stats.withColumn('avg_rating', 
                                     when(col('avg_rating').isNull(), 0)
                                     .otherwise(col('avg_rating')))
    city_stats = city_stats.withColumn('avg_price', 
                                     when(col('avg_price').isNull(), 0)
                                     .otherwise(col('avg_price')))
    result_data = []
    for row in city_stats.collect():
        result_data.append({
            'city': row['city_name'],
            'restaurant_count': row['restaurant_count'],
            'avg_rating': round(row['avg_rating'], 2),
            'total_comments': row['total_comments'] if row['total_comments'] else 0,
            'avg_price': round(row['avg_price'], 2)
        })
    result_df = spark_session.createDataFrame(result_data)
    result_df.coalesce(1).write.mode('overwrite').option('header', 'true').csv('/hdfs/output/city_analysis')
    pandas_df = result_df.toPandas()
    pandas_df.to_csv('./city_density_analysis.csv', index=False, encoding='utf-8')
    return result_data
def rating_dimension_analysis(spark_session, data_path):
    from pyspark.sql.functions import col, when, isnan, avg, stddev, min as spark_min, max as spark_max, count
    df = spark_session.read.csv(data_path, header=True, inferSchema=True)
    rating_columns = ['avgScore', 'kouweifenshu', 'huanjingfenshu', 'fuwufenshu']
    df_clean = df
    for col_name in rating_columns:
        df_clean = df_clean.withColumn(col_name, 
                                     when((col(col_name).isNull()) | (isnan(col(col_name))) | (col(col_name) <= 0), 0)
                                     .otherwise(col(col_name)))
    rating_stats = []
    dimension_names = {'avgScore': '综合评分', 'kouweifenshu': '口味评分', 
                      'huanjingfenshu': '环境评分', 'fuwufenshu': '服务评分'}
    for col_name in rating_columns:
        stats = df_clean.agg(
            avg(col_name).alias('avg_score'),
            stddev(col_name).alias('std_score'),
            spark_min(col_name).alias('min_score'),
            spark_max(col_name).alias('max_score'),
            count(when(col(col_name) > 0, 1)).alias('valid_count')
        ).collect()[0]
        excellent_count = df_clean.filter(col(col_name) >= 4.5).count()
        good_count = df_clean.filter((col(col_name) >= 4.0) & (col(col_name) < 4.5)).count()
        average_count = df_clean.filter((col(col_name) >= 3.0) & (col(col_name) < 4.0)).count()
        poor_count = df_clean.filter((col(col_name) > 0) & (col(col_name) < 3.0)).count()
        total_valid = stats['valid_count']
        rating_stats.append({
            'dimension': dimension_names[col_name],
            'avg_score': round(stats['avg_score'], 2) if stats['avg_score'] else 0,
            'std_deviation': round(stats['std_score'], 2) if stats['std_score'] else 0,
            'min_score': round(stats['min_score'], 2) if stats['min_score'] else 0,
            'max_score': round(stats['max_score'], 2) if stats['max_score'] else 0,
            'excellent_rate': round((excellent_count / total_valid) * 100, 2) if total_valid > 0 else 0,
            'good_rate': round((good_count / total_valid) * 100, 2) if total_valid > 0 else 0,
            'average_rate': round((average_count / total_valid) * 100, 2) if total_valid > 0 else 0,
            'poor_rate': round((poor_count / total_valid) * 100, 2) if total_valid > 0 else 0,
            'sample_count': total_valid
        })
    result_df = spark_session.createDataFrame(rating_stats)
    result_df.coalesce(1).write.mode('overwrite').option('header', 'true').csv('/hdfs/output/rating_analysis')
    pandas_df = result_df.toPandas()
    pandas_df.to_csv('./rating_dimension_analysis.csv', index=False, encoding='utf-8')
    return rating_stats

基于Hadoop+Spark的火锅店数据可视化分析系统-结语

💕💕 Java实战项目集 微信小程序实战项目集 Python实战项目集 安卓Android实战项目集 大数据实战项目集 💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。