1. 程式人生 > >Python:雷達圖的實現

Python:雷達圖的實現

雷達圖

雷達圖在資料探勘專案中多用於企業分析或者價值分析的環節視覺化。雷達圖分析法是一種系統分析的有效方法,它是從專案中自身建立的多方面分析企業的經營成果。並將這些方面的有關資料用比率表示出來,填寫到一張能表示各自比率關係的等比例圖形上,再用彩筆連線各自比率的結點後,恰似一張雷達圖表。從圖上可以看出企業經營狀況的全貌,一目瞭然地找出了企業經營上的優勢和弱勢。

分析方法

就各指標來看,當指標值處於標準線以內時,說明該指標低於平均水平,需要加以改進;若接近最小圓圈或處於其內,說明此指標處於極差狀態,是企業需要注意的問題,應重點加以分析改進;若處於標準線外側,說明該指標處於理想狀態,是企業的優勢,應採取保持措施。

雷達圖的分析方法是:如果企業的比率位於標準線以內,則說明企業比率值低於同行業的平均水平,應認真分析原因,提出改進方向;如果企業的比率值接近或低於小圓,則說明企業經營處於非常危險的境地,急需推出改革措施以扭轉局面;如果企業的比率值超過了中圓或標準線,甚至接近大圓,則表明企業經營的優勢所在,用予以鞏固和發揚。如果把雷達圖應用於創新戰略的評估,就演變成為戴布拉圖。實際上戴布拉圖與雷達圖的繪製與分析方法完全相同,但是,戴布拉圖是用企業內部管理責任:協作過程、業績度量、教育與開發、分散式學習網路和智慧市場定位,以及外部關係:知識產品/服務協作市場準入、市場形象活動、領導才能和通訊技術等兩個基本方面10個具體因素來替代經營雷達圖的5個因素。

製作方法

雷達圖的繪製方法是:先畫3個同心圓,把圓分為5個區域(每個區為72度),分別代表企業的收益性、生產性、流動性、安全性和成長性。同心圓中最小的圓代表同行業平均水平的1/2值或最差的情況;中心圓代表同行業的平均水平或特定比較物件的水平,稱為標準線(區);大圓表示同行業平均水平的1.5倍或最佳狀態。在5個區域內,以圓心為起點,以放射線的形式畫出相應的經營比率線。然後,在相應的比率線上標出本企業決算期的各種經營比率。將本企業的各種比率值用線聯結起來後,就形成了一個不規則閉環圖。他清楚地表示出本企業的經營態勢,並把這種經營態勢與標準線相比,就可以清楚地看出本企業的成績和差距。

python雷達圖Demo(完整)

import matplotlib.pyplot as plt
import numpy as np

# 中文字型顯示設定
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc")

# kmodel.cluster_centers_:kmeans聚類後的聚類中心
N = len(kmodel.cluster_centers_[0])  # 聚類中心的屬性長度
angles=np.linspace(0, 2*np.pi, N, endpoint=False) # 設定雷達圖的角度,用於平分切開一個圓面
angles=np.concatenate((angles, [angles[0]])) # 為了使雷達圖一圈封閉起來
fig = plt.figure(figsize=(7,7)) # 設定畫布大小
ax = fig.add_subplot(111, polar=True) # 這裡一定要設定為極座標格式
sam = ['r-', 'o-.', 'g--', 'b-.', 'p:'] # 樣式
lab = [] # 圖例標籤名
for i in range(len(kmodel.cluster_centers_)):
    values = kmodel.cluster_centers_[i]
#     feature = ['ZF','ZC','ZR','ZL','ZM'] # 設定各指標名稱
    feature = centers.columns
    # 為了使雷達圖一圈封閉起來,需要下面的步驟
    values=np.concatenate((values,[values[0]]))
    ax.plot(angles, values, sam[i], linewidth=2) # 繪製折線圖
    ax.fill(angles, values, alpha=0.25) # 填充顏色
    ax.set_thetagrids(angles * 180/np.pi, feature, font_properties=my_font) # 新增每個特徵的標籤
    ax.set_ylim(-3, 3) # 設定雷達圖的範圍
    plt.title('客戶群特徵分佈圖', font_properties=my_font) # 新增標題
    ax.grid(True) # 新增網格線
    lab.append('客戶群'+str(i+1))
plt.legend(lab, prop=my_font)
plt.savefig("./07_航空公司客戶群特徵分佈圖.jpg")  # 儲存圖片到本地
plt.show() # 顯示圖形

效果展示
在這裡插入圖片描述