首先給大家介紹一個很好用的學習地址:https://cloudstudio.net/columns
在上一章節中,我們對聚類的相關知識進行了全面的介紹,旨在為大家打下堅實的理論基礎。今天,我們的主要任務是深入探討資料視覺化的技術和方法。在之前的學習中,我們已經接觸過迴歸分析中的視覺化技術,而今天我們將專注於聚類分析的視覺化。我們將學習如何使用散點圖、同心圓等視覺化工具,以更直觀地理解聚類結果。
資料視覺化——聚類
今天我們的目標是從一個特定的檔案中讀取和分析資料。該檔案包含了大量的歌曲資訊,涵蓋多個欄位,例如歌曲名稱、音樂流派、歌唱家、流行度、可舞性、釋出時間等。在我們的分析過程中,我們將首先過濾出這份資料中最為突出的三大流派,並提取相關資料。接下來,我們將深入探討這三大流派在其他欄位上的相關性,並分析其資料分佈情況。
需要注意的是,本章節並不打算過多討論聚類演算法及其具體作用,我們的重點將放在如何運用視覺化工具來展示和理解這些資料。這將有助於我們更直觀地捕捉到資料中的趨勢和模式,從而為後續的分析打下基礎。
過濾資料
首先,我們需要引入一些關鍵的依賴包:
!pip install seaborn
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("../data/nigerian-songs.csv")
df.head()
接下來,我們將對資料集進行初步檢視,以瞭解其整體結構和內容。
使用以下命令,我們可以全面檢視資料的大致格式以及資料量等關鍵資訊。
df.info()
df.isnull().sum()
df.describe()
df.info():快速瞭解資料的結構和列的型別。
df.isnull().sum():識別哪些列存在缺失資料以及缺失的程度。
df.describe():主要用於數值型資料,提供了每列的基本統計特性,便於理解資料的分佈情況。
我們可以先檢視一下describe方法輸出的資料,這部分資訊將為我們提供重要的統計結果和資料分佈情況。其他相關的內容我們之前已經討論過,具體情況可以參考附圖。
資料篩選
接下來,我們將對資料進行篩選,目標是提取出最流行的三大音樂流派。為了實現這一目標,我們將以artist_top_genre作為X軸,以便更清晰地觀察資料的分佈情況。以下是相應的程式碼:
import seaborn as sns
top = df['artist_top_genre'].value_counts()
plt.figure(figsize=(10,7))
sns.barplot(x=top[:5].index,y=top[:5].values)
plt.xticks(rotation=45)
plt.title('Top genres',color = 'blue')
如圖所示,我們提取出了前五個音樂流派,併成功識別出其中的三個:afro dancehall、afropop以及nigerian pop。
請注意,由於在檢查資料時未發現任何缺失值(即沒有null資料),因此我們決定不刪除任何行,直接進行繪圖。然而,如果你的資料集中存在缺失值,建議你在進行繪圖之前,首先刪除包含缺失值的行,以確保資料的完整性和圖形的準確性。這樣可以避免潛在的資料偏差,確保分析結果的可靠性。
df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')]
df = df[(df['popularity'] > 0)]
top = df['artist_top_genre'].value_counts()
plt.figure(figsize=(10,7))
sns.barplot(x=top.index,y=top.values)
plt.xticks(rotation=45)
plt.title('Top genres',color = 'blue')
我們的資料篩選工作終於圓滿完成。現在,我們已經識別出當前最受歡迎的三大流派,具體資訊如圖所示。
強相關性
同樣地,讓我們再來檢視一下熱力圖。這一部分內容我們在迴歸分析中已經詳細講解過,因此在這裡我們將直接提供相關的程式碼。以下是具體的實現程式碼:
corrmat = df.corr(numeric_only=True)
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True)
根據圖片所示的資料分析,我們可以清楚地看到,唯一表現出強相關性的變數是能量(energy)與響度(loudness)之間的關係。這一點並不令人驚訝,因為嘈雜的音樂往往伴隨著極高的活力和強烈的節奏感。
接下來,我們將深入探討一種新的視覺化方法,以幫助我們更好地理解聚類分析中的資料分佈情況。
資料分佈
同心圓
接下來,我們將根據受歡迎程度和可舞性這兩個指標進行資料分析,具體方式包括繪製同心圓和散點圖。這些圖表將幫助我們更直觀地理解資料的分佈和趨勢。當然,你也可以選擇其他欄位進行對比分析,完全可以根據個人的喜好和需求進行調整。
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df.iloc[:, 6:8] = df.iloc[:, 6:8].apply(LabelEncoder().fit_transform)
sns.set_theme(style="ticks")
g = sns.jointplot(
data=df,
x="popularity", y="danceability", hue="artist_top_genre",
kind="kde",
)
由於資料分佈和資料型別不一致,為了確保分析的準確性和一致性,我決定將所有資料統一轉換為整數格式。如圖所示:
他的目的是成一個聯合分佈圖,用於展示資料集中流行度(popularity)和舞蹈性(danceability)之間的關係,同時透過不同顏色標識不同的音樂風格(artist_top_genre)
散點圖
sns.FacetGrid(df, hue="artist_top_genre").map(plt.scatter, "popularity", "danceability",s=5) .add_legend()
一行程式碼即可觀察其散點分佈,如圖所示:
一般來說,對於聚類分析,使用散點圖來展示資料的聚類效果是非常有效的,因此掌握這種視覺化技術對我們理解資料的結構和模式至關重要。在接下來的課程中,我們將利用經過過濾後的資料,採用 k-means 聚類演算法來探索和識別資料中以有趣方式重疊的組。
總結
在本章節中,我們深入探討了資料視覺化在聚類分析中的應用。透過對歌曲資訊資料集的分析,我們成功識別了三大流派,並運用散點圖和同心圓等視覺化工具,直觀地展示了資料的分佈與趨勢。視覺化不僅增強了我們對資料的理解,還為後續的聚類分析打下了堅實的基礎。
透過這種方式,我們不僅能識別出資料中的模式,還能為決策提供有力支援。正如我們所見,資料的視覺化過程是一個探索性的旅程,它幫助我們在複雜的資料中找到隱藏的聯絡和意義。接下來,我們將應用 k-means 聚類演算法,進一步挖掘這些資料背後的故事。
我是努力的小雨,一名 Java 服務端碼農,潛心研究著 AI 技術的奧秘。我熱愛技術交流與分享,對開源社群充滿熱情。同時也是一位騰訊雲創作之星、阿里雲專家博主、華為云云享專家、掘金優秀作者。
💡 我將不吝分享我在技術道路上的個人探索與經驗,希望能為你的學習與成長帶來一些啟發與幫助。
🌟 歡迎關注努力的小雨!🌟