程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python數據分析11——Seaborn繪圖

編輯:Python

目錄

Seaborn介紹

Seaborn安裝

官方文檔

Seaborn繪圖風格

sns.axes_style

sns.set_style()

sns.set

sns.despine

Seaborn顏色風格

Seaborn在Axes繪圖

Seaborn繪圖

關系型繪圖

seaborn.relplot()

基本使用

hun參數 

添加col和row參數 

繪制折線圖 

分類繪圖

分類散點圖

分類分布圖 

分類統計圖

條形圖

柱形圖

點線圖

分布繪圖

單變量分布

二變量分布 

pairplot 

線性回歸繪圖

補充

熱力圖和EDA探索性分析 


Seaborn介紹

Seaborn 是一個基於 matplotlib 且數據結構與 pandas 統一的統計圖制作庫。他提前已經定義好了一套自己的風格。然後也封裝了一系列的方便的繪圖函數,之前通過 matplotlib 需要很多代碼才能實現完成的圖,使用 seaborn 可能非常簡單,一行代碼搞定。

Seaborn安裝

1.通過 pip:pip install seaborn;

2.通過 anaconda:conda install seaborn;

官方文檔

官網:seaborn: statistical data visualization — seaborn 0.11.2 documentation (pydata.org)http://seaborn.pydata.org/

中文學習文檔:

An introduction to seaborn-Seaborn 0.9 中文文檔 (cntofu.com)https://www.cntofu.com/book/172/docs/1.md

Seaborn繪圖風格

在seaborn中,可以通過三個函數來設置樣式。分別是 sns.set_style;sns.axes_style;sns.set 方法。

sns.axes_style

(1)如果沒有傳任何參數,返回的是字段屬性;

(2)臨時的樣式;

with sns.axes_style("dark",{"ytick.left":True}):
sns.scatterplot(x="total_bill",y="tip",data=tips)

例如:

 

sns.set_style()

這個函數和 sns.axes_style 一樣,也是用來設置繪圖風格的。但是這個函數的風格設置,不是臨時的,而是一旦設置了,那麼下面所有繪圖風格都會用這個風格。

sns.set_style("darkgrid")
sns.scatterplot(x="total_bill",y="tip",data=tips)

例如:

 

sns.set

set 方法也是用來設置樣式的,它的功能更加強大。除了 style 以外,還可以設置調色板,字體,字體大小,顏色等,也可以設置其它的 matplotlib.rcParams可以接受的參數。

sns.set(rc={"lines.linewidth":4})
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint",y="signal",data=fmri)

例如:

 

sns.despine

移除軸脊柱函數;

例如:

Seaborn顏色風格

不推薦使用(使用起來不是很方便)這裡不做過多的描述。

實例:

 

 

Seaborn在Axes繪圖

實際上 seaborn 的繪圖函數中也有大量的直接使用 Axes 進行繪圖的,凡是函數名中已經明確了這個圖的類型,這種圖都是使用 Axes 繪圖的。比如 sns.scatterplot,sns.lineplot,sns.barplot 等。Axes繪圖可以直接使用之前 matplotlib 的一些設置圖的元素。

fig,ax = plt.subplots(1,2,figsize=(20,5))
sns.scatterplot(x="total_bill",y="tip",data=tips,ax=ax[0])
sns.barplot(x="day",y="total_bill",data=tips,ax=ax[1])

例如繪制條形圖

繪制散點圖

 

Seaborn繪圖

關系型繪圖

seaborn.relplot()

這個函數功能非常強大,可以用來表示多個變量之間的關聯關系。默認情況下是繪制散點圖,也可以繪制線型圖,具體繪制什麼圖形是通過 kind 參數來決定的。實際上一下兩個函數就是relplot的特例:

散點類型:scatterplot -> relplot(kind="scatter");

線性類型:lineplot -> replot(kind="line");

基本使用

import seaborn as sns
tips = sns.load_dataset("tips",cache=True)
sns.relplot(x="total_bill",y="tip",data=tips)

hun參數 

hue 參數是用來控制第三個變量的顏色顯示的。比如我們在以上圖的基礎上體現出星期幾的參數,那麼可以通過以下代碼來實現:

sns.relplot(x="total_bill",y="tip",hue="day",data=tips)

添加col和row參數 

col 和 row ,可以將圖根據某個屬性的值的個數分割成多列或者多行。比如在以上圖的基礎上我們想要把 lunch 和 dinner 分割成兩個圖顯示,則:

# col_wrap=1 控制換行
# size 點的大小
sns.relplot(x='total_bill',y='tip',data=tips,col='time',col_wrap=1,size="size")
sns.relplot(x='total_bill',y='tip',data=tips,col='time')

 

繪制折線圖 

relplot 通過設置 kind="line" 可以繪制折線圖。並且它的功能比 plt.plot 更加強大。plot只能指定具體的 x軸和y軸的數據。而 relplot 則可以在自動在兩組數據中進行計算繪圖。

