對比分析
兩個相互聯系的數(指標)進行比較(絕對數比較、相對數比較)
對比分析
對比分析 → 兩個互相聯系的指標進行比較
絕對數比較(相減) / 相對數比較(相除)
結構分析、比例分析、空間比較分析、動態對比分析
1.絕對數比較 -->相減
相互對比的指標在量級上不能差別過大
(1)折線圖比較 (2)多系列柱狀圖比較
data.plot(kind='line',style = '--.',alpha = 0.8,figsize = (10,3),title = 'AB產品銷量對比-折線圖')
data.plot(kind = 'bar', width = 0.8,alpha = 0.8,figsize = (10,3),title = 'AB產品銷量對比-柱狀圖')
import numpy as np import pandas as pd import matplotlib.pyplot as plt % matplotlib inline
# 1、絕對數比較 → 相減 data = pd.DataFrame(np.random.rand(30,2)*1000, columns = ['A_sale','B_sale'], index = pd.period_range('20170601','20170630')) print(data.head()) # 創建數據 → 30天內A/B產品的日銷售額 data.plot(kind='line', style = '--.', alpha = 0.8, figsize = (10,3), title = 'AB產品銷量對比-折線圖') # 折線圖比較 data.plot(kind = 'bar', width = 0.8, alpha = 0.8, figsize = (10,3), title = 'AB產品銷量對比-柱狀圖') # 多系列柱狀圖比較
絕對值 在一個月中,折線圖的曲線
(3)柱狀圖堆疊圖+差值折線圖比較
plt.bar(x, y1, width = 1, facecolor = 'yellowgreen') plt.bar(x, y2, width = 1, facecolor = 'lightskyblue')
plt.plot(x, y3, "--go") 差值折線圖
#絕對數比較,看它們比較的狀況--相減 x = range(len(data)) y1 = data['A_sale'] y2 = -data['B_sale'] #做一個正負堆疊圖 fig3 = plt.figure(figsize = (10, 6)) plt.subplots_adjust(hspace = 0.3) #做一下校准, 創建子圖及間隔設置。 ax1 = fig3.add_subplot(2, 1, 1) #柱狀圖創建方式 plt.bar(x, y1, width = 1, facecolor = 'yellowgreen') plt.bar(x, y2, width = 1, facecolor = 'lightskyblue') plt.title('AB產品銷量對比-堆疊圖') plt.grid() plt.xticks(range(0,30,6)) ax1.set_xticklabels(data.index[::6]) # x軸日期、間隔 ax2 = fig3.add_subplot(2, 1, 2) y3 = data['A_sale'] - data['B_sale'] #折線圖,做減法 plt.plot(x, y3, "--go") plt.grid() plt.title('AB產品銷量對比-差值折線') plt.xticks(range(0,30,6)) plt.axhline(0, color = 'r', linestyle = '--', alpha = 0.8) # 添加y軸參考線 ax2.set_xticklabels(data.index[::5]) #加個標簽。 # 創建差值折線圖
可以看到它們大概一個月中銷量的對比。
絕對數的比較更多的是兩個樣本量差不多,但更多的時候用的是相對數,相對數更多的時候是做一個結構性比較。
2、相對數比較 → 相除
有聯系的指標綜合計算后的對比,數值為相對數
結構分析、比例分析、空間比較分析、動態對比分析
(1)結構分析 頻率對比
在分組基礎上,各組總量指標與總體的總量指標對比,計算出各組數量在總量中所占比重
反映總體的內部結構
data = pd.DataFrame({'A_sale':np.random.rand(30)*1000, 'B_sale':np.random.rand(30)*200}, index = pd.period_range('20170601','20170630')) print(data.head()) print('------') # 創建數據 → 30天內A/B產品的日銷售額 # A/B產品銷售額量級不同 data['A_per'] = data['A_sale'] / data['A_sale'].sum() #A_sale的頻率 data['B_per'] = data['B_sale'] / data['B_sale'].sum() #計算出每天的營收占比,B_sale的頻率 data['A_per%'] = data['A_per'].apply(lambda x:"%.3f%%" % (x*100)) data['B_per%'] = data['B_per'].apply(lambda x:"%.3f%%" % (x*100)) #轉換為百分數 data.head()
能看絕對值的,看相對值肯定是沒錯的,看相對值就已經拋開了相對值的影響,趨勢對比、完成度,
fig,axes = plt.subplots(2,1,figsize = (10,6),sharex=True) data[['A_sale','B_sale']].plot(kind='line',style = '--.',alpha = 0.8,ax=axes[0]) axes[0].legend(loc = 'upper right') data[['A_per','B_per']].plot(kind='line',style = '--.',alpha = 0.8,ax=axes[1]) axes[1].legend(loc = 'upper right') # 絕對值對比較難看出結構性變化,通過看銷售額占比來看售賣情況的對比 # 同時可以反應“強度” → 兩個性質不同但有一定聯系的總量指標對比,用來說明“強度”、“密度”、“普遍程度” # 例如:國內生產總值“元/人”,人口密度“人/平方公里”
按總量做一個對比,也能看出大概趨勢,按百分比就好比較了(每一天中兩個產品銷量的對比)。結構分析反映的其實是跟總量之間的關系,可以說明強度、硬度
(2)比例分析 相比做除法
它的核心在於通過多個變量或者說不同的變量之間的相比,比之后的新的變量,這個新變量賦予新的意義。比如說男女比例的比值可以看出其他方面。
比如人的流出占比和資本的流出占比
# 在分組的基礎上,將總體不同部分的指標數值進行對比,其相對指標一般稱為“比例相對數”
# 比例相對數 = 總體中某一部分數值 / 總體中另一部分數值 → “基本建設投資額中工業、農業、教育投資的比例”、“男女比例”...
# 2、相對數比較 → 相除 # (2)比例分析 data = pd.DataFrame({'consumption':np.random.rand(12)*1000 + 2000, 'salary':np.random.rand(12)*500 + 5000}, index = pd.period_range('2017/1','2017/12',freq = 'M')) print(data.head()) print('------') # 創建數據 → 某人一年內的消費、工資薪水情況 # 消費按照2000-3000/月隨機,工資按照5000-5500/月隨機 data['c_s'] = data['consumption'] / data['salary'] #一年的消費占比情況; 比例相對數 --->> 消費收入比 data data['c_s'].plot.area(color = 'green', alpha = 0.5, ylim = [0.3, 0.6], figsize = (8, 3), grid = True) #創建面積圖去表達 data
(3)空間比較分析 (橫向)
比如說同樣的2017年北京和深圳膜拜單車使用量,空間是比較抽象的更多的是在時間相同的情況下,不同的元素的比較。
同一時間內不同空間(這四個產品)的相互比較
同類現象在同一時間不同空間的指標數值進行對比,反應同類現象在不同空間上的差異程度和現象發展不平衡的狀況
空間比較相對數 = 甲空間某一現象的數值 / 乙空間同類現象的數值
一個很現實的例子 → 絕對數來看,我國多經濟總量世界第一,但從人均水平來看是另一回事
data.sum().plot(kind = 'bar', color = ['r', 'g', 'b', 'k'], alpha = 0.8, grid = True) 同一個月內
data[:10].plot(kind = 'bar',color = ['r','g','b','k'], alpha = 0.8, grid = True, figsize = (12,4),width = 0.8) 同一天內
# 2、相對數比較 → 相除 # (3)空間比較分析(橫向對比分析) data = pd.DataFrame({'A':np.random.rand(30)*5000, 'B':np.random.rand(30)*2000, 'C':np.random.rand(30)*10000, 'D':np.random.rand(30)*800}, index = pd.period_range('20170601','20170630')) print(data.head()) print('------') # 創建數據 → 30天內A/B/C/D四個產品的銷售情況 # 不同產品的銷售量級不同
#同一時間(每個月內) data.sum().plot(kind = 'bar', color = ['r', 'g', 'b', 'k'], alpha = 0.8, grid = True)#求和得到一個柱形圖,4個產品的不同營銷情況 for i, j in zip(range(4), data.sum()): plt.text(i - 0.25, j + 2000, '%.2f'% j, color = 'k') #通過柱狀圖做橫向比較, ---->> 4個產品的銷售額總量 #同一時間(每一天) data[:10].plot(kind = 'bar',color = ['r','g','b','k'], alpha = 0.8, grid = True, figsize = (12,4),width = 0.8) # 多系列柱狀圖,橫向比較前十天4個產品的銷售額。 # 關於同比與環比 # 同比 → 產品A在2015.3和2016.3的比較(相鄰時間段的同一時間點) # 環比 → 產品A在2015.3和2015.4的比較(相鄰時間段的比較) # 如何界定“相鄰時間段”與“時間點”,決定了是同比還是環比
同比和環比都是在時間點上不一樣,都是類似同一個內容在不同時間的比較;同比更多的是去年的今天和今年的今天的比較,環比是今年每個時間段的比較,
(4)動態對比分析(縱向)
在時間層面,同一個東西在不同時間軸上進行對比,反映的是變化、速度、趨勢
同一現象在不同時間上的指標數值進行對比,反應現象的數量隨着時間推移而發展變動的程度及趨勢
最基本方法,計算動態相對數 → 發展速度
動態相對數(發展速度) = 某一現象的報告期數值 / 同一現象的基期數值
基期:用來比較的基礎時期
報告期:所要研究的時期,又稱計算期
# 2、相對數比較 → 相除 (4)動態對比分析(縱向對比分析) data = pd.DataFrame({'A':np.random.rand(30)*2000+1000}, index = pd.period_range('20170601','20170630')) print(data.head()) print('------') # 創建數據 → 30天內A產品的銷售情況 data['base'] = 1000 # 假設基期銷售額為1000,后面每一天都為計算期
#累計增長量 = 報告期水平 - 固定基期水平
data['l_growth'] = data['A'] - data['base'] #每一天減去它就可以了 data
#逐期增長量= 報告期水平 - 報告期前一期水平
data['z_growth'] = data['A'] - data.shift(1)['A'] #每一天每個周期跟上個增長量的對比;shift移動一行 data.fillna(0, inplace = True) #替換缺失值 data[['l_growth','z_growth']].plot(figsize = (10,4),style = '--.',alpha = 0.8) plt.axhline(0,hold=None,color='r',linestyle="--",alpha=0.8) # 添加y軸參考線 plt.legend(loc = 'lower left') plt.grid() # 通過折線圖查看增長量情況 data.head()
累計增長量和逐期增長量的大小差別,如果是累計增長量它本身是跟着機器相比較,效益好每天都是增長的;
逐期增長量可以看到每天的一個變化頻率和變動趨勢了,如果今天的增長量和昨天的增長量比下降了就會是個負數。如果把逐期增長量加在一起,如果大於0,就是往上長的。
#定基增長速度 data['lspeed'] = data['l_growth'] / 1000 #環比增長速度 data['zspeed'] = data['z_growth'] / data.shift(1)['A']#報告期的水平/上期的水平 data[['lspeed','zspeed']].plot(figsize = (10,4),style = '--.',alpha = 0.8) plt.axhline(0,hold=None,color='r',linestyle="--",alpha=0.8) # 添加y軸參考線 plt.grid() data.head()