智慧食堂数据分析系统

智慧食堂数据分析系统|大数据分析|数据可视化

Demo

  • Repo:https://github.com/sylvanding/AI-Restaurant-Data-Analysis
  • 项目演示(模拟真实运行环境):http://analysis.sylvanding.online
  • 数据展示静态页面:http://sylvanding.github.io/AI-Restaurant-Data-Analysis
  • Username: admin
  • Password: 123456

Table of Contents

  • AI Restaurant Data Analysis
    • Demo
    • Background
    • Features
    • Database
    • 数据处理
    • ARIMA时间序列预测销售额
    • 前端框架
    • 后端框架
    • 业务需求一
      • 1.1 需求设计
      • 1.2 核心代码
      • 1.3 效果展示
    • 业务需求二
      • 2.1 需求设计
      • 2.2 核心代码
      • 2.3 效果展示
    • 业务需求三
      • 3.1 需求设计
      • 3.2 核心代码
      • 3.3 效果展示
    • 业务需求四
      • 4.1 需求设计
      • 4.2 核心代码
      • 4.3 效果展示
    • 业务需求五
      • 5.1 需求设计
      • 5.2 核心代码
      • 5.3 效果展示
    • 业务需求六
      • 6.1 需求设计
      • 6.2 核心代码
      • 6.3 效果展示
    • 业务需求七
      • 7.1 需求设计
      • 7.2 核心代码
      • 7.3 效果展示
    • 总体效果展示
    • Conclusion
      • 符合预期的项目结果
      • 项目需要改进的地方
    • Contributor

Background

随着高校招生规模的不断扩大,传统的食堂生产方式及经营理念已成为高校发展的瓶颈。

由于高校学生饮食需求的多样化,个性化日益复杂,传统食堂已经逐渐失去竞争力。因为缺乏学生满意度反馈,亦或是反馈获取时间长,渠道单一,使得食堂运营管理具有滞后性,无法及时发现和改善问题。在食堂财务方面,需要大量的表单数据来反映食堂销售额,比较繁琐,容易出现错误。

Features

  • 智能食堂数据分析系统后台能够将对每日食堂菜品销售数据进行清算与统计,按日返回营业额、订单量、人流量、菜品平均评分。
  • 智能食堂数据分析系统计算每一餐摄入的食物含有哪些营养成分,学生和食堂都可以通过食堂管理系统平台一目了然地看到今日摄入的营养物质。
  • 用户用餐结束后,可以通过评分功能对食堂的菜品进行点评,智慧食堂数据分析系统的后台会收集这些数据,之后会将这些数据发送给食堂管理者。

Database

在这里插入图片描述

数据量:

  • food表 100条
  • menu表 106370条
  • orderform表 35496条
  • user表 500条

数据处理

在这里插入图片描述

在这里插入图片描述

ARIMA时间序列预测销售额

在这里插入图片描述

这里是将餐厅销售额的前27天作为源数据,预测餐厅最后3天的销售额,即设置预测步数为3步,最终的结果图如下所示。

灰线为用来训练的27个数据,黑线为未来值的预测,红线为95%置信区间上下限。也就是说未来真实值有95%的概率落在这个范围内。除此之外,可以看到使用ARIMA方法进行长期预测的结果是趋势性的。

由此便完成了基于ARIMA时间序列的餐厅销售额预测,预测餐厅销售额最后三天数据分别是14733、15457和16058,观察可发现所得结果与源数据相差不大,符合价格趋势。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

前端框架

在这里插入图片描述

  • 前端采用Bootstrap响应式布局设计,兼容不同分辨率的设备,给用户提供更好的视觉使用体验。
  • 数据可视化使用ApexCharts. 相较于Echarts,ApexCharts更为轻量,图标简洁美观,可定制化程度高。但是ApexCharts文档不齐全,给开发带来了难度。
  • 请求远程数据采用jQuery的AJAX实现,进入网站时异步请求所有数据,接着渲染图表,实现数据可视化。
  • 基本实现前端静态网页样式以后,创建JSP动态网页,实现登陆和数据请求等业务。
  • JSP中的JSON解析使用阿里的Fastjson,实现json对象与JavaBean对象的转换。
  • 使用Maven管理JAVA项目,使用Git进行项目版本控制。

