ECharts实现按月统计和MTBF统计

一、数据准备

下表是小明最近一年的旅游记录

create_datecity_namecost_money
2023-10-10 10:10:10北京1499
2023-11-11 11:11:11上海2999
2023-12-12 12:12:12上海1999
2024-01-24 12:12:12北京123
2024-01-24 12:12:12上海223
2024-02-24 12:12:12广州564
2024-02-24 12:12:12北京221
2024-02-24 12:12:12上海442
2024-03-24 12:12:12广州505
2024-04-24 12:12:12上海656
2024-05-14 12:12:12上海766
2024-05-18 12:12:12广州999
2024-05-24 12:12:12上海3244
2024-05-24 12:12:12北京786
2024-06-24 12:12:12广州662
2024-07-24 12:12:12北京532

现在小明有两个需求

  1. 统计自己2024年每个月出去旅游了多少次及消费
  2. 统计自己这一年每个城市旅行的平均间隔时间

二、按月统计

SELECT substring(a.create_date, 6, 2)::int  as month, 
sum(a.cost_money) cost_money , 
sum(a.travel_count) travel_count from    (SELECT to_char(create_date, 'YYYY-MM') AS create_date,         sum(CASE WHEN to_char(create_date, 'YYYY') = '2024' THEN cost_money ELSE 0 END) AS cost_money,count(CASE WHEN to_char(create_date, 'YYYY') = '2024' THEN city_name ELSE null END) AS travel_countFROM travel    WHERE create_date >= '2024-01-01'     AND create_date <  '2024-12-31'   GROUP BY to_char(create_date, 'YYYY-MM')     ORDER BY create_date) a 
GROUP BY substring(a.create_date, 6, 2) ::int
ORDER BY month asc

查询结果如下
在这里插入图片描述
现在把这些数据加载到echarts折现柱状图中直观地展示出来

