標籤:

大部分機器學習數據分析第一個kaggle項目

GitHub代碼地址:

coolcumt/monkey_analysis?

github.com圖標

代碼中比較重要的內容和新知

1、機器學習的步驟

# 忽略警告提示import warningswarnings.filterwarnings(ignore)

2、理解數據欄位含義

最重要耗時的2個步驟

3.數據清洗(Data Preparation )

3.1 數據預處理

缺失值處理

在前面,理解數據階段,我們發現數據總共有1309行。 其中數據類型列:年齡(Age)、船艙號(Cabin)裡面有缺失數據。 字元串列:登船港口(Embarked)、船艙號(Cabin)裡面有缺失數據。

這為我們下一步數據清洗指明了方向,只有知道哪些數據缺失數據,我們才能有針對性的處理。

很多機器學習演算法為了訓練模型,要求所傳入的特徵中不能有空值。

  1. 如果是數值類型,用平均值取代
  2. 如果是分類數據,用最常見的類別取代
  3. 使用模型預測缺失值,例如:K-NN

我們發現數據總共有1309行。

其中數據類型列:年齡(Age)、船艙號(Cabin)裡面有缺失數據:

1)年齡(Age)裡面數據總數是1046條,缺失了1309-1046=263,缺失率263/1309=20%

2)船票價格(Fare)裡面數據總數是1308條,缺失了1條數據

對於數值類型,處理缺失值最簡單的方法就是用平均數來填充缺失值

print(處理前:)full.info()#年齡(Age)full[Age]=full[Age].fillna( full[Age].mean() )#船票價格(Fare)full[Fare] = full[Fare].fillna( full[Fare].mean() )print(處理紅後:)full.info()

數值統計

full[Embarked].value_counts()

缺失值較多的字元串列填充

#缺失數據比較多,船艙號(Cabin)缺失值填充為U,表示未知(Uknow) full[Cabin] = full[Cabin].fillna( U )

3.2 特徵提取

3.2.1數據分類

查看數據類型,分為3種數據類型。並對類別數據處理:用數值代替類別,並進行One-hot編碼

1.數值類型:

乘客編號(PassengerId),年齡(Age),船票價格(Fare),同代直系親屬人數(SibSp),不同代直系親屬人數(Parch)

2.時間序列:無

3.分類數據:

1)有直接類別的

乘客性別(Sex):男性male,女性female

登船港口(Embarked):出發地點S=英國南安普頓Southampton,途徑地點1:C=法國 瑟堡市Cherbourg,出發地點2:Q=愛爾蘭 昆士敦Queenstown

客艙等級(Pclass):1=1等艙,2=2等艙,3=3等艙

2)字元串類型:可能從這裡面提取出特徵來,也歸到分類數據中

乘客姓名(Name)

客艙號(Cabin)

船票編號(Ticket)

map數據替換

3.2.1 分類數據:有直接類別的

  1. 乘客性別(Sex): 男性male,女性female
  2. 登船港口(Embarked):出發地點S=英國南安普頓Southampton,途徑地點1:C=法國 瑟堡市Cherbourg,出發地點2:Q=愛爾蘭 昆士敦Queenstown
  3. 客艙等級(Pclass):1=1等艙,2=2等艙,3=3等艙

性別

將性別的值映射為數值男(male)對應數值1,女(female)對應數值0sex_mapDict={male:1,female:0}#map函數:對Series每個數據應用自定義的函數計算full[Sex]=full[Sex].map(sex_mapDict)

用get_dummies進行one-hot編碼

使用get_dummies進行one-hot編碼,產生虛擬變數(dummy variables),列名前綴是EmbarkedembarkedDf = pd.get_dummies( full[Embarked] , prefix=Embarked )

3.2.1 分類數據:字元串類型

字元串類型:可能從這裡面提取出特徵來,也歸到分類數據中,這裡數據有:

  1. 乘客姓名(Name)
  2. 客艙號(Cabin)
  3. 船票編號(Ticket)

從姓名中提取頭銜

查看姓名這一列長啥樣

注意到在乘客名字(Name)中,有一個非常顯著的特點:

乘客頭銜每個名字當中都包含了具體的稱謂或者說是頭銜,將這部分信息提取出來後可以作為非常有用一個新變數,可以幫助我們進行預測。

例如:

Braund, Mr. Owen Harris

Heikkinen, Miss. Laina

Oliva y Ocana, Dona. Fermina

Peter, Master. Michael J

定義函數:從姓名中獲取頭銜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] = full[Name].map(getTitle)

定義以下幾種頭銜類別:Officer政府官員Royalty王室(皇室)Mr已婚男士Mrs已婚婦女Miss年輕未婚女子Master有技能的人/教師#姓名中頭銜字元串與定義頭銜類別的映射關係title_mapDict = {"Capt": "Officer","Col": "Officer","Major": "Officer","Jonkheer": "Royalty","Don": "Royalty","Sir" : "Royalty","Dr": "Officer","Rev": "Officer","the Countess":"Royalty","Dona": "Royalty","Mme": "Mrs","Mlle": "Miss","Ms": "Mrs","Mr" : "Mr","Mrs" : "Mrs","Miss" : "Miss","Master" : "Master","Lady" : "Royalty" }#map函數:對Series每個數據應用自定義的函數計算titleDf[Title] = titleDf[Title].map(title_mapDict)#使用get_dummies進行one-hot編碼titleDf = pd.get_dummies(titleDf[Title])

3.3 特徵選擇

可以學習後面的課程後,再了解特徵選擇的方法。但是如果你已經具備了多種機器學習演算法的知識,想提前學習,可以參考這些資料:

  • 如何做特徵工程?
  • 如何使用sklearn進行特徵工程?
  • 泰坦尼克號如何進行特徵選擇?

相關係數法:計算各個特徵的相關係數

#相關性矩陣

corrDf = full.corr()

降序排列

查看各個特徵與生成情況(Survived)的相關係數,ascending=False表示按降序排列corrDf[Survived].sort_values(ascending =False)

使用Pandas對數據進行篩選和排序?

bluewhale.cc圖標

4、最後再梳理一遍流程


推薦閱讀:

用Python進行基礎的數據分析
恭喜你!成功由遊樂場模式升級為荒野求生模式
NBA選秀十年記【2】—尋找相似的新秀
SQL查詢實例
武漢兩日游線路推薦

TAG:數據分析 |