1. 程式人生 > >箱線圖boxplot

箱線圖boxplot

分組 tst 而且 標簽 就是 情況 panda 有一個 idt

箱線圖boxplot——展示數據的分布

圖表作用:

1.反映一組數據的分布特征,如:分布是否對稱,是否存在離群點

2.對多組數據的分布特征進行比較

3.如果只有一個定量變量,很少用箱線圖去看數據的分布,而是用直方圖去觀察。一般都要跟其余的定性變量做分組箱線圖,可以起對比作用。(key)

適合數據類型:

針對連續型變量

用法:

只有一個變量、一組的數據(1個變量,0個定性變量),比如:學生的成績情況

只有一個變量、多組數據(1個變量,1個定性變量[班級]),比如:1、2、3班學生的成績情況

只有一個變量、多組數據(1個變量,多個定性變量[年級、班級]),比如:初一、初二、初三的1、2、3班學生的成績情況

多個變量同理,看Y軸數據大小才相近才采用此用法

圖表解讀:

技術分享圖片

1.箱子的大小取決於數據的四分位距,即IQR = Q3 - Q1(Q3: 75%分位數 , Q1: 25%分位數 , Q3和Q1為四分位數)。50%的數據集中於箱體,若箱體太大即數據分布離散,數據波動較大,箱體小表示數據集中。

2.箱子的上邊為上四分位數Q3,下邊為下四分位數Q1,箱體中的橫線為中位數Q2(50%分位數)

3.箱子的上觸須為數據的最大值Max,下觸須為數據的最小值Min(註意是非離群點的最大最小值,稱為上下相鄰值)

4.若數據值 > Q3+1.5 * IQR(上限值) 或 數據值 < Q1-1.5 * IQR(下限值) ,均視為異常值。數據值 > Q3+3 * IQR 或 數據值 < Q1-3 * IQR ,均視為極值。在實際應用中,不會顯示異常值與極值的界限,而且一般統稱為異常值。

  • 也表明上下觸須不一定是數據的最大最小值,1).若數據的最大值比上限值小的,那麽上觸須頂點就是觀察到的最大的;若數據的最大值比上限值大的,那麽上觸須頂點就是上限值,觀察到的最大值就是異常點。2).若數據的最小值比下限值大的,那麽下觸須頂點就是觀察到的最小值;若數據的最小值比下限值小的,那麽下觸須頂點就是下限值,觀察到的最小值就是異常點。
  • 上述情況復雜,在線範圍外的,直接理解成異常值即可

5.偏度:

  • 對稱分布:中位線在箱子中間,上下相鄰值到箱子的距離等長,離群點在上下限值外的分布也大致相同。
  • 右偏分布:中位數更靠近下四分位數,上相鄰值到箱子的距離比下相鄰值到箱子的距離長,離群點多數在上限值之外。
  • 左偏分布:中位數更靠近上四分位數,下相鄰值到箱子的距離比上相鄰值到箱子的距離長,離群點多數在下限值之外。

技術分享圖片技術分享圖片

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, hold=None, data=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:設置須的屬性,如顏色、粗細、線的類型等;

例1

import numpy as np
import matplotlib.pyplot as plt
plt.style.use("ggplot")
plt.rcParams["font.sans-serif"]=["SimHei"] #用來正常顯示中文標簽
plt.rcParams["axes.unicode_minus"]=False   #用來正常顯示負號
np.random.seed(500)
data = np.random.normal(size=(1000,2),loc=0,scale=1)
plt.boxplot(data,labels=list("AB"),widths=0.5)
plt.show()

技術分享圖片技術分享圖片

例2 針對箱線圖箱體太扁、異常值突出情況

借用kaggle泰坦尼克號生存預測數據,船費一項作為例子

import pandas as pd
import numpy as np
df = pd.read_csv(r"G:\Kaggle\Titanic\train.csv") 
plt.boxplot("Fare",data=df)
plt.show()

技術分享圖片技術分享圖片

用seaborn來畫

import seaborn as sns
sns.boxplot(y="Fare",data=df)    #不註明y軸的話,箱線圖是橫躺著的
plt.show()

技術分享圖片技術分享圖片

箱體很扁,異常值特別突出,難以看出數據的分布情況。留意到票價均為正數,我們選擇將票價做對數變換。否則就換另一種圖形來呈現數據,箱線圖不行。

x = df.Fare
df["new_Fare"] = np.log(x)
plt.boxplot(x="new_Fare",data=df)
plt.show()
F:\Anaconda\lib\site-packages\ipykernel_launcher.py:2: RuntimeWarning: divide by zero encountered in log
  

技術分享圖片技術分享圖片

sns.boxplot(y="new_Fare",data=df)  #不註明y軸的話,箱線圖是橫躺著的
plt.show()

技術分享圖片技術分享圖片

這樣就好看多了,看得出中位線、數據分布情況,異常值也沒這麽凸顯了。

在一個定量變量的基礎上,加入Pclass定性變量進行分組

import seaborn as sns
sns.boxplot(x="Pclass",y="new_Fare",data=df)
plt.show()

技術分享圖片技術分享圖片

在一個定量變量、一個定性變量的基礎上,再加入一個定性變量Survived進行分組

sns.boxplot(x="Pclass",y="new_Fare",hue="Survived",data=df)
plt.show()

技術分享圖片技術分享圖片

今天先作此筆記,後續再補充

箱線圖boxplot