中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Seaborn,進階Python數據可視化

發布時間:2020-09-23 11:01:05 來源:億速云 閱讀:265 作者:Leah 欄目:編程語言

本篇文章為大家展示了Seaborn,進階Python數據可視化,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

- 為什么用 Seaborn -

Seaborn 是基于 Python 且非常受歡迎的圖形可視化庫,在 Matplotlib 的基礎上,進行了更高級的封裝,使得作圖更加方便快捷。即便是沒有什么基礎的人,也能通過極簡的代碼,做出具有分析價值而又十分美觀的圖形。

Seaborn 可以實現 Python 環境下的絕大部分探索性分析的任務,圖形化的表達幫助你對數據進行分析,而且對 Python 的其他庫(比如 Numpy/Pandas/Scipy)有很好的支持。

那么現在開始,十分鐘的時間,你就可以了解 Seaborn 中常用圖形的繪制方法,以及進階的可視化分析技巧。

- Seaborn 繪圖上手 -

如果你還沒有安裝 Python 環境,那么推薦你安裝 Anaconda,對于上手 Python 來說更加簡單,不容易出差錯。Anaconda 的安裝教程網上很多,找到對應版本客戶端安裝即可。

安裝好后,即可在終端(cmd)安裝核心庫 Seaborn 和 Matplotlib。

安裝 Matplotlib

python -m pip install matplotlib

安裝 Seaborn

pip install seaborn

然后打開 Jupyter Notebook(安裝好 Anaconda 后,Jupyter 也已裝好,在應用窗口中可以找到),我們就可以直接上手了。

先來一段基本的代碼:

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic=sns.load_dataset('titanic')
sns.barplot(x='class',y='survived',data=titanic)

Seaborn,進階Python數據可視化

通過以上代碼,我們就繪制出了基本的條形圖,是不是超級簡單。這也是用 Seaborn 實現一個圖形的基本模式,接下來我們把上面的代碼拆開來看。

1.導入繪圖模塊

import seaborn as sns
import matplotlib.pyplot as plt

這里我們導入 Seaborn 和 Matplotlib.pyplot 模塊,分別命名為 sns 和 plt,原則上這個簡稱是可以隨意寫的,但為了規范,盡量寫成這樣。這里引入 Matplotlib.pyplot ,是為了通過 Matplotlib 的參數去進行更好的控制。

2.提供顯示條件

%matplotlib inline

這里的 “%matplot inline” 是為了在 Jupyter 中正常顯示圖形,若沒有這行代碼,圖形顯示不出來的。

3.導入數據

titanic=sns.load_dataset('titanic')

這里我們用 Seaborn 的 load_dataset() 方法導入數據 ‘titanic’,這是泰坦尼克號的相關數據,內置于 Seaborn(內置數據都可以用此方法導入)。當然 Seaborn 還提供了其他的內置數據,可以直接調用:

Seaborn,進階Python數據可視化

地址:<u style="text-decoration: none; border-bottom: 1px dashed rgb(128, 128, 128);">https://github.com/mwaskom/seaborn-data</u>

4.輸出圖形

sns.barplot(x='class',y='survived',data=titanic)

這是圖形輸出的直接代碼,barplot 表示輸出條形圖,同樣的還有 Seaborn 中還有 countplot、boxplot、violinplot、regplot、lmplot、heatmap 等多種圖形方法可以使用,我們在接下來會詳細說明。

barplot() 括號里的是需要設置的具體參數,涉及到數據、顏色、坐標軸、以及具體圖形的一些控制變量,一般比較固定的是 'x'、'y'、'data',分別表示x軸,y軸,以及選擇的數據集。

- Seaborn 圖形可視化 -

01 distplot

直方圖

通常我們在分析一組數據時,首先要看的就是變量的分布規律,而直方圖則提供了簡單快速的方式,在 Seaborn 中可以用 distplot() 實現。

我們首先導入數據集 'titanic',并查看隨機的10行數據,對數據集有一個初步的印象:

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#導數數據集'titanic'
titanic=sns.load_dataset('titanic')
#查看數據集的隨機10行數據,用sample方法
titanic.sample(10)

Seaborn,進階Python數據可視化

通過觀察數據,我們對'age'進行直方圖展示。但在繪圖之前,我們觀測到'age'字段中存在缺失值,需要先用 dropna() 方法刪掉存在缺失值的數據,否則無法繪制出圖形。

