<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在資料處理與分析領域,對數值型與字元型類別變數加以編碼是不可或缺的預處理操作;這裡介紹兩種不同的方法。
首先匯入必要的模組。
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實現類別變數的獨熱編碼的文章就介紹到這了,更多相關Python獨熱編碼內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45