本文分享自華為雲社群《使用 Seaborn 實現高階統計圖表從箱線圖到多變數關係探索》 ,作者:檸檬味擁抱。
在資料科學和資料視覺化領域,Seaborn 是一個備受歡迎的 Python 視覺化庫。它建立在 Matplotlib 的基礎之上,提供了更簡潔、更美觀的圖形介面,同時也具備了一些高階統計圖表的功能。本文將介紹如何利用 Seaborn 實現一些高階統計圖表,並提供相應的程式碼示例。
安裝 Seaborn
首先,確保你已經安裝了 Seaborn。你可以使用 pip 進行安裝:
pip install seaborn
匯入必要的庫
在開始之前,我們需要匯入 Seaborn 以及其他一些常用的資料處理和視覺化庫:
import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as pd
箱線圖(Box Plot)
箱線圖是一種常用的統計圖表,用於顯示資料的分佈情況。Seaborn 提供了簡單易用的介面來繪製箱線圖。
# 生成隨機資料 np.random.seed(0) data = np.random.normal(loc=0, scale=1, size=100) # 繪製箱線圖 sns.boxplot(data=data) plt.title('Box Plot of Random Data') plt.show()
在這個例子中,我們生成了一組隨機資料,並使用 sns.boxplot()
函式繪製了箱線圖。透過這個圖表,我們可以直觀地瞭解資料的分佈情況,包括中位數、四分位數以及異常值的情況。
小提琴圖(Violin Plot)
小提琴圖是一種結合了箱線圖和核密度估計的圖表,可以更直觀地展示資料的分佈情況。
# 生成隨機資料 np.random.seed(0) data1 = np.random.normal(loc=0, scale=1, size=100) data2 = np.random.normal(loc=2, scale=1.5, size=100) data = np.concatenate([data1, data2]) labels = ['Group 1'] * 100 + ['Group 2'] * 100 # 繪製小提琴圖 sns.violinplot(x=labels, y=data) plt.title('Violin Plot of Two Groups') plt.show()
在這個例子中,我們生成了兩組不同的隨機資料,並使用 sns.violinplot()
函式繪製了小提琴圖。透過這個圖表,我們可以比較兩組資料的分佈情況,並觀察其差異。
熱力圖(Heatmap)
熱力圖是一種用顏色表示資料矩陣的圖表,常用於顯示相關性或者資料密度。
# 生成隨機資料 np.random.seed(0) data = np.random.rand(10, 10) # 繪製熱力圖 sns.heatmap(data, annot=True, cmap='viridis') plt.title('Heatmap of Random Data') plt.show()
在這個例子中,我們生成了一個隨機的 10x10 矩陣,並使用 sns.heatmap()
函式繪製了熱力圖。透過這個圖表,我們可以直觀地瞭解資料之間的相關性以及資料的分佈情況。
核密度估計圖(Kernel Density Estimation Plot)
核密度估計圖是一種用於估計資料密度函式的非引數方法,透過平滑觀測資料,生成一個連續的機率密度曲線。
# 生成隨機資料 np.random.seed(0) data = np.random.normal(loc=0, scale=1, size=100) # 繪製核密度估計圖 sns.kdeplot(data, shade=True) plt.title('Kernel Density Estimation Plot of Random Data') plt.show()
在這個例子中,我們生成了一組隨機資料,並使用 sns.kdeplot()
函式繪製了核密度估計圖。這個圖表展示了資料的機率密度分佈情況,幫助我們更好地理解資料的分佈特徵。
成對關係圖(Pair Plot)
成對關係圖是一種用於視覺化資料集中變數之間關係的圖表,對於探索性資料分析非常有用。
# 生成隨機資料集 np.random.seed(0) data = pd.DataFrame(np.random.randn(100, 4), columns=['A', 'B', 'C', 'D']) # 繪製成對關係圖 sns.pairplot(data) plt.suptitle('Pair Plot of Random Data', y=1.02) plt.show()
在這個例子中,我們生成了一個隨機的資料集,並使用 sns.pairplot()
函式繪製了成對關係圖。這個圖表展示了資料集中每兩個變數之間的關係,包括散點圖和單變數分佈圖,有助於發現變數之間的模式和相關性。
聚類圖(Cluster Map)
聚類圖是一種用於展示資料集中變數之間相似性的圖表,透過聚類演算法將相似的變數分組顯示。
# 生成隨機資料集 np.random.seed(0) data = pd.DataFrame(np.random.rand(10, 10), columns=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']) # 繪製聚類圖 sns.clustermap(data, cmap='viridis') plt.title('Cluster Map of Random Data') plt.show()
在這個例子中,我們生成了一個隨機的資料集,並使用 sns.clustermap()
函式繪製了聚類圖。這個圖表展示了資料集中變數之間的相似性,透過聚類演算法將相似的變數分組顯示,有助於發現變數之間的模式和結構。
聚類熱圖(Clustermap)
聚類熱圖是一種基於層次聚類演算法的熱力圖,它將資料進行聚類並按照聚類結果重新排列,以便更好地展示資料的結構和關聯性。
# 生成隨機資料 np.random.seed(0) data = np.random.rand(10, 10) # 繪製聚類熱圖 sns.clustermap(data, cmap='coolwarm') plt.title('Clustermap of Random Data') plt.show()
在這個例子中,我們生成了一個隨機的 10x10 矩陣,並使用 sns.clustermap()
函式繪製了聚類熱圖。透過這個圖表,我們可以清晰地看到資料之間的聚類關係,以及不同資料點之間的相似性。
分類散點圖(Pairplot)
分類散點圖是一種同時顯示多個變數之間關係的圖表,常用於探索資料集中不同變數之間的關聯性。
# 載入示例資料集 iris = sns.load_dataset('iris') # 繪製分類散點圖 sns.pairplot(iris, hue='species', markers=['o', 's', 'D']) plt.title('Pairplot of Iris Dataset') plt.show()
在這個例子中,我們使用 Seaborn 自帶的鳶尾花資料集,並使用 sns.pairplot()
函式繪製了分類散點圖。透過這個圖表,我們可以一眼看出不同鳶尾花種類之間的特徵差異,以及不同特徵之間的相關性。
時間序列圖(Time Series Plot)
時間序列圖是一種用於展示時間序列資料的圖表,常用於分析資料隨時間變化的趨勢和週期性。
# 生成時間序列資料 dates = pd.date_range(start='2022-01-01', end='2022-12-31') data = np.random.randn(len(dates)) # 建立 DataFrame df = pd.DataFrame({'Date': dates, 'Value': data}) # 繪製時間序列圖 sns.lineplot(x='Date', y='Value', data=df) plt.title('Time Series Plot of Random Data') plt.xlabel('Date') plt.ylabel('Value') plt.show()
在這個例子中,我們生成了一個隨機的時間序列資料,並使用 sns.lineplot()
函式繪製了時間序列圖。透過這個圖表,我們可以清晰地看到資料隨時間變化的趨勢和週期性。
進階調色盤(Advanced Color Palettes)
Seaborn 提供了豐富的調色盤功能,可以幫助使用者在圖表中選擇合適的顏色方案,以突出重點或增強視覺化效果。
# 使用進階調色盤 current_palette = sns.color_palette('husl', 5) # 繪製柱狀圖 sns.barplot(x=np.arange(5), y=np.random.rand(5), palette=current_palette) plt.title('Bar Plot with Advanced Color Palette') plt.show()
在這個例子中,我們使用了 sns.color_palette()
函式來選擇 Husl 調色盤,並生成了一個包含 5 種顏色的調色盤。然後,我們使用這個調色盤來繪製了一個柱狀圖,以展示其效果。
自定義圖表樣式(Customized Plot Styles)
Seaborn 允許使用者透過設定不同的樣式來定製圖表外觀,以滿足個性化的需求。
# 設定自定義樣式 sns.set_style('whitegrid') # 繪製散點圖 sns.scatterplot(x=np.random.randn(100), y=np.random.randn(100)) plt.title('Scatter Plot with Customized Style') plt.show()
在這個例子中,我們使用了 sns.set_style()
函式將圖表樣式設定為白色網格,並繪製了一個散點圖來展示其效果。
多皮膚繪圖(Facet Grids)
Seaborn 提供了多皮膚繪圖的功能,可以同時展示多個子圖,以便更好地比較不同子集之間的關係。
# 載入示例資料集 tips = sns.load_dataset('tips') # 建立 FacetGrid 物件 g = sns.FacetGrid(tips, col='time', row='smoker') # 繪製小提琴圖 g.map(sns.violinplot, 'total_bill') plt.show()
在這個例子中,我們使用 sns.FacetGrid()
函式建立了一個 FacetGrid 物件,並在不同的子圖中繪製了小提琴圖,以展示不同子集之間的資料分佈情況。
資料分佈比較(Distribution Comparison)
Seaborn 提供了多種方法來比較不同資料分佈之間的差異,例如使用核密度估計或直方圖。
# 載入示例資料集 iris = sns.load_dataset('iris') # 繪製核密度估計圖 sns.kdeplot(data=iris, x='sepal_length', hue='species', fill=True) plt.title('Distribution Comparison of Sepal Length') plt.show()
在這個例子中,我們使用 sns.kdeplot()
函式繪製了鳶尾花資料集中不同種類之間萼片長度的核密度估計圖,以比較它們的分佈情況。
資料分組展示(Grouped Visualization)
Seaborn 可以方便地展示資料的分組情況,例如利用分類變數對資料進行分組並進行視覺化。
# 載入示例資料集 titanic = sns.load_dataset('titanic') # 繪製分類箱線圖 sns.boxplot(data=titanic, x='class', y='age', hue='sex') plt.title('Grouped Box Plot of Age by Class and Sex') plt.show()
在這個例子中,我們使用 sns.boxplot()
函式繪製了泰坦尼克號資料集中不同船艙等級和性別對年齡的影響,以比較它們的分佈情況。
多變數關係探索(Exploring Multivariate Relationships)
Seaborn 提供了多種方法來探索多變數之間的關係,例如利用散點圖矩陣或成對關係圖。
# 載入示例資料集 iris = sns.load_dataset('iris') # 繪製散點圖矩陣 sns.pairplot(data=iris, hue='species') plt.title('Pairplot for Exploring Multivariate Relationships') plt.show()
在這個例子中,我們使用 sns.pairplot()
函式繪製了鳶尾花資料集中不同特徵之間的成對關係圖,以探索它們之間的多變數關係。
總結
本文介紹瞭如何利用 Seaborn 實現高階統計圖表,並提供了豐富的程式碼示例。首先,我們學習瞭如何繪製常見的統計圖表,包括箱線圖、小提琴圖、熱力圖等,透過這些圖表可以直觀地展示資料的分佈和關聯性。接著,我們探討了進階功能,如調色盤、自定義圖表樣式、多皮膚繪圖等,這些功能可以幫助使用者定製化圖表外觀,增強視覺化效果。然後,我們介紹了一些高階應用,如資料分佈比較、資料分組展示、多變數關係探索等,這些方法可以幫助使用者更深入地理解資料之間的關係和規律。透過本文的學習,讀者可以掌握使用 Seaborn 進行資料視覺化的基本技能,並能夠運用其豐富的功能和靈活的介面進行資料分析和探索工作。 Seaborn 的強大功能和簡潔介面使其成為資料科學家和分析師的不可或缺的工具之一。
點選關注,第一時間瞭解華為雲新鮮技術~