#去除'age'中的缺失值,distplot不能處理缺失數據
age1=titanic['age'].dropna()
sns.distplot(age1)

Seaborn,進階Python數據可視化

在上圖中,矩形表示在不同年齡段的數量分布,并且 distplot() 默認擬合出了密度曲線,可以看出分布的變化規律。

同時我們可以調節其中的一些參數,來控制輸出的圖形。

'kde' 是控制密度估計曲線的參數,默認為 True,不設置會默認顯示,如果我們將其設為 False,則不顯示密度曲線。

#去掉擬合的密度估計曲線,kde參數設為False
sns.distplot(age1,kde=False)

Seaborn,進階Python數據可視化

'bins'是控制分布矩形數量的參數,通常我們可以增加其數量,來看到更為豐富的信息。

# 通過'bins'參數設定數據片段的數量
sns.distplot(age1,bins=30,kde=False)

Seaborn,進階Python數據可視化

'reg' 參數用于控制直方圖中的邊際毛毯,通過控制'reg'是實現毛毯是否顯示。

#創建一個一行2列的畫布,主要方便對比
fig,axes=plt.subplots(1,2)
#設置'reg'參數,加上觀測數值的邊際毛毯
#需要用axes[]表示是第幾張圖,從0開始
sns.distplot(age1,ax=axes[0]) #左圖
sns.distplot(age1,rug=True,ax=axes[1]) #右圖

Seaborn,進階Python數據可視化

當然,除了控制矩形分布、密度曲線及邊際毛毯是否顯示,還可以通過更豐富的參數控制他們展示的細節,這些通過參數 'hist_kws' 、'kde_kws' 、'reg_kws' 來進行設置,因為其中涉及到多個參數,參數間用逗號隔開,參數外面用大括號括住。

#可以分別控制直方圖、密度圖的關鍵參數
fig,axes=plt.subplots(1,2) 
sns.distplot(age1,rug=True,ax=axes[0])
sns.distplot(age1,rug=True,
    hist_kws={'color':'green','label':'hist'},
    kde_kws={'color':'red','label':'KDE'},
    ax=axes[1])

Seaborn,進階Python數據可視化

02 barplot

條形圖

barplot() 利用矩陣條的高度反映數值變量的集中趨勢,以及使用errorbar功能(差棒圖)來估計變量之間的差值統計(置信區間)。需要提醒的是 barplot() 默認展示的是某種變量分布的平均值(可通過參數修改為 max、median 等)。

這里我們仍然以'titanic'數據集作為展示,將'class'設為x軸,'survived'設為y軸。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
#導入數據集'titanic',命名為'titanic'
titanic=sns.load_dataset('titanic')
#將'class'設為x軸,'survived'為y軸,傳入'titanic'數據
sns.barplot(x='class',y='survived',data=titanic)

Seaborn,進階Python數據可視化

我們可以通過設置'hue'參數,對x軸的數據進行細分,細分的條件就是'hue'的參數值,比如這里我們的x軸是'class'(倉位等級),我們將其按'sex'(性別)再進行細分。

sns.barplot(x='class',y='survived',hue='sex',data=titanic)

Seaborn,進階Python數據可視化

換一組數據試試,將x軸設為'embarked',y軸設為'survived',并用'class'進行細分。

sns.barplot(x='embarked',y='survived',
    hue='class',data=titanic)

Seaborn,進階Python數據可視化

03 countplot

計數圖

countplot 故名思意,計數圖,可將它認為一種應用到分類變量的直方圖,也可認為它是用以比較類別間計數差。當你想要顯示每個類別中的具體觀察數量時,countplot 很容易實現,比較類似我們在 Excel 等軟件中應用的條形圖。

同樣,我們以數據集'titanic'為例子,首先探索'deck'字段下的類別計數。

Seaborn,進階Python數據可視化

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic=sns.load_dataset('titanic')
sns.countplot(x='deck',data=titanic)

Seaborn,進階Python數據可視化

由此可見,我們選定某個字段,countplot() 會自動幫我們統計該字段下各類別的數目。當然,我們也可以再傳入'hue'參數,進行細分,這里我們加入'sex'分類。

sns.countplot(x='deck',hue='sex',data=titanic)

Seaborn,進階Python數據可視化