后端框架

在这里插入图片描述

后端采用 Spring+SpringMVC+Mybatis+Redis 框架。

  • 使用SSM框架实现八个模块共十七个接口
  • 对部分后端处理较慢的无参接口使用AOP横切织入的方式整合Redis,对Response进行序列化存储
  • 采用c3p0连接池提高复用减轻数据库压力
  • 对部分后端处理较慢的无参接口使用AOP横切织入的方式整合Redis,对Response进行序列化存储
  • 抛弃传统的JDBC,采用c3p0连接池减轻数据库压力
  • 登录业务对密码进行前后端两次MD5加密,通过写入Cookie和Redis实现单点登录

版本迭代:

7.09 项目搭建以及服务器环境搭建,实现了业务1的接口:订单按照时间聚集

7.10 发现业务1的接口Bug,给出了规避方法,实现了业务5的接口:男女消费水平差异

7.11 优化业务1的接口:返回数据按时间段升序,优化业务5的接口:中文参数名改为英文,实现了业务8的接口:按日返回营业额、订单量、人流量、平均评分

7.12 对部分接口增加了参数判断,实现了业务2的接口:返回最热门、冷门、销量最高、最低的菜品列表,找了一天的打包版本bug…

7.13 实现了业务4的接口:每天三个时间段人流量

7.14 应前端要求将业务8接口进行整合,框架整合了redis,实现了管理员登录接口以及添加了相关工具类,添加跨域请求配置,实现业务11的接口:分页查询

7.15 为业务4添加更多查询数据项,整合了总交易额接口,删除了原总交易额接口,新增三餐平均营养值接口,修复了业务8接口传参为1时会炸的bug

7.16 为部分无参接口整合了redis新增,修改部分数据接口完善登录接口

7.18 实现Cookie校验接口

业务需求一

1.1 需求设计

智慧食堂系统登录请求业务

1.2 核心代码

