1. 程式人生 > 程式設計 >Python箱型圖繪製與特徵值獲取過程解析

Python箱型圖繪製與特徵值獲取過程解析

這篇文章主要介紹了Python箱型圖繪製與特徵值獲取過程解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

它主要用於反映原始資料分佈的特徵,還可以進行多組資料分佈特徵的比較

如何利用Python繪製箱型圖

需要的import的包

 import matplotlib.pyplot as plt
 from matplotlib.font_manager import FontProperties
 import numpy as np
 import pandas as pd

該函式是繪製多箱型圖,且資料長度不一致的情況,input_dict = {filename1:[a1,a2,...,an],filename2:[b1,b2,bn]...} Y_label = 'Img_name'

def DrawMultBoxPic(input_dict,Y_label):
  dict_list_length = []
  for item in input_dict:
    temp_length = len(input_dict[item])
    dict_list_length.append(temp_length)
  # 獲取最長列表長度
  max_length = max(dict_list_length)
  # 每個列表在後面追加None
  for item in input_dict:
    diff_length = max_length - len(input_dict[item])
    if diff_length > 0:
      for i in range(diff_length):
        input_dict[item].append(None)
    # else:
      # print('{}檔案列表長度最長'.format(item))
  # 繪製箱型圖
  zhfont = FontProperties(fname='C:/Windows/Fonts/simsun.ttc',size=16)
  data = pd.DataFrame.from_dict(input_dict)
  data.boxplot(widths=0.3,figsize=(30,15),fontsize=16)
  plt.xlabel(u'煤質檔名稱',fontproperties=zhfont)
  plt.ylabel(Y_label,fontproperties=zhfont)
  plt.title(Y_label,fontproperties=zhfont)
  # plt.axis([0,6,90])
  plt.grid(axis='y',ls='--',lw=2,color='gray',alpha=0.4)
  plt.grid(axis='x',alpha=0.4)
  imgname = 'E:\\' + Y_label + '.png'
  plt.savefig(imgname,bbox_inches = 'tight')
  # plt.show()

結果顯示

如何獲取箱型圖特徵

"""
【函式說明】獲取箱體圖特徵
【輸入】 input_list 輸入資料列表
【輸出】 out_list:列表的特徵[下限,Q1,Q2,Q3,上限] 和 Error_Point_num:異常值數量
【版本】 V1.0.0
【日期】 2019 10 16
"""
def BoxFeature(input_list):
  # 獲取箱體圖特徵
  percentile = np.percentile(input_list,(25,50,75),interpolation='linear')
  #以下為箱線圖的五個特徵值
  Q1 = percentile[0]#上四分位數
  Q2 = percentile[1]
  Q3 = percentile[2]#下四分位數
  IQR = Q3 - Q1#四分位距
  ulim = Q3 + 1.5*IQR#上限 非異常範圍內的最大值
  llim = Q1 - 1.5*IQR#下限 非異常範圍內的最小值
  # llim = 0 if llim < 0 else llim
  # out_list = [llim,Q1,ulim]
  # 統計異常點個數
  # 正常資料列表
  right_list = []
  Error_Point_num = 0
  value_total = 0
  average_num = 0
  for item in input_list:
    if item < llim or item > ulim:
      Error_Point_num += 1
    else:
      right_list.append(item)
      value_total += item
      average_num += 1
  average_value = value_total/average_num
  # 特徵值保留一位小數
  out_list = [average_value,min(right_list),max(right_list)]
  # print(out_list)
  out_list = Save1point(out_list)
  return out_list,Error_Point_num

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。