如果我們希望調換橫縱坐標,也就是類別放于縱坐標,計數值橫坐標顯示,將x軸換為y軸即可。

sns.countplot(y='deck',hue='who',data=titanic)

Seaborn,進階Python數據可視化

04 stripplot/swarmplot

散點圖

在seaborn中有兩種不同的分類散點圖。stripplot() 使用的方法是用少量的隨機“抖動”調整分類軸上的點的位置,swarmplot() 表示的是帶分布屬性的散點圖。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic=sns.load_dataset('titanic')
sns.stripplot(x='embarked',y='fare',data=titanic)

Seaborn,進階Python數據可視化

這里我們可以通過設置'jitter'參數控制抖動的大小。

sns.stripplot(x='embarked',y='fare',
    data=titanic,jitter=1)

Seaborn,進階Python數據可視化

swarmplot() 方法使用防止它們重疊的算法沿著分類軸調整點。它可以更好地表示觀測的分布,它適用于相對較小的數據集。

sns.swarmplot(x='embarked',y='fare',data=titanic)

Seaborn,進階Python數據可視化

可以通過'hue'參數,對散點圖添加更多細分的維度,Seaborn 中會以顏色來進行區分。

sns.stripplot(x='embarked',y='age',hue='who',jitter=1,data=titanic)

Seaborn,進階Python數據可視化

sns.swarmplot(x='embarked',y='age',hue='who',data=titanic)

Seaborn,進階Python數據可視化

05 boxplot

箱線圖

boxplot(箱線圖)是一種用作顯示一組數據分散情況的統計圖。它能顯示出一組數據的最大值、最小值、中位數及上下四分位數。因形狀如箱子而得名。這意味著箱線圖中的每個值對應于數據中的實際觀察值。

Seaborn,進階Python數據可視化

以'titanic'數據集為例,我們首先來探索不同的'class'(船艙)下的乘客的'age'(年齡)情況。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic=sns.load_dataset('titanic')
sns.boxplot(x='class',y='age',data=titanic)

Seaborn,進階Python數據可視化

同樣的,可以通過傳入'hue'的參數,來對x軸的字段進行細分,這里我們通過'who'來進行分類觀察。

sns.boxplot(x='class',y='age',hue='who',data=titanic)

Seaborn,進階Python數據可視化

與上述類似,我們也可以通過調換x/y軸,實現箱線圖的橫向顯示。

sns.boxplot(x='age',y='class',hue='who',data=titanic)

Seaborn,進階Python數據可視化

調節'order' 和 'hue_order' 參數,我們可以控制x軸展示的順序。

fig,axes=plt.subplots(1,2) 
sns.boxplot(x='class',y='age',hue='who',
    data=titanic,ax=axes[0])
sns.boxplot(x='class',y='age',hue='who',data=titanic,
    order=['Third','Second','First'],
    hue_order=['child','woman','man'],ax=axes[1])

Seaborn,進階Python數據可視化

可以通過'linewidth'參數,控制線條的粗細。我們把'linewidth'參數設為1,就可以看到整體圖形的線條變細,你可以根據自己的需要調節。

sns.boxplot(x='class',y='age',hue='who',
    linewidth=1,data=titanic)

Seaborn,進階Python數據可視化

06 violinplot

小提琴圖

小提琴圖其實是箱線圖與核密度圖的結合,箱線圖展示了分位數的位置,小提琴圖則展示了任意位置的密度,通過小提琴圖可以知道哪些位置的密度較高。

在圖中,白點是中位數,黑色盒型的范圍是下四分位點到上四分位點,細黑線表示須。外部形狀即為核密度估計。

與箱線圖進行對比,同樣以'titanic'數據集為例,我們來探索不同的'class'(船艙)下乘客的'age'(年齡)情況。

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
titanic=sns.load_dataset('titanic')
sns.violinplot(x='class',y='age',data=titanic)

Seaborn,進階Python數據可視化

同樣,可以設置'hue'參數,對字段進行細分。

sns.violinplot(x='class',y='age',hue='who',data=titanic)

Seaborn,進階Python數據可視化

當hue參數只有兩個級別時,也可以通過設置'split'參數為True,“拆分”小提琴,提琴兩邊分別表示兩個分類的情況,這樣可以更有效地利用空間。

sns.violinplot(x='class',y='age',hue='alive',
    data=titanic,split=True)

