透視Matplotlib核心功能和工具包 - Seaborn工具包

國外課棧發表於2020-12-02

關聯知識

Seaborn是基於Matplotlib構建的功能強大的視覺化工具。 它使多變數探索性資料分析更加容易和直觀,並且增加了一些新型別的圖,並且其背景樣式和顏色圖更加令人愉悅。 它具有許多內建的統計功能,使其成為統計資料分析的首選工具。 它還具有非常詳細的線上文件,您可以在以下位置找到https://seaborn.pydata.org/index.html。

我們將使用兩個資料集來演示大多數海洋特徵。 其中一個資料集“葡萄酒質量”,另一個是來自虛擬小吃店的小吃銷售資料集。

關係圖

小吃銷售資料集

該資料集(在程式碼庫中提供)包含有關給定日期,星期幾,是否為週末以及當天是否促銷的各種商品的銷售資訊。 我們擁有三年的資料:2015年,2016年和2017年。資料集的前五行如下所示:

圖略

然後,我們將新增兩個派生變數以幫助繪製所需的圖形:month(1到12)和Quarter(1/4)。 新增這些變數後,前五行如下所示:

圖略

以下程式碼塊讀取Excel檔案並新增其他變數:

import pandas as pd
import numpy as np

snacks_sales = pd.read_csv('Snacks_Data.csv')
snacks_sales['Month'] = pd.DatetimeIndex(snacks_sales['Date']).month
Quarter_Mapping = {1:1, 2:1, 3:1, 4:2, 5:2, 6:2, 7:3, 8:3, 9:3, 10:4, 
                   11:4, 12:4}
snacks_sales['Quarter'] = snacks_sales['Month'].map(Quarter_Mapping)

葡萄酒質量資料集

該資料集具有11個影響葡萄酒質量的屬性。 質量等級從3到8不等,然後我們將3和4對映到Low,將5和6對映到Med,將7和8對映到high以建立一個新變數:質量。

資料集的前五行如下所示:

圖略

我們還將為葡萄酒質量資料集計算相關矩陣,我們將在一些圖中使用該矩陣。

以下是用於讀取其他變數並將其新增到Wine Quality資料集的程式碼塊:

import pandas as pd

# Read the data from a csv file into pandas data frame
wine_quality = pd.read_csv('winequality.csv', delimiter=';')

# Map numeric Quality codes to 'Low', 'Med' and 'High' qualitative 
  ratings
quality_map = {3:'Low', 4: 'Low', 5:'Med', 6:'Med', 7:'High', 8:'High'}
wine_quality['Quality'] = wine_quality['quality'].map(quality_map)

# compute correlation matrix
corr = wine_quality.corr() 

# Display the first 5 records of wine_quality dataset, and unique 
  values of quality variable
wine_quality.head()
set(wine_quality.quality)

變數

除了將它們的關係繪製在二維圖中的兩個變數之外,seaborn還可以繪製三個附加變數對兩個主要變數之間的關係的影響圖。 這三個變數稱為語義變數。 它們被稱為色調,大小和樣式,它們充當給定繪圖功能的引數。

對於每個唯一的色調值,將有一個關係圖。 同樣,對於樣式的每個唯一值,都會有一個關係圖。 如果色調變數中有兩個唯一值(例如,是和否),樣式變數中有兩個唯一值(例如,s和D標記),則將有2 * 2 = 4個關係圖( 是&s,是&D,否&s,否&D組合)。 各種色調值以不同的顏色繪製,各種樣式值以不同的線或標記樣式繪製。

同樣,大小變數會影響兩個主要變數的繪製點的大小。 與Matplotlib散佈函式不同,此處,大小可變範圍分為多個容器,並將點分配給這些容器。 在Matplotlib散點函式中,每個點都分別對映為大小可變的不同值。

除了這三個語義變數外,seaborn還允許在row和col中新增另外兩個變數,其中針對row / col變數的每個唯一值,將有一個圖(軸),並將其佈置在row / col中。 這些行和列變數稱為構面變數,因為它們使我們能夠了解其他構面對所繪製的兩個主要變數的影響。

這些附加變數可以對映到要分析資料的各個維度,或者要分析兩個變數之間的關係。 在典型的銷售分析場景中,兩個主要變數可以是銷售額(單位或美元)或時間(天,月或季度),維度可以是業務單位,產品線,地區。

關係繪圖

關係圖描述了兩個連續變數之間的關係。 seaborn中有一個常見的API,relplot(),用於兩種型別的圖:線圖和散點圖。 但是,這兩種型別中的每一種都有單獨的函式:lineplot()和scatterplot()。 我們可以使用帶有引數的relplot()來繪製折線圖或散點圖,也可以直接使用lineplot()和scatterplot()函式。

一對一和一對多關係的線圖

線上圖中,觀測值連線到可以自定義樣式的線。 x和y變數之間的關係可以是一對一的,有時也可以是一對多的。 在我們的零食銷售資料集中,如果我們根據日期或期間繪製每個商品的銷售量,則這是一對一的關係,因為每對日期/期間和銷售量只有一個觀察值。 但是,如果我們按月銷售,則每個月有30個觀察值(銷售記錄),這是一對多的關係。

Seaborn提供了多種選擇來繪製這兩種型別的關係。

匯入所需包:

import matplotlib.pyplot as plt
import seaborn as sns

步驟細節:

  • 設定背景樣式:
sns.set(style='darkgrid')
  • 用圖的標題在period和smoothies銷售之間繪製折線圖:
sns.relplot(x='Period', y='Smoothies', 
         data=snacks_sales.query('Period < 300'), kind='line')
plt.title('line plot', size=20, color='g')
  • 繪製period和smoothies銷售之間的折線圖,以星期幾為色調:
day_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 
             'Saturday', 'Sunday']
sns.relplot(x='Period', y='Smoothies', hue='daywk', 
            hue_order=day_order,
            data=snacks_sales.query('Period < 300'), kind='line')
plt.title('line plot with hue=daywk', size=20, color='g')
  • 以促銷為色調在period和smoothies銷售之間繪製折線圖:
sns.relplot(x='Period', y='Smoothies', hue='Promotion', hue_order=
            ['Yes', 'No'],
            data=snacks_sales.query('Period < 300'), kind='line')
plt.title('line plot with hue=Promotion', size=20, color='g')
  • 在“period”和“smoothies”銷售之間繪製折線圖,其中“促銷”為色調,“週末”為樣式:
sns.relplot(x='Period', y='Smoothies', hue='Promotion', hue_order=
            ['Yes', 'No'], style='weekend', 
            style_order=['Y', 'N'], kind='line', 
            data=snacks_sales.query('Period < 300'))
plt.title('line plot with hue and style', size=20, color='g')

分解程式碼

詳情參閱http://viadean.com/matplotlib_seaborn.html

相關文章