💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐
基于大数据的海底捞门店数据可视化系统介绍
基于大数据的海底捞门店数据可视化系统是一个综合运用Hadoop和Spark大数据框架的门店经营分析平台,系统采用HDFS作为分布式存储方案,通过Spark SQL对海量门店数据进行快速查询与计算处理。前端采用Vue框架结合Echarts图表库实现数据的多维度可视化展示,后端提供Python+Django和Java+SpringBoot双版本技术实现方案,开发者可根据技术栈偏好灵活选择。系统包含用户权限管理、海底捞门店数据管理、市场竞争分析、经营策略分析、空间分布分析以及门店选址分析等九大功能模块,能够对门店的销售数据、客流量、营收情况、区域分布等多维度信息进行采集、存储、计算和可视化呈现。通过Pandas和NumPy进行数据清洗与预处理,利用Spark的分布式计算能力处理大规模门店运营数据,最终以Echarts图表形式直观展示分析结果,为门店经营决策提供数据支撑。整个系统架构清晰,技术栈完整,涵盖了从数据采集、存储、计算到可视化展示的完整业务流程。
基于大数据的海底捞门店数据可视化系统演示视频
基于大数据的海底捞门店数据可视化系统演示图片
基于大数据的海底捞门店数据可视化系统代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, avg, count, desc, when, round
from django.http import JsonResponse
from django.views import View
import json
spark = SparkSession.builder.appName("HaidilaoStoreAnalysis").config("spark.sql.warehouse.dir", "/user/hive/warehouse").config("spark.executor.memory", "2g").config("spark.driver.memory", "1g").enableHiveSupport().getOrCreate()
class MarketCompetitionAnalysisView(View):
def get(self, request):
store_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/haidilao_db").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "store_data").option("user", "root").option("password", "123456").load()
store_df.createOrReplaceTempView("stores")
region_competition = spark.sql("SELECT region, COUNT(*) as store_count, AVG(monthly_revenue) as avg_revenue, SUM(customer_flow) as total_flow FROM stores GROUP BY region ORDER BY store_count DESC")
region_list = region_competition.collect()
competition_data = []
for row in region_list:
region_name = row['region']
store_num = int(row['store_count'])
average_revenue = float(row['avg_revenue']) if row['avg_revenue'] else 0
total_customer = int(row['total_flow']) if row['total_flow'] else 0
market_concentration = round(store_num / region_competition.count() * 100, 2)
competition_intensity = "高竞争" if store_num > 10 else "中竞争" if store_num > 5 else "低竞争"
competition_data.append({"region": region_name, "storeCount": store_num, "avgRevenue": round(average_revenue, 2), "totalCustomerFlow": total_customer, "marketShare": market_concentration, "competitionLevel": competition_intensity})
competitor_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/haidilao_db").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "competitor_data").option("user", "root").option("password", "123456").load()
competitor_df.createOrReplaceTempView("competitors")
brand_comparison = spark.sql("SELECT brand_name, AVG(price_level) as avg_price, AVG(rating_score) as avg_rating, COUNT(store_id) as branch_count FROM competitors GROUP BY brand_name ORDER BY avg_rating DESC LIMIT 5")
competitor_list = brand_comparison.collect()
competitor_analysis = []
for comp in competitor_list:
brand = comp['brand_name']
price = float(comp['avg_price']) if comp['avg_price'] else 0
rating = float(comp['avg_rating']) if comp['avg_rating'] else 0
branches = int(comp['branch_count'])
threat_level = "高威胁" if rating > 4.5 and branches > 50 else "中威胁" if rating > 4.0 else "低威胁"
competitor_analysis.append({"brandName": brand, "avgPrice": round(price, 2), "avgRating": round(rating, 2), "branchCount": branches, "threatLevel": threat_level})
return JsonResponse({"code": 200, "message": "市场竞争分析成功", "regionCompetition": competition_data, "competitorAnalysis": competitor_analysis})
class BusinessStrategyAnalysisView(View):
def get(self, request):
store_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/haidilao_db").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "store_data").option("user", "root").option("password", "123456").load()
store_df.createOrReplaceTempView("business_stores")
revenue_analysis = spark.sql("SELECT store_id, store_name, monthly_revenue, customer_flow, employee_count, operating_cost FROM business_stores WHERE monthly_revenue IS NOT NULL AND customer_flow > 0")
revenue_df = revenue_analysis.withColumn("profit_margin", round((col("monthly_revenue") - col("operating_cost")) / col("monthly_revenue") * 100, 2))
revenue_df = revenue_df.withColumn("per_customer_revenue", round(col("monthly_revenue") / col("customer_flow"), 2))
revenue_df = revenue_df.withColumn("employee_efficiency", round(col("monthly_revenue") / col("employee_count"), 2))
revenue_df = revenue_df.withColumn("performance_level", when(col("profit_margin") > 30, "优秀").when(col("profit_margin") > 20, "良好").when(col("profit_margin") > 10, "一般").otherwise("待改进"))
strategy_result = revenue_df.select("store_id", "store_name", "monthly_revenue", "customer_flow", "profit_margin", "per_customer_revenue", "employee_efficiency", "performance_level").orderBy(desc("profit_margin")).limit(20)
strategy_list = strategy_result.collect()
business_strategy = []
for store in strategy_list:
store_info = {"storeId": store['store_id'], "storeName": store['store_name'], "monthlyRevenue": float(store['monthly_revenue']), "customerFlow": int(store['customer_flow']), "profitMargin": float(store['profit_margin']), "perCustomerRevenue": float(store['per_customer_revenue']), "employeeEfficiency": float(store['employee_efficiency']), "performanceLevel": store['performance_level']}
if store['profit_margin'] < 15:
store_info['suggestion'] = "建议优化成本结构,提高运营效率"
elif store['per_customer_revenue'] < 80:
store_info['suggestion'] = "建议提升客单价,增加增值服务"
elif store['employee_efficiency'] < 50000:
store_info['suggestion'] = "建议加强员工培训,提升人效"
else:
store_info['suggestion'] = "继续保持当前经营策略"
business_strategy.append(store_info)
avg_metrics = spark.sql("SELECT AVG(monthly_revenue) as industry_avg_revenue, AVG((monthly_revenue - operating_cost) / monthly_revenue * 100) as industry_avg_margin FROM business_stores WHERE monthly_revenue > 0")
industry_data = avg_metrics.collect()[0]
industry_benchmark = {"industryAvgRevenue": round(float(industry_data['industry_avg_revenue']), 2), "industryAvgMargin": round(float(industry_data['industry_avg_margin']), 2)}
return JsonResponse({"code": 200, "message": "经营策略分析完成", "strategyData": business_strategy, "industryBenchmark": industry_benchmark})
class StoreLocationAnalysisView(View):
def post(self, request):
params = json.loads(request.body)
target_region = params.get('region', '')
min_population = params.get('minPopulation', 50000)
max_rent = params.get('maxRent', 200000)
location_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/haidilao_db").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "location_candidates").option("user", "root").option("password", "123456").load()
location_df.createOrReplaceTempView("locations")
existing_stores = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/haidilao_db").option("driver", "com.mysql.cj.jdbc.Driver").option("dbtable", "store_data").option("user", "root").option("password", "123456").load()
existing_stores.createOrReplaceTempView("existing")
filter_condition = f"region = '{target_region}'" if target_region else "1=1"
candidate_query = f"SELECT location_id, location_name, region, population_density, commercial_index, rent_cost, traffic_convenience, competitor_distance FROM locations WHERE {filter_condition} AND population_density >= {min_population} AND rent_cost <= {max_rent}"
candidates = spark.sql(candidate_query)
scored_locations = candidates.withColumn("population_score", round(col("population_density") / 10000 * 30, 2))
scored_locations = scored_locations.withColumn("commercial_score", col("commercial_index") * 25)
scored_locations = scored_locations.withColumn("rent_score", round((max_rent - col("rent_cost")) / max_rent * 20, 2))
scored_locations = scored_locations.withColumn("traffic_score", col("traffic_convenience") * 15)
scored_locations = scored_locations.withColumn("competition_score", round(when(col("competitor_distance") > 2000, 10).when(col("competitor_distance") > 1000, 7).when(col("competitor_distance") > 500, 4).otherwise(1), 2))
scored_locations = scored_locations.withColumn("total_score", round(col("population_score") + col("commercial_score") + col("rent_score") + col("traffic_score") + col("competition_score"), 2))
scored_locations = scored_locations.withColumn("recommendation_level", when(col("total_score") >= 80, "强烈推荐").when(col("total_score") >= 60, "推荐").when(col("total_score") >= 40, "可考虑").otherwise("不推荐"))
final_result = scored_locations.select("location_id", "location_name", "region", "population_density", "commercial_index", "rent_cost", "traffic_convenience", "competitor_distance", "total_score", "recommendation_level").orderBy(desc("total_score")).limit(15)
result_list = final_result.collect()
location_recommendations = []
for loc in result_list:
location_info = {"locationId": loc['location_id'], "locationName": loc['location_name'], "region": loc['region'], "populationDensity": int(loc['population_density']), "commercialIndex": float(loc['commercial_index']), "rentCost": float(loc['rent_cost']), "trafficConvenience": float(loc['traffic_convenience']), "competitorDistance": float(loc['competitor_distance']), "totalScore": float(loc['total_score']), "recommendationLevel": loc['recommendation_level']}
risk_factors = []
if loc['competitor_distance'] < 500:
risk_factors.append("竞争对手距离过近")
if loc['rent_cost'] > max_rent * 0.8:
risk_factors.append("租金成本偏高")
if loc['traffic_convenience'] < 6:
risk_factors.append("交通便利性一般")
location_info['riskFactors'] = risk_factors if risk_factors else ["暂无明显风险"]
location_recommendations.append(location_info)
return JsonResponse({"code": 200, "message": "选址分析完成", "recommendations": location_recommendations})
基于大数据的海底捞门店数据可视化系统文档展示
💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