Seaborn,進階Python數據可視化

我們可以在小提琴內部添加圖形來幫助我們進行分析,這里就需要控制'inner'參數。

sns.violinplot(x='class',y='age',hue='alive',
    data=titanic,split=True,inner='stick')

Seaborn,進階Python數據可視化

我們甚至可以把上面提到的散點圖加入小提琴圖中。

sns.violinplot(x='class',y='age',data=titanic,inner=None)
sns.swarmplot(x='class',y='age',data=titanic,color='white')

Seaborn,進階Python數據可視化

07 regplot/lmplot

回歸圖

Seaborn 中利用 regplot() 和 lmplot() 來進行回歸,確定線性關系,它們密切相關,共享核心功能,但也有明顯的不同。

這里我們使用 Seaborn 自帶的數據集'iris'來繪制回歸相關的圖形。首先我們導入收據來看看數據集的大概情況:

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
#導入數據集'iris'
iris=sns.load_dataset('iris')
#隨機查看數據集的10行數據
iris.sample(10)

Seaborn,進階Python數據可視化

數據集非常簡單,總共是5個字段,我們首先來看 'sepal_length' 和 'petal_length' 之間的線性關系。

sns.regplot(x='sepal_length',y='petal_length',data=iris)

Seaborn,進階Python數據可視化

圖中的點表示實際的數據點,Seaborn 根據這些數據擬合出直線,表示x軸和y軸對應字段之間的線性關系,直線周圍的陰影表示置信區間。

關于置信區間,可以通過設置'ci'參數控制是否顯示。

sns.regplot(x='sepal_length',y='petal_length',data=iris,ci=None)

Seaborn,進階Python數據可視化

可以通過'color'和'marker'參數來控制圖形的顏色以及數據點的形狀。

fig,axes=plt.subplots(1,2) 
sns.regplot(x='sepal_length',y='petal_length',data=iris,
    color='r',marker='+',ax=axes[0])
sns.regplot(x='sepal_length',y='petal_length',data=iris,
    color='g',marker='*',ax=axes[1])

Seaborn,進階Python數據可視化

lmplot() 可以設置hue,進行多個類別的顯示,而 regplot() 是不支持的。這里我們通過設置hue='species',來進行分類別地展示。

sns.lmplot(x='sepal_length',y='petal_length',
    hue='species',data=iris)

Seaborn,進階Python數據可視化

同樣的,我們也可以更改數據點的形狀,來進行區分。

sns.lmplot(x='sepal_length',y='petal_length',hue='species',
    data=iris,markers=['*','o','+'])

Seaborn,進階Python數據可視化

設置'fit_reg'參數,可以控制是否顯示擬合的直線。

sns.lmplot(x='sepal_length',y='petal_length',hue='species',
    data=iris,markers=['*','o','+'],fit_reg=False)

Seaborn,進階Python數據可視化

如果要對不同的類別分開繪制,用'col'參數代替'hue'。

sns.lmplot(x='sepal_length',y='petal_length',
    col='species',data=iris)

Seaborn,進階Python數據可視化

08 heatmap

熱力圖

熱力圖通常用來表示特征之間的相關性,一般通過顏色的深淺來表示數值的大小或者相關性的高低。

這里我們導入 Seaborn 自帶的另一個數據集'flights',來繪制熱力圖。先查看數據前10行的情況:

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
flights = sns.load_dataset("flights")
flights.head(10)

Seaborn,進階Python數據可視化

我們以'year'為縱軸,'month'為橫軸,'passengers'的值為標準繪制熱力圖。

f=flights.pivot('year','month','passengers')
sns.heatmap(f)

Seaborn,進階Python數據可視化

如果要顯示具體的數值,可以通過'annot'參數來控制。

sns.heatmap(f, annot=True,fmt="d")

Seaborn,進階Python數據可視化

通過 Seaborn 的調色板控制熱力圖顯示的顏色,調色板在后續會有詳細的說明,這里只做演示,示例熱力圖的顏色調節機制。

cmap = sns.diverging_palette(200,20,sep=20,as_cmap=True)
sns.heatmap(f,cmap=cmap)

Seaborn,進階Python數據可視化

- 圖形控制的藝術 -

