如何预估通胀率?通过央行数据来统计一波

Posted 緈諨の約錠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何预估通胀率?通过央行数据来统计一波相关的知识,希望对你有一定的参考价值。

1 前言

最近突然想统计下中国这些年的通胀率,然后就简单写了一个脚本,大致评估下近10年的通胀情况,跟预期结果差不多,平均8%左右的通胀率。

2 M2 定义

广义货币供应量(M2)是指流通于银行体系之外的现金加上企业存款、居民储蓄存款以及其他存款,它包括了一切可能成为现实购买力的货币形式,通常反映的是社会总需求变化和未来通胀的压力状态。近年来,很多国家都把M2作为货币供应量的调控目标。

3 近10年M2情况

年份期末余额(亿元人民币)
2022年期末2664320.84
2021年期末2382899.56
2020年期末2186795.89
2019年期末1986488.82
2018年期末1826744.22
2017年期末1690235.31
2016年期末1550066.67
2015年期末1392278.11
2014年期末1228374.81
2013年期末1106524.98
2012年期末974148.80

4 脚本统计增量和增长率

代码示例:

/**
 * <p>
 * 最近10年货币通胀率估算
 * <p>
 * 2022年期末   M2    2664320.84 (亿)
 * 2021年期末   M2    2382899.56
 * 2020年期末   M2    2186795.89
 * 2019年期末   M2    1986488.82
 * 2018年期末   M2    1826744.22
 * 2017年期末   M2    1690235.31
 * 2016年期末   M2    1550066.67
 * 2015年期末   M2    1392278.11
 * 2014年期末   M2    1228374.81
 * 2013年期末   M2    1106524.98
 * 2012年期末   M2    974148.80
 * <p/>
 *
 * @param args
 * @return void
 * @Date 2023/2/23 15:20
 */
public static void main(String[] args) 
    int startYear = 2012;
    int endYear = 2023;

    //最近10年货币通胀率估算
    List<Map<Integer, BigDecimal>> dataList = new ArrayList<>();
    Map<Integer, BigDecimal> map = new HashMap<>(16);
    map.put(2012, BigDecimal.valueOf(974148.80));
    map.put(2013, BigDecimal.valueOf(1106524.98));
    map.put(2014, BigDecimal.valueOf(1228374.81));
    map.put(2015, BigDecimal.valueOf(1392278.11));
    map.put(2016, BigDecimal.valueOf(1550066.67));
    map.put(2017, BigDecimal.valueOf(1690235.31));
    map.put(2018, BigDecimal.valueOf(1826744.22));
    map.put(2019, BigDecimal.valueOf(1986488.82));
    map.put(2020, BigDecimal.valueOf(2186795.89));
    map.put(2021, BigDecimal.valueOf(2382899.56));
    map.put(2022, BigDecimal.valueOf(2664320.84));
    dataList.add(map);

    //增速
    List<Map<Integer, String>> resultList = new ArrayList<>();
    Map<Integer, String> dealMap = new TreeMap<>();
    BigDecimal lastTempValue = BigDecimal.ZERO;
    for (int i = startYear; i < endYear; i++) 
        Map<Integer, BigDecimal> filterDataMap = dataList.get(0);
        for (Map.Entry<Integer, BigDecimal> entryMap : filterDataMap.entrySet()) 
            if (entryMap.getKey() != i) 
                continue;
            

            BigDecimal currentValue = entryMap.getValue();
            if (i == 2012) 
                lastTempValue = currentValue;
                continue;
            

            BigDecimal decimal = currentValue.subtract(lastTempValue).divide(lastTempValue, 8, RoundingMode.HALF_UP);
            dealMap.put(i, getPercentFormat(decimal));
            lastTempValue = currentValue;
        
    

    resultList.add(dealMap);
    System.out.println(JSON.toJSONString(resultList));


/**
 * <p>
 * Get amount in percentage format
 * <p/>
 *
 * @param bigDecimal
 * @return java.text.DecimalFormat
 * @Date 2021/12/9 21:44
 */
public static String getPercentFormat(BigDecimal bigDecimal) 
    //Create a percentage format for China
    NumberFormat perFormat = NumberFormat.getPercentInstance(Locale.CHINA);
    try 
        DecimalFormat percentFormat = (DecimalFormat) perFormat;
        //Setting the Pattern will invalidate the percentage format and the built-in format   percentFormat.applyPattern("##.00")
        //Set the minimum number of decimal places to 2
        percentFormat.setMinimumFractionDigits(2);
        return percentFormat.format(bigDecimal);
     catch (Exception e) 
        log.error("Abnormal value conversion ", e);
    

    return null;


public static class AscBigDecimalComparator implements Comparator<Map.Entry<Integer, String>> 
    //然后通过比较器来实现排序
    @Override
    public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) 
        return o1.getValue().compareTo(o2.getValue());
    


5 执行结果

执行结果:

[2013:"13.59%",2014:"11.01%",2015:"13.34%",2016:"11.33%",2017:"9.04%",2018:"8.08%",2019:"8.74%",2020:"10.08%",2021:"8.97%",2022:"11.81%"]

6 图表展示

https://echarts.apache.org/examples/zh/editor.html?c=line-style

代码内容如下:

option = 
  xAxis: 
    type: 'category',
   data: ['2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022']
  ,
  yAxis: 
    type: 'value'
  ,
  series: [
    
      data: [13.59, 11.01, 13.34, 11.33, 9.04, 8.08, 8.74,10.08,8.97,11.81],
      type: 'line',
      symbol: 'triangle',
      symbolSize: 20,
      lineStyle: 
        color: '#5470C6',
        width: 4,
        type: 'dashed'
      ,
      itemStyle: 
        borderWidth: 3,
        borderColor: '#EE6666',
        color: 'yellow'
      
    
  ]
;

效果如下:

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔!

以上是关于如何预估通胀率?通过央行数据来统计一波的主要内容,如果未能解决你的问题,请参考以下文章

OECD富裕经济体系通胀飙升至 25 年高位-全球薪资停滞不前

OECD富裕经济体系通胀飙升至 25 年高位-全球薪资停滞不前

SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

ATOM Markets汇市早报四国重磅炸弹引爆金融市场

通胀与物价