public class AdminLoginServiceImpl implements AdminLoginService{@Resourceprivate RedisUtil redisUtil;private AdminLoginMapper adminLoginMapper;public void setAdminLoginMapper(AdminLoginMapper adminLoginMapper) {this.adminLoginMapper = adminLoginMapper;}@Overridepublic int login(String username, String password, HttpServletRequest request, HttpServletResponse response) {//根据用户名获取用户Admin admin = adminLoginMapper.getAdminByUsername(username);if(null == admin){//用户不存在return 0;}//密码校验if(!MD5util.formPassToDBPass(password,admin.getSalt()).equals(admin.getPassword())){//密码错误return 1;}//生成CookieString ticket = UUIDUtil.uuid();//Session存入redisif(redisUtil.hasKey(username)){//单点登录需删除用户已有SessionredisUtil.del((String) redisUtil.get(username));redisUtil.del(username);}redisUtil.set(ticket,username,2000);redisUtil.set(username,ticket,2000);//写入CookieCookieUtil.setCookie(request,response,"ticket",ticket,-1);//登陆成功return 2;}@Overridepublic int getUserByCookie(HttpServletRequest request, HttpServletResponse response) {String Cookie = CookieUtil.getCookieValue(request,"ticket");if(redisUtil.hasKey(Cookie)){//重置缓存失效时间redisUtil.expire(Cookie,2000);redisUtil.expire((String) redisUtil.get(Cookie),2000);//0表示已登录状态return 0;}//1表示未登录状态,前端需重定向登录页return 1;}
}

1.3 效果展示

在这里插入图片描述

业务需求二

2.1 需求设计

显示当天的订单总数、订单平均评分、总客流量、总营业额

2.2 核心代码

-- 当天订单的平均评分
SELECT avg(X.result1) AS RESULT
FROM(SELECT menu_id,avg(mark) AS result1 FROM menu
WHERE menu_id IN
(SELECT menu_id FROM orderform WHERE DATE(TIME)='2022-06-29')
GROUP BY menu_id) X;-- 当天的总订单总数
SELECT COUNT(*) AS num
FROM orderform
WHERE DATE(TIME)='2022-06-29';-- 当天的总访客数量
SELECT COUNT(DISTINCT user_id) AS num
FROM orderform
WHERE DATE(TIME)='2022-06-29';-- 当天的总交易额
SELECT SUM(total_money)
FROM orderform
WHERE DATE(TIME)='2022-06-29';

2.3 效果展示

在这里插入图片描述

业务需求三

3.1 需求设计

显示一个月内每日总营业额、总访客量、订单平均评分、总订单数量。对数据进行归一化,显示数据的变化趋势。

3.2 核心代码

-- 30天每日订单平均评分
SELECT DATE(TIME) AS TIME,avg(X.avg_menu) AS avg_mark
FROM orderform,
(SELECT menu_id,avg(mark) AS avg_menu
FROM menu
GROUP BY menu_id) AS X
WHERE X.menu_id=orderform.menu_id
GROUP BY DATE(TIME)
ORDER BY DATE(TIME) LIMIT 30;-- 30天每日总交易额
SELECT DATE(TIME)AS TIME, SUM(total_money)
FROM orderform
GROUP BY DATE(TIME) ORDER BY TIME LIMIT 30;-- 30天每日订单数量
SELECT DATE(TIME)AS TIME, COUNT(*) AS order_num
FROM orderform
GROUP BY DATE(TIME) ORDER BY TIME LIMIT 30;-- 30天每日总访客量
SELECT DATE(TIME)AS TIME, COUNT(DISTINCT user_id) AS order_num
FROM orderform
GROUP BY DATE(TIME) ORDER BY TIME LIMIT 30;

3.3 效果展示

在这里插入图片描述

业务需求四

4.1 需求设计

预测下一天的总营业额、总访客量、订单平均评分、总订单数量

4.2 核心代码

clear all;
clc;
filename='D:\Desktop\分布式任务\ARIMA时间序列预测结果图\transaction_data.csv';
Y=csvread(filename,1,1,[1,1,27,1]);
Y=ceil(Y);
Y=Y';
plot(Y)%ACF和PACF图
figure
autocorr(Y)
figure
parcorr(Y)%平滑性检验,yd1_h_adf =1,yd1_h_kpss =0,通过检验
y_h_adf = adftest(Y);
y_h_kpss = kpsstest(Y);% 一阶差分,结果平稳。如果依旧不平稳的话,再次求差分,直至通过检验
Yd1 = diff(Y);
yd1_h_adf = adftest(Yd1);
yd1_h_kpss = kpsstest(Yd1);%Yd2转换成列向量
Yd1=Yd1';
Y=Y';LOGL = zeros(4,4); % Initialize
PQ = zeros(4,4);
for p = 1:4for q = 1:4Mdl = arima(p,1,q);[~,~,logL] = estimate(Mdl,Yd1,'Display','off');LOGL(p,q) = logL;PQ(p,q) = p + q;end
end%reshape 重构数组
LOGL = reshape(LOGL,16,1);
PQ = reshape(PQ,16,1);
[~,bic] = aicbic(LOGL,PQ+1,100);
a=reshape(bic,4,4);% 找最佳lags值 x=2,y=1,即对应ARMA(2,1)模型
a_max=max(a(:));
[x,y]=find(a==min(a(:)));Mdl = arima(x, 1, y);  %第二个变量值为1,即一阶差分
EstMdl = estimate(Mdl,Y);
[res,~,logL] = infer(EstMdl,Y);   %res即残差stdr = res/sqrt(EstMdl.Variance);
figure('Name','残差检验')
subplot(2,3,1)
plot(stdr)
title('Standardized Residuals')
subplot(2,3,2)
histogram(stdr,10)
title('Standardized Residuals')
subplot(2,3,3)
autocorr(stdr)
subplot(2,3,4)
parcorr(stdr)
subplot(2,3,5)
qqplot(stdr)
%上图为残差检验的结果图。
% Standardized Residuals是查看残差是否接近正态分布,理想的残差要接近正态分布;
% ACF和PACF检验残差的自相关和偏自相关,理想的结果应该在图中不存在超出蓝线的点;
% 最后一张QQ图是检验残差是否接近正太分布的,理想的结果中蓝点应该靠近红线。% Durbin-Watson 统计是计量经济学分析中最常用的自相关度量
diffRes0 = diff(res);  
SSE0 = res'*res;
DW0 = (diffRes0'*diffRes0)/SSE0; % Durbin-Watson statistic,
% 该值接近2,则可以认为序列不存在一阶相关性。%% 5.预测
step = 3; % 预测步数为 3
[forData,YMSE] = forecast(EstMdl,step,'Y0',Y);   
lower = forData - 1.96*sqrt(YMSE); %95置信区间下限
upper = forData + 1.96*sqrt(YMSE); %95置信区间上限plot(forData)
disp(forData)figure()
plot(Y,'Color',[.7,.7,.7]);
hold on
h1 = plot(length(Y):length(Y)+step,[Y(end);lower],'r:','LineWidth',2);
plot(length(Y):length(Y)+step,[Y(end);upper],'r:','LineWidth',2)
h2 = plot(length(Y):length(Y)+step,[Y(end);forData],'k','LineWidth',2);
legend([h1 h2],'95% 置信区间','预测值',...'Location','NorthWest')
title('Forecast')
hold off

4.3 效果展示

在这里插入图片描述

业务需求五

5.1 需求设计

一个月内三餐的各营养平均摄入量(包括卡路里、蛋白质、脂肪、碳水化合物、维生素)

5.2 核心代码

SELECT (CASE 
WHEN HOUR(TIME) BETWEEN 6 AND 9 THEN 'morning' 
WHEN HOUR(TIME) BETWEEN 10 AND 13 THEN 'afternoon' 
WHEN HOUR(TIME) BETWEEN 16 AND 20 THEN 'evening' END) AS timeperiod,
SUM(calorie)/COUNT( DISTINCT order_id) AS avg_calorie,
SUM(carbohydrate)/COUNT( DISTINCT order_id) AS avg_arbohydrate,
SUM(fat)/COUNT( DISTINCT order_id) AS avg_fat,SUM(protein)/COUNT( DISTINCT order_id) AS avg_protein,
SUM(vitamin)/COUNT( DISTINCT order_id) AS avg_vitamin
FROM menu,orderform,food
WHERE menu.menu_id=orderform.menu_id  AND food.food_id= menu.food_id AND MONTH(TIME)='6'

5.3 效果展示

在这里插入图片描述

业务需求六

6.1 需求设计

最受欢迎的10道菜、评分最差的10道菜

6.2 核心代码

--评价最差的n道菜(最不受欢迎)
SELECT food.food_id,food.name,avg(mark) AS avg_markFROM menu,foodWHERE menu.food_id=food.food_idGROUP BY food_id ORDER BY avg_mark ASC LIMIT 10;--销量最高的10道菜(最受欢迎)SELECT food.food_id,food.name,COUNT(*) AS order_numFROM menu,foodWHERE menu.food_id=food.food_idGROUP BY food_id ORDER BY order_num DESC LIMIT 10;

6.3 效果展示

在这里插入图片描述

业务需求七

7.1 需求设计

显示最近60订单数据(分页显示),可支持条件查询

7.2 核心代码

数据库查询代码

SELECT order_id,user_id, X.content,TIME,total_money FROM
(SELECT menu_id,group_concat(food.name) AS content
FROM menu,food
WHERE menu.food_id = food.food_id
GROUP BY menu.menu_id) AS X,orderform
WHERE X.menu_id=orderform.menu_id
ORDER BY TIME DESC LIMIT 60 ;

java代码

package com.jiang.service;import com.jiang.mapper.OrderMapper;
import com.jiang.pojo.Order;import java.util.List;public class OrderListServiceImpl implements OrderListService{private OrderMapper orderMapper;public void setOrderMapper(OrderMapper orderMapper) {this.orderMapper = orderMapper;}@Overridepublic List<Order> getList() {return orderMapper.getOrderListByPage();}
}

7.3 效果展示

在这里插入图片描述

总体效果展示

在这里插入图片描述

Conclusion

符合预期的项目结果

  • 实现了菜品评分、健康饮食、订单管理、后台管理等一系列功能。
  • 实现了登录功能。
  • 完成了对营业额进行预测的ARIMA时间序列预测销售额算法。

项目需要改进的地方

  • 实现多个食堂的数据分析。
  • 实现三餐食物营养达标比例 。
  • 在网页端实时实现数据的增删改查。

Contributor

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙系统全面解析,诞生背景、技术细节生态圈一文看懂

编辑&#xff1a;智东西内参华为6月2日正式发布的鸿蒙系统无疑占据了最近热点话题的C位&#xff0c;虽然不全是赞美的声音&#xff0c;但这种努力打破美国垄断&#xff0c;挑战谷歌、苹果在移动操作系统上垄断地位的尝试必将成为中国科技史上的里程碑事件。本期的智能内参&…

python-字典

字典映射&#xff1a;通过名字来引用值&#xff1b;字典是python中唯一内建的映射类型&#xff1b;1)创建字典&#xff1a;字典有键-值对(项)组成&#xff0c;键和值之间通过冒号(:)隔开&#xff0c;项之间通过逗号(,)分割&#xff0c;整个字典由大括号括起来&#xff1b;空字典…

2021十大人工智能趋势

来源&#xff1a;雷锋网6月5日&#xff0c;以“交叉、融合、相生、共赢”为主题的2021全球人工智能技术大会&#xff08;GAITC 2021&#xff09;在杭州举行。会上&#xff0c;腾讯优图联合厦门大学人工智能研究院共同发布《2021十大人工智能趋势》&#xff08;以下简称“趋势报…

通过CTY、VTY、TTY访问网络设备[计网实践Cisco Packet Tracer]

实验一&#xff1a;接入网络设备 学习目标 CTY访问网络设备VTY访问网络设备TTY访问网络设备WEB访问网络设备 实验环境 Cisco Packet Tracer 6.0 原创文章&#xff0c;转载请注明出处&#xff1a;©️Sylvan Ding ❤️ 实验内容 CTY访问设备 CTY是指通过Console接口访…

细数二十世纪最伟大的10大算法

来源&#xff1a;深度学习于机器视觉编辑&#xff1a;nhyilin一、1946 蒙特卡洛方法[1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte Carlo method.]1946…

python-元组

不可变序列&#xff1a;元组&#xff0c;字符串元组用两个圆括号()来表示;用逗号分隔一些值&#xff0c;则自动创建了元组a(1,2,3) print(a) print(())#空元组 #一个值的元组需在值后加一个逗号&#xff0c;与括号进行区分&#xff1b; b(1)#非元组 c(1,) print(b) print(c)#函…

MIT发布首个贝叶斯「数据清洗」机器人!8小时洗200万条数据

来源&#xff1a;GitHub和数据派THU编辑&#xff1a;王菁校对&#xff1a;林亦霖脏数据可以说是所有AI从业者、数据分析师、数据科学家的噩梦。好消息来了&#xff01;麻省理工学院的研究人员最近带来了一种全新的系统PClean&#xff0c;能够自动地清洗脏数据&#xff0c;如错误…

我的开源项目——Jerry

在日常工作中&#xff0c;经常会碰到一些问题&#xff0c;比如数字金额要写成千分位形式&#xff08;1234 -> 123,4.00&#xff09;、要写成汉字大写形式&#xff08;123 -> 壹佰贰拾叁圆&#xff09;&#xff0c;又比如要进行 cookie 读写操作&#xff0c;这些问题都比较…

python-列表和元组

python 数据结构 1.序列(包括元组、列表、字符串、buffer对象和xrange对象)序列中第一个元素的索引为0&#xff0c;第二个为1&#xff0c;依次类推序列的最后一个元素标记为-1&#xff0c;最后第二个为-2&#xff0c;依次类推 既可以向前计数&#xff0c;也可以向后计数2.列表和…

李德毅院士:希望智能驾驶成为我国继高铁之后又一张新名片

来源&#xff1a;汽车俱乐部Plus/ 导读 /5月19日&#xff0c;在WIC2021第五届世界智能大会的分论坛“智能交通峰会”上&#xff0c;中国工程院院士&#xff0c;欧亚科学院院士李德毅发表了主题演讲。以下是演讲实录。让我们掌声欢迎中国工程院院士&#xff0c;欧亚科学院院士&a…

windows下vagrant的安装使用

vagrant是简便虚拟机操作的一个软件&#xff0c;而使用虚拟机有几个好处&#xff1a; 1、为了开发环境与生产环境一致&#xff08;很多开发环境为windows而生产环境为linux&#xff09;&#xff0c;不至于出现在开发环境正常而移步到正式生产环境时出现各种问题&#xff0c;而v…

《2021全球脑科学发展报告》发布

来源&#xff1a;众诚智库编辑&#xff1a;蒲蒲近年来&#xff0c;以人工智能、量子信息、集成电路、生命健康、脑科学、生物育种、空天科技、深地深海等为代表的新一轮科技革命和产业变革深入发展&#xff0c;正在重构全球创新版图、重塑全球经济结构。在众多极具“颠覆性”的…

学者要研究真问题做真学问

来源&#xff1a;秦四清科学网博客链接地址&#xff1a;http://blog.sciencenet.cn/blog-575926-1289864.html创新难&#xff0c;原创更难&#xff0c;难于上青天。究其原因&#xff0c;主要在于学者缺乏对“真问题”的发现能力和凝练能力。创新的本质&#xff0c;是通过新的思…

cordova使用cordova-plugin-baidumaplocation插件获取定位

cordova使用cordova-plugin-baidumaplocation插件获取定位 原文:cordova使用cordova-plugin-baidumaplocation插件获取定位版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/mate_ge/article/details/78913914 1、首先在百度地…

神经网络完成芯片设计仅需几小时

来源&#xff1a;科技日报作者&#xff1a;张梦然 科技日报北京6月9日电 &#xff08;记者张梦然)英国《自然》杂志9日发表一项人工智能突破性成就&#xff0c;美国科学家团队报告机器学习工具已可以极大地加速计算机芯片设计。研究显示&#xff0c;该方法能给出可行的芯片设计…

python-类的基本知识

#类的基本知识 #类对象的优点&#xff1a;多态&#xff0c;封装&#xff0c;继承#多态 from random import choice s[A,"B","C","D"] chchoice(s)#从列表中随机选择元素&#xff0c;并返回 print(ch)#例&#xff1a;序列中的count函数为多态函数…

ElementUI实现地址自动补全文本框

新冠疫情自我检测系统网页设计开发文档 Sylvan Ding 的第一个基于 Vue.js 的项目. 本项目所提供的信息&#xff0c;只供参考之用&#xff0c;不保证信息的准确性、有效性、及时性和完整性&#xff0c;更多内容请查看国家卫健委网站&#xff01; Explore the docs View Demo…

孙茂松:机器能创造吗?

来源&#xff1a;TsinghuaNLP中国人工智能学会主办的2021全球人工智能技术大会&#xff08;GAITC 2021&#xff09;6月5日-6日在杭州举行。6月5日晚&#xff0c;中央音乐学院音乐人工智能系主任李小兵教授和清华大学人工智能研究院常务副院长孙茂松教授共同主持了《当AI与艺术相…

Nginx+Fastdfs

注&#xff1a; 在配置时&#xff0c;使用非root用户配置 fdfs/fdfs 1. 集群部署 1.1. 准备 创建目录&#xff1a;本文档中所有内容安装到/fdfs目录 [fdfs5861be93b5b0 /]$mkdir -p /fdfs/fastdfs/data /fdfs/nginx/nginx_temp /fdfs/soft && ln -s /fdfs/fastdf…

6小时完成,Jeff Dean领衔AI设计芯片方案登Nature,谷歌第四代TPU已用 芯快递 今天...

来源&#xff1a;机器之心编辑&#xff1a;杜伟、陈萍将芯片的布局规划看作一个深度强化学习问题&#xff0c;谷歌大脑团队希望用 AI 来提升芯片设计效率。基于 AI 的最新设计方案可以在数小时内完成人类设计师耗费数月才能完成的芯片布局&#xff0c;这将有可能引领一场新的芯…