「二八法則」的數(shù)據(jù)可視化:用帕累托圖進(jìn)行數(shù)據(jù)分析

導(dǎo)讀:借助帕累托圖,有助于我們抓住問(wèn)題的關(guān)鍵,從而解決核心的問(wèn)題。

01?「二八法則」和帕累托圖

線條從坐標(biāo)原點(diǎn)開始,代表累計(jì)百分比從 0 開始; 沒有使用雙坐標(biāo)軸,線條的高度就是頻次的累計(jì); 灰色邊框的高度就是頻次的總和,以便展現(xiàn)部分與整體之間的占比關(guān)系; 用虛線標(biāo)記大致符合「二八法則」的位置; 用文字標(biāo)簽說(shuō)明累計(jì)百分比的具體數(shù)字,在標(biāo)題中體現(xiàn)圖表想要傳遞的信息。
02?用 Matplotlib?畫帕累托圖
#?導(dǎo)入所需的庫(kù)
import?numpy?as?np
import?pandas?as?pd
import?matplotlib?as?mpl
import?matplotlib.pyplot?as?plt
import?matplotlib.image?as?image
#?正常顯示中文標(biāo)簽
mpl.rcParams['font.sans-serif']?=?['SimHei']
#?自動(dòng)適應(yīng)布局
mpl.rcParams.update({'figure.autolayout':?True})
#?正常顯示負(fù)號(hào)
mpl.rcParams['axes.unicode_minus']?=?False
#?禁用科學(xué)計(jì)數(shù)法
pd.set_option('display.float_format',?lambda?x:?'%.2f'?%?x)?
#?定義顏色,主色:藍(lán)色,輔助色:灰色,互補(bǔ)色:橙色
c?=?{'藍(lán)色':'#00589F',?'深藍(lán)色':'#003867',?'淺藍(lán)色':'#5D9BCF',
?????'灰色':'#999999',?'深灰色':'#666666',?'淺灰色':'#CCCCCC',
?????'橙色':'#F68F00',?'深橙色':'#A05D00',?'淺橙色':'#FBC171'}
#?數(shù)據(jù)源路徑
filepath='./data/帕累托圖數(shù)據(jù)源.xlsx'
#?讀取?Excel文件
df?=?pd.read_excel(filepath)
#?定義畫圖所需的數(shù)據(jù)
x?=?df['原因']
y?=?df['頻次']
#?讓折線圖從坐標(biāo)原點(diǎn)開始
x2?=?np.arange(len(x)+1)?-?0.5
#?計(jì)算累計(jì)頻次
y_cumsum?=?[0]?+?list(y.cumsum())
#?計(jì)算累計(jì)百分比
y2?=?y.cumsum()/y.sum()
#?使用「面向?qū)ο蟆沟姆椒ó媹D
fig,?ax?=?plt.subplots(figsize=(8,?6))
#?設(shè)置標(biāo)題
ax.set_title('\n%.1f%%'?%?(y_cumsum[2]/y.sum()*100)?+?'的質(zhì)量問(wèn)題是由20%的原因引起的\n',?
?????????????fontsize=26,?loc='left',?color=c['深灰色'])
#?用灰色方框代表總體的大小,體現(xiàn)每個(gè)數(shù)據(jù)的占比關(guān)系
ax.bar(x,?y.sum(),?width=1,?color='w',?edgecolor=c['淺灰色'],?zorder=0)
#?畫柱形圖
ax.bar(x,?y,?width=1,?color=c['藍(lán)色'],?edgecolor=c['淺灰色'],?zorder=1)
#?畫折線圖
ax.plot(x2,?y_cumsum,?ls='-',?lw=2,?color=c['橙色'],?label='累計(jì)百分比',?zorder=2)
#?標(biāo)記體現(xiàn)二八法則的虛線
ax.hlines(y_cumsum[2],?-0.5,?1.5,?color=c['橙色'],?ls='--')
ax.vlines(1.5,?0,?y_cumsum[2],?color=c['橙色'],?ls='--')
#?隱藏邊框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
#?設(shè)置圖形的位置,減少空白
ax.spines['left'].set_position(('data',?-0.51))
#?隱藏?X?軸的刻度線
ax.tick_params(axis='x',?which='major',?length=0)
ax.tick_params(axis='y',?which='major',?length=0)
ax.set_yticklabels([])
#?設(shè)置坐標(biāo)標(biāo)簽字體大小和顏色
ax.tick_params(labelsize=16,?colors=c['深灰色'])
#?設(shè)置數(shù)據(jù)標(biāo)簽
for?a,?a2,?b,?b2,?b3?in?zip(x,?x2[1:],?y,?y_cumsum[1:],?y2):
????ax.text(a,?b,?'%.0f'?%?b,?ha='center',?va=?'bottom',?fontsize=16,?color=c['藍(lán)色'])
#?標(biāo)記?Y?軸標(biāo)題
ax.text(-1,?y.sum(),?'頻\n次',?fontsize=16,?va='top',?color=c['藍(lán)色'])
#?標(biāo)記線條含義
ax.text(1.5,?y_cumsum[2]+10,?'累計(jì)%.1f%%?'?%?(y_cumsum[2]/y.sum()*100),?fontsize=16,?color=c['橙色'],?va='bottom',?ha='right',?zorder=5)
plt.show()
03?帕累托圖的應(yīng)用
A 類:需要投入巨大精力的長(zhǎng)期工作。 B 類:需要及時(shí)響應(yīng)并完成的工作。 C 類:需要快速跟進(jìn)處理的工作。


評(píng)論
圖片
表情