前面我們利用 Seaborn 繪制了各種類型的圖形,對于基本的快速分析,其實已經足夠,但是在細節的調節、顏色、美觀度等方面我們還可以進行精細化的控制。

首先我們利用 Numpy 創建一組數據(20行6列的隨機數),然后利用 Seaborn 創建一個箱線圖來進行展示。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
#創建一個20行6列的數據
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
sns.boxplot(data=data)

Seaborn,進階Python數據可視化

圖形背景

Seaborn 中有 white / whitegrid / dark / darkgrid / ticks 幾種樣式,用 set_style() 函數控制,分別如下:

whitegrid 白色網格背景

white 白色背景(默認)

darkgrid 黑色網格背景

dark 黑色背景

ticks 四周帶有刻度的白色背景

# 設為白色網格背景
sns.set_style("whitegrid")
sns.boxplot(data=data)

Seaborn,進階Python數據可視化

# 設為黑色網格背景
sns.set_style("darkgrid")
sns.boxplot(data=data)

Seaborn,進階Python數據可視化

調色板

seaborn 中的分類色板,主要用 color_palette() 函數控制,color_palette() 不寫參數則顯示為 Seaborn 默認顏色。如果需要設置所有圖形的顏色,則用 set_palette() 函數定義。

Seaborn 中6個默認的顏色循環主題分別為: deep, muted, pastel, bright, dark, colorblind,下面我們列舉演示。

# 設置顏色模式為'deep'
sns.boxplot(data=data,palette=sns.color_palette('deep'))

Seaborn,進階Python數據可視化

# 設置顏色模式為'pastel'
sns.boxplot(data=data,palette=sns.color_palette('pastel'))

Seaborn,進階Python數據可視化

需要注意的是,除了默認的顏色模式有10中顏色外,其他的顏色模式只有6種顏色,如果需要更多顏色,那么則需要采用hls色彩空間。

#創建一個20行10列的數據'data2'
data2 = np.random.normal(size=(20, 10)) + np.arange(10) / 2  
#利用hls色彩空間進行調色
sns.boxplot(data=data2, palette=sns.color_palette('hls', 10))

Seaborn,進階Python數據可視化

我們也可以通過簡單的設置,得到單色漸變的效果,默認顏色由淺到深。

#可以嘗試 Reds/Greens,默認顏色由淺到深
sns.boxplot(data=data,palette=sns.color_palette('Blues'))

Seaborn,進階Python數據可視化

顯示中文

Seaborn 對中文的顯示不太友好,如果在遇到亂碼問題時,可以加入下面的代碼。

# 指定默認字體
mpl.rcParams['font.sans-serif'] = ['SimHei']  
# 解決保存圖像是負號'-'顯示為方塊的問題 
mpl.rcParams['axes.unicode_minus'] = False

保存圖片

畫出的圖形我們需要保存,可以先建立一個畫布,設置我們圖像的大小,然后將這個畫布保存下來。

#設置一個(12,6)的畫布
plt.figure(figsize=(12, 6))
#圖形繪制代碼
sns.boxplot(data=data,palette=sns.color_palette('Blues')) 
#將畫布保存為'xiang.png',還可以保存為jpg、svg格式圖片
plt.savefig('xiang.png')

Seaborn,進階Python數據可視化

關于 Seaborn,基本的圖形繪制到這里就差不多了,雖然只是最常規的圖形,但是足夠讓你開始嘗試探索數據,快速繪圖并獲得分析結果。

當然,這絕對不是 Seaborn 的全部,如果進行更精細化的參數設置,如何做出信息更多、更加美觀的圖形,還有很多需要去了解的細節。

探索性數據分析的路很長,但開始足夠簡單,去創造屬于你的圖形吧。

上述內容就是Seaborn,進階Python數據可視化,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄城县| 加查县| 阿尔山市| 镇宁| 阳高县| 福鼎市| 灌云县| 广汉市| 忻州市| 托里县| 宝山区| 鄂伦春自治旗| 秦皇岛市| 龙川县| 长垣县| 营口市| 砀山县| 建水县| 洛南县| 永州市| 宁阳县| 潍坊市| 南召县| 嘉善县| 漳平市| 赤壁市| 道真| 肥东县| 阿城市| 兰西县| 津南区| 香格里拉县| 轮台县| 平昌县| 林州市| 滦南县| 蓬溪县| 大名县| 长垣县| 大新县| 灵台县|