https://blog.csdn.net/littleRpl/article/details/91490704

同比 和 环比 都是为了显示数据的变化速度,但是基数不同,同比侧重长期数据趋势变化,环比侧重于短期内数据趋势变化

同比是指在同一时期内的数据趋势变化,用于本期与同期的对比,例如本期2018-02月销售额与同期2017-02月销售额做对比。【(本期 - 同期)/ 同期】

环比是指在短时间内的数据趋势变化,用去本期与临近一起的对比,例如本期2018-02月销售额与上一期2018-01月销售额做对比。【(本期 - 临近一期)/ 临近一期】

下面是计算环比的例子,其实同比可以参照这种思路。

import pandas as pd
import random
from datetime import datetime
import matplotlib.pyplot as plt
date = list(pd.date_range('1/1/2017', periods=24, freq='M')) #生成日期
sale = [random.randint(1000,9000) for i in range(0,24)] #随机生成销售额
data = pd.DataFrame({'date':date,'sale':sale}) #组成一个dataframe
data.head()
date sale
0 2017-01-31 2444
1 2017-02-28 1044
2 2017-03-31 7069
3 2017-04-30 2996
4 2017-05-31 5050
data['diff'] = data["sale"].diff()
data.head()
date sale diff
0 2017-01-31 2444 NaN
1 2017-02-28 1044 -1400.0
2 2017-03-31 7069 6025.0
3 2017-04-30 2996 -4073.0
4 2017-05-31 5050 2054.0
data["huanbi"]=["NaN"]+[i/j for i,j in zip(list(data['diff'])[1:],list(data['sale'])[:23])]
data.head()
date sale diff huanbi
0 2017-01-31 2444 NaN NaN
1 2017-02-28 1044 -1400.0 -0.572831
2 2017-03-31 7069 6025.0 5.77107
3 2017-04-30 2996 -4073.0 -0.576178
4 2017-05-31 5050 2054.0 0.685581
data1 = data.iloc[1:]   #去掉第一行
data1 = data1.set_index(['date'], drop=True)   #设置索引
#时序图
plt.figure(figsize=(10, 6))
plt.rcParams['font.sans-serif'] = ['SimHei']    #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False      #用来正常显示负号
data1["huanbi"].plot()
plt.xlabel('日期',fontsize=12,verticalalignment='top')
plt.ylabel('环比',fontsize=14,horizontalalignment='center')
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KBqcpLsm-1588057383760)(output_7_0.png)]

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