北京IT外包服務(wù)商帶您了解環(huán)比增長率
2020-04-24 13:59 作者:艾銻無限 瀏覽量:
北京IT外包服務(wù)商帶您了解環(huán)比增長率
很多企業(yè)比較注重自己的業(yè)務(wù)增長情況,時常會需要計(jì)算同比增長率和環(huán)比增長率。從上學(xué)的時候就有很多小伙伴搞不清楚這兩個增長率之間的區(qū)別,這里簡單直白的解釋一下:
同比增長率從名字上就比較容易理解,指的是同期相比增長情況如何,比如今年一季度和去年一季度相比業(yè)務(wù)增長情況就可以用同比增長率來衡量,具體的計(jì)算公式為(今年一季度數(shù)據(jù) - 去年一季度數(shù)據(jù))/去年一季度數(shù)據(jù)。這里的季度只是舉例用的,月份,周甚至天都可以作周期;
環(huán)比增長率的名字可能沒有那么直觀,它指的是這一個周期與上一個周期相比增長情Python如何計(jì)算環(huán)比增長率
況如何,比如第三季度和第二季度相比,業(yè)務(wù)增長情況就可以用環(huán)比增長率來衡量,具體計(jì)算公式為(第二季度數(shù)據(jù) - 第一季度數(shù)據(jù))/第一季度數(shù)據(jù)。當(dāng)然這里的季度也只是舉例用的,月份,周甚至天也都可以作周期。
根據(jù)具體表格情況計(jì)算環(huán)比增長率
我們不能確保每次拿到的數(shù)據(jù)都是類似的格式,對不同格式的數(shù)據(jù)在計(jì)算環(huán)比增長率的時候,會有一些小差別。
計(jì)算環(huán)比增長率情況一
首先看一下數(shù)據(jù)集長什么樣子:
這是一種形式的表格,不同的年份,不同產(chǎn)品的銷售額,對這樣一種形式的數(shù)據(jù)計(jì)算環(huán)比增長率,是比較簡單的一種形式,不需要提前對數(shù)據(jù)做過多的整理。
這里需要注意的是,我們希望能夠保留年份信息,而用來計(jì)算的函數(shù)會把表格中所有數(shù)值型數(shù)據(jù)都進(jìn)行環(huán)比運(yùn)算,所以需要提前將年份信息轉(zhuǎn)化成索引:
df1 = df.set_index("year") #為了不改變原數(shù)據(jù),將充值索引后的數(shù)據(jù)賦值給df1df1 #查看修改索引后的數(shù)據(jù)集
修改索引后的表可以直接進(jìn)行計(jì)算了:
df1.pct_change() #pct_change()方法計(jì)算當(dāng)前元素與先前元素之間的百分比變化
輸出結(jié)果:
這樣計(jì)算的就是每一年和前一年相比的一個環(huán)比增長率,當(dāng)然實(shí)際工作中一般不會保留這么多位小數(shù),需要處理一下:
round(df1.pct_change(),4) #保留四位小數(shù),由于增長率一般是百分?jǐn)?shù),所以這里保留4位小數(shù)
輸出結(jié)果:
這樣基本就是常見的環(huán)比增長率了。
計(jì)算環(huán)比增長率情況二
來看另一種樣子的數(shù)據(jù)集:
這一種數(shù)據(jù)集明顯比上一個數(shù)據(jù)集復(fù)雜了一點(diǎn),而且這是整個數(shù)據(jù)集的前十行,下邊我們簡單探索下這個數(shù)據(jù)集:
首先一目了然,一共有三列,分別是產(chǎn)品ID,年份,銷售金額;
然后需要探索一共有多少個產(chǎn)品ID,即一共有幾種產(chǎn)品,還有一共是幾年的數(shù)據(jù):
data.ID.unique() #產(chǎn)看有幾種產(chǎn)品ID
輸出結(jié)果:
array(['001', '002', '003', '004', '005', '006'], dtype=object)
一共有6種產(chǎn)品
data.year.unique() #查看一共有幾年數(shù)據(jù)
輸出結(jié)果:
array(['2016', '2017', '2018', '2019'], dtype=object)
一共有4年的數(shù)據(jù)。
那么這種數(shù)據(jù)要怎樣計(jì)算環(huán)比增長率呢?
有兩種方法,一種是將原數(shù)據(jù)集轉(zhuǎn)化成第一種數(shù)據(jù)集情況的樣子,第二種是不改變原數(shù)據(jù)集計(jì)算環(huán)比增長率
先看方法一
通過數(shù)據(jù)透視的方法,將原數(shù)據(jù)進(jìn)行加工:
data1 = data.pivot(index = "ID",columns="year",values="amount" )data1 #為了不改變原數(shù)據(jù),將數(shù)據(jù)透視后的結(jié)果賦值給data1
輸出結(jié)果:
這里的行索引和列名可以進(jìn)行互換,在data.pivot()的參數(shù)中進(jìn)行設(shè)置就可以,雖然和第一種情況類似,但是仔細(xì)觀察又發(fā)現(xiàn)了不同,第一種情況數(shù)據(jù)集的行索引是年份,這份數(shù)據(jù)中行索引是產(chǎn)品ID,其實(shí)這個是沒有影響的,計(jì)算環(huán)比增長率的方法中有參數(shù)可以解決這種情況:
data1.pct_change(axis='columns') #只需要設(shè)置一下軸信息就可以改變運(yùn)算方向
輸出結(jié)果:
橫向排列的就是每一個產(chǎn)品每一年的環(huán)比增長率,接下來,看另一種不對數(shù)據(jù)進(jìn)行處理的方法。
再看方法二
由于一共是四年數(shù)據(jù),規(guī)律明顯,所以運(yùn)用循環(huán)的方法計(jì)算環(huán)比增長率:
s = pd.Series() #新建一個空series用來放置計(jì)算結(jié)果for i in data["ID"].unique(): #行索引是產(chǎn)品ID,所以有多少種商品,就循環(huán)多少次 data_new = data[data["ID"]==i] #將相同產(chǎn)品的數(shù)據(jù)提取出來 s = pd.concat([s,data_new["amount"].pct_change()]) #計(jì)算一種產(chǎn)品的環(huán)比增長率,并價格計(jì)算出的記過拼接到series中s #查看最終結(jié)果
輸出結(jié)果:
0 NaN1 -0.4793802 2.4026893 -0.2839624 NaN5 0.3867616 -0.1659267 -0.6011668 NaN9 0.09165510 -0.77360811 0.72302812 NaN13 -0.24101814 0.53450415 0.20014516 NaN17 0.03589918 -0.09147119 0.32854320 NaN21 -0.26149122 0.32679423 -0.903687dtype: float64
得出這個結(jié)果后,可以把結(jié)果作為一個新列添加到原表當(dāng)中,方便對比查看:
data["growth rate"]=round(s,4)data.head(10) #由于數(shù)據(jù)集比較長,只查看前十行
輸出結(jié)果:
另一個常用參數(shù)periods
艾銻無限科技專業(yè):
IT外包、
企業(yè)外包、
北京IT外包、
桌面運(yùn)維、
弱電工程、網(wǎng)站開發(fā)、wifi覆蓋方案,
網(wǎng)絡(luò)外包,網(wǎng)絡(luò)管理服務(wù),
網(wǎng)管外包,綜合布線,
服務(wù)器運(yùn)維服務(wù),中小企業(yè)
it外包服務(wù),服務(wù)器維保公司,硬件運(yùn)維,網(wǎng)站運(yùn)維服務(wù)
官方文檔中對這個參數(shù)的解釋是這樣的:形成百分比變化所需的時間。用直白的話解釋就是進(jìn)行環(huán)比運(yùn)算的周期,比如上邊所有的計(jì)算都是下一個周期和上一個周期進(jìn)行的環(huán)比增長,也可計(jì)算諸如第三期與第一期相比的環(huán)比增長,只需要設(shè)置periods=2,就可以實(shí)現(xiàn)這樣的需求:
df1.pct_change(periods=2)#用第一個數(shù)據(jù)集為例,查看這個參數(shù)的效果
輸出結(jié)果:
關(guān)于上述計(jì)算的所有結(jié)果,感興趣的童鞋可以按照文章開頭的公式手工計(jì)算一下,看下和pct_change()計(jì)算的結(jié)果都是一樣的哦。
如何計(jì)算環(huán)比增長率是不是已經(jīng)沒有什么問題啦,YEAH!
以上文章由北京艾銻無限科技發(fā)展有限公司整理