針對離散變數我們可以使用常見的條形圖和餅圖完成資料的視覺化工作,那麼,針對數值型變數,我們也有很多視覺化的方法,例如箱線圖、直方圖、折線圖、面積圖、散點圖等等。這一期,我們就先來介紹一下數值型變數的箱線圖繪製。箱線圖一般用來展現資料的分佈(如上下四分位值、中位數等),同時,也可以用箱線圖來反映資料的異常情況。
有三種方法比較簡單的繪製箱型圖,
1,最直接也是最通用的方法:plt.boxplot
2,在資料處理過程中,如果你已經得到DataFrame的資料,可以直接呼叫:D.boxplot()
3,如果資料時Series或者DataFrame型別,可以呼叫plot方法,並用kind引數指定箱型圖box,如:S.plot(kind='box')或者D.plot(kind='box')
2,3中方法也可以呼叫boxplot的引數,
我們先了解一下matplotlib包中boxplot函式的引數含義及使用方法:
plt。boxplot(x, notch=None, sym=None, vert=None,
whis=None, positions=None, widths=None,
patch_artist=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)
x:指定要繪製箱線圖的資料;
notch:是否是凹口的形式展現箱線圖,預設非凹口;
sym:指定異常點的形狀,預設為+號顯示;
vert:是否需要將箱線圖垂直襬放,預設垂直襬放;
whis:指定上下須與上下四分位的距離,預設為1。5倍的四分位差;
positions:指定箱線圖的位置,預設為[0,1,2…];
widths:指定箱線圖的寬度,預設為0。5;
patch_artist:是否填充箱體的顏色;
meanline:是否用線的形式表示均值,預設用點來表示;
showmeans:是否顯示均值,預設不顯示;
showcaps:是否顯示箱線圖頂端和末端的兩條線,預設顯示;
showbox:是否顯示箱線圖的箱體,預設顯示;
showfliers:是否顯示異常值,預設顯示;
boxprops:設定箱體的屬性,如邊框色,填充色等;
labels:為箱線圖新增標籤,類似於圖例的作用;
filerprops:設定異常值的屬性,如異常點的形狀、大小、填充色等;
medianprops:設定中位數的屬性,如線的型別、粗細等;
meanprops:設定均值的屬性,如點的大小、顏色等;
capprops:設定箱線圖頂端和末端線條的屬性,如顏色、粗細等;
whiskerprops:設定須的屬性,如顏色、粗細、線的型別等;
我們還是以泰坦尼克的年齡資料為例:
匯入包和資料:
import numpy as npimport pandas as pdimport matplotlib。pyplot as pltimport matplotlib。mlab as mlab#解決中文顯示問題plt。rcParams[ ‘font。sans-serif’] = [ ‘Microsoft YaHei’]plt。rcParams[ ‘axes。unicode_minus’] = Falsedf = pd。read_csv(‘titanic。csv’)x= df[df。Age>0]
檢視資料分佈
plt。boxplot(x。Age, # 指定繪圖資料 patch_artist=True, # 要求用自定義顏色填充盒形圖,預設白色填充 showmeans=True, # 以點的形式顯示均值 boxprops = {‘color’:‘black’,‘facecolor’:‘#9999ff’}, # 設定箱體屬性,填充色和邊框色 # 設定異常值屬性,點的形狀、填充色和邊框色 flierprops = {‘marker’:‘o’,‘markerfacecolor’:‘red’,‘color’:‘black’}, # 設定均值點的屬性,點的形狀、填充色 meanprops = {‘marker’:‘D’,‘markerfacecolor’:‘indianred’}, # 設定中位數線的屬性,型別和顏色 medianprops = {‘linestyle’:‘——’,‘color’:‘orange’}) #設定y軸的範圍 plt。ylim(0,85) plt。show()也可以這樣顯示圖例x。Age。plot(kind=‘box’,patch_artist=True, showmeans=True, boxprops = {‘color’:‘black’,‘facecolor’:‘#9999ff’}, flierprops = {‘marker’:‘o’,‘markerfacecolor’:‘red’,‘color’:‘black’}, meanprops = {‘marker’:‘D’,‘markerfacecolor’:‘indianred’}, medianprops = {‘linestyle’:‘——’,‘color’:‘orange’}) plt。ylim(0,85) plt。show()
生成圖如下:
其中:盒子的上、下四分位的中值處都有一條線段。
箱型末端延伸出去的直線稱為須,表示盒外資料的長度。如果在須外沒有資料,則在須的底部有一點,顏色與須的相同。
從圖中容易發現,乘客的平均年齡在30歲,有四分之一的人低於20歲,另有四分之一的人超過38歲,換句話說,
有一半的人,年齡落在20~37歲之間
;從均值(紅色的菱形)略高於中位數(黃色虛線)來看,說明年齡是有偏的,並且是右偏;同時,我們也會發現一些紅色的
異常值
,這些異常值的年齡
均在60歲以上
。