国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
如何利用Seaborn繪制熱力圖?

如何利用Seaborn繪制熱力圖?

這是本學期在大數(shù)據(jù)哲學與社會科學實驗室做的第八次分享了。

第一次分享的是:

第二次分享的是:

第三次分享的是:

第四次分享的是:

第五次分享的是:

第六次分享的是:

第七次分享的是:

本次分享的是“如何利用Seaborn繪制熱力圖?”

1. Seaborn簡介

Seaborn是在matplotlib的基礎上進行了更高級的API封裝,使得作圖更加容易,不需要經(jīng)過大量的調(diào)整就能使你的圖變得精致。

Seaborn官網(wǎng):

https://seaborn.pydata.org/

Seaborn安裝:

pip install seaborn

Seaborn升級:

pip install --upgrade seaborn

顯示Seaborn信息:

pip show Seaborn
Name: seaborn
Version: 0.11.1
Summary: seaborn: statistical data visualization
Home-page: https://seaborn.pydata.org
Author: Michael Waskom
Author-email: mwaskom@nyu.edu
License: BSD (3-clause)
Location: c:\programdata\anaconda3\lib\site-packages
Requires: numpy, scipy, matplotlib, pandas
Required-by:
(base) PS D:\Users\Administrator>

2. 利用Seaborn繪制熱力圖

熱力圖 就是用顏色深淺來表示數(shù)值大小的圖像。

在實際中常用于展示列聯(lián)表的數(shù)據(jù)分布,以及展示一組變量的相關系數(shù)矩陣,通過熱力圖我們可以非常直觀地感受到數(shù)值大小的差異狀況。

heatmap的API如下所示:

def heatmap(
    data, *,
    vmin=None, vmax=None, cmap=None, center=None, robust=False,
    annot=None, fmt=".2g", annot_kws=None,
    linewidths=0, linecolor="white",
    cbar=True, cbar_kws=None, cbar_ax=None,
    square=False, xticklabels="auto", yticklabels="auto",
    mask=None, ax=None,
    **kwargs
)
:

2.1 展示列聯(lián)表

列聯(lián)表是根據(jù)多個類別變量來對觀測值進行計數(shù)的表。該表的行和列對應于這些類別變量。

本案例采用的數(shù)據(jù)集是Seaborn中內(nèi)置的flights航班數(shù)據(jù)集,dataframe中的數(shù)據(jù)代表了1949年-1960年每個月的航班乘客數(shù)量。

year   1949  1950  1951  1952  1953  1954  1955  1956  1957  1958  1959  1960
month                                                                        
Jan     112   115   145   171   196   204   242   284   315   340   360   417
Feb     118   126   150   180   196   188   233   277   301   318   342   391
Mar     132   141   178   193   236   235   267   317   356   362   406   419
Apr     129   135   163   181   235   227   269   313   348   348   396   461
May     121   125   172   183   229   234   270   318   355   363   420   472
Jun     135   149   178   218   243   264   315   374   422   435   472   535
Jul     148   170   199   230   264   302   364   413   465   491   548   622
Aug     148   170   199   242   272   293   347   405   467   505   559   606
Sep     136   158   184   209   237   259   312   355   404   404   463   508
Oct     119   133   162   191   211   229   274   306   347   359   407   461
Nov     104   114   146   172   180   203   237   271   305   310   362   390
Dec     118   140   166   194   201   229   278   306   336   337   405   432

Seaborn的數(shù)據(jù)集合:

https://github.com/mwaskom/seaborn-data

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data)
plt.show()

熱力圖的右側(cè)是 顏色帶,上面代表了數(shù)值到顏色的映射,數(shù)值由小到大對應色彩由暗到亮。

從上面的heatmap,我們可以得到兩層信息,一是隨著時間的推移,飛機的乘客數(shù)量是在逐步增多的,二是航班的乘坐旺季在七月和八月份。下面就具體的參數(shù)進行演示。

