同比、环比一直在很多场合中广泛地被使用到,今天是基于一个小数据集来计算一下销售额的同比增长率,对于同比和环比的了解之前主要是来源于业务方面的需求,这里为了更加准确定义同比,贴上百度百科的定义如下:
比如说2017年8月的产值100万,2018年8月的产值300万,同比增长为:(300-100)÷100*100%=200%
同比增长率一般是指和上一年同期相比较的增长率。
某个指标的同比增长率=(现年的某个指标的值-上年同期这个指标的值)/上年同期这个指标的值。
某个指标的同期比=(本年的某个指标的值-去年同期这个指标的值)/去年同期这个指标的值
数据集如下:
数据集中的数据记录数量很少,一共50条记录左右,具体同比计算实践如下:
#!usr/bin/env python
#encoding:utf-8
from __future__ import division
'''
__Author__:沂水寒城
功能:计算企业销售额的同比增长率
'''
import sys
import xlrd
reload(sys)
sys.setdefaultencoding("utf-8")
def dataPairCal(one,two):
'''
单对同期数据计算
'''
if one and two:
return two/one-1
else:
return 0
def handleData(datapath='data.xlsx'):
'''
从Excel中抽取出来数据,并计算同比
'''
data_dict,res_dict={},{}
for year in [2016,2017,2018]:
data_dict[year]={}
for one in range(1,13):
data_dict[year][one]=0
workbook=xlrd.open_workbook(datapath,'rb')
sheet_one=workbook.sheets()[0]
row_num,col_num=sheet_one.nrows,sheet_one.ncols
name_list=[]
for i in range(4,row_num):
company,money=sheet_one.cell_value(i,0),sheet_one.cell_value(i,1)
month,year=sheet_one.cell_value(i,2),sheet_one.cell_value(i,3)
data_dict[year][month]=money
print data_dict
dict1,dict2,dict3=data_dict[2016],data_dict[2017],data_dict[2018]
for i in range(1,13):
one_tmp_key='2016_2017_'+str(i)
res_dict[one_tmp_key]=dataPairCal(dict1[i],dict2[i])
for i in range(1,13):
one_tmp_key='2017_2018_'+str(i)
res_dict[one_tmp_key]=dataPairCal(dict2[i],dict3[i])
print res_dict
if __name__ == '__main__':
handleData(datapath='data.xlsx')
结果如下:
{2016: {1: 0, 2: 0, 3: 2932137.0, 4: 5601712.0, 5: 4555366.0, 6: 7754956.0, 7: 3190944.0, 8: 19781.0, 9: 10909596.0, 10: 1697156.0, 11: 16921888.0, 12: 673851.0}, 2017: {1: 690055.0, 2: 584111.0, 3: 947528.0, 4: 579917.0, 5: 539401.0, 6: 459675.0, 7: 485340.0, 8: 9544196.0, 9: 6345747.0, 10: 12599740.0, 11: 4262813.0, 12: 14145928.0}, 2018: {1: 13135177.0, 2: 1773997.0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0}}
{'2016_2017_8': 481.4930994388555, '2016_2017_9': -0.4183334561609797, '2016_2017_6': -0.9407250021792516, '2016_2017_7': -0.8479008092902915, '2016_2017_4': -0.8964750419157572, '2016_2017_5': -0.8815899754267824, '2016_2017_2': 0, '2016_2017_3': -0.676847296016523, '2016_2017_1': 0, '2016_2017_10': 6.424031733087589, '2016_2017_11': -0.7480888066390701, '2016_2017_12': 19.99266455047184, '2017_2018_10': 0, '2017_2018_11': 0, '2017_2018_12': 0, '2017_2018_2': 2.037088840990839, '2017_2018_3': 0, '2017_2018_1': 18.034971125489996, '2017_2018_6': 0, '2017_2018_7': 0, '2017_2018_4': 0, '2017_2018_5': 0, '2017_2018_8': 0, '2017_2018_9': 0}
结果中2016_2017_8表示的是2017年和2016年8月销售额的同比分析计算结果,很简单的小功能,主要是熟悉一下同比的概念。