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://xiahunao.cn/news/3266233.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Jupyter Notebook】一文详细向您介绍 【重启内核】

【Jupyter Notebook】一文详细向您介绍 【重启内核】 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕…

基于Golang+Vue3快速搭建的博客系统

WANLI 博客系统 项目介绍 基于vue3和gin框架开发的前后端分离个人博客系统&#xff0c;包含md格式的文本编辑展示&#xff0c;点赞评论收藏&#xff0c;新闻热点&#xff0c;匿名聊天室&#xff0c;文章搜索等功能。 项目在线访问&#xff1a;http://bloggo.chat/ 或 http:/…

深入搞懂Checkpoint调优基础及原理

前言 在执行大量写操作的系统上,调优检查点对于获得良好的性能至关重要。然而,检查点是我们经常发现混淆和配置问题的地方之一,无论是在社区邮件列表中,还是在为客户提供支持和咨询期间。这篇文章旨在解释检查点是什么——目的和数据库如何实现它——以及如何调优它们。 注…

chapter08-面相对象编程的三大特征——封装

1、基础介绍 对电视机的操作就是典型封装 封装的好处&#xff1a;隐藏实现细节&#xff1b;可以对数据进行验证 2、封装的实现 3、入门案例 altinsert&#xff0c;getter and setter&#xff0c;自动插入

Docker(十)-Docker运行elasticsearch7.4.2容器实例

1.下载镜像 1.1存储和检索数据 docker pull elasticsearch:7.4.2 1.2可视化检索数据 docker pull kibana:7.4.22.创建elasticsearch实例 创建本地挂载数据卷配置目录 mkdir -p /software/elasticsearch/config 创建本地挂载数据卷数据目录 mkdir -p /software/elasticse…

Linux——管理本地用户和组(详细介绍了Linux中用户和组的概念及用法)

目录 一、用户和组概念 &#xff08;一&#xff09;、用户的概念 &#xff08;二&#xff09;、组的概念 补充组 主要组 二、获取超级用户访问权限 &#xff08;一&#xff09;、su 命令和su -命令 &#xff08; 二&#xff09;、sudo命令 三、管理本地用户账户 &…

PyTorch模型训练步步详解:从零开始构建深度学习流程

P y T o r c h 训练模型流程图 PyTorch训练模型流程图 P y T orc h 训练模型流程图

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(二)|| 堆 / 栈

堆和栈 1. 堆 堆就是空闲的一块内存&#xff0c;可以通过malloc申请一小块内存&#xff0c;用完之后使用再free释放回去。管理堆需要用到链表操作。 比如需要分配100字节&#xff0c;实际所占108字节&#xff0c;因为为了方便后期的free&#xff0c;这一小块需要有个头部记录…

Python | Leetcode Python题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution:def moveZeroes(self, nums: List[int]) -> None:n len(nums)left right 0while right < n:if nums[right] ! 0:nums[left], nums[right] nums[right], nums[left]left 1right 1

【管控业财一体化】

1. 引言 大型集团在现代企业管理中扮演着举足轻重的角色&#xff0c;其管控业财一体化解决方案是实现企业高效运营的关键。随着数字化转型的加速&#xff0c;业财一体化不再局限于财务与业务流程的简单融合&#xff0c;而是向着更深层次的数据驱动、智能化决策和价值创造方向发…

Java入门:05.Java中的数组002

通过上篇文章&#xff0c;相信大家对数组应该有了一个简单的了解&#xff0c;并对Java中的数据类型有了一个基本的认识&#xff0c;不仅如此我们还明白了怎样定义一个数组类型的变量&#xff0c;在这之后&#xff0c;让我们一起来更加深入的了解一下数组吧。 三、如何创建一个…

哈希表相关的力扣题和讲解和Java、C++常用的数据结构(哈希法)

20240725 一、什么时候适用什么样的结构。1.java中1.1 HashSet&#xff1a;1.2 TreeSet&#xff1a;1.3 LinkedHashSet&#xff1a;1.4 HashMap&#xff1a;1.5 TreeMap&#xff1a;1.6 LinkedHashMap&#xff1a;1.7 总结 2. c中2.1 std::unordered_set&#xff1a;2.2 std::s…

Python3网络爬虫开发实战(3)网页数据的解析提取

文章目录 一、XPath1. 选取节点2. 查找某个特定的节点或者包含某个指定的值的节点3. XPath 运算符4. 节点轴5. 利用 lxml 使用 XPath 二、CSS三、Beautiful Soup1. 信息提取2. 嵌套选择3. 关联选择4. 方法选择器5. css 选择器 四、PyQuery1. 初始化2. css 选择器3. 信息提取4. …

高等院校智慧校园建设规划设计方案

高等院校智慧校园建设规划设计方案摘要&#xff1a; 项目背景某学校是一所培养学前教育教师的高等专科学校&#xff0c;目前正致力于数字化校园平台的建设&#xff0c;以提升信息化和数字化建设管理水平&#xff0c;促进教学质量和管理效率的提升。 数字校园对职业教育的意义信…

Java基础-Atomic原子类

Java基础-Atomic原子类 一、Atomic 原子类简介 Atomic原子&#xff1a;指一个操作是不可中断的&#xff0c;即使是在多个线程一起执行的时候&#xff0c;一个操作一旦开始&#xff0c;就不会被其他线程干扰。所谓原子类说简单点就是具有原子/原子操作特征的类。并发包java.ut…

谷粒商城实战-58-商品服务-API-三级分类-删除-批量删除小结

文章目录 一&#xff0c;增加一个批量删除的按钮并绑定事件二&#xff0c;全栈工程师三&#xff0c;逆向工程在全栈开发中的应用提升效率的方式&#xff1a;使用案例&#xff1a; 这一节的主要内容是开发批量删除分类的功能。 一&#xff0c;增加一个批量删除的按钮并绑定事件 …

树莓派智能家居中枢

一个先进的枢纽&#xff0c;使智能家居系统更智能、更可定制、更易于控制 Homey Pro由树莓派 Compute Module 4 供电,Homey Pro 为用户提供了一个单一界面,用于控制和监控来自不同品牌的所有智能家居设备。它完全在本地网络上运行,而不是依赖云端,从而实现了最低的延迟、最高的…

【数据结构】单链表的增删改查

介绍 链表是有序的列表&#xff0c;但是它在内存中是如下存储的&#xff1a; ①链表以节点的方式进行存储&#xff0c;是链式存储的 ②每个节点包含 data 域、next 域&#xff1a;指向下一节点 ③链表的各个节点不一定是连续存放的 ④链表分为有头节点的链表和没有头节点的链表…

netty入门-6 Handler和Pipeline

前言 书上讲服务器客户端创建三个要点&#xff0c;线程模型(Group)&#xff0c;IO模型(NioSocketChannel)&#xff0c;处理逻辑。 这篇的Handler和Pipeline&#xff0c;就是我们IO操作的处理逻辑。 然后下篇说ByteBuf这个Netty自己实现的数据封装组件。 Handler和Pipeline 我…

GAT知识总结

《GRAPH ATTENTION NETWORKS》 解决GNN聚合邻居节点的时候没有考虑到不同的邻居节点重要性不同的问题&#xff0c;GAT借鉴了Transformer的idea&#xff0c;引入masked self-attention机制&#xff0c; 在计算图中的每个节点的表示的时候&#xff0c;会根据邻居节点特征的不同来…