cmap:設置顏色帶的色系

有關色帶的配置見圖文:如何利用colormap讓你的圖表與眾不同?

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r')
plt.show()

annot:是否顯示數(shù)值注釋

數(shù)值注釋默認顯示的是科學記數(shù)法的數(shù)值,我們得把數(shù)值進行格式化,這就用到了下面的參數(shù)。

fmt:format的縮寫,設置數(shù)值的格式化形式

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True, fmt='d')
plt.show()

linewidths:控制每個小方格之間的間距

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True,
            fmt='d', linewidths=0.3)
plt.show()

linecolor:控制分割線的顏色

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True,
            fmt='d', linewidths=0.3, linecolor='gray')
plt.show()

cbar_kws:關于顏色帶的設置

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True,
            fmt='d', linewidths=0.3, linecolor='gray',
            cbar_kws={'orientation''horizontal'})
plt.show()

2.2 展示相關系數(shù)矩陣

所用數(shù)據(jù)集mtcars.csv記錄了32種不同品牌的轎車的11個屬性。

數(shù)據(jù)來源:

https://gist.github.com/seankross/a412dfbd88b3db70b74b

皮爾遜相關系數(shù)(Pearson Correlation)是衡量向量相似度的一種方式。

這個系數(shù)在-1~1之間波動,0表示完全無關,1表示完全正相關,-1表示完全負相關。

對相關的通俗理解可以看圖文:內(nèi)積與相關

上面數(shù)據(jù)計算出來的相關系數(shù)矩陣如下:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 確保正常顯示中文+負號
plt.rcParams['font.sans-serif'] = ['Simhei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(1210), dpi=70)

df = pd.read_csv('.\data\mtcars.csv')
pd.set_option('display.max_columns'None)

name = ["汽車名稱""英里/加侖""氣缸數(shù)量""排量""總馬力",
        "驅(qū)動軸比""重量""1/4英里所用時間""引擎",
        "變速器""前進檔數(shù)""化油器數(shù)量"]
df.columns = name
mat = df.corr(method='pearson')
sns.heatmap(data=mat, cmap='RdYlGn', annot=True)

plt.title('mtcars數(shù)據(jù)集的相關性矩陣', fontsize=22)
plt.xticks(fontsize=12  # 字體大小
           , rotation=45  # 字體是否進行旋轉(zhuǎn)
           , horizontalalignment='right'  # 刻度的相對位置
           )
plt.yticks(fontsize=12)
plt.show()

2.3 成對分析圖

成對分析圖 是以圖像形式分析多個變量之間相關性的圖像,是相關矩陣圖的具體化。

我們可以使用散點圖或者帶最佳擬合線的散點圖來描述變量兩兩之間的關系。但當我們有著探索多個特征兩兩之間關系的需求時,一一繪制圖像的效率比較低下,因此我們就可以使用成對分析圖。它是一種類關系矩陣的繪圖方式,一次性繪制出所有特征之間的相關圖像。

def pairplot(
    data, *,
    hue=None, hue_order=None, palette=None,
    vars=None, x_vars=None, y_vars=None,
    kind="scatter", diag_kind="auto", markers=None,
    height=2.5, aspect=1, corner=False, dropna=False,
    plot_kws=None, diag_kws=None, grid_kws=None, size=None,
)
:

本案例采用的數(shù)據(jù)集是Seaborn中內(nèi)置的iris鳶尾花數(shù)據(jù)集。

數(shù)據(jù)集內(nèi)包含 3 類共 150 條記錄,每類各 50 個數(shù)據(jù),每條記錄都有 4 項特征:花萼長度、花萼寬度、花瓣長度、花瓣寬度,可以通過這4個特征預測鳶尾花卉屬于山鳶尾(iris-setosa),雜色鳶尾(iris-versicolour),維吉尼亞鳶尾(iris-virginica)中的哪一品種。

import seaborn as sns
import matplotlib.pyplot as plt

sns.set_style('white', {'font.sans-serif': ['simhei''Arial']})
data = sns.load_dataset('iris')
data.columns = ["花萼長""花萼寬""花瓣長""花瓣寬""種類"]
kind_dict = {
    "setosa""山鳶尾",
    "versicolor""雜色鳶尾",
    "virginica""維吉尼亞鳶尾"
}
data["種類"] = data["種類"].map(kind_dict)
sns.pairplot(data=data)
plt.show()

可以看到對角線上是各個屬性的直方圖(分布圖),而非對角線上是兩個不同屬性之間的相關圖,從圖中我們發(fā)現(xiàn),花瓣的長度和寬度之間以及萼片的長短和花瓣的長、寬之間具有比較明顯的相關關系。

  • kind:用于控制非對角線上的圖的類型,可選"scatter"(散點圖)與"reg"(回歸圖)
  • diag_kind:控制對角線上的圖的類型,可選"hist"(直方圖)與"kde"(核密度估計圖)
sns.pairplot(data=data, kind='reg', diag_kind='kde')
plt.show()

kind 參數(shù)設置為 "reg" 會為非對角線上的散點圖擬合出一條回歸直線,更直觀地顯示變量之間的關系。

那對于不同種類的花,其花萼和花瓣有什么比較鮮明的特征嗎?我們通過hue參數(shù)把不同種類的花區(qū)分開,進行進一步分析。

hue:按照某個字段進行分類

sns.pairplot(data=data, hue='種類')
plt.show()

我們可以從經(jīng)過hue分類后的pairplot中發(fā)現(xiàn),不論是從對角線上的分布圖還是從分類后的散點圖,都可以看出對于不同種類的花,其萼片長、花瓣長、花瓣寬的分布差異較大,換句話說,這些屬性是可以幫助我們?nèi)プR別不同種類的花的。

