数据分析:同比-环比

文章目录

  • 数据分析:同比-环比
    • 同比-环比
      • 同比
      • 环比
    • 日期获取:上月-本季-本年
      • 类设计
        • CaseConsts:时间类型常量(本月、本季、本年)
        • DateListBean:时间Bean
      • 方法设计
        • getDateList:根据时间类型获取时间
        • checkStartDate:获取时间区间开始时间
        • checkEndDate:根据时间和类型获取时间区间结束时间
        • checkMouth:更加日期判断季度,获取季度开始日期

同比-环比

在数据统计方面,涉及到日期的时候,通常会出现同比、环比的分析(以2021年度为例),两者放一起能够更加立体化地反映变化速度,不过由于两者的比较方式不同,所以一般不会用两者进行比较。

同比

  • 定义:与历史同时期比较,通常指不同年份相同时间或时间段的比较,一般为上一年度与当前年度的比较

  • 计算方式:

    • 本期同比增长(下降)率(%) = (本期价格/上年同期价格 -1) × 100%
    • 为正,则为增长率;为负,则为下降率
  • 示例

    2020年 2021年
    月度 1月 1月
    季度 一季度(1-3月) 一季度(1-3月)
    年度 2020年总计 2021年总计

环比

  • 定义:与上一个统计周期比较,通常指相同年份不同时间或时间段的比较

  • 计算方式:

    • 本期环比增长(下降)率(%) = (本期价格/上期价格 - 1 )× 100%
    • 为正,则为增长率;为负,则为下降率
  • 示例

    2021年 2021年
    月度 1月 2月
    季度 一季度(1-3月) 二季度(4-6月)
    年度 2020年总计 2021年总计

日期获取:上月-本季-本年

类设计

CaseConsts:时间类型常量(本月、本季、本年)

/*** @author xuzhou* @date 2020-09-03*/
public interface CaseConsts {/*** 本月*/String TIMETYPY_BY = "by";/*** 本季*/String TIMETYPY_BJ = "bj";/*** 本年*/String TIMETYPY_BN = "bn";
}

DateListBean:时间Bean

/*** DateListBean* 同比环比时间* @author xuzhou* @date 2020/9/10 18:11* @version 1.0.0*/public class DateListBean {/*** 开始时间*/Date startDate;/*** 结束时间*/Date endDate;/*** 环比开始时间*/Date startDateMoM;/*** 环比结束时间*/Date endDateMoM;/*** 同比开始时间*/Date startDateYoY;/*** 同比结束时间*/Date endDateYoY;public Date getStartDate() {return startDate;}public void setStartDate(Date startDate) {this.startDate = startDate;}public Date getEndDate() {return endDate;}public void setEndDate(Date endDate) {this.endDate = endDate;}public Date getStartDateMoM() {return startDateMoM;}public void setStartDateMoM(Date startDateMoM) {this.startDateMoM = startDateMoM;}public Date getEndDateMoM() {return endDateMoM;}public void setEndDateMoM(Date endDateMoM) {this.endDateMoM = endDateMoM;}public Date getStartDateYoY() {return startDateYoY;}public void setStartDateYoY(Date startDateYoY) {this.startDateYoY = startDateYoY;}public Date getEndDateYoY() {return endDateYoY;}public void setEndDateYoY(Date endDateYoY) {this.endDateYoY = endDateYoY;}
}

方法设计

getDateList:根据时间类型获取时间

