任務二 Titanic 特徵工程

2021-09-09 06:23:47 字數 3330 閱讀 9844

任務二:特徵工程

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())

特徵選擇

#相關性矩陣,檢視各個特徵與生成情況(survived)的相關係數,ascending=false表示按降序排列

corrdf = integdf.corr()

corrdf['survived'].sort_values(ascending =false)

print(corrdf['survived'].sort_values(ascending =false))

輸出結果:根據各個特徵與生成情況(survived)的相關係數大小,我們選擇了這幾個特徵作為模型的輸入:

頭銜(前面所在的資料集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 線...