"""
需求:signal與timepoint變化關系 --- > 折線圖
讀圖
線 --- 均值
陰影 --- 置信區間
ci=None
style:region 不同區域使用線條樣式不一樣
"""
sns.relplot(x='timepoint',y='signal',data=fmri,kind='line',ci=None,hue="region",col="event",)

 

分類繪圖

分類圖的繪制,采用的是 sns.catplot 來實現的。cat是category的簡寫,這個方法默認繪制的是 分類散點圖,如果想要繪制其他類型的圖,同樣也是通過 kind 參數來指定。

主要分為

(1)分類散點圖;

(2)分類分布圖;

(3)分類統計圖;

分類散點圖

分類散點圖比較適合數據量不是很多的情況,它是用 catplot 來實現的,但是也有一下兩種特別地方法:

(1)stripplot():catplot(kind="strp")默認的;

(2)swarmplot():catplot(kind="swarm");

sns.catplot(x="day",y="total_bill",data=tips,hue="sex")

 

"""
分簇散點圖
缺點 數據量巨大 不適用
"""
sns.catplot(x="day",y="total_bill",data=tips,hue="sex",kind="swarm")

分類分布圖 

分類分布圖,主要是根據分類來看,然後在每個分類下的數據的分布情況。也是通過 catplot

 來實現的,以下三個方法分別是不同的 kind 的參數:

(1)箱型圖:boxplot()        (kind="box")

(2)小提琴圖:vioinplot()        (kind=”violin")

 

分類統計圖

分類統計圖,則是根據分類,統計每個分類下的數據的個數或者比例。有以下幾種方式:

(1)條形圖:barplot()        (kind="bar")

(2)柱形圖:countplot()        (kind="count")

(3)點線圖:pointplot()        (kind="point")

條形圖

seaborn 中的條形圖具有統計功能,可以統計處比例,平均數,也可以按照你想要的統計函數來統計。

"""
分類統計圖
需求:直觀體現不同日期total_bill數量
黑色線 置信區間 線條越長意味數據比較離散
estimator :函數
"""
sns.catplot(x='day',y='total_bill',data=tips,kind='bar',estimator=sum)

 

柱形圖

柱形圖是專門用來統計某個單一變量出現數量的圖形。

sns.catplot(x="sex",data=titanic,kind="count")

點線圖

點線圖可以非常方便的看到變量之間的趨勢變化。

sns.catplot(x="sex",y="survived",data=titanic,kind="point",hue="class")

 

分布繪圖

分布繪圖主要分為單變量分布以及二變量分布和pairplot;

單變量分布

單一變量主要就是通過直方圖控制的,在 seaborn 種直方圖的繪制采用的是 distplot,其中 dist 是 distribution的簡寫,不是 histogram 的簡寫。

titanic = pd.read_csv("./seaborn-data-master/titanic.csv")
titanic.head()
sns.distplot(titanic["age"])

參數變化

"""
需求:觀察所有人年齡的分布情況
單變量分布圖 -- > 直方圖
- kde 是否展示kde曲線
- bins 指定組數
- rug 越密集數據越集中
- hist 是否展示直方圖
"""
sns.distplot(age_titanic['age'],bins=30,rug=True,hist=False)

二變量分布 

多變量分布圖可以看出兩個變量之間的分布關系。一般都是采用多個圖進行表示。多變量分布圖采用的函數是 jointplot。

"""
二變量分布
kind='hex' 六邊形的點
gridsize 點的大小
height 圖形大小 20*20
ratio 主圖和副圖之間比例
space 主圖和副圖之間距離
marginal_kws
"""
sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex',gridsize=15,height=5,ratio=3,space=0,marginal_kws={"rug":True,"kde":True},color="red")

pairplot 

通常用來機器學習建立模型之前選擇合適的模型。

sns.pairplot(tips,vars=["total_bill","tip"])

線性回歸繪圖

線性回歸圖可以幫助我們看到數據的關系趨勢。在 seaborn 種可以通過 regplot 和lmplot兩個函數實現。regplot 的 x 和 y 可以為 Numpy數組,Series等變量。而lmplot的x和y必須為字符串,並且 data的值不能為空:

(1)regplot(x,y,data=None);

(2)lmplot(x,y,data)。

補充

熱力圖和EDA探索性分析 

#輸入需要使用的庫
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import seaborn as sns
from pandas_profiling import ProfileReport
"""數據分析"""
#熱力圖
# 分析各特征之間的相關性並可視化。
plt.figure(figsize=(15,10))
sns.heatmap(dataset.corr(),annot=True)
#EDA探索性分析
profile = ProfileReport(dataset, title='EDA', explorative=True)
#"第一個不行用第二個" https://blog.csdn.net/weixin_44527237/article/details/110096564
profile.to_widgets()
profile.to_notebook_iframe()


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved