【数据分析】基于大数据的餐饮外卖平台数据分析系统 | 大数据毕设实战项目 大数据选题推荐 数据可视化大屏 Hadoop SPark java Python

63 阅读7分钟

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

基于大数据的餐饮外卖平台数据分析系统介绍

基于大数据的餐饮外卖平台数据分析系统是一个集数据采集、存储、处理、分析和可视化于一体的综合性平台。该系统采用Hadoop+Spark大数据技术框架作为核心处理引擎,结合Django后端框架和Vue前端技术,构建了完整的数据分析解决方案。系统主要围绕餐饮外卖行业的海量数据进行深度挖掘和分析,通过HDFS分布式存储管理外卖订单数据、用户行为数据、商家经营数据等多维度信息,利用Spark SQL和Pandas进行数据清洗与预处理。平台提供了11个核心功能模块,包括系统首页、用户管理、餐饮外卖数据管理、大屏可视化展示、消费行为分析、菜品销售分析、市场竞争分析、商家经营分析、平台运营分析和用户体验分析等。系统通过Echarts图表库实现数据的可视化呈现,为餐饮外卖平台的运营决策提供科学依据,同时也为大数据技术在实际业务场景中的应用提供了完整的实践案例。

基于大数据的餐饮外卖平台数据分析系统演示视频

演示视频

基于大数据的餐饮外卖平台数据分析系统演示图片

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

基于大数据的餐饮外卖平台数据分析系统代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import pandas as pd
import numpy as np
from datetime import datetime, timedelta

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

@csrf_exempt
def consumption_behavior_analysis(request):
    order_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/restaurant_db").option("dbtable", "orders").option("user", "root").option("password", "123456").load()
    user_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/restaurant_db").option("dbtable", "users").option("user", "root").option("password", "123456").load()
    joined_df = order_df.join(user_df, "user_id", "inner")
    time_analysis = joined_df.withColumn("hour", hour("order_time")).groupBy("hour").agg(count("order_id").alias("order_count"), avg("total_amount").alias("avg_amount"))
    age_analysis = joined_df.withColumn("age_group", when(col("age") < 25, "18-25").when(col("age") < 35, "25-35").when(col("age") < 45, "35-45").otherwise("45+")).groupBy("age_group").agg(count("order_id").alias("order_count"), avg("total_amount").alias("avg_spending"))
    frequency_analysis = joined_df.groupBy("user_id").agg(count("order_id").alias("order_frequency"), sum("total_amount").alias("total_spending")).withColumn("customer_level", when(col("order_frequency") >= 20, "高频用户").when(col("order_frequency") >= 10, "中频用户").otherwise("低频用户"))
    preference_analysis = joined_df.groupBy("category", "age_group").agg(count("order_id").alias("category_orders")).orderBy(desc("category_orders"))
    region_analysis = joined_df.groupBy("delivery_address").agg(count("order_id").alias("orders"), avg("delivery_time").alias("avg_delivery_time")).orderBy(desc("orders"))
    payment_analysis = joined_df.groupBy("payment_method").agg(count("order_id").alias("payment_count"), avg("total_amount").alias("avg_payment_amount"))
    time_trend = joined_df.withColumn("date", to_date("order_time")).groupBy("date").agg(count("order_id").alias("daily_orders"), sum("total_amount").alias("daily_revenue")).orderBy("date")
    time_df = time_analysis.toPandas()
    age_df = age_analysis.toPandas()
    freq_df = frequency_analysis.toPandas()
    pref_df = preference_analysis.toPandas()
    region_df = region_analysis.toPandas()
    payment_df = payment_analysis.toPandas()
    trend_df = time_trend.toPandas()
    result_data = {"time_distribution": time_df.to_dict('records'), "age_analysis": age_df.to_dict('records'), "frequency_analysis": freq_df.to_dict('records'), "preference_analysis": pref_df.to_dict('records'), "region_analysis": region_df.to_dict('records'), "payment_analysis": payment_df.to_dict('records'), "trend_analysis": trend_df.to_dict('records')}
    return JsonResponse({"status": "success", "data": result_data})

