發布時間:2024-07-31閱讀(12)

最初看到熱力圖時,你是不是會從內心發出驚呼,看著特別有感覺?
那老海就問第二個問題了,然后你還能看出什么來?
顏色有深有淺?還有什么?能看出哪個區域大嗎?到底又大多少?
哈哈,這種感覺就是熱力圖的特點:如同蒙面美人的圖表類型!
OK,什么是熱力圖?熱力圖 (Heat Map),“熱力圖” 一詞最初是由軟件設計師提出并創造的,專門用來描述實時金融市場信息的圖表類型。注意是軟件設計師提出的,不是視覺設計師,更不是數據分析師!
正因如此,就如同南丁格爾玫瑰圖一樣,都是特殊出身,因此用途局限性非常大。
最早的熱力圖,都是在矩形色塊加上顏色變換。而當今我們說的大多是經過平滑模糊的熱力圖譜,這樣的熱力圖更容易讓人們理解和解讀。
熱力圖的基本數據樣式不同的特征字段,在不同的數值上的統計情況,統計分布不同則顏色也變化。


## 初始字體設置,設置好可避免很多麻煩plt.rcParams[font.sans-serif]=[Source Han Sans CN] # 顯示中文不亂碼,思源黑體 plt.rcParams[font.size] = 22 # 設置圖表全局字體大小,后期某個元素的字體大小可以自行調整plt.rcParams[axes.unicode_minus] = False # 顯示負數不亂碼## 初始化圖表大小plt.rcParams[figure.figsize] = (20.0, 8.0) # 設置figure_size尺寸## 初始化圖表分辨率質量plt.rcParams[savefig.dpi] = 300 # 設置圖表保存時的像素分辨率plt.rcParams[figure.dpi] = 300 # 設置圖表繪制時的像素分辨率## 圖表的顏色自定義colors = [#dc2624, #2b4750, #45a0a2, #e87a59, #7dcaa9, #649E7D, #dc8018, #C89F91, #6c6d6c, #4f6268, #c7cccf]plt.rcParams[axes.prop_cycle] = plt.cycler( color=colors)path = D:\\系列文章\\# 自定義文件路徑,可以自行設定os.chdir(path)# 設置為該路徑為工作路徑,一般存放數據源文件

Financial_data = pd.read_excel(虛擬演示案例數據.xlsx,sheet_name=二維表)Financial_data

Financial_data = pd.read_excel(虛擬演示案例數據.xlsx,sheet_name=二維表)Financial_data


最基本的熱力圖原理,方便我們理解熱力這個概念是什么

plt.rcParams[figure.figsize] = (10, 10) # 設置figure_size尺寸plt.rcParams[font.size] = 10 # 設置圖表全局字體大小,后期某個元素的字體大小可以自行調整# Financial_data = Financial_data.drop(分類,axis=1)targetlist = Financial_data.columns[1:] # 選擇需要的字段heatdata = round(Financial_data.loc[:,targetlist]/1000) # 為了展示方便,數據統一除以1000,并取四舍五入取整數# 利用sns.heatmap來畫熱圖sns.heatmap(heatdata, # 設置數據源 cmap=Greens, # 設置熱圖配色 annot=True, # 開啟設置顯示數字,默認不顯示 annot_kws={"size":8}, # 設置顯示數字的大小 vmax=10, # 設置顯示范圍最大值 vmin=0, # 設置顯示范圍最小值 center=5, # 設置顏色顯示中心的數值,來控制 yticklabels=True, # 設置Y軸標簽是否顯示 xticklabels=True, # 設置X軸標簽是否顯示,默認為顯示# xticklabels=4, # 可以設置顯示哪些標簽或者隱藏部分標簽,避免圖像混亂 cbar=True, # 設置顏色欄是否顯示,默認為顯示 linewidths=2, # 格子之間的間隔距離 linecolor=white) # 格子之間的間隔顏色sns.despine() # 默認無參數狀態,就是刪除上方和右方的邊框,matplotlib貌似做不到plt.show()

可自定義我們需要參考的對比對象

plt.rcParams[figure.figsize] = (10, 10) # 設置figure_size尺寸plt.rcParams[font.size] = 10 # 設置圖表全局字體大小,后期某個元素的字體大小可以自行調整# Financial_data = Financial_data.drop(分類,axis=1)# targetlist = Financial_data.columns[:] # 選擇需要的字段heatdata = Financial_data.set_index(門店城市,drop=True) # 設置參考對象列作為index索引# corr_matrix=heatdata.corr()# 利用sns.heatmap來畫熱圖sns.heatmap(heatdata, # 設置數據源 cmap=Greens, # 設置熱圖配色 annot=True, # 設置顯示數字 vmax=10, # 設置顯示范圍最大值 vmin=0, # 設置顯示范圍最小值 center=5, # 設置顏色顯示中心的數值,來控制 linewidths=2) # 格子之間的間隔距離sns.despine() # 默認無參數狀態,就是刪除上方和右方的邊框,matplotlib貌似做不到plt.show()

除了查看統計分布,還可以查看不同變量之間的相關性,常用在特征選擇上

