九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
如何利用Seaborn繪制熱力圖?

如何利用Seaborn繪制熱力圖?

這是本學(xué)期在大數(shù)據(jù)哲學(xué)與社會(huì)科學(xué)實(shí)驗(yàn)室做的第八次分享了。

第一次分享的是:

第二次分享的是:

第三次分享的是:

第四次分享的是:

第五次分享的是:

第六次分享的是:

第七次分享的是:

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

1. Seaborn簡(jiǎn)介

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

Seaborn官網(wǎng):

https://seaborn.pydata.org/

Seaborn安裝:

pip install seaborn

Seaborn升級(jí):

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繪制熱力圖

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

在實(shí)際中常用于展示列聯(lián)表的數(shù)據(jù)分布,以及展示一組變量的相關(guān)系數(shù)矩陣,通過(guò)熱力圖我們可以非常直觀地感受到數(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ù)多個(gè)類別變量來(lái)對(duì)觀測(cè)值進(jìn)行計(jì)數(shù)的表。該表的行和列對(duì)應(yīng)于這些類別變量。

本案例采用的數(shù)據(jù)集是Seaborn中內(nèi)置的flights航班數(shù)據(jù)集,dataframe中的數(shù)據(jù)代表了1949年-1960年每個(gè)月的航班乘客數(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ù)值由小到大對(duì)應(yīng)色彩由暗到亮。

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

cmap:設(shè)置顏色帶的色系

有關(guān)色帶的配置見(jiàn)圖文:如何利用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ù)值注釋默認(rèn)顯示的是科學(xué)記數(shù)法的數(shù)值,我們得把數(shù)值進(jìn)行格式化,這就用到了下面的參數(shù)。

fmt:format的縮寫(xiě),設(shè)置數(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:控制每個(gè)小方格之間的間距

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:關(guān)于顏色帶的設(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', linewidths=0.3, linecolor='gray',
            cbar_kws={'orientation''horizontal'})
plt.show()

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

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

數(shù)據(jù)來(lái)源:

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

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

這個(gè)系數(shù)在-1~1之間波動(dòng),0表示完全無(wú)關(guān),1表示完全正相關(guān),-1表示完全負(fù)相關(guān)。

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

上面數(shù)據(jù)計(jì)算出來(lái)的相關(guān)系數(shù)矩陣如下:

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

# 確保正常顯示中文+負(fù)號(hào)
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ū)動(dòng)軸比""重量""1/4英里所用時(shí)間""引擎",
        "變速器""前進(jìn)檔數(shù)""化油器數(shù)量"]
df.columns = name
mat = df.corr(method='pearson')
sns.heatmap(data=mat, cmap='RdYlGn', annot=True)

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

2.3 成對(duì)分析圖

成對(duì)分析圖 是以圖像形式分析多個(gè)變量之間相關(guān)性的圖像,是相關(guān)矩陣圖的具體化。

我們可以使用散點(diǎn)圖或者帶最佳擬合線的散點(diǎn)圖來(lái)描述變量?jī)蓛芍g的關(guān)系。但當(dāng)我們有著探索多個(gè)特征兩兩之間關(guān)系的需求時(shí),一一繪制圖像的效率比較低下,因此我們就可以使用成對(duì)分析圖。它是一種類關(guān)系矩陣的繪圖方式,一次性繪制出所有特征之間的相關(guān)圖像。

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 個(gè)數(shù)據(jù),每條記錄都有 4 項(xiàng)特征:花萼長(zhǎng)度、花萼寬度、花瓣長(zhǎng)度、花瓣寬度,可以通過(guò)這4個(gè)特征預(yù)測(cè)鳶尾花卉屬于山鳶尾(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 = ["花萼長(zhǎng)""花萼寬""花瓣長(zhǎng)""花瓣寬""種類"]
kind_dict = {
    "setosa""山鳶尾",
    "versicolor""雜色鳶尾",
    "virginica""維吉尼亞鳶尾"
}
data["種類"] = data["種類"].map(kind_dict)
sns.pairplot(data=data)
plt.show()

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

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

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

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

hue:按照某個(gè)字段進(jìn)行分類

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

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

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

當(dāng)然,可以通過(guò) palette 參數(shù)來(lái)調(diào)出自己想要的顏色

palette:控制色調(diào)

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

markers:控制散點(diǎn)的樣式

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

當(dāng)我們想單獨(dú)研究某兩個(gè)(或多個(gè))變量的關(guān)系時(shí),我們只需要通過(guò)vars參數(shù)指定你想研究的變量

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

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

更多的樣式可以通過(guò)plot_kwsdiag_kws來(lái)進(jìn)行控制

plot_kws:用于控制非對(duì)角線上的圖的樣式

diag_kws:用于控制對(duì)角線上圖的樣式

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

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

聯(lián)系客服