@csrf_exempt
def dish_sales_analysis(request):
    order_detail_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/restaurant_db").option("dbtable", "order_details").option("user", "root").option("password", "123456").load()
    dish_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/restaurant_db").option("dbtable", "dishes").option("user", "root").option("password", "123456").load()
    restaurant_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/restaurant_db").option("dbtable", "restaurants").option("user", "root").option("password", "123456").load()
    sales_df = order_detail_df.join(dish_df, "dish_id", "inner").join(restaurant_df, "restaurant_id", "inner")
    top_dishes = sales_df.groupBy("dish_id", "dish_name").agg(sum("quantity").alias("total_quantity"), sum("subtotal").alias("total_revenue"), count("order_id").alias("order_count")).orderBy(desc("total_quantity")).limit(20)
    category_sales = sales_df.groupBy("category").agg(sum("quantity").alias("category_quantity"), sum("subtotal").alias("category_revenue"), avg("price").alias("avg_price")).orderBy(desc("category_revenue"))
    restaurant_performance = sales_df.groupBy("restaurant_id", "restaurant_name").agg(sum("quantity").alias("total_sold"), sum("subtotal").alias("restaurant_revenue"), countDistinct("dish_id").alias("dish_variety")).orderBy(desc("restaurant_revenue"))
    price_analysis = sales_df.withColumn("price_range", when(col("price") < 20, "低价位").when(col("price") < 50, "中价位").otherwise("高价位")).groupBy("price_range").agg(sum("quantity").alias("range_quantity"), avg("subtotal").alias("avg_order_value"))
    time_sales = sales_df.withColumn("hour", hour("created_at")).groupBy("hour").agg(sum("quantity").alias("hourly_sales"), sum("subtotal").alias("hourly_revenue"))
    seasonal_analysis = sales_df.withColumn("month", month("created_at")).groupBy("month", "category").agg(sum("quantity").alias("monthly_sales")).orderBy("month", desc("monthly_sales"))
    profit_analysis = sales_df.withColumn("profit", col("subtotal") - col("cost")).groupBy("dish_id", "dish_name").agg(sum("profit").alias("total_profit"), avg("profit").alias("avg_profit")).orderBy(desc("total_profit"))
    inventory_turnover = sales_df.groupBy("dish_id", "dish_name").agg(sum("quantity").alias("sold_quantity"), avg("stock_quantity").alias("avg_stock")).withColumn("turnover_rate", col("sold_quantity") / col("avg_stock")).orderBy(desc("turnover_rate"))
    top_dishes_df = top_dishes.toPandas()
    category_df = category_sales.toPandas()
    restaurant_df_result = restaurant_performance.toPandas()
    price_df = price_analysis.toPandas()
    time_df = time_sales.toPandas()
    seasonal_df = seasonal_analysis.toPandas()
    profit_df = profit_analysis.toPandas()
    turnover_df = inventory_turnover.toPandas()
    analysis_result = {"top_dishes": top_dishes_df.to_dict('records'), "category_sales": category_df.to_dict('records'), "restaurant_performance": restaurant_df_result.to_dict('records'), "price_analysis": price_df.to_dict('records'), "time_sales": time_df.to_dict('records'), "seasonal_analysis": seasonal_df.to_dict('records'), "profit_analysis": profit_df.to_dict('records'), "inventory_turnover": turnover_df.to_dict('records')}
    return JsonResponse({"status": "success", "data": analysis_result})

@csrf_exempt
def platform_operation_analysis(request):
    orders_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/restaurant_db").option("dbtable", "orders").option("user", "root").option("password", "123456").load()
    restaurants_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/restaurant_db").option("dbtable", "restaurants").option("user", "root").option("password", "123456").load()
    users_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/restaurant_db").option("dbtable", "users").option("user", "root").option("password", "123456").load()
    operation_df = orders_df.join(restaurants_df, "restaurant_id", "inner").join(users_df, "user_id", "inner")
    daily_metrics = operation_df.withColumn("date", to_date("order_time")).groupBy("date").agg(count("order_id").alias("daily_orders"), sum("total_amount").alias("daily_revenue"), countDistinct("user_id").alias("active_users"), countDistinct("restaurant_id").alias("active_restaurants"))
    user_retention = users_df.withColumn("registration_month", date_format("registration_date", "yyyy-MM")).groupBy("registration_month").agg(count("user_id").alias("new_users"))
    order_retention = operation_df.withColumn("order_month", date_format("order_time", "yyyy-MM")).groupBy("order_month", "user_id").agg(count("order_id").alias("monthly_orders")).groupBy("order_month").agg(count("user_id").alias("active_users_monthly"))
    delivery_performance = operation_df.groupBy("delivery_status").agg(count("order_id").alias("status_count"), avg("delivery_time").alias("avg_delivery_time"))
    commission_analysis = operation_df.withColumn("commission", col("total_amount") * 0.15).groupBy("restaurant_id", "restaurant_name").agg(sum("commission").alias("total_commission"), count("order_id").alias("order_volume")).orderBy(desc("total_commission"))
    geographic_distribution = operation_df.groupBy("city", "district").agg(count("order_id").alias("area_orders"), sum("total_amount").alias("area_revenue"), countDistinct("restaurant_id").alias("restaurant_count"))
    peak_analysis = operation_df.withColumn("hour", hour("order_time")).withColumn("weekday", dayofweek("order_time")).groupBy("hour", "weekday").agg(count("order_id").alias("hourly_orders")).orderBy(desc("hourly_orders"))
    customer_value = operation_df.groupBy("user_id").agg(sum("total_amount").alias("lifetime_value"), count("order_id").alias("order_frequency"), avg("total_amount").alias("avg_order_value")).withColumn("customer_segment", when(col("lifetime_value") > 1000, "高价值客户").when(col("lifetime_value") > 300, "中价值客户").otherwise("低价值客户"))
    platform_growth = operation_df.withColumn("month", date_format("order_time", "yyyy-MM")).groupBy("month").agg(count("order_id").alias("monthly_orders"), sum("total_amount").alias("monthly_revenue"), countDistinct("user_id").alias("monthly_active_users")).orderBy("month")
    daily_df = daily_metrics.toPandas()
    retention_df = user_retention.toPandas()
    order_ret_df = order_retention.toPandas()
    delivery_df = delivery_performance.toPandas()
    commission_df = commission_analysis.toPandas()
    geo_df = geographic_distribution.toPandas()
    peak_df = peak_analysis.toPandas()
    value_df = customer_value.toPandas()
    growth_df = platform_growth.toPandas()
    platform_data = {"daily_metrics": daily_df.to_dict('records'), "user_retention": retention_df.to_dict('records'), "order_retention": order_ret_df.to_dict('records'), "delivery_performance": delivery_df.to_dict('records'), "commission_analysis": commission_df.to_dict('records'), "geographic_data": geo_df.to_dict('records'), "peak_analysis": peak_df.to_dict('records'), "customer_value": value_df.to_dict('records'), "growth_trends": growth_df.to_dict('records')}
    return JsonResponse({"status": "success", "data": platform_data})

基于大数据的餐饮外卖平台数据分析系统文档展示

在这里插入图片描述

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