option = {title : {text : '2024旅游统计图',textStyle :{color:'rgba(15,64,245,1)'}},tooltip: {trigger: 'axis',axisPointer: {type: 'cross',crossStyle: {color: '#999'}}},xAxis: [{type: 'category',data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月'],axisPointer: {type: 'shadow'}}],yAxis: [{type: 'value',name: '金额',min: 0,axisLabel: {formatter: '{value} 元'}},{type: 'value',name: '次数',min: 0,axisLabel: {formatter: '{value} 次'}}],series: [{name: '消费金额',type: 'bar',tooltip: {valueFormatter: function (value) {return value + ' 元';}},data: [346, 1277,505,656,5795,662,532]},{name: '旅游次数',type: 'line',yAxisIndex: 1,tooltip: {valueFormatter: function (value) {return value + ' 次';}},data: [2, 3, 1, 1, 4, 1,1]}]
};

展示结果如下图:可以看出5月份的旅游次数最多,消费金额也是5月最多

在这里插入图片描述

三、按城市统计平均旅游间隔时间

1,先用sql查询出每个城市的名字和旅游日期,同时按城市排序

SELECT city_name,create_date FROM travel 
order by city_name asc,create_date asc

在这里插入图片描述

2,使用java分组方法将数据按城市分组成一个map

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.stream.Collectors;;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
public class Main {public static void main(String[] args) {List<TravelData> list = new ArrayList<>();list.add(new TravelData("北京","2023-10-10 10:10:10"));list.add(new TravelData("北京","2024-01-24 12:12:12"));list.add(new TravelData("北京","2024-02-24 12:12:12"));list.add(new TravelData("北京","2024-05-24 12:12:12"));list.add(new TravelData("北京","2024-07-24 12:12:12"));list.add(new TravelData("广州","2024-02-24 12:12:12"));list.add(new TravelData("广州","2024-03-24 12:12:12"));list.add(new TravelData("广州","2024-05-18 12:12:12"));list.add(new TravelData("广州","2024-06-24 12:12:12"));list.add(new TravelData("上海","2023-11-11 12:12:12"));list.add(new TravelData("上海","2023-12-12 12:12:12"));list.add(new TravelData("上海","2024-01-24 12:12:12"));list.add(new TravelData("上海","2024-02-24 12:12:12"));list.add(new TravelData("上海","2024-04-24 12:12:12"));list.add(new TravelData("上海","2024-05-14 12:12:12"));list.add(new TravelData("上海","2024-05-24 12:12:12"));// 以上数据可使用数据库sql查询Map<String, List<TravelData>> maps = list.stream().collect(Collectors.groupingBy(TravelData::getCityName));maps.forEach((key, dateList) -> {long timeTotal = 0;for (int i = 0; i < dateList.size(); i++) {if(i < dateList.size() - 1){TravelData nextItem = dateList.get(i + 1);timeTotal += nextItem.getCreateDate() - dateList.get(i).getCreateDate();}}long avgTime = timeTotal/(dateList.size() - 1);// 单位为天System.out.println(key + ",平均间隔 = " + avgTime/(1000*60*60*24));});}static class TravelData{String cityName;Date createDate;SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public TravelData(String name,String date){this.cityName = name;try{this.createDate = dateFormat.parse(date);}catch(Exception e){System.out.println(e.getMessage());}}public String getCityName(){return cityName;}public Long getCreateDate(){return createDate.getTime();}public String toString(){return "city:"+cityName + ",create_date:"+dateFormat.format(createDate);}}
}

以上java代码输出结果为
在这里插入图片描述
把数据装载到ECharts图表中

option = {title : {text : '2024旅游城市MTBF',textStyle :{color:'rgba(15,64,245,1)'}},tooltip: {trigger: 'axis',axisPointer: {type: 'cross',crossStyle: {color: '#999'}}},xAxis: [{type: 'category',data: ['北京', '上海', '广州'],axisPointer: {type: 'shadow'}}],yAxis: [{type: 'value',name: '间隔',min: 0,axisLabel: {formatter: '{value} '}}],series: [{name: '平均旅游间隔',type: 'bar',tooltip: {valueFormatter: function (value) {return value + ' 天';}},data: [72, 32, 40]}]
};

实际效果如下图:由图可见,小明去上海的频率最高
在这里插入图片描述

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

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

相关文章

leetcode-148. 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#x…

react18+

主要是围绕函数式组件讲&#xff0c;18主要用就是函数式组件&#xff0c;学习前先熟悉下原生js的基本使用&#xff0c;主要是事件 1、UI操作 1.1、书写jsx标签语言 基本写法和原生如同一则&#xff0c;只是放在一个方法里面返回而已&#xff0c;我们称这样的写法为函数式组件…

OrangePi Zero2 全志H616 开发初探

目录&#xff1a; 一、刷机和系统启动1、TF 卡格式化&#xff1a;2、镜像烧录&#xff1a;3、登录系统&#xff1a; 二、基于官方外设开发1、wiringPi 外设 SDK 安装&#xff1a;2、C 文件编译&#xff1a;3、基于官方外设的应用开发&#xff1a;① GPIO 输入输出&#xff1a;②…

【个人亲试最新】WSL2中的Ubuntu 22.04安装Docker

文章目录 Wsl2中的Ubuntu22.04安装Docker其他问题wsl中执行Ubuntu 报错&#xff1a;System has not been booted with systemd as init system (PID 1). Can‘t operate. 参考博客 &#x1f60a;点此到文末惊喜↩︎ Wsl2中的Ubuntu22.04安装Docker 确定为wsl2ubuntu22.04&#…

vue接入google map自定义marker教程

需求背景 由于客户需求&#xff0c;原来系统接入的高德地图&#xff0c;他们不接受&#xff0c;需要换成google地图。然后就各种百度&#xff0c;各种Google&#xff0c;却不能实现。----无语&#xff0c;就连google地图官方的api也是一坨S-H-I。所以才出现这篇文章。 google地…

【Python实战因果推断】56_因果推理概论6

目录 Causal Quantities: An Example Bias Causal Quantities: An Example 让我们看看在我们的商业问题中&#xff0c;你如何定义这些量。首先&#xff0c;你要注意到&#xff0c;你永远无法知道价格削减&#xff08;即促销活动&#xff09;对某个特定商家的确切影响&#xf…

AMEsim液压阀伯德图绘制方法

之前也在液压圈论坛里面发过类似的贴子&#xff0c;具体可以看这个网址&#x1f6aa;&#x1f449;&#xff1a;如何得出说明书里面的伯德图曲线&#xff1f;&#xff0c;回复的人还是比较少&#xff0c;这个方法重要信息是参考百度文库这篇文章&#x1f6aa;&#x1f449;&…

【系统架构设计师】计算机组成与体系结构 ⑯ ( 奇偶校验码 | CRC 循环冗余码 | 海明码 | 模 2 除法 )

文章目录 一、校验码1、校验码由来2、奇偶校验码3、CRC 循环冗余码 ( 重点考点 )4、海明码校验 ( 软考不经常考到 ) 二、CRC 循环冗余码 ( 重点考点 )1、模 2 除法概念2、模 2 除法步骤3、模 2 除法示例4、CRC 循环冗余码示例 15、CRC 循环冗余码示例 2 参考之前的博客 : 【计…

Webshell管理工具:AntSword(中国蚁剑)

中国蚁剑是一款开源的跨平台网站管理工具&#xff0c;它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。 通俗的讲&#xff1a;中国蚁剑是 一 款比菜刀还牛的shell控制端软件。 一、中国蚁剑下载 1. 下载 AntSword-Loader https://github.com/AntSwordP…

面试前端实习常问的关于【ES6新特性】的问题

ES6新特性 日常前端代码开发中&#xff0c;有哪些值得用 ES6 去改进的编程优化或者规范? 常用箭头函数来取代有this指向的函数常用 let 取代 var 命令常用数组/对象的结构赋值来命名变量&#xff08;结构更清晰&#xff0c;语义更明确&#xff0c;可读性更好&#xff09;在长字…

【C语言报错已解决】“Undefined Reference”

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言&#xff1a; 在开发过程中&#xff0c;我们经常会遇到各种编译错误或运行时错误。其中&#xff0c;“Undefined Referenc…

Axure Web端元件库:从Quick UI到500+组件的飞跃

在快速变化的数字世界中&#xff0c;产品设计不仅仅是功能的堆砌&#xff0c;更是用户体验的精心雕琢。原型设计作为产品开发过程中的关键环节&#xff0c;其重要性不言而喻。Axure&#xff0c;作为业界领先的原型设计工具&#xff0c;凭借其强大的交互设计和丰富的功能&#x…

Rce漏洞复习(ctfshow29-50)

Rce漏洞简介思维导图 Web29 代码审计&#xff1a; if(!preg_match("/flag/i", $c)){ eval($c); 传参没有flag&#xff08;大小写都没有出现&#xff09; Payload&#xff1a; ?csystem("ls"); ?csystem("tac *lag.php"); Web30 代码…

文件上传漏洞(ctfshow web151-161)

Web151 F12修改源代码 exts后面png改为php 这样就可以上传php的文件了 Web152&#xff1a; 考点&#xff1a;后端不能单一校验 就是要传图片格式&#xff0c;抓个包传个png的图片 然后bp抓包修改php后缀解析 然后放包 Web153-web156 在php代码中可以使用“{}”代替“[]” …

WPF项目实战视频《二》(主要为prism框架)

14.prism框架知识&#xff08;1&#xff09; 使用在多个平台的MVVM框架 新建WPF项目prismDemo 项目中&#xff1a;工具-NuGet包管理&#xff1a;安装Prism.DryIoc框架 在git中能看Prism的结构和源代码&#xff1a;git链接地址 例如&#xff1a;Prism/src/Wpf/Prism.DryIoc.Wpf…

机器学习 | 回归算法原理——随机梯度下降法

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的多重回归继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享随机梯度下降法这一回归算法原理。本章的回归算法原理还是基于《基于广告费预测点击量》项目&#xff0c;欢迎大家交流学习&#xff01;…

uniapp中出现图片过小会与盒子偏离

结论&#xff1a;在image的父盒子中加上display: flex&#xff0c;原因不清楚 出问题的代码和图片如下&#xff1a; <template><view style" background-color: greenyellow; height: 10rpx;width: 10rpx;"><image :src"imgSrc.seatnull" …

嵌入式C++、MQTT、数据库、Grafana、机器学习( Scikit-learn):智能建筑大数据管理平台(代码示例)

项目概述 智能建筑管理系统&#xff08;Intelligent Building Management System, IBMS&#xff09;是一个集成多种技术的复杂系统&#xff0c;旨在通过智能化手段提升建筑的管理效率、节能效果和居住舒适度。该系统涉及嵌入式系统、物联网&#xff08;IoT&#xff09;、大数据…

光明乳业:以科技赋能品质,引领乳业绿色新未来

近日&#xff0c;光明乳业再次成为行业焦点&#xff0c;其在科技创新与绿色发展方面的卓越表现赢得了广泛赞誉。作为中国乳制品行业的领军企业&#xff0c;光明乳业始终坚守品质至上的原则&#xff0c;不断探索科技创新之路&#xff0c;致力于为消费者提供更高品质、更健康的乳…

vdb:虚拟数据库

将文件虚拟成数据库&#xff0c;序列化写入、反序列化读取、直接读取。