day 6 處理分類型數據

 

#  將文字型數據轉換爲數值型
import pandas as pd
from sklearn.impute import SimpleImputer

data = pd.read_csv('缺失預處理數據22222.csv', index_col=0)  # 把第0列作爲索引
data.loc[:, "Age"] = SimpleImputer(strategy="median").fit_transform(data.loc[:, "Age"].values.reshape(-1, 1))
data.dropna(axis=0, inplace=True)

# todo 1: 標籤專用
#  preprocessing.LabelEncoder:,能夠將分類轉換爲分類數值
y = data.iloc[:, -1]  # 要輸入的是標籤,不是特徵矩陣,所以允許一維
from sklearn.preprocessing import LabelEncoder

# le = LabelEncoder()  # 實例化
# le = le.fit(y)  # 導入數據
# label = le.transform(y)  # transform接口調取結果
# # print(le.classes_)  # 屬性.classes_查看標籤中究竟有多少類別
# # print(label)  # 查看獲取的結果label
# # le.fit_transform(y)  # 也可以直接fit_transform一步到位
# # le.inverse_transform(label)  # 使用inverse_transform可以逆轉
# data.iloc[:,-1]=label
# # print(data.head())
# todo:::::::::::也可以直接簡寫
data.iloc[:, -1] = LabelEncoder().fit_transform(data.iloc[:, -1])

# todo 2:特徵專用
#  preprocessing.OrdinalEncoder:,能夠將分類特徵轉換爲分類數值
from sklearn.preprocessing import OrdinalEncoder

# 接口categories_對應LabelEncoder的接口classes_,一模一樣的功能
# data_ = data.copy()
# data_.head()
# # categories_  = 上面的le.classes_ 查看有多少分類
# # print(OrdinalEncoder().fit(data_.iloc[:,1:-1]).categories_)
# data_.iloc[:, 1:-1] = OrdinalEncoder().fit_transform(data_.iloc[:, 1:-1])
# print(data_.head())

# todo 3: 獨熱編碼
#  preprocessing.OneHotEncoder:獨熱編碼,創建啞變量
from sklearn.preprocessing import OneHotEncoder

X = data.iloc[:, 1:-1]
enc = OneHotEncoder(categories='auto').fit(X)
result = enc.transform(X).toarray()  # .toarray()  將結果轉化爲數組
# print(result)
#依然可以直接一步到位,但爲了給大家展示模型屬性,所以還是寫成了上面三步
# OneHotEncoder(categories='auto').fit_transform(X).toarray()
# 還原
# enc.inverse_transform(result)
# print(pd.DataFrame(enc.inverse_transform(result)))
#################### todo:enc.get_feature_names()
####################  查看每個啞變量的對應哪一個特徵的類名
# print(enc.get_feature_names())
# 因爲生成的啞變量特徵矩陣暫時還沒和原本data結合,所以最好直接加上這列
#axis=1,表示跨行進行合併,也就是將量表左右相連,如果是axis=0,就是將量表上下相連
newdata = pd.concat([data,pd.DataFrame(result)],axis=1)
# print(newdata.head())
# 因爲添加了性別和艙門的啞變量,原來的sex 和embarked 就不要了
newdata.drop(["Sex","Embarked"],axis=1,inplace=True)
newdata.columns =["Age","Survived","Female","Male","Embarked_C","Embarked_Q","Embarked_S"]
print(newdata.head())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章