本文分享自華爲雲社區《使用 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 的強大功能和簡潔接口使其成爲數據科學家和分析師的不可或缺的工具之一。