毕设展示会上的黑马:基于大数据技术的全国饮品门店分析系统成功逆袭经验

51 阅读8分钟

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

💕💕文末获取源码

@TOC

基于大数据技术的全国饮品门店分析系统成功逆袭经验-系统功能介绍

基于大数据技术的全国饮品门店分析系统是一个集数据采集、存储、处理和可视化展示于一体的综合性分析平台。该系统采用Hadoop分布式存储架构和Spark大数据处理引擎作为核心技术底座,通过Python和Java双语言支持,实现了对全国范围内饮品门店数据的深度挖掘和智能分析。系统前端基于Vue+ElementUI+Echarts技术栈构建了直观友好的可视化界面,后端采用Django和SpringBoot双框架支持,确保了系统的稳定性和扩展性。整个系统围绕品牌市场竞争力分析、饮品品类市场格局分析、价格区间与市场定位分析以及品牌发展潜力与聚类分析四大核心维度展开,通过12个具体的分析功能模块,实现了从品牌门店数量排行、平均价格分析、品牌命名云图到K-Means聚类等多层次的数据洞察。系统利用Spark SQL进行大规模数据查询优化,结合Pandas和NumPy进行精确的数值计算,最终通过MySQL数据库实现数据的持久化存储,为饮品行业的市场研究、投资决策和品牌发展提供了科学的数据支撑和决策参考。

基于大数据技术的全国饮品门店分析系统成功逆袭经验-系统技术介绍

大数据框架: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大数据计算的核心原理和应用方法。从行业应用层面考虑,该系统能够为饮品行业的从业者提供一定的市场洞察和决策参考,虽然作为毕业设计项目,其分析深度和数据规模相对有限,但仍然可以在一定程度上揭示不同品牌的市场表现、价格定位和竞争格局。从学术研究意义来说,这个项目尝试将机器学习中的聚类算法应用到商业数据分析中,探索了数据驱动的品牌分类方法,为后续更深入的市场研究奠定了基础。从个人能力提升的角度来讲,通过完成这个系统的设计和开发,可以比较全面地锻炼大数据技术栈的使用能力,包括数据采集、清洗、存储、计算和可视化展示等各个环节,同时也能够培养系统性思维和解决复杂问题的能力。当然,作为一个毕业设计项目,其影响范围和实用价值还是比较有限的,主要还是起到学习和实践的作用。

基于大数据技术的全国饮品门店分析系统成功逆袭经验-系统演示视频

演示视频

基于大数据技术的全国饮品门店分析系统成功逆袭经验-系统演示图片

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

基于大数据技术的全国饮品门店分析系统成功逆袭经验-系统部分代码

from pyspark.sql import SparkSession

from pyspark.ml.clustering import KMeans

from pyspark.ml.feature import VectorAssembler

import pandas as pd

import numpy as np

from django.http import JsonResponse

from collections import Counter

import jieba