比如,對于萼片、花瓣長度較短,花瓣寬度較窄的花,那么它大概率是山鳶尾。

當然,可以通過 palette 參數(shù)來調(diào)出自己想要的顏色

palette:控制色調(diào)

sns.pairplot(data, hue='種類', palette="husl")
plt.show()

markers:控制散點的樣式

sns.pairplot(data, hue='種類', markers=["*""s""D"])
plt.show()

當我們想單獨研究某兩個(或多個)變量的關系時,我們只需要通過vars參數(shù)指定你想研究的變量

vars,x_vars,y_vars:選擇數(shù)據(jù)中的特定字段,以list形式傳入

#單獨用vars參數(shù)選擇"花萼長 "和"花瓣長"兩種屬性
sns.pairplot(data, hue='種類', vars=["花萼長""花瓣長"])
plt.show()
# 用x_vars和 y_vars參數(shù)指定
# 需要注意的是,x_vars和y_vars要同時指定
sns.pairplot(data, x_vars=["花萼長""花瓣寬"], y_vars=["花萼寬""花瓣長"])
plt.show()

更多的樣式可以通過plot_kwsdiag_kws來進行控制

plot_kws:用于控制非對角線上的圖的樣式

diag_kws:用于控制對角線上圖的樣式

sns.pairplot(data, diag_kind="kde", markers="s",
             plot_kws=dict(s=50, edgecolor="w", color="g", alpha=.5),
             diag_kws=dict(shade=True, color="r"))
plt.show()

參考圖文:

  • https://www.jianshu.com/p/6e18d21a4cad
  • https://zhuanlan.zhihu.com/p/96040773
  • https://zhuanlan.zhihu.com/p/98729226

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
數(shù)據(jù)分析入門系列教程-常用圖表
Python數(shù)據(jù)可視化
哪些Python庫讓你相見恨晚?
從零開始學Python【18】--matplotlib(熱力圖)
使用seaborn繪制熱圖
Python數(shù)據(jù)可視化庫seaborn的使用總結(jié)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服