任務二:特徵工程
4.資料型別轉換
#性別轉化為0,1
***_map=
integdf['***'] = integdf['***'].map(***_map)
integdf['***'].head()
#embarked使用get_dummies進行one-hot編碼,存放登船港口資訊
embarkeddf = pd.dataframe()
embarkeddf = pd.get_dummies( integdf['embarked'] , prefix='embarked' )
#pclass使用get_dummies進行one-hot編碼,存放客艙等級資訊
pclassdf = pd.dataframe()
pclassdf = pd.get_dummies( integdf['pclass'] , prefix='pclass' )
#cabin使用get_dummies進行one-hot編碼,存放客艙號資訊
cabindf = pd.dataframe()
integdf[ 'cabin' ] = integdf[ 'cabin' ].map( lambda c : c[0] ) #取首字母
cabindf = pd.get_dummies( integdf['cabin'] , prefix = 'cabin' )
轉化結果:
輸出前5行,男性、女性分別轉化為1,0。
輸出前5行,embarked中c、q、s分別轉化為特徵向量[1,0,0],[0,1,0],[0,0,1]。
輸出前5行,pclass等級1,2,3分別轉化為特徵向量[1,0,0],[0,1,0],[0,0,1]。
輸出前5行,cabin分為a,b,c,d,e,f,g,t,u
字串型別-乘客姓名(name)
注意到在乘客名字(name)中,有乙個非常顯著的特點:
乘客頭銜每個名字當中都包含了具體的稱謂或者說是頭銜,將這部分資訊提取出來後可以作為非常有用乙個新變數,可以幫助我們進行**。
#從姓名中獲取頭銜
def gettitle(name):
str1=name.split( ',' )[1] #mr. owen harris
str2=str1.split( '.' )[0]#mr
#strip() 方法用於移除字串頭尾指定的字元(預設為空格)
str3=str2.strip()
return str3
#存放提取後的特徵
titledf = pd.dataframe()
#map函式:對series每個資料應用自定義的函式計算
titledf['title'] = integdf['name'].map(gettitle)
print(titledf.head())
#姓名中頭銜字串與定義頭銜類別的對映關係
title_mapdict =
#map函式:對series每個資料應用自定義的函式計算
titledf['title'] = titledf['title'].map(title_mapdict)
#使用get_dummies進行one-hot編碼
titledf = pd.get_dummies(titledf['title'])
輸出前5行,提取名字結果
輸出前5行,
建立家庭人數和家庭類別
家庭人數=同代直系親屬數(parch)+不同代直系親屬數(sibsp)+乘客自己
(因為乘客自己也是家庭成員的乙個,所以這裡加1)
家庭類別:
小家庭family_single:家庭人數=1
中等家庭family_small: 2<=家庭人數<=4
大家庭family_large: 家庭人數》=5
#存放家庭資訊
familydf = pd.dataframe()
familydf[ 'familysize' ] = integdf[ 'parch' ] + integdf[ 'sibsp' ] + 1
#if 條件為真的時候返回if前面內容,否則返回0
familydf[ 'family_single' ] = familydf[ 'familysize' ].map( lambda s : 1 if s == 1 else 0 )
familydf[ 'family_small' ] = familydf[ 'familysize' ].map( lambda s : 1 if 2 <= s <= 4 else 0 )
familydf[ 'family_large' ] = familydf[ 'familysize' ].map( lambda s : 1 if 5 <= s else 0 )
familydf.head()
輸出前5行
新增one-hot編碼產生的虛擬變數(dummy variables)到鐵達尼號資料集,並刪除對應的原始列。
integdf = pd.concat([integdf,embarkeddf,pclassdf,cabindf,titledf,familydf],axis=1)
integdf.drop(['embarked','pclass','cabin','name'],axis=1,inplace=true)
print(integdf.head())
5 特徵選擇
#相關性矩陣,檢視各個特徵與生成情況(survived)的相關係數,ascending=false表示按降序排列
corrdf = integdf.corr()
corrdf['survived'].sort_values(ascending =false)
print(corrdf['survived'].sort_values(ascending =false))
頭銜(前面所在的資料集titledf)、客艙等級(pclassdf)、家庭大小(familydf)、船票**(fare)、船艙號(cabindf)、登船港口(embarkeddf)、性別(***)
integdf_x = pd.concat( [titledf,#頭銜
pclassdf,#客艙等級
familydf,#家庭大小
integdf['fare'],#船票**
cabindf,#船艙號
embarkeddf,#登船港口
integdf['***']#性別
] , axis=1 )
輸出csv格式資料
integdf_x.to_csv('e:/jenny/data/tt/integdf_x.csv',index=true,header=true)
參考資料: 任務二 Titanic 特徵工程
任務二 特徵工程 4.資料型別轉換 性別轉化為0,1 map integdf integdf map map integdf head embarked使用get dummies進行one hot編碼,存放登船港口資訊 embarkeddf pd.dataframe embarkeddf pd.ge...
特徵工程(1) 特徵工程是什麼?
特徵是資料中抽取出來的對結果 有用的資訊,可以是文字或者資料。特徵工程是使用專業背景知識和技巧處理資料,使得特徵能在機器學習演算法上發揮更好的作用的過程。過程包含了特徵提取 特徵構建 特徵選擇等模組。特徵工程的目的是篩選出更好的特徵,獲取更好的訓練資料。因為好的特徵具有更強的靈活性,可以用簡單的模型...
特徵工程總結(二) 預處理
一 單個特徵 1.資料標準化 資料歸一化處理是資料探勘的一項基礎工作,不同評價指標往往有不同的量綱和量綱單位,這種情況會影響到資料分析的結果,為了消除指標之間的量綱影響,需要進行資料標準化處理,以解決資料指標之間的可比性.原始資料經過資料標準化後,各指標處於同一數量級下,適合進行綜合對比評價。1 線...