def initialize_spark():

    spark = SparkSession.builder.appName("DrinkStoreAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()

    return spark

def brand_ranking_analysis(request):

    spark = initialize_spark()

    df = spark.sql("SELECT name, store_count, avg_price FROM drink_brands WHERE store_count > 0")

    top_brands_by_count = df.orderBy(df.store_count.desc()).limit(10).collect()

    top_brands_by_price = df.filter(df.avg_price > 0).orderBy(df.avg_price.desc()).limit(10).collect()

    bottom_brands_by_price = df.filter(df.avg_price > 0).orderBy(df.avg_price.asc()).limit(10).collect()

    count_ranking = []

    for row in top_brands_by_count:

        brand_data = {"name": row.name, "store_count": row.store_count, "avg_price": row.avg_price}

        count_ranking.append(brand_data)

    price_ranking_high = []

    for row in top_brands_by_price:

        brand_data = {"name": row.name, "store_count": row.store_count, "avg_price": row.avg_price}

        price_ranking_high.append(brand_data)

    price_ranking_low = []

    for row in bottom_brands_by_price:

        brand_data = {"name": row.name, "store_count": row.store_count, "avg_price": row.avg_price}

        price_ranking_low.append(brand_data)

    all_brands = df.select("name").collect()

    brand_names = [row.name for row in all_brands]

    word_list = []

    for name in brand_names:

        words = jieba.cut(name)

        word_list.extend([word for word in words if len(word) > 1])

    word_freq = Counter(word_list)

    word_cloud_data = [{"text": word, "value": count} for word, count in word_freq.most_common(50)]

    correlation_data = df.select("avg_price", "store_count").filter((df.avg_price > 0) & (df.store_count > 0)).collect()

    correlation_list = []

    for row in correlation_data:

        correlation_list.append({"price": float(row.avg_price), "count": int(row.store_count)})

    spark.stop()

    result = {"count_ranking": count_ranking, "price_ranking_high": price_ranking_high, "price_ranking_low": price_ranking_low, "word_cloud": word_cloud_data, "correlation": correlation_list}

    return JsonResponse(result)

def category_market_analysis(request):

    spark = initialize_spark()

    df = spark.sql("SELECT type, name, store_count, avg_price FROM drink_brands WHERE store_count > 0 AND avg_price > 0")

    category_store_total = df.groupBy("type").sum("store_count").collect()

    category_brand_count = df.groupBy("type").count().collect()

    category_avg_price = df.groupBy("type").avg("avg_price").collect()

    category_avg_scale = df.groupBy("type").avg("store_count").collect()

    store_distribution = []

    for row in category_store_total:

        category_name = row.type if row.type else "未分类"

        store_distribution.append({"category": category_name, "total_stores": int(row['sum(store_count)'])})

    brand_diversity = []

    for row in category_brand_count:

        category_name = row.type if row.type else "未分类"

        brand_diversity.append({"category": category_name, "brand_count": int(row.count)})

    price_comparison = []

    for row in category_avg_price:

        category_name = row.type if row.type else "未分类"

        price_comparison.append({"category": category_name, "avg_price": round(float(row['avg(avg_price)']), 2)})

    scale_analysis = []

    for row in category_avg_scale:

        category_name = row.type if row.type else "未分类"

        scale_analysis.append({"category": category_name, "avg_scale": round(float(row['avg(store_count)']), 2)})

    tea_analysis = df.filter(df.type == "茶饮").select("avg_price", "store_count").collect()

    tea_price_scale = []

    for row in tea_analysis:

        tea_price_scale.append({"price": float(row.avg_price), "scale": int(row.store_count)})

    coffee_analysis = df.filter(df.type == "咖啡").select("avg_price", "store_count").collect()

    coffee_price_scale = []

    for row in coffee_analysis:

        coffee_price_scale.append({"price": float(row.avg_price), "scale": int(row.store_count)})

    spark.stop()

    result = {"store_distribution": store_distribution, "brand_diversity": brand_diversity, "price_comparison": price_comparison, "scale_analysis": scale_analysis, "tea_analysis": tea_price_scale, "coffee_analysis": coffee_price_scale}

    return JsonResponse(result)

def clustering_potential_analysis(request):

    spark = initialize_spark()

    df = spark.sql("SELECT name, type, avg_price, store_count FROM drink_brands WHERE avg_price > 0 AND store_count > 0")

    pandas_df = df.toPandas()

    feature_cols = ["avg_price", "store_count"]

    assembler = VectorAssembler(inputCols=feature_cols, outputCol="features")

    spark_df = spark.createDataFrame(pandas_df)

    vector_df = assembler.transform(spark_df)

    kmeans = KMeans(k=4, seed=42, featuresCol="features", predictionCol="cluster")

    model = kmeans.fit(vector_df)

    predictions = model.transform(vector_df)

    result_df = predictions.select("name", "type", "avg_price", "store_count", "cluster").collect()

    cluster_results = []

    for row in result_df:

        cluster_results.append({"name": row.name, "type": row.type, "avg_price": float(row.avg_price), "store_count": int(row.store_count), "cluster": int(row.cluster)})

    cluster_centers = model.clusterCenters()

    cluster_characteristics = []

    for i, center in enumerate(cluster_centers):

        cluster_characteristics.append({"cluster_id": i, "avg_price_center": round(float(center[0]), 2), "store_count_center": round(float(center[1]), 2)})

    cluster_type_distribution = {}

    for row in result_df:

        cluster_id = int(row.cluster)

        brand_type = row.type if row.type else "未分类"

        if cluster_id not in cluster_type_distribution:

            cluster_type_distribution[cluster_id] = {}

        if brand_type not in cluster_type_distribution[cluster_id]:

            cluster_type_distribution[cluster_id][brand_type] = 0

        cluster_type_distribution[cluster_id][brand_type] += 1

    type_distribution_result = []

    for cluster_id, type_counts in cluster_type_distribution.items():

        for brand_type, count in type_counts.items():

            type_distribution_result.append({"cluster_id": cluster_id, "type": brand_type, "count": count})

    price_ranges = [0, 10, 20, 30, float('inf')]

    price_distribution = {}

    for i in range(len(price_ranges) - 1):

        range_name = f"{price_ranges[i]}-{price_ranges[i+1] if price_ranges[i+1] != float('inf') else '30+'}元"

        price_distribution[range_name] = 0

    for row in result_df:

        price = float(row.avg_price)

        for i in range(len(price_ranges) - 1):

            if price_ranges[i] <= price < price_ranges[i+1]:

                range_name = f"{price_ranges[i]}-{price_ranges[i+1] if price_ranges[i+1] != float('inf') else '30+'}元"

                price_distribution[range_name] += 1

                break

    price_dist_result = [{"range": k, "count": v} for k, v in price_distribution.items()]

    spark.stop()

    result = {"cluster_results": cluster_results, "cluster_characteristics": cluster_characteristics, "type_distribution": type_distribution_result, "price_distribution": price_dist_result}

    return JsonResponse(result)

基于大数据技术的全国饮品门店分析系统成功逆袭经验-结语

💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。