plt.rcParams[figure.figsize] = (10, 10) # 設置figure_size尺寸plt.rcParams[font.size] = 10 # 設置圖表全局字體大小,后期某個元素的字體大小可以自行調整# Financial_data = Financial_data.drop(分類,axis=1)targetlist = Financial_data.columns[1:] # 選擇需要的字段heatdata = round(Financial_data.loc[:,targetlist]/1000) # 為了展示方便,數據統一除以1000,并取四舍五入取整數corr_matrix=heatdata.corr()# 利用sns.heatmap來畫熱圖sns.heatmap(corr_matrix, # 設置數據源 cmap=Greens, # 設置熱圖配色 annot=True, # 設置顯示數字 vmax=1, # 設置顯示范圍最大值 vmin=0, # 設置顯示范圍最小值 center=5, # 設置顏色顯示中心的數值,來控制 linewidths=2) # 格子之間的間隔距離sns.despine() # 默認無參數狀態,就是刪除上方和右方的邊框,matplotlib貌似做不到plt.show()

這是相關矩陣熱力圖的簡化版,因為對角矩陣的一半元素都是相同的,所以可以簡化

plt.rcParams[figure.figsize] = (10, 10) # 設置figure_size尺寸plt.rcParams[font.size] = 10 # 設置圖表全局字體大小,后期某個元素的字體大小可以自行調整# Financial_data = Financial_data.drop(分類,axis=1)targetlist = Financial_data.columns[1:] # 選擇需要的字段heatdata = round(Financial_data.loc[:,targetlist]/1000) # 為了展示方便,數據統一除以1000,并取四舍五入取整數# 極值化MAX-MINnormalization_matrix=(heatdata-heatdata.min())/heatdata.max()# 正則化normalization_matrix=(heatdata-heatdata.mean())/heatdata.std()# 利用sns.heatmap來畫熱圖sns.heatmap(normalization_matrix, # 設置數據源 cmap=Greens, # 設置熱圖配色 annot=True, # 設置顯示數字 vmax=1, # 設置顯示范圍最大值 vmin=0, # 設置顯示范圍最小值 center=5, # 設置顏色顯示中心的數值,來控制 linewidths=2) # 格子之間的間隔距離sns.despine() # 默認無參數狀態,就是刪除上方和右方的邊框,matplotlib貌似做不到plt.show()

有時數據的量綱規模變化很大,此時建議統一數據量綱,效果會好些

plt.rcParams[figure.figsize] = (10, 10) # 設置figure_size尺寸plt.rcParams[font.size] = 10 # 設置圖表全局字體大小,后期某個元素的字體大小可以自行調整# Financial_data = Financial_data.drop(分類,axis=1)targetlist = Financial_data.columns[1:] # 選擇需要的字段heatdata = round(Financial_data.loc[:,targetlist]/1000) # 為了展示方便,數據統一除以1000,并取四舍五入取整數# 極值化MAX-MINnormalization_matrix=(heatdata-heatdata.min())/heatdata.max()# 正則化normalization_matrix=(heatdata-heatdata.mean())/heatdata.std()# 利用sns.heatmap來畫熱圖sns.heatmap(normalization_matrix, # 設置數據源 cmap=Greens, # 設置熱圖配色 annot=True, # 設置顯示數字 vmax=1, # 設置顯示范圍最大值 vmin=0, # 設置顯示范圍最小值 center=5, # 設置顏色顯示中心的數值,來控制 linewidths=2) # 格子之間的間隔距離sns.despine() # 默認無參數狀態,就是刪除上方和右方的邊框,matplotlib貌似做不到plt.show()
這是混合圖表應用,用途特別有些,有時候數據圖表都堆在一起,看著就亂,不推薦

plt.rcParams[figure.figsize] = (10, 10) # 設置figure_size尺寸plt.rcParams[font.size] = 10 # 設置圖表全局字體大小,后期某個元素的字體大小可以自行調整heatdata = Financial_data.set_index(門店城市,drop=True) # 設置參考對象列作為index索引# # 利用sns.heatmap來畫熱圖# sns.heatmap(heatdata, # 設置數據源# cmap=Greens, # 設置熱圖配色# annot=True, # 設置顯示數字# vmax=1, # 設置顯示范圍最大值# vmin=0, # 設置顯示范圍最小值# center=5, # 設置顏色顯示中心的數值,來控制# linewidths=2) # 格子之間的間隔距離# 距離相似性的設置sns.clustermap(heatdata.iloc[:20,:], metric="correlation", # 距離相似性,設置為相似性:"correlation",歐氏距離:"euclidean" method="single", # 聚類的方法,設置為最近點算法:"single",方差最小化算法:"Ward" cmap="Blues", # 設置熱圖配色 standard_scale=1, # 歸一化設置,還可設置z_score=1的方法 robust=True, # 離群值檢驗,默認為不開啟,這里設置開啟離群值研究# row_colors=row_colors )sns.despine() # 默認無參數狀態,就是刪除上方和右方的邊框,matplotlib貌似做不到plt.show()

上一篇介紹氣泡圖,而熱力圖給人的視覺沖擊力更強,當然也就變得更不精準
我們使用圖表的目標不同,選擇圖表時就得非常注意,
熱力圖我一般是不會選擇的,商業分析一般要求務必表達精準,所以它不適合
更多的時候是在做機器學習的特征選擇時,會探索一下變量間的相關性如何。
OK,今天先到這里了,老海日常隨筆總結,碼字不易,初心不改!
如果覺得喜歡,請動動小手關注和轉發,鼓勵一下我們。
我是老海,來自數據煉金術師
歡迎分享轉載→http://www.avcorse.com/read-365427.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