Liz's Blog

Python學習筆記#6:Seaborn資料視覺化篇

| Comments

奠基於昨天學的matplotlib,今天學的seaborn可以用更簡單的程式碼來完成視覺化表格。

Udemy
課程名稱:Python for Data Science and Machine Learning Bootcamp
講師:Jose Portilla

seaborn的apigallery都寫得很好,超大心。

1.在終端機安裝下載seaborn套件
conda install seaborn

2.套入seaborn套件並在jupyter notebook可以直接看到圖表結果

import seaborn as sns
%matplotlib inline

3.使用內建資料庫練習

tips = sns.load_dataset('tips')
flights = sns.load_dataset('flights')
tips.head()

4.Distribution Plots(介紹可以視覺化資料集分佈情況的圖表,包括displot、jointplot、pairplot、rugplot、kdeplot)
(1)distplot

#製作直方圖,displot結合matplotlib中的hist函式,以及kdeplot、rugplot函式。預設為kde=True、rug=False
sns.distplot(tips['total_bill'])

#移除kde只剩直方圖
sns.distplot(tips['total_bill'],kde=False,bins=30)

(2)jointplot

#jointplot可以結合兩種圖及雙變數資料,以下即是結合直方圖及散佈圖
sns.jointplot(x='total_bill',y='tip',data=tips,kind='scatter')

#kind的選擇有scatter、reg、resid、kde、hex
sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex')
sns.jointplot(x='total_bill',y='tip',data=tips,kind='reg')

(3)pairplot

#pairplot(可以用快速視覺化的圖表將資料集中有數字的欄位圖像化)
sns.pairplot(tips)

#可使用hue進一步區分不同變數,palette=顏色主題。
sns.pairplot(tips,hue='sex',palette='coolwarm')

(4)rugplot

#rugplotg是將單一變數在單一x軸上直接畫出
sns.rugplot(tips['total_bill'])

(5)kdeplot(Kernel Density Estimation plots

sns.kdeplot(tips['total_bill'])
sns.rugplot(tips['tip'])

5.Categorical Data Plots(介紹類別資料的視覺化圖表)
(1)barplot

import numpy as np

#柱狀圖seaborn.barplot(x,y,data)
sns.barplot(x='sex',y='total_bill',data=tips,estimator=np.std)

(2)countplot

#countplot和histogram類似,計算單一變數的次數
sns.countplot(x='sex',data=tips)

(3)boxplot

#製作盒鬚圖,hue可作為進一步區分特定變數的工具
sns.boxplot(x='day',y='total_bill',data=tips,hue='smoker')

(4)violinplot

#小提琴圖比起盒鬚圖更能強調資料密集在哪
sns.violinplot(x='day',y='total_bill',data=tips,hue='sex',split=True)

(5)stripplot

#stripplot類似散佈圖,但適用於類別資料,但因為點容易重疊在一起,所以使用jitter=True可以解決這樣的問題
#使用hue可以進一步區分變數,dodge則是可以將hue區分的變數分成兩行
sns.stripplot(x='day',y='total_bill',data=tips,jitter=True,hue='sex',dodge=True)

(6)swarmplot

#swarmplot類似stripplot,但會將類別資料分散顯示,但樣本過多的時候就和stripplot差不多
sns.violinplot(x='day',y='total_bill',data=tips)
sns.swarmplot(x='day',y='total_bill',data=tips,color='black')

(7)factorplot

#使用factorplot的話,則可在參數中設定kind=圖表名稱來設定圖表
sns.factorplot(x='day',y='total_bill',data=tips,kind='bar')

6.Matrix Plot(將matrix資料用圖表的方式顯現出來,如:heatmap)
(1)corr()

tc = tips.corr()
#先將資料轉成matrix,再直接用heatmap()即可。annot=True代表會出現數值。cmap=顏色主題。
sns.heatmap(tc,annot=True,cmap='coolwarm')

(2)pivot table

#建立樞紐分析表
fp=flights.pivot_table(index='month',columns='year',values='passengers')

#linecolor設定每個資料點外框顏色,linewidths設定資料點外框寬度
sns.heatmap(fp,cmap='magma',linecolor='white',linewidths=1)

(3)clustermap

#clustermap使用hierarchal clustering來建立heatmap。standard_scale等於資料比例尺
sns.clustermap(fp,cmap='coolwarm',standard_scale=1)

7.Regression Plot(Seaborn有許多內建的迴歸圖表,這裡只有舉例lmplot()。lmplot可以用來展示線性模型。

#lmplot(x,y,data)
#hue可進一步區分第三個變數,markers則可讓hue想區分的變數資料符號不同
#scatter_kws={'key':value}可改變資料點的大小
sns.lmplot(x='total_bill',y='tip',data=tips,hue='sex',markers=['o','v'],scatter_kws={'s':100})

#col=第三變數,row=第四變數
#aspect ratio=長寬比,size=尺寸
sns.lmplot(x='total_bill',y='tip',data=tips,col='sex',row='time',
          aspect=1,size=4)

8.格子(Grid)
(1)PairGrid

#使用鳶尾花資料集練習
iris=sns.load_dataset('iris')
iris.head()

#檢查鳶尾花資料集品種有幾種
iris['species'].unique()

#PairGrid屬於subplot grid,類似pairplot,只是客製化程度更高
g = sns.PairGrid(iris)
g.map_diag(sns.distplot)
g.map_upper(plt.scatter)
g.map_lower(sns.kdeplot)

(2)Facet Grid

#FacetGrid是一種常見基於資料變數來建立grid(格子)的方法
g = sns.FacetGrid(data=tips,col='time',row='smoker')
g.map(plt.scatter,'total_bill','tip')

9.Style and Color

#style設定圖表風格
sns.set_style('ticks')
sns.countplot(x='sex',data=tips)

#despine()只會去掉表格外框右邊及上面的線,如果所有外框都不要則額外設定left=True,bottom=True
sns.despine(left=True,bottom=True)

#可以設定figuresize
plt.figure(figsize=[12,3])
sns.countplot(x='sex',data=tips)

#set_context可設定該圖表預定想放在哪種文件上展示
sns.set_context('poster')
sns.countplot(x='sex',data=tips)

Comments

comments powered by Disqus