您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python如何實現類別變量的獨熱編碼”,在日常操作中,相信很多人在Python如何實現類別變量的獨熱編碼問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python如何實現類別變量的獨熱編碼”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
在數據處理與分析領域,對數值型與字符型類別變量加以編碼是不可或缺的預處理操作;這里介紹兩種不同的方法。
首先導入必要的模塊。
import pandas as pd from sklearn.preprocessing import OneHotEncoder
其中,OneHotEncoder
是我們實現獨熱編碼的關鍵模塊。
接下來,導入并顯示數據前五行。
test_data_1=pd.read_csv('G:/CropYield/03_DL/00_Data/onehot_test.csv',names=['EVI0610','EVI0626','SoilType'],header=0) test_data_1.head(5)
關于這里導入數據代碼的解釋,大家可以查看多變量兩兩相互關系聯合分布圖的Python繪制與Python TensorFlow深度學習回歸代碼:DNNRegressor這兩篇文章,這里就不再贅述啦~
數據前五行展示如下圖。其中,前兩列'EVI0610'
與'EVI0626'
為數值型連續變量,而'SoilType'
為數值型類別變量。我們要做的,也就是將第三列'SoilType'
進行獨熱編碼。
接下來,進行獨熱編碼的配置。
ohe=OneHotEncoder(handle_unknown='ignore') ohe.fit(test_data_1)
在這里,第一行是對獨熱編碼的配置,第二行則是對我們剛剛導入的數據進行獨熱編碼處理。得到一個獨熱編碼配置的輸出結果。
接下來,看看獨熱編碼處理后,將我們的數據分成了哪些類別。
ohe.categories_
得到結果如下圖。
可以發現,一共有三個array
,為什么呢?仔細看可以發現,獨熱編碼是將我們導入的三列數據全部都當作類別變量來處理了。之所以會這樣,是因為我們在一開始沒有表明哪一列是類別變量,需要進行獨熱編碼;而哪一列不是類別變量,從而不需要進行獨熱編碼。
那么,我們如何實現上述需求,告訴程序我們要對哪一行進行獨熱編碼呢?在老版本的sklearn
中,我們可以借助categorical_features=[x]
參數來實現這一功能,但是新版本sklearn
取消了這一參數。那么此時,一方面,我們可以借助ColumnTransformer
來實現這一過程,另一方面,我們可以直接對需要進行轉換的列加以處理。后者相對較為容易理解,因此本文對后者進行講解。
我們將test_data_1
中的'SoilType'
列作為索引,從而僅僅對該列數據加以獨熱編碼。
ohe_column=pd.DataFrame(ohe.fit_transform(test_data_1[['SoilType']]).toarray()) ohe_column.head(5)
其中,[['SoilType']]
表示僅僅對這一列進行處理。得到結果如下圖。
可以看到,原來的'SoilType'
列現在成為了63
列的編碼列,那么這樣的話,說明我們原先的'SoilType'
應該一共是有63
個不同的數值。是不是這個樣子呢?我們來檢查一下。
count=pd.DataFrame(test_data_1['SoilType'].value_counts()) print(count)
得到結果如下。
好的,沒有問題:可以看到此結果共有63
行,也就是'SoilType'
列原本是有63
個不同的值的,證明我們的獨熱編碼沒有出錯。
此時看一下我們的test_data_1
數據目前長什么樣子。
test_data_1.head(5)
是的,我們僅僅對'SoilType'
列做了處理,沒有影響到整個初始數據。那么先將原本的'SoilType'
列剔除掉。
test_data_1=test_data_1.drop(['SoilType'],axis=1) test_data_1.head(5)
再將經過獨熱編碼處理后的63
列加上。
test_data_1.join(ohe_column)
大功告成!
但是這里還有一個問題,我們經過獨熱編碼所得的列名稱是以數字來命名的,非常不方便。因此,有沒有什么辦法可以在獨熱編碼進行的同時,自動對新生成的列加以重命名呢?
pd.get_dummies
是一個最好的辦法!其具體用法與上述OneHotEncoder
類似,因此具體過程就不再贅述啦,大家看代碼就可以明白。
首先還是導入與上述內容中一致的初始數據。
test_data_2=pd.read_csv('G:/CropYield/03_DL/00_Data/onehot_test.csv',names=['EVI0610','EVI0626','SoilType'],header=0) test_data_2.head(5)
進行獨熱編碼并看看結果。
test_data_2_ohe=pd.get_dummies(test_data_2,columns=['SoilType']) test_data_2_ohe.head(5)
最終結果中,列名稱可以說是非常醒目,同時,共有65
列數據,自動刪除了原本的'SoilType'
列,實現了“獨熱編碼”“新列重命名”與“原始列刪除”,可謂一舉三得,簡直是太方便啦~
到此,關于“Python如何實現類別變量的獨熱編碼”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。