/*** 获取同比、环比时间* @param timeType 时间类型,上月,本季,本年* @return DateListBean*/private DateListBean getDateList(String timeType) {DateListBean dateListBean = new DateListBean();//当前时间,2020-09-10LocalDate nowDate = LocalDate.now();//本月1日,2020-09-01nowDate = nowDate.withDayOfMonth(1);//上月1日,2020-08-01LocalDate lastMonthStart = nowDate.plusMonths(-1);//上月最后一日,2020-08-31LocalDate lastMonthEnd = nowDate.plusDays(-1);if(timeType.equals(CaseConsts.TIMETYPY_BY)){//月度,上月//上月第一天,2020-08-01Date startDate = Date.valueOf(lastMonthStart);dateListBean.setStartDate(startDate);//上月最后一天,2020-08-31Date endDate = Date.valueOf(lastMonthEnd);dateListBean.setEndDate(endDate);//同比,去年相同月份//相同月份第一天,2019-08-01Date startDateYoY = Date.valueOf(lastMonthStart.plusYears(-1));dateListBean.setStartDateYoY(startDateYoY);//相同月份最后一天,2019-08-31LocalDate date = nowDate.plusYears(-1);Date endDateYoY = Date.valueOf(date.plusDays(-1));dateListBean.setEndDateYoY(endDateYoY);//环比,今年上个月//上个月第一天,2020-07-01Date startDateMoM = Date.valueOf(lastMonthStart.plusMonths(-1));dateListBean.setStartDateMoM(startDateMoM);//上个月最后一天,2020-07-30Date endDateMoM = Date.valueOf(lastMonthStart.plusDays(-1));dateListBean.setEndDateMoM(endDateMoM);}if(timeType.equals(CaseConsts.TIMETYPY_BJ)){//季度//当前季度//当前季度开始第一天,2020-07-01Date startDate = checkStartDate(nowDate,CaseConsts.TIMETYPY_BJ);dateListBean.setStartDate(startDate);//上月最后一天,2020-08-31Date endDate = Date.valueOf(lastMonthEnd);dateListBean.setEndDate(endDate);//同比,去年相同季度//相同季度第一天,2019-07-01Date startDateYoY = checkStartDate(nowDate.plusYears(-1),CaseConsts.TIMETYPY_BJ);dateListBean.setStartDateYoY(startDateYoY);//相同季度最后一天,2019-09-30Date endDateYoY = checkEndDate(nowDate.plusYears(-1),CaseConsts.TIMETYPY_BJ);dateListBean.setEndDateYoY(endDateYoY);//环比,今年上个月//上个季度第一天,2020-04-01Date startDateMoM = checkStartDate(nowDate.plusMonths(-3),CaseConsts.TIMETYPY_BJ);dateListBean.setStartDateMoM(startDateMoM);//上个季度最后一天,2020-06-30Date endDateMoM = checkEndDate(nowDate.plusMonths(-3),CaseConsts.TIMETYPY_BJ);dateListBean.setEndDateMoM(endDateMoM);}if(timeType.equals(CaseConsts.TIMETYPY_BN)){//年度//当前年度//当前年度开始第一天,2020-01-01Date startDate = checkStartDate(nowDate,CaseConsts.TIMETYPY_BN);dateListBean.setStartDate(startDate);//上月最后一天,2020-08-31Date endDate = Date.valueOf(lastMonthEnd);dateListBean.setEndDate(endDate);//同比,去年//去年第一天,2019-01-01Date startDateYoY = checkStartDate(nowDate.plusYears(-1),CaseConsts.TIMETYPY_BN);dateListBean.setStartDateYoY(startDateYoY);//去年最后一天,2019-12-31Date endDateYoY = checkEndDate(nowDate,CaseConsts.TIMETYPY_BN);dateListBean.setEndDateYoY(endDateYoY);//环比,今年上个月//上个季度第一天,2019-01-01Date startDateMoM = checkStartDate(nowDate.plusYears(-1),CaseConsts.TIMETYPY_BN);dateListBean.setStartDateMoM(startDateMoM);//上个季度最后一天,2019-12-31Date endDateMoM = checkEndDate(nowDate,CaseConsts.TIMETYPY_BN);dateListBean.setEndDateMoM(endDateMoM);}return dateListBean;}

checkStartDate:获取时间区间开始时间

 /*** 获取时间区间开始时间* @param localDate 当前日期* @param timeType 时间区间类型(月、季度、年度)* @return Date*/private Date checkStartDate(LocalDate localDate,String timeType) {Date date = null;//开始为每月的1日localDate = localDate.withDayOfMonth(1);//判断区间switch (timeType){case CaseConsts.TIMETYPY_BY://本月break;case CaseConsts.TIMETYPY_BJ://本季localDate = checkMouth(localDate);break;case CaseConsts.TIMETYPY_BN://本年localDate = localDate.withMonth(1);break;default:}//转为Datedate = Date.valueOf(localDate);return date;}

checkEndDate:根据时间和类型获取时间区间结束时间

    /*** 获取时间区间结束时间* @param localDate 当前日期* @param timeType 时间区间类型(月、季度、年度)* @return Date*/private Date checkEndDate(LocalDate localDate,String timeType) {Date date = null;//开始为每月的1日localDate = localDate.withDayOfMonth(1);//判断区间switch (timeType){case CaseConsts.TIMETYPY_BY://往前一天,为上月月底localDate = localDate.plusDays(-1);break;case CaseConsts.TIMETYPY_BJ://本季//季度第一个月的第一天localDate = checkMouth(localDate);//下个季度第一个月的第一天localDate = localDate.plusMonths(+3);//本季度最后一个月的最后一天localDate = localDate.plusDays(-1);break;case CaseConsts.TIMETYPY_BN://本年//本年1月1日localDate = localDate.withMonth(1);//去年最后一天localDate = localDate.plusDays(-1);break;default:}//转为Datedate = Date.valueOf(localDate);return date;}

checkMouth:更加日期判断季度,获取季度开始日期

/*** 判断季度* @param date 当前日期* @return 季度开始日期*/
private LocalDate checkMouth(LocalDate date){LocalDate startDate = date;switch (date.getMonthValue()){case 1:case 2:case 3:startDate = date.withMonth(1);break;case 4:case 5:case 6:startDate = date.withMonth(4);break;case 7:case 8:case 9:startDate = date.withMonth(7);break;case 10:case 11:case 12:startDate = date.withMonth(10);break;default:}return startDate;
}

数据分析:同比-环比相关推荐

  1. 使用 SQL 实现同比环比分析

    场景描述 在做数据分析时,经常会需要展示同比和环比的数据,可以通过 SQL 来完成同比和环比的计算,再配合数据可视化工具进行展示,每个月都会自动展示当月数据与上月的对比(环比),以及当月数据与去年同期 ...

  2. 【Mysql实战】使用存储过程和计算同比环比

    背景 同环比,是基本的数据分析方法.在各类调研表中屡见不鲜,如果人工向前追溯统计数据,可想而知工作量是非常大的. 标题复制10行,并且每行大于10个字符[源码解析]SpringBoot接口参数[Mys ...

  3. 异常检测方法——DBSCAN、孤立森林、OneClassSVM、LOF、同比环比、正态分布、箱线图

    异常检测方法 基于时间序列分析 同比环比 基于统计 单特征且符合正态分布 基于统计 箱线图 基于聚类 DBSCAN 基于树模型 孤立森林 基于线性模型 OneClassSVM 基于密度 LOF 异常检 ...

  4. 数仓工具—Hive实战之占比同比环比(10)

    同比环比的计算 测试数据 1,2020-04-20,420 2,2020-04-04,800 3,2020-03-28,500 4,2020-03-13,100 5,2020-02-27,300 6, ...

  5. 判断图有无环_数读湾区经济潜能:基于大数据分析的环杭州湾大湾区“一体化”发展潜能!...

     前言 湾区是由一个海湾或相连若干个海湾.港湾及邻近岛屿共同组成的区域.从世界湾区经济发展看,沿海湾区聚集的通常是最为发达和最具竞争力的城市群,世界著名湾区有东京湾区.纽约湾区和旧金山湾区等,湾区经济 ...

  6. Echarts 表格通过ajax异步请求实现动态赋值(分析同比环比的实现)

    Echarts 表格通过ajax异步请求实现动态赋值(分析同比环比的实现) 对于ElementUI中使用ECharts在上一篇文章中已经说明具体使用方法 一.效果图:(以每一个月的工业产值为例) 我们 ...

  7. excel中#N/A的解释同比环比基比画四象限图的小tips字符串截取函数substitute的深入理解

    分组分析,同比环比定基比,字符串截取等问题的总结 EXCEL中#N/A,是"不适用"的意思,多用在填写表格的时候,表示"本栏目(对我)不适用",在没有东西可填写 ...

  8. java时间计算同比环比周的问题

    问题描述: 在业务中会有传不同日期格式, 1.有天(2020-02-29),周(2020-03第三周),月(2020-02二月份), 2.同时需要计算对应的去年同比时间和环比(就是上一个时间段,周的2 ...

  9. 同比环比日期计算、本周一、本周日、上周一、上周日(mysql)

    目录 1 所需基础日期查询实现 2 根据业务表实际查询操作 2.1 简单查询 2.2 查询优化: 2.3  在mybatis中 查询,关联业务信息实现 1 所需基础日期查询实现 (1)在计算同比环比时 ...

  10. 7.6 PowerBI系列之DAX函数专题-周的同比环比与周聚合

    需求 实现如下图的周同比环比分析 实现 日期表 = -- 创建一个日期表 addcolumns(addcolumns(calendar auto(),"年度",year(date) ...

最新文章

  1. 数据关系模式设计的标准化
  2. VTK:vtk布尔运算隐式函数BooleanOperationImplicitFunctions用法实战
  3. Angular之ngx-permissions的管理权限
  4. SVN 回滚(撤回)提交的代码
  5. mysql索引级别快慢_面试小点-MySQL 的两种索引方法如何提高查询速度
  6. oracle 体系结构初步认识(一)
  7. 根据某一字段值去重查找出所有字段的数据
  8. Rust Async: Pin概念解析
  9. 勒索病毒家族信息判断
  10. JavaScript基础学习总结(一) 适合小白
  11. SpringBoot/SpringMVC整合Shiro:实现登录与注册(MD5加盐加密)
  12. 有赞裁员1500人?说说有赞为什么会跌落神坛
  13. 初步了解PS“时间轴”
  14. 千杯酒中检测那一杯毒酒的问题及思考
  15. 浏览器控制bartender打印方案
  16. 2018年终总结(兼个人详历) | 2018 与我的技术之路
  17. No compiler is provided in this environment. Perhaps you are run
  18. 虚拟资源素材商品交易平台网站源码
  19. 求素数的python程序,Python-求素数程序
  20. violate原理和用法

热门文章

  1. 致谢zyf2000,仅是你的备份,留念和记录学习C++的足迹
  2. 无线网卡 VS 无线上网卡
  3. gnu coreutils4.5.1 hostid.c源码解读
  4. element ui表单必填_element-ui设置下拉选择切换必填和非必填
  5. 使用outlook及office assitans实现邮件批量发送
  6. 激活ltsb2016_WIN10 LTSB 2016电话激活步骤详解
  7. 每日工作记录——状态机的编码选择
  8. 让外国黑客感到胆颤心惊的传奇人物郭盛华
  9. ad转换中断方式C语言程序,STC12C2052AD AD转换C程序 +PWM输出功能实现
  10. 机器学习-验证策略总结【交叉验证、验证集方法】