Python 數(shù)據(jù)可視化:繪制箱線圖、餅圖和直方圖

上一課介紹了柱形圖和條形圖,本課將介紹另外幾種統(tǒng)計(jì)圖表。

1.6.1 箱線圖

Box Plot 有多種翻譯,盒須圖、盒式圖、盒狀圖或箱線圖、箱形圖等,不管什么名稱,它的基本結(jié)構(gòu)是這樣的:

image

這種圖是由美國著名統(tǒng)計(jì)學(xué)家約翰·圖基(John Tukey)于 1977 年發(fā)明的,它能顯示出一組數(shù)據(jù)的上限、下限、中位數(shù)及上下四分位數(shù)。

  • 中位數(shù):由矩形箱子中的線表示。中位數(shù)常用于度量數(shù)據(jù)的中心,一半觀測(cè)值小于等于該值,而另一半則大于等于該值。
  • 四分位間距框:四分位間距框表示中間 50% 的數(shù)據(jù),即上圖中的矩形框,它的上下邊之間的距離表示“上四分位數(shù) Q3”和“下四分位數(shù) Q1”的差(Q3-Q1)。
  • 須和上限、下限:由矩形框向兩側(cè)延伸的線段,線段的終點(diǎn)分別稱為“上限”和“下限”。
  • 異常值:超出“上限”和“下限”范圍的值。

為了更深入理解箱線圖的含義,假設(shè)有這樣一組數(shù)據(jù):[1, 3, 5, 8, 10,11, 16, 98 ],共有 8 個(gè)數(shù)字。

首先要計(jì)算箱線圖中的“四分位數(shù)”,注意不是 4 個(gè)數(shù):

  • Q1 = 第 1 四分位數(shù)、下四分位數(shù),即第 25 百分位數(shù),Q1 的位置 =
    image.png
  • Q2 = 第 2 四分位數(shù)、中位數(shù),即第 50 百分位數(shù),Q2 的位置 =
    image.png
  • Q3 = 第 3 四分位數(shù)、上四分位數(shù),即第 75 百分位數(shù),Q3 的位置 =
    image.png

對(duì)于已經(jīng)排序的數(shù)據(jù) [1, 3, 5, 8, 10,11, 16, 98 ],下四分位數(shù)(Q1)的位置是數(shù)列中從小到大第 2.25 個(gè)數(shù),當(dāng)然是不存在這個(gè)數(shù)字的——如果是第 2 個(gè)或者第 3 個(gè),則存在。但是,可以用下面的原則,計(jì)算出此位置的數(shù)值。

四分位數(shù)等于與該位置兩側(cè)的兩個(gè)整數(shù)的加權(quán)平均數(shù),此權(quán)重取決于相對(duì)兩側(cè)整數(shù)的距離遠(yuǎn)近,距離越近,權(quán)重越大,距離越遠(yuǎn),權(quán)重越小,權(quán)數(shù)之和等于 1。

根據(jù)這個(gè)原則,可以分別計(jì)算本例中數(shù)列的 3 個(gè)四分位數(shù)。

image
  • Q1 = 3 × 0.75 + 5 × 0.25 = 3.5
  • Q2 = 8 × 0.5 + 10 × 0.5 = 9
  • Q3 = 11 × 0.25 + 16 × 0.75 = 14.75

在此計(jì)算基礎(chǔ)上,還可以進(jìn)一步計(jì)算四分位間距和上限、下限的數(shù)值。

  • 四分位間距:IQR = Q3 - Q1 = 11.25
  • 上限 = Q3 + 1.5 × IQR = 14.75 + 1.5 × 11.25 = 31.625
  • 下限 = Q1 - 1.5 × IQR = 3.3 - 1.5 × 11.25 = ﹣13.375

注意:凡是落在上下限以外的數(shù)據(jù),都是離群值。上述計(jì)算中,并沒有把離群值剔除,因此導(dǎo)致下限出現(xiàn)了負(fù)數(shù)。下面我們要使用 Matplotlib 中的專有方法繪制箱線圖,該方法會(huì)把離群值剔除之后計(jì)算。

先看一個(gè)簡單示例,了解基本的流程。

%matplotlib inline
import matplotlib.pyplot as plt

fig,ax = plt.subplots(1, 2)
data = [1, 5, 9, 2]
ax[0].boxplot([data]) 
ax[0].grid(True)
ax[1].boxplot([data], showmeans=True)    # 顯示平均值
ax[1].grid(True)

輸出結(jié)果:

image

這里繪制了兩張箱線圖,一張沒有顯示平均值,另外一張顯示了平均值,所使用的方法就是 boxplot,其完整參數(shù)列表為:

plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_xticks=True, autorange=False, zorder=None, *, data=None)

參數(shù)很多,不要擔(dān)心記憶問題,更別擔(dān)心理解問題。首先很多參數(shù)都是可以“望文生義”的,再有,與以前所使用的其他方法(函數(shù))的參數(shù)含義也大同小異。

  • notch:默認(rèn)為 None,如果為 True,則意味著繪制有凹槽的箱線圖。
  plt.boxplot([2,4,6,8,10], notch=True)
  plt.grid(1)

輸出結(jié)果:

image

所謂的“凹槽”,不是簡單形狀的改變,左右折線的上限區(qū)間表示了數(shù)據(jù)分布的置信區(qū)間,橫線依然是上限和下限。

  • vert:設(shè)置箱線圖是豎直還是水平,默認(rèn)為 True,如果設(shè)置為 False,則水平。
  • bootstrap:這個(gè)參數(shù)與前面的 notch 配合,用于設(shè)置置信區(qū)間。
還有 77% 的精彩內(nèi)容
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
支付 ¥4.99 繼續(xù)閱讀

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容