本文是本教程的第一部分,我將在本文中講述如何收集流行音樂的數據並清理。 目前,全部代碼已經放到了GitHub上。
多年來,韓國流行音樂成爲一種全球性現象,其流行程度讓我感到驚訝。 所以,我決定用機器學習來分析韓國流行音樂,探索有趣的見解。 本文,我將闡述數據科學週期中的數據收集和數據清理階段。
數據收集
爲了找到數據集,我不得不在谷歌上進行了搜索,我發現了一個 Excel 文檔,內含針對社交媒體和韓國流行音樂的調查,我覺得很有意思。數據集包含來自世界各地的 240 名韓國流行音樂歌迷,共有 22 個調查問題。
數據集鏈接:Ranman,Saanjana(2020):KPOP DATA.xlsx. figshare. Dataset.
數據清理
數據清理是重要的一步,因爲需要爲 EDA 和模型構建提供最乾淨的數據。如果放進去的是垃圾,那麼從模型中得到的也是垃圾。
數據集可能有前導空格和尾隨空格。因此,我決定使用函數來刪除第一列的“Timestamp”,因爲沒有用處。
# function to remove the leading and trailing whtte space in the data frame
def trim(dataset):
# using .strip() to remove the leading and the trailing white spaces in each cell
trim = lambda x: x.strip() if type(x) is str else x
return dataset.applymap(trim)
由於列名太長,我決定給它們提供代碼名稱,以簡單地表示列名。
接下來,檢查數據集是否有空值。
有三個列具有空值。首先,讓我們檢查只有一個空值的列。
我發現 life_chg
和 money_src
中的空值是“ n/a
”,因此,我簡單地將它們替換爲字符串“ none
”。
對於 daily_MV_hr
列,我決定用平均值替換空值。處理空值有多種方法(刪除行、分配唯一類或者運行迴歸模型來預測缺失值等),但我認爲用平均值替換它們是最佳選擇。
我取了 1 和 4 的平均值,也就是 2.5 小時,去掉了“hours”(小時)這個詞。我注意到有些類別在範圍內,所以爲了簡單起見,我取了這些範圍的平均值,創建了一個特殊函數來處理這個問題。
# function to find the mean when some have ranges and others don't
def split_mean(x):
# split before and after the hyphen (-)
split_num = x.split("-")
if len(split_num) == 2:
return (float(split_num[0])+float(split_num[1]))/2
# those who aren't in the range
else:
return float(x)
# apply the split_mean function to the "daily MV hours" column
daily_mv = daily_mv.apply(lambda x: split_mean(x))
該函數用來在一些有範圍而另一些沒有範圍的情況下查找平均值。
daily_MV_hr
列前後對比我意識到這個數據集有點混亂。所以我重複了類似的步驟來清理每一列。
- “
yr_listened
” 列
yes_listened
列的過程 我將展示每個列的清理前後圖片。
- “
daily_usic_hr
” 列
DAILY_MUSIC_hr
清理前後 yr_merch_spent
清理前後 age
列
age
清理前後 fav-grp
列
nes_medium
列
pursuit
列
time_cons_yn
列
life_chg
列
pos_eff
列
money_src
列
crazy_ev
列
country
列
至此,數據清理完成,我將清理過的數據幀保存爲 CSV 文件,以供本教程的下一部分使用。
在第二部分中,我將討論本教程的探索性數據分析部分。
作者介紹 :
Jaemin Lee,專攻數據分析與數據科學,數據科學應屆畢業生。
原文鏈接: