欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用python對(duì)泰坦尼克號(hào)幸存者進(jìn)行數(shù)據(jù)分析與預(yù)測(cè)

 更新時(shí)間:2023年03月22日 14:28:21   作者:生魚同學(xué)  
這篇文章主要介紹了使用python對(duì)泰坦尼克號(hào)幸存者進(jìn)行數(shù)據(jù)分析與預(yù)測(cè),應(yīng)用機(jī)器學(xué)習(xí)的工具來預(yù)測(cè)哪些乘客在悲劇中幸存下來

??引言

泰坦尼克號(hào)的沉沒是歷史上最慘痛的沉船事件之一。

1912年4月15日,泰坦尼克號(hào)在其處女航中與冰山相撞后沉沒,2224名乘客和船員中的1502人死亡。

在這個(gè)數(shù)據(jù)分析項(xiàng)目中,我們需要完成對(duì)什么樣的人有可能幸存的分析。

特別是,我們需要你應(yīng)用機(jī)器學(xué)習(xí)的工具來預(yù)測(cè)哪些乘客在悲劇中幸存下來。

在本文中,我們就從數(shù)據(jù)的角度出發(fā)對(duì)泰坦尼克幸存者進(jìn)行分析與預(yù)測(cè),話不多說我們開始吧。

??數(shù)據(jù)獲取

本項(xiàng)目數(shù)據(jù)基于Kaggle中泰坦尼克數(shù)據(jù),需要的小伙伴可以自行登錄Kaggle中進(jìn)行下載,或者私信我索要鏈接。

kaggle的鏈接如下:

KAGGLE競賽鏈接

當(dāng)我們成功注冊(cè)賬號(hào)后,可以在競賽鏈接中找到泰坦尼克沉船存活的競賽鏈接,如下圖所示:

在這里插入圖片描述

進(jìn)入競賽頁面后,可以看到關(guān)于競賽的簡單介紹以及其他人的代碼等內(nèi)容,在這里我們點(diǎn)擊Data。

在這里插入圖片描述

注意下面的數(shù)據(jù)介紹,這里的數(shù)據(jù)介紹將會(huì)幫助我們了解數(shù)據(jù)的基本情況以及其代表的內(nèi)容。

在這里插入圖片描述

我們獲取到數(shù)據(jù)之后,打開編譯環(huán)境準(zhǔn)備開始進(jìn)行數(shù)據(jù)分析,在本文中我使用的是jupyter進(jìn)行數(shù)據(jù)分析,當(dāng)然可以選擇自己習(xí)慣的編譯環(huán)境進(jìn)行后續(xù)的工作。

拿到數(shù)據(jù)之后,我們首先編寫代碼將其讀取進(jìn)編譯環(huán)境中,代碼如下:

# 導(dǎo)入pandas
import pandas as pd
# 將訓(xùn)練集數(shù)據(jù)導(dǎo)入
data = pd.read_csv('train.csv')

導(dǎo)入數(shù)據(jù)后的結(jié)果如下:

在這里插入圖片描述

??數(shù)據(jù)初步觀察與處理

??數(shù)據(jù)觀察

??數(shù)據(jù)清理4C原則

在我們拿到數(shù)據(jù)后,我們需要對(duì)數(shù)據(jù)進(jìn)行初步的觀察以及數(shù)據(jù)清洗。這里介紹Kaggle大佬提出的數(shù)據(jù)清理4C原則,其分別是:

Correcting(糾正):顧名思義,糾正數(shù)據(jù)就是對(duì)數(shù)據(jù)進(jìn)行異常值的處理。例如年齡如果存在100+的數(shù)據(jù),那么這一定是不正常的值。我們將對(duì)不同的數(shù)據(jù)進(jìn)行異常值的檢查以確保其是正常有效的。但是,當(dāng)我們從原始的數(shù)據(jù)中修改數(shù)據(jù)的時(shí)候一定要謹(jǐn)慎行事,因?yàn)榻⒁粋€(gè)準(zhǔn)確的模型的基石就是數(shù)據(jù),數(shù)據(jù)決定了模型的好壞

Completing(補(bǔ)充):補(bǔ)充缺失值以及被我們所發(fā)現(xiàn)的異常值是必須的。雖然在某些模型中,可以自動(dòng)的幫助我們處理缺失值兒不需要處理(例如決策樹)。在這部分中,我們通常會(huì)選擇缺失占比小的缺失值進(jìn)行刪除,兒占比較大或者占比非常大的缺失值,我們會(huì)考慮在原有的數(shù)據(jù)中探尋某種規(guī)律將其進(jìn)行填充。

Creating(創(chuàng)建):特征工程中需要我們對(duì)原有的特征進(jìn)行理解并決定是否提取新的特征。例如,在本題中我們可以考慮對(duì)年齡進(jìn)行分段作為一個(gè)新的特征考慮在內(nèi)。當(dāng)然這里的前提是,我們對(duì)問題有一個(gè)深刻的了解,探尋我們提取的特征是否真的能夠?qū)ψ詈蟮哪P蜆?gòu)建有幫助。這就需要我們反復(fù)驗(yàn)證,思考進(jìn)行提取特征,找尋到真正對(duì)不同問題有幫助的特征。

Converting(轉(zhuǎn)換):在針對(duì)某些特定的數(shù)據(jù)格式的時(shí)候,可能還需要我們進(jìn)行數(shù)據(jù)轉(zhuǎn)換。這當(dāng)然是非常重要的,例如某些字符串類型的數(shù)據(jù),需要我們轉(zhuǎn)換為數(shù)值的形式來表示。

在這一步中,我們將調(diào)用pandas中的基本函數(shù)對(duì)數(shù)據(jù)進(jìn)行初步的觀察。我們首先調(diào)用info()查看數(shù)據(jù)的類型以及基本情況,代碼如下:

data.info()

結(jié)果如下:

在這里插入圖片描述

當(dāng)我們調(diào)用該函數(shù)后,可以看到所有數(shù)據(jù)的類型以及基本情況。

這里需要注意我標(biāo)注的數(shù)據(jù),我們發(fā)現(xiàn)Age數(shù)據(jù)與其它數(shù)據(jù)相比數(shù)量少了很多,也就是我們說的缺失值。與此同時(shí),可以看到Cabin以及Embarked也存在缺失的情況。

這些都需要我們關(guān)注,并在后續(xù)進(jìn)行一些處理。

隨后,我們調(diào)用describe()函數(shù)進(jìn)一步觀察數(shù)據(jù)的分布情況,該函數(shù)可以幫助我們計(jì)算每列數(shù)據(jù)的分布以及平均值等內(nèi)容。代碼如下:

data.describe()

結(jié)果如下:

在這里插入圖片描述

這里我們發(fā)現(xiàn)Parch數(shù)據(jù)的75%都是0,存在明顯的分布不均勻的情況,后續(xù)可能需要處理。

??缺失值處理(Completing)

在上節(jié)中,我們發(fā)現(xiàn)數(shù)據(jù)存在一定的缺失情況,我們首先對(duì)其進(jìn)行可視化,這能夠使得我們對(duì)數(shù)據(jù)的觀察更直觀。

在這里我們用到了missingno庫進(jìn)行缺失數(shù)據(jù)的可視化,其對(duì)缺失數(shù)據(jù)的可視化更加直觀。

使用之前,請(qǐng)確保自己已經(jīng)安裝該庫。

使用該庫進(jìn)行可視化的代碼如下:

# 在數(shù)據(jù)中抽樣100個(gè)單位
data_sample = data.sample(100)
msno.matrix(data_sample)

結(jié)果如下:

在這里插入圖片描述

可以發(fā)現(xiàn),Cabin的缺失值較為明顯,Age也存在一些缺失值。

因?yàn)閿?shù)據(jù)中每列代表的情況不盡相同,所以我們將針對(duì)數(shù)據(jù)進(jìn)行不同的處理方法。

我們?cè)偻ㄟ^代碼來觀察一下缺失的數(shù)據(jù)情況,代碼與結(jié)果如下:

missing_data = data.isnull().sum()
missing_data = missing_data [missing_data >0]
missing_data 

在這里插入圖片描述

??Embarked的處理

我們首先處理Embarked列,在上邊的數(shù)據(jù)觀察中發(fā)現(xiàn)其擁有兩個(gè)缺失值,因?yàn)橄鄬?duì)于全部的一千條數(shù)據(jù)來說其量級(jí)較小,所以我們?cè)谶@里直接選擇該列缺失的兩條數(shù)據(jù)進(jìn)行刪除處理,代碼如下:

# 在data中尋找Embarked的缺失值 找到后在原表中將其行刪除
data.dropna(axis=0, how='any',subset=['Embarked'], inplace=True)

dropna 參數(shù)介紹

  • axis: default 0指行,1為列
  • how: {‘any’, ‘all’}, default ‘any’指帶缺失值的所有行;'all’指清除全是缺失值的
  • thresh: int,保留含有int個(gè)非空值的行
  • subset: 對(duì)特定的列進(jìn)行缺失值刪除處理
  • inplace: 這個(gè)很常見,True表示直接在原數(shù)據(jù)上更改

??Age的處理

在上述觀察中,我們發(fā)現(xiàn)Age存在一定的缺失情況,接下來我們對(duì)其進(jìn)行處理。

我們由Kaggle中的數(shù)據(jù)介紹中了解到,其表示乘客的年齡,且缺失值相對(duì)來說較多,不能夠直接采用刪除的方式。

我們首先觀察Age的分布情況,繪制年齡的直方圖,代碼如下:

data.hist(column='Age')

結(jié)果如下:

在這里插入圖片描述

我們注意到,年齡的分布存在一定的偏態(tài),這時(shí)候更適合采用中位數(shù)進(jìn)行填充。

注意:偏態(tài)分布的大部分值都聚集在變量分布的一側(cè),中位數(shù)可以很好的表示中心趨勢(shì)。

所以,我們對(duì)年齡的缺失值進(jìn)行中位數(shù)的填充。代碼如下:

data['Age'].fillna(data['Age'].median(), inplace=True)

至此,我們對(duì)于年齡的缺失值處理完畢。

??Cabin的處理

我們首先看一下Cabin的數(shù)據(jù)解釋:Cabin number(機(jī)艙號(hào)碼)

對(duì)于該特征來說,仿佛對(duì)于最終的數(shù)據(jù)幫助不大。即使其對(duì)于最后的數(shù)據(jù)是非常重要的,由于其缺失值過多且不容易探尋其中的規(guī)律,我們還是選擇對(duì)其做刪除的處理。

代碼如下:

# 這里我直接刪除了該列
del data['Cabin']

至此,所有數(shù)據(jù)的缺失值處理完畢。

??異常值的檢測(cè)與處理(Correcting)

在本例中,我們能夠進(jìn)行檢測(cè)并處理的主要是Age特征,因?yàn)槲覀冾A(yù)先知道其大概的范圍。在這里我們繪制箱線圖觀察其數(shù)據(jù)的異常情況決定是否需要進(jìn)行處理,代碼如下:

data['Age'].plot.box()

結(jié)果如下:

在這里插入圖片描述

在這里,我們可以看到該數(shù)據(jù)的最高點(diǎn)在80,符合我們對(duì)于數(shù)據(jù)的預(yù)先認(rèn)知,遂不進(jìn)行處理。

??特征構(gòu)建(Create)

在這部分中,要求我們對(duì)不同的特征有一定的了解以及認(rèn)識(shí),在這里我列出所有的特征含義。

特征名稱含義
survival是否存活,1表示存活,0表示沒有
pclass表示票的種類,分別為1,2,3等
sex性別
Age年齡
sibsp在泰坦尼克號(hào)上的兄弟姐妹/配偶的數(shù)量
parch在泰坦尼克號(hào)上的父母/子女人數(shù)
ticket票號(hào)
fare乘客票價(jià)
cabin機(jī)艙號(hào)
embarked上岸港口 ,C = Cherbourg, Q = Queenstown, S = Southampton

在這里,我們提取兩個(gè)特征,分別是乘客家庭規(guī)模,是否獨(dú)自一人,并對(duì)票價(jià)以及年齡進(jìn)行分段構(gòu)造兩個(gè)新的特征。

注意:針對(duì)不同的項(xiàng)目采取的特征提取工作并不相同,因?yàn)檫@需要根據(jù)具體的業(yè)務(wù)進(jìn)行分析并提取。

我們首先針對(duì)家庭規(guī)模以及是否獨(dú)自一人創(chuàng)建新的兩個(gè)特征,代碼如下:

data['FamilySize'] = data['SibSp'] + data['Parch'] + 1

data['IsAlone'] = 1 
data['IsAlone'].loc[data['FamilySize'] > 1] = 0

然后,我們對(duì)年齡和票價(jià)進(jìn)行分段,代碼如下:

data['FareBin'] = pd.qcut(data['Fare'], 4)
data['AgeBin'] = pd.cut(data['Age'].astype(int), 5)

這里簡單介紹一下上述兩個(gè)函數(shù)的區(qū)別與作用
qcut:根據(jù)傳入的數(shù)值進(jìn)行等頻分箱,即每個(gè)箱子中含有的數(shù)的數(shù)量是相同的。
cut:根據(jù)傳入的數(shù)值進(jìn)行等距離分箱,即每個(gè)箱子的間距都是相同的。

特別的,在本節(jié)中特征工程的過程要根據(jù)實(shí)際業(yè)務(wù)進(jìn)行不同的特征提取,這個(gè)過程需要我們對(duì)業(yè)務(wù)有足夠的理解程度。幾個(gè)好的特征對(duì)后續(xù)的模型精確程度有很大的積極影響。

??數(shù)據(jù)格式轉(zhuǎn)換(Convert)

某些特定的格式在很多模型中其實(shí)是不適用的,在本例中經(jīng)過上述處理后的數(shù)據(jù)如下所示:

在這里插入圖片描述

圖中的性別等內(nèi)容都為字符類型,這顯然在模型中存在一定的不兼容情況,這就需要我們進(jìn)行一定程度的格式轉(zhuǎn)換。

在本部分中,我們要處理的有以下幾個(gè)部分:

PassengerId:用戶id的部分對(duì)后面的預(yù)測(cè)仿佛用處不大,我們對(duì)其進(jìn)行刪除。

Name:這里的名字中有MR.MISS等信息,這可能對(duì)后續(xù)的模型有幫助,我們對(duì)其進(jìn)行處理保留。

Sex:需要進(jìn)行編碼使用,因?yàn)樗亲址愋汀?/p>

Ticket:仿佛用處不大,這里我們選擇刪除。

Embarked:需要進(jìn)行編碼使用,因?yàn)樗亲址愋汀?/p>

FareBin:需要進(jìn)行編碼使用,因?yàn)樗且粋€(gè)范圍。

AgeBin:需要進(jìn)行編碼使用,因?yàn)樗且粋€(gè)范圍。

我們首先對(duì)需要?jiǎng)h除的兩列進(jìn)行刪除的操作,代碼如下:

del data['PassengerId']
del data['Ticket']

然后我們對(duì)Name進(jìn)行處理,將其中的身份信息提取出來,代碼如下:

data['Title'] = data['Name'].str.split(", ", expand=True)[1].str.split(".", expand=True)[0]

結(jié)果如下:

在這里插入圖片描述

最后,我們對(duì)需要編碼的數(shù)據(jù)進(jìn)行編碼:

from sklearn.preprocessing import OneHotEncoder, LabelEncoder
label = LabelEncoder()

data['Sex_Code'] = label.fit_transform(data['Sex'])
data['Embarked_Code'] = label.fit_transform(data['Embarked'])
data['Title_Code'] = label.fit_transform(data['Title'])
data['AgeBin_Code'] = label.fit_transform(data['AgeBin'])
data['FareBin_Code'] = label.fit_transform(data['FareBin'])

編碼后的結(jié)果如下:

在這里插入圖片描述

至此,數(shù)據(jù)格式轉(zhuǎn)換已經(jīng)完畢。

??模型構(gòu)建與評(píng)價(jià)

在本節(jié)中,我們將基于上述數(shù)據(jù)進(jìn)行模型的構(gòu)建,并且通過不同的評(píng)價(jià)指標(biāo)進(jìn)行構(gòu)建。

??模型構(gòu)建

在這里我將會(huì)使用基礎(chǔ)的分類模型進(jìn)行模型的構(gòu)建,并挑選出初步表現(xiàn)最好的模型進(jìn)行參數(shù)調(diào)節(jié)。代碼如下:

# 處理不需要的數(shù)據(jù)列
data_x = data.copy()
del data_x['Survived']
del data_x['Name']
del data_x['Sex']
del data_x['FareBin']
del data_x['AgeBin']
del data_x['Title']
del data_x['Embarked']
# 構(gòu)建y
data_y = data['Survived']
# 導(dǎo)入包
from sklearn import svm, tree, linear_model, neighbors, naive_bayes, ensemble, discriminant_analysis, gaussian_process
from sklearn.model_selection import cross_val_score
# 定義常用的幾種分類模型
MLA = {
    #隨機(jī)森林
    '隨機(jī)森林':ensemble.RandomForestClassifier(),
    #邏輯回歸
    '邏輯回歸':linear_model.LogisticRegressionCV(max_iter=3000),
    #SVM
    'SVM':svm.SVC(probability=True),
    #樹模型
    '樹模型':tree.DecisionTreeClassifier(),
    }
# 進(jìn)行5折交叉驗(yàn)證并選擇f1作為評(píng)價(jià)指標(biāo)
for model_name in MLA:
    scores = cross_val_score(MLA[model_name], X=data_x, y=data_y, verbose=0, cv = 5, scoring='f1')
    print(f'{model_name}:',scores.mean())

結(jié)果如下:

在這里插入圖片描述

我們可以看到,目前隨機(jī)森林的效果最好,所以我們選擇隨機(jī)森林進(jìn)行參數(shù)調(diào)節(jié)。

??參數(shù)調(diào)節(jié)

在這里我們選擇使用網(wǎng)格調(diào)參的方式進(jìn)行參數(shù)調(diào)節(jié),代碼如下:

from sklearn.model_selection import GridSearchCV

n_estimators = [3,5,10,15,20,40, 55]
max_depth = [10,100,1000]

parameters = { 'n_estimators': n_estimators, 'max_depth': max_depth}

model = ensemble.RandomForestClassifier()
clf = GridSearchCV(model, parameters, cv=5)
clf = clf.fit(data_x, data_y)
clf.best_estimator_

結(jié)果如下:

在這里插入圖片描述

在這里,我們選擇了幾個(gè)簡單的參數(shù)進(jìn)行調(diào)節(jié),可以根據(jù)自己的實(shí)際情況對(duì)不同的參數(shù)進(jìn)行調(diào)節(jié)。我們?cè)龠M(jìn)行一次交叉驗(yàn)證求平均值看一下效果,結(jié)果如下:

在這里插入圖片描述

可以看到與剛才的效果相比有一些提升。

??總結(jié)

至此,我們的基于python對(duì)泰坦尼克幸存者進(jìn)行分析與預(yù)測(cè)已經(jīng)完全結(jié)束。

當(dāng)然,這只是對(duì)整個(gè)數(shù)據(jù)分析的過程的簡單介紹,大家可以根據(jù)實(shí)際的情況進(jìn)行不同程度的更改。

在數(shù)據(jù)分析的過程中還需要進(jìn)行可視化等不同的內(nèi)容,大家可以根據(jù)自己的需要進(jìn)行編碼或分析。

最后,驗(yàn)證集的數(shù)據(jù)清洗以及處理的相關(guān)工作大同小異,感興趣的朋友們可以自己按照上述步驟進(jìn)行操作,或在評(píng)論區(qū)與我討論。

到此這篇關(guān)于使用python對(duì)泰坦尼克號(hào)幸存者進(jìn)行數(shù)據(jù)分析與預(yù)測(cè)的文章就介紹到這了,更多相關(guān)python數(shù)據(jù)分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 利用jinja2模板生成html代碼實(shí)例

    python 利用jinja2模板生成html代碼實(shí)例

    這篇文章主要介紹了python 利用jinja2模板生成html代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python列表list的詳細(xì)用法介紹

    Python列表list的詳細(xì)用法介紹

    這篇文章主要介紹了Python列表list的詳細(xì)用法介紹,列表(list)作為Python中基本的數(shù)據(jù)結(jié)構(gòu),是存儲(chǔ)數(shù)據(jù)的容器,相當(dāng)于其它語言中所說的數(shù)組
    2022-07-07
  • Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享

    Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享

    Bokeh是Python中的數(shù)據(jù)可視化庫,提供高性能的交互式圖表和繪圖。本文將利用Bokeh繪制一些可視化圖表,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08
  • Keras 多次加載model出錯(cuò)的解決方案

    Keras 多次加載model出錯(cuò)的解決方案

    這篇文章主要介紹了Keras 多次加載model出錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python實(shí)現(xiàn)遞歸查找某個(gè)路徑下所有文件中的中文字符

    python實(shí)現(xiàn)遞歸查找某個(gè)路徑下所有文件中的中文字符

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)遞歸查找某個(gè)路徑下所有文件中的中文字符,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • python tkinter的消息框模塊(messagebox,simpledialog)

    python tkinter的消息框模塊(messagebox,simpledialog)

    這篇文章主要介紹了python tkinter的消息框模塊,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • django 控制頁面跳轉(zhuǎn)的例子

    django 控制頁面跳轉(zhuǎn)的例子

    今天小編就為大家分享一篇django 控制頁面跳轉(zhuǎn)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Pandas之缺失數(shù)據(jù)的實(shí)現(xiàn)

    Pandas之缺失數(shù)據(jù)的實(shí)現(xiàn)

    這篇文章主要介紹了Pandas之缺失數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(四)模型優(yōu)化與部署

    YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(四)模型優(yōu)化與部署

    這篇文章主要介紹了YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(四)模型優(yōu)化與部署,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下
    2023-04-04
  • Python編程中裝飾器的使用示例解析

    Python編程中裝飾器的使用示例解析

    這篇文章主要介紹了Python編程中裝飾器的使用示例解析,包括裝飾函數(shù)和方法,含參的裝飾器以及裝飾類這三個(gè)方面,需要的朋友可以參考下
    2016-06-06

最新評(píng)論