💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目
基于大数据的瑞幸咖啡全国门店数据分析系统介绍
瑞幸咖啡门店大数据分析系统是基于Hadoop+Spark大数据框架构建的企业级数据分析平台,采用Python作为主要开发语言,结合Django后端框架和Vue+ElementUI+Echarts前端技术栈实现。系统通过HDFS分布式存储管理全国瑞幸咖啡门店的海量数据,利用Spark SQL进行高效的数据处理和分析,支持万级数据的实时计算和批处理操作。平台包含九大核心功能模块:系统首页、我的信息、用户管理、瑞幸咖啡门店管理、可视化大屏、核心市场竞争力分析、门店选址价值分析、全国宏观战略分析以及店铺运营特征分析。系统运用Pandas和NumPy进行数据预处理和统计分析,通过Echarts图表库实现多维度数据可视化展示,为瑞幸咖啡的经营决策提供科学的数据支撑,同时展现了大数据技术在新零售行业中的实际应用价值。
基于大数据的瑞幸咖啡全国门店数据分析系统演示视频
基于大数据的瑞幸咖啡全国门店数据分析系统演示图片
基于大数据的瑞幸咖啡全国门店数据分析系统代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, avg, sum, desc, asc, when, lit
from django.http import JsonResponse
from django.views import View
import pandas as pd
import numpy as np
spark = SparkSession.builder.appName("LuckinCoffeeAnalysis").config("spark.sql.adaptive.enabled", "true").getOrCreate()
def store_location_analysis(request):
"""门店选址价值分析核心功能"""
df = spark.read.option("header", "true").csv("hdfs://localhost:9000/luckin/store_data.csv")
df.createOrReplaceTempView("stores")
city_analysis = spark.sql("""
SELECT city, district, COUNT(*) as store_count,
AVG(monthly_sales) as avg_sales,
AVG(customer_flow) as avg_flow,
AVG(rent_cost) as avg_rent
FROM stores
GROUP BY city, district
ORDER BY avg_sales DESC
""")
location_score_df = city_analysis.withColumn("location_score",
when(col("avg_sales") > 50000, lit(5))
.when(col("avg_sales") > 30000, lit(4))
.when(col("avg_sales") > 20000, lit(3))
.when(col("avg_sales") > 10000, lit(2))
.otherwise(lit(1)))
high_value_locations = location_score_df.filter(col("location_score") >= 4).collect()
location_data = []
for location in high_value_locations:
rent_ratio = location['avg_rent'] / location['avg_sales'] if location['avg_sales'] > 0 else 0
flow_efficiency = location['avg_sales'] / location['avg_flow'] if location['avg_flow'] > 0 else 0
location_data.append({
'city': location['city'],
'district': location['district'],
'store_count': location['store_count'],
'avg_sales': round(location['avg_sales'], 2),
'avg_flow': round(location['avg_flow'], 2),
'rent_ratio': round(rent_ratio, 4),
'flow_efficiency': round(flow_efficiency, 2),
'location_score': location['location_score']
})
competitor_analysis = spark.sql("""
SELECT city, district,
COUNT(CASE WHEN brand = 'starbucks' THEN 1 END) as starbucks_count,
COUNT(CASE WHEN brand = 'costa' THEN 1 END) as costa_count,
COUNT(CASE WHEN brand = 'luckin' THEN 1 END) as luckin_count
FROM competitor_stores
GROUP BY city, district
""").collect()
competition_data = []
for comp in competitor_analysis:
total_competitors = comp['starbucks_count'] + comp['costa_count']
market_share = comp['luckin_count'] / (comp['luckin_count'] + total_competitors) if (comp['luckin_count'] + total_competitors) > 0 else 0
competition_intensity = 'high' if total_competitors >= 5 else 'medium' if total_competitors >= 2 else 'low'
competition_data.append({
'city': comp['city'],
'district': comp['district'],
'market_share': round(market_share, 4),
'competition_intensity': competition_intensity,
'competitor_count': total_competitors
})
return JsonResponse({
'location_analysis': location_data,
'competition_analysis': competition_data,
'status': 'success'
})
def market_competition_analysis(request):
"""核心市场竞争力分析功能"""
stores_df = spark.read.option("header", "true").csv("hdfs://localhost:9000/luckin/market_data.csv")
stores_df.createOrReplaceTempView("market_data")
brand_performance = spark.sql("""
SELECT brand, city,
COUNT(*) as store_count,
SUM(monthly_revenue) as total_revenue,
AVG(customer_satisfaction) as avg_satisfaction,
AVG(order_frequency) as avg_frequency
FROM market_data
GROUP BY brand, city
ORDER BY total_revenue DESC
""")
luckin_performance = brand_performance.filter(col("brand") == "luckin").collect()
competitor_performance = brand_performance.filter(col("brand") != "luckin").collect()
performance_comparison = []
for luckin_data in luckin_performance:
city_name = luckin_data['city']
luckin_revenue = luckin_data['total_revenue']
luckin_stores = luckin_data['store_count']
luckin_satisfaction = luckin_data['avg_satisfaction']
city_competitors = [comp for comp in competitor_performance if comp['city'] == city_name]
total_competitor_revenue = sum([comp['total_revenue'] for comp in city_competitors])
total_competitor_stores = sum([comp['store_count'] for comp in city_competitors])
market_share_revenue = luckin_revenue / (luckin_revenue + total_competitor_revenue) if (luckin_revenue + total_competitor_revenue) > 0 else 0
market_share_stores = luckin_stores / (luckin_stores + total_competitor_stores) if (luckin_stores + total_competitor_stores) > 0 else 0
revenue_per_store = luckin_revenue / luckin_stores if luckin_stores > 0 else 0
competitive_advantage = 'strong' if market_share_revenue >= 0.4 else 'moderate' if market_share_revenue >= 0.25 else 'weak'
performance_comparison.append({
'city': city_name,
'luckin_revenue': luckin_revenue,
'luckin_stores': luckin_stores,
'market_share_revenue': round(market_share_revenue, 4),
'market_share_stores': round(market_share_stores, 4),
'revenue_per_store': round(revenue_per_store, 2),
'satisfaction_score': round(luckin_satisfaction, 2),
'competitive_advantage': competitive_advantage,
'competitor_count': len(city_competitors)
})
growth_trend_analysis = spark.sql("""
SELECT city, quarter,
SUM(CASE WHEN brand = 'luckin' THEN new_stores ELSE 0 END) as luckin_growth,
SUM(CASE WHEN brand != 'luckin' THEN new_stores ELSE 0 END) as competitor_growth,
AVG(CASE WHEN brand = 'luckin' THEN market_penetration ELSE 0 END) as luckin_penetration
FROM market_growth
GROUP BY city, quarter
ORDER BY city, quarter
""").collect()
growth_data = []
for growth in growth_trend_analysis:
growth_rate = (growth['luckin_growth'] - growth['competitor_growth']) / growth['competitor_growth'] if growth['competitor_growth'] > 0 else 0
trend_direction = 'positive' if growth_rate > 0 else 'negative' if growth_rate < 0 else 'stable'
growth_data.append({
'city': growth['city'],
'quarter': growth['quarter'],
'luckin_growth': growth['luckin_growth'],
'competitor_growth': growth['competitor_growth'],
'growth_rate': round(growth_rate, 4),
'trend_direction': trend_direction,
'market_penetration': round(growth['luckin_penetration'], 4)
})
return JsonResponse({
'performance_comparison': performance_comparison,
'growth_analysis': growth_data,
'status': 'success'
})
def operational_analysis(request):
"""店铺运营特征分析功能"""
operations_df = spark.read.option("header", "true").csv("hdfs://localhost:9000/luckin/operations_data.csv")
operations_df.createOrReplaceTempView("operations")
operational_metrics = spark.sql("""
SELECT store_id, store_name, city, district,
AVG(daily_orders) as avg_daily_orders,
AVG(peak_hour_orders) as avg_peak_orders,
AVG(customer_wait_time) as avg_wait_time,
SUM(daily_revenue) as total_revenue,
AVG(staff_efficiency) as avg_efficiency,
COUNT(DISTINCT order_date) as operating_days
FROM operations
GROUP BY store_id, store_name, city, district
""")
performance_categorization = operational_metrics.withColumn("performance_level",
when(col("avg_daily_orders") > 200, lit("excellent"))
.when(col("avg_daily_orders") > 150, lit("good"))
.when(col("avg_daily_orders") > 100, lit("average"))
.otherwise(lit("below_average")))
categorized_stores = performance_categorization.collect()
operational_analysis_data = []
for store in categorized_stores:
revenue_per_order = store['total_revenue'] / (store['avg_daily_orders'] * store['operating_days']) if (store['avg_daily_orders'] * store['operating_days']) > 0 else 0
peak_ratio = store['avg_peak_orders'] / store['avg_daily_orders'] if store['avg_daily_orders'] > 0 else 0
efficiency_score = min(100, max(0, (store['avg_efficiency'] * 20)))
wait_time_score = max(0, 100 - (store['avg_wait_time'] * 10))
overall_score = (efficiency_score + wait_time_score) / 2
operational_grade = 'A' if overall_score >= 80 else 'B' if overall_score >= 70 else 'C' if overall_score >= 60 else 'D'
operational_analysis_data.append({
'store_id': store['store_id'],
'store_name': store['store_name'],
'city': store['city'],
'district': store['district'],
'avg_daily_orders': round(store['avg_daily_orders'], 2),
'avg_peak_orders': round(store['avg_peak_orders'], 2),
'avg_wait_time': round(store['avg_wait_time'], 2),
'total_revenue': store['total_revenue'],
'revenue_per_order': round(revenue_per_order, 2),
'peak_ratio': round(peak_ratio, 4),
'efficiency_score': round(efficiency_score, 2),
'wait_time_score': round(wait_time_score, 2),
'overall_score': round(overall_score, 2),
'operational_grade': operational_grade,
'performance_level': store['performance_level']
})
time_analysis = spark.sql("""
SELECT hour_of_day,
AVG(orders_count) as avg_hourly_orders,
AVG(revenue) as avg_hourly_revenue,
COUNT(DISTINCT store_id) as active_stores
FROM hourly_operations
GROUP BY hour_of_day
ORDER BY hour_of_day
""").collect()
hourly_patterns = []
for hour_data in time_analysis:
hour = hour_data['hour_of_day']
orders = hour_data['avg_hourly_orders']
revenue = hour_data['avg_hourly_revenue']
business_period = 'peak' if hour in [8, 9, 10, 14, 15, 16] else 'normal' if hour in [11, 12, 13, 17, 18] else 'low'
revenue_per_order = revenue / orders if orders > 0 else 0
hourly_patterns.append({
'hour': hour,
'avg_orders': round(orders, 2),
'avg_revenue': round(revenue, 2),
'revenue_per_order': round(revenue_per_order, 2),
'business_period': business_period,
'active_stores': hour_data['active_stores']
})
return JsonResponse({
'operational_analysis': operational_analysis_data,
'hourly_patterns': hourly_patterns,
'status': 'success'
})
基于大数据的瑞幸咖啡全国门店数据分析系统文档展示
💖💖作者:计算机毕业设计江挽 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目