數(shù)據(jù)清理和準(zhǔn)備是任何機(jī)器學(xué)習(xí)項(xiàng)目中至關(guān)重要的第一步。盡管我們經(jīng)常認(rèn)為數(shù)據(jù)科學(xué)家花費(fèi)大量時間來修改算法和機(jī)器學(xué)習(xí)模型,但現(xiàn)實(shí)情況是大多數(shù)數(shù)據(jù)科學(xué)家花費(fèi)大量時間來清理數(shù)據(jù)。
在大數(shù)據(jù)分析機(jī)器學(xué)習(xí)的數(shù)據(jù)清理和準(zhǔn)備中,我們將逐步介紹使用Python進(jìn)行數(shù)據(jù)清理,檢查數(shù)據(jù)集,選擇特征列,以可視方式探索數(shù)據(jù)然后進(jìn)行編碼的過程機(jī)器學(xué)習(xí)的功能。
要了解有關(guān)數(shù)據(jù)清理的更多信息,請查看我們的交互式數(shù)據(jù)清理課程之一:
1、數(shù)據(jù)清理和分析課程(Python)
2、高級數(shù)據(jù)清理課程(Python)
3、數(shù)據(jù)清理(R)
了解數(shù)據(jù)
在我們開始為機(jī)器學(xué)習(xí)項(xiàng)目清理數(shù)據(jù)之前,至關(guān)重要的是要了解數(shù)據(jù)是什么,以及我們想要實(shí)現(xiàn)什么。沒有這種了解,我們就沒有依據(jù)來決定在清理和準(zhǔn)備數(shù)據(jù)時要確定哪些數(shù)據(jù)是相關(guān)的。
我們將使用個人貸款的一些數(shù)據(jù),個人貸款是一個個人貸款市場,它將正在尋求貸款的借款人與希望借錢并獲得回報的投資者進(jìn)行匹配。每個借款人都填寫一份全面的申請表,提供他們過去的財務(wù)記錄,貸款原因等。個人貸款使用過去的歷史數(shù)據(jù)(以及他們自己的數(shù)據(jù)科學(xué)過程!)來評估每個借款人的信用評分,并為借款人分配一個利率。
批準(zhǔn)的貸款在個人貸款網(wǎng)站上列出,合格的投資者可以在其中瀏覽最近批準(zhǔn)的貸款,借款人的信用評分,貸款目的以及應(yīng)用程序中的其他信息。
一旦投資者決定為貸款提供資金,借款人便每月向個人貸款償還款項(xiàng)。個人貸款將這些付款重新分配給投資者。這意味著投資者不必等到全額還清就可以開始看到回報。如果按時還清了貸款,則投資者將獲得與借款人除要求的金額外還需支付的利率相對應(yīng)的回報。
但是,許多貸款沒有按時還清,有些借款人拖欠貸款。這就是我們在清理個人貸款的一些數(shù)據(jù)進(jìn)行機(jī)器學(xué)習(xí)時將嘗試解決的問題。讓我們想象一下,我們的任務(wù)是建立一個模型來預(yù)測借款人是否可能償還或拖欠其貸款。
步驟1:檢查數(shù)據(jù)集
個人貸款會在其網(wǎng)站上定期發(fā)布其所有已批準(zhǔn)和已拒絕貸款申請的數(shù)據(jù)。為了確保我們都使用相同的數(shù)據(jù)集,我們已經(jīng)在data.world上鏡像了將用于本教程的數(shù)據(jù)。
在個人貸款類的網(wǎng)站上,您可以選擇不同的年份范圍來下載已批準(zhǔn)和已拒絕貸款的數(shù)據(jù)集(CSV格式)。您還將在個人貸款類頁面底部找到一個數(shù)據(jù)字典(XLS格式),其中包含有關(guān)不同列名的信息。該數(shù)據(jù)字典對于理解數(shù)據(jù)集中每一列表示什么很有用。數(shù)據(jù)字典包含兩頁:
1)LoanStats工作表:描述批準(zhǔn)的貸款數(shù)據(jù)集
2)RejectStats工作表:描述拒絕的貸款數(shù)據(jù)集
由于我們對批準(zhǔn)的貸款數(shù)據(jù)集感興趣,因此我們將使用LoanStats工作表。
批準(zhǔn)的貸款數(shù)據(jù)集包含有關(guān)當(dāng)前貸款,已完成貸款和拖欠貸款的信息。在本教程中,我們將使用2007年至2011年的批準(zhǔn)貸款數(shù)據(jù),但是對于發(fā)布到個人貸款類網(wǎng)站上的任何數(shù)據(jù),都將需要類似的清理步驟。
首先,讓我們導(dǎo)入一些我們將要使用的庫,并設(shè)置一些參數(shù)以使輸出更易于閱讀。就本教程而言,我們將扎實(shí)地掌握使用Python處理數(shù)據(jù)的基礎(chǔ)知識,包括使用pandas,numpy等,因此,如果您需要掌握其中的任何技能,則可能需要瀏覽我們的課程清單。
將數(shù)據(jù)加載到熊貓
我們已經(jīng)下載了數(shù)據(jù)集并命名為lending_club_loans.csv,但是現(xiàn)在我們需要將其加載到pandas DataFrame中以進(jìn)行探索。加載完畢后,我們將需要執(zhí)行一些基本的清理任務(wù)來刪除一些不需要的信息,這些信息會使我們的數(shù)據(jù)處理速度變慢。
具體來說,我們將要:
1)刪除第一行:它包含多余的文本,而不是列標(biāo)題。此文本可防止熊貓庫正確解析數(shù)據(jù)集。
2)刪除“ desc”列:其中包含我們不需要的長文字說明。
3)刪除“ URL”列:它包含指向個人貸款上每個鏈接的鏈接,只能使用投資者帳戶進(jìn)行訪問。
4)刪除所有缺失值超過50%的列:這將使我們能夠更快地工作(并且我們的數(shù)據(jù)集足夠大,如果沒有它們,它將仍然有意義。
我們還將命名過濾后的數(shù)據(jù)集loans_2007,并在本節(jié)末尾將其保存為loans_2007.csv與原始數(shù)據(jù)分開的名稱。這是一種很好的做法,可以確保我們擁有原始數(shù)據(jù),以防萬一需要返回并檢索要刪除的所有內(nèi)容。
現(xiàn)在,讓我們繼續(xù)執(zhí)行以下步驟:
讓我們使用pandas head()方法顯示loan_2007 DataFrame的前三行,以確保我們能夠正確加載數(shù)據(jù)集:
讓我們還使用pandas .shape屬性來查看我們現(xiàn)階段要處理的樣本和功能的數(shù)量:
步驟2:縮小色譜柱進(jìn)行清潔
現(xiàn)在我們已經(jīng)建立了數(shù)據(jù),我們應(yīng)該花一些時間來探索它,并理解每一列代表什么功能。這很重要,因?yàn)閷δ艿牧私獠蛔憧赡軙?dǎo)致我們在數(shù)據(jù)分析和建模過程中出錯。
我們將使用個人貸款類提供的數(shù)據(jù)字典來幫助我們熟悉列以及每個列在數(shù)據(jù)集中的表示。為了簡化該過程,我們將創(chuàng)建一個DataFrame來包含列的名稱,數(shù)據(jù)類型,第一行的值以及數(shù)據(jù)字典中的描述。為了簡化操作,我們已經(jīng)將數(shù)據(jù)字典從Excel格式預(yù)先轉(zhuǎn)換為CSV。
讓我們加載該字典并看看。
現(xiàn)在已經(jīng)加載了數(shù)據(jù)字典,讓我們loans_2007將data_dictionaryDataFrame 的第一行連接起來,為我們提供帶以下幾列的預(yù)覽DataFrame:
1)name—包含的列名loans_2007。
2)dtypes—包含loans_2007列的數(shù)據(jù)類型。
3)first value—包含loans_2007第一行的值。
4)description—解釋其中的每一列所loans_2007代表的含義。
當(dāng)我們打印loans_2007較早的形狀時,我們注意到它有56列,因此我們知道此預(yù)覽DataFrame有56行(其中一個解釋loans_2007)。
嘗試一次瀏覽預(yù)覽的所有行可能很麻煩,因此,我們將其分為三個部分,每次查看較小的功能選擇。當(dāng)我們探索功能以更好地理解它們的每一個時,我們將要注意任何專欄文章:
泄漏未來的信息(在貸款已經(jīng)被資助之后),
a、不會影響借款人的還款能力(例如個人貸款隨機(jī)生成的ID值),
b、格式不佳,
c、需要更多數(shù)據(jù)或大量預(yù)處理才能變成有用的功能,或者
d、包含冗余信息。
這些都是我們要小心的事情,因?yàn)閺拈L遠(yuǎn)來看,不正確地處理它們會損害我們的分析。
我們需要特別注意數(shù)據(jù)泄漏,這可能會導(dǎo)致模型過擬合。這是因?yàn)樵撃P瓦€將從我們使用時將無法使用的功能中進(jìn)行學(xué)習(xí),從而對未來的貸款進(jìn)行預(yù)測。我們需要確保我們的模型僅使用貸款申請時的數(shù)據(jù)進(jìn)行訓(xùn)練。
第一組列
讓我們顯示的前19行preview并進(jìn)行分析:
在分析了列并考慮了我們要構(gòu)建的模型之后,我們可以得出結(jié)論,可以刪除以下功能:
1)id —由個人貸款類隨機(jī)生成的字段,僅供唯一標(biāo)識。
2)member_id —也是個人貸款類隨機(jī)生成的字段,僅供識別。
3)funded_amnt —泄露未來的信息(在貸款已開始提供資金之后)。
4)funded_amnt_inv -還會泄漏未來的數(shù)據(jù)。
5)sub_grade-包含該grade列中已經(jīng)存在的冗余信息(更多信息在下面)。
6)int_rate-也包含在此grade列中。
7)emp_title -需要其他數(shù)據(jù)和大量處理才能變得有用
8)issued_d -泄漏未來的數(shù)據(jù)。
注意:個人貸款使用借款人的等級和還款期限(30個月或幾個月)來分配利率(您可以閱讀有關(guān)“ 利率和費(fèi)用”的更多信息)。這會導(dǎo)致給定等級內(nèi)利率的變化。
對于我們的模型可能有用的是集中于借款人的集群而不是個人。而且,這正是分級的作用-它根據(jù)借款人的信用評分和其他行為對借款人進(jìn)行細(xì)分,這就是為什么我們將保留該grade列并降低利息int_rate和的原因sub_grade。在移到下一組列之前,讓我們從DataFrame中刪除這些列。
現(xiàn)在,我們準(zhǔn)備繼續(xù)進(jìn)行下一組列(功能)。
第二組列
讓我們繼續(xù)進(jìn)行下19列:
在該組中,注意fico_range_low和fico_range_high列。雖然兩者都在上表中,但在查看最后一組列后,我們將進(jìn)一步討論它們。另請注意,如果您使用的是較新的個人貸款類數(shù)據(jù),則該數(shù)據(jù)可能不包括FICO得分的數(shù)據(jù)。
現(xiàn)在,回顧第二組列,我們可以通過刪除以下列來進(jìn)一步完善數(shù)據(jù)集:
1)zip_code –對于addr_state列,大多數(shù)情況下是多余的,因?yàn)?位郵政編碼中的前3位僅可見。
2)out_prncp –泄漏未來的數(shù)據(jù)。
3)out_prncp_inv –還會泄漏未來的數(shù)據(jù)。
4)total_pymnt –還會泄漏未來的數(shù)據(jù)。
5)total_pymnt_inv –還會泄漏未來的數(shù)據(jù)。
讓我們繼續(xù),從DataFrame中刪除以下5列:
第三組列
讓我們分析最后一組功能:
在這最后一組列中,我們需要刪除以下所有列,所有這些將來都會泄漏數(shù)據(jù):
1)total_rec_prncp
2)total_rec_int
3)total_rec_late_fee
4)recoveries
5)collection_recovery_fee
6)last_pymnt_d
7)last_pymnt_amnt
讓我們刪除最后一組列:
大!現(xiàn)在,我們有了一個數(shù)據(jù)集,它將對構(gòu)建我們的模型更加有用,因?yàn)樗槐乩速M(fèi)時間處理無關(guān)的數(shù)據(jù),也不會通過分析來自未來的信息來“欺騙”貸款的結(jié)果。
調(diào)查FICO分?jǐn)?shù)列
這是值得花一些時間來討論fico_range_low,fico_range_high,last_fico_range_low,和last_fico_range_high列。
FICO分?jǐn)?shù)是信用分?jǐn)?shù):銀行和信用卡使用的數(shù)字代表一個人的信用度。盡管在美國使用的信用評分類型有幾種,但FICO評分是最著名和使用最廣泛的。
當(dāng)借款人申請貸款,借貸俱樂部得到借款人的信用分?jǐn)?shù)從FICO -他們是考慮到借款人得分范圍的下限和上限屬,它們存儲這些值fico_range_low,fico_range_high。之后,對借方分?jǐn)?shù)的任何更新都記錄為last_fico_range_low和last_fico_range_high。
任何數(shù)據(jù)科學(xué)項(xiàng)目的關(guān)鍵部分是盡一切可能理解數(shù)據(jù)。在研究此特定數(shù)據(jù)集時,我發(fā)現(xiàn)了由斯坦福大學(xué)的一群學(xué)生于2014年發(fā)起的項(xiàng)目。在該項(xiàng)目的報告中,該小組將last_fico_range滯納金和回收金中的當(dāng)前信用評分()列為他們錯誤地添加到功能中的字段,但指出后來他們從這些列中了解了所有將來泄漏的信息。
但是,按照該小組的項(xiàng)目,斯坦福大學(xué)的另一個小組研究了相同的個人貸款數(shù)據(jù)集。他們last_fico_range_low在建模中使用了FICO分?jǐn)?shù)列,僅將其刪除。第二組報告被描述last_fico_range_high為預(yù)測準(zhǔn)確結(jié)果的更重要特征之一。
有了這些信息,我們必須回答的問題是:FICO信用評分會泄露未來的信息嗎?回憶一下,當(dāng)我們使用模型進(jìn)行預(yù)測時,如果其中包含的數(shù)據(jù)不可用,則認(rèn)為該列泄漏了信息-在這種情況下,當(dāng)我們在未來的貸款申請中使用我們的模型來預(yù)測借款人是否違約時。
這篇博客文章深入研究了個人貸款類貸款的FICO分?jǐn)?shù),并指出,盡管查看FICO分?jǐn)?shù)的趨勢可以很好地預(yù)測貸款是否會違約,但在貸款獲得貸款后,個人貸款類會繼續(xù)更新FICO分?jǐn)?shù)。換句話說,雖然我們可以使用初始FICO分?jǐn)?shù)(fico_range_low和fico_range_high)(那些可以作為借款人的應(yīng)用程序的一部分提供),但我們不能使用last_fico_range_low和last_fico_range_high,因?yàn)閭€人貸款類可能會在借款人申請后更新這些分?jǐn)?shù)。
讓我們看一下我們可以使用的兩列中的值:
讓我們擺脫缺失的值,然后繪制直方圖以查看兩列的范圍:
現(xiàn)在,讓我們繼續(xù)前進(jìn),創(chuàng)造了平均的列fico_range_low和fico_range_high列,并將它命名fico_average。請注意,這不是每個借款人的平均FICO得分,而是我們知道借款人所處的最高和最低范圍的平均值。
讓我們檢查一下我們剛剛做了什么。
好!我們得到了均值計算,一切都正確?,F(xiàn)在,我們可以繼續(xù)下降fico_range_low,fico_range_high,last_fico_range_low,和last_fico_range_high列。
注意,只要熟悉數(shù)據(jù)集中的列,我們就可以將列數(shù)從56減少到33,而不會丟失任何對我們的模型有意義的數(shù)據(jù)。我們還通過丟棄會泄漏將來信息的數(shù)據(jù)來避免問題,而這會弄亂我們模型的結(jié)果。這就是為什么數(shù)據(jù)清理如此重要的原因!
確定目標(biāo)列
現(xiàn)在,我們將確定適當(dāng)?shù)牧幸杂米鹘5哪繕?biāo)列。
我們的主要目標(biāo)是預(yù)測誰將還清貸款,誰將違約,我們需要找到一欄反映此情況。我們從預(yù)覽DataFrame中的列描述中學(xué)到了內(nèi)容,這loan_status是主數(shù)據(jù)集中描述貸款狀態(tài)的唯一字段,因此讓我們將此列用作目標(biāo)列。
當(dāng)前,此列包含需要轉(zhuǎn)換為數(shù)值才能用于訓(xùn)練模型的文本值。讓我們探索此列中的不同值,并提出轉(zhuǎn)換它們的策略。我們將使用DataFrame方法value_counts()返回該loan_status列中唯一值的頻率。
貸款狀態(tài)有九種可能的值!讓我們了解這些獨(dú)特的值,以確定最能描述貸款最終結(jié)果的值,以及我們將要處理的分類問題。
我們可以在個人貸款類網(wǎng)站以及Lend Academy和Orchard論壇上閱讀有關(guān)大多數(shù)不同貸款狀態(tài)的信息。
下面,我們將這些數(shù)據(jù)匯總到下表中,以便我們可以看到唯一值,它們在數(shù)據(jù)集中的出現(xiàn)頻率,并更清楚地了解每種含義:
請記住,我們的目標(biāo)是建立一個機(jī)器學(xué)習(xí)模型,該模型可以從過去的貸款中學(xué)習(xí),從而試圖預(yù)測哪些貸款將得到還清,而哪些則不會。在上表中,僅“已付清”和“已清還”值描述了貸款的最終結(jié)果。其他值描述的是仍在進(jìn)行中的貸款,即使有些貸款延遲付款,我們也無法將其歸類為“沖銷”。
同樣,雖然“默認(rèn)”狀態(tài)類似于“已注銷”狀態(tài),但在個人貸款類的眼中,已注銷的貸款基本上沒有償還的機(jī)會,而“違約”貸款的機(jī)會很小。因此,當(dāng)我們只能使用樣品loan_status列'Fully Paid'或'Charged Off'。
我們對指示貸款正在進(jìn)行或正在進(jìn)行的任何狀態(tài)都不感興趣,因?yàn)轭A(yù)測正在發(fā)生的事情不會告訴我們?nèi)魏问虑椤?br />
我們對能夠預(yù)測將屬于哪筆'Fully Paid'或'Charged Off'一筆貸款感興趣,因此我們可以將問題視為二進(jìn)制分類。讓我們刪除不包含'Fully Paid'或'Charged Off'作為貸款狀態(tài)的所有貸款,然后將'Fully Paid'值轉(zhuǎn)換1為正案例的'Charged Off'值并將值轉(zhuǎn)換0為負(fù)案例的值。
這意味著在我們擁有的約42,000行中,我們將刪除3,000多行。
轉(zhuǎn)換列中所有值的方法很少,我們將使用DataFrame方法replace()。
可視化目標(biāo)列結(jié)果
這些圖表明,我們的數(shù)據(jù)集中有大量借款人還清了貸款,其中85.62%的借款人還清了借入的金額,而不幸的是有14.38%的違約。我們更感興趣的是識別這些“違約者”,因?yàn)槌鲇谖覀兡P偷哪康模覀冊噲D找到一種最大化投資回報的方法。
不向這些違約者提供貸款將有助于增加我們的回報,因此我們將繼續(xù)著眼于清理數(shù)據(jù),以期建立一個模型來識別應(yīng)用程序中可能的違約者。
僅刪除一個值的列
為了結(jié)束本節(jié),讓我們查找僅包含一個唯一值的所有列并將其刪除。這些列不會對模型有用,因?yàn)樗鼈儾粫蛎總€貸款申請?zhí)砑尤魏涡畔?。此外,刪除這些列將減少我們在下一階段需要進(jìn)一步探討的列數(shù)。
pandas Series方法nunique()返回唯一值的數(shù)量,不包括任何空值。我們可以在整個數(shù)據(jù)集上應(yīng)用此方法,只需一個簡單的步驟即可刪除這些列。
同樣,可能有一些列具有多個唯一值,但其中一個值在數(shù)據(jù)集中的頻率很小。讓我們查找并刪除任何唯一值少于四次的列:
付款計劃列(pymnt_plan)具有兩個唯一值'y'和'n','y'僅出現(xiàn)一次。讓我們刪除此列:
最后,讓我們使用熊貓將我們剛清洗的DataFrame保存為CSV文件:
現(xiàn)在,我們有了更好的數(shù)據(jù)集。但是我們還沒有完成數(shù)據(jù)清理工作,所以讓我們繼續(xù)吧!
步驟3:為機(jī)器學(xué)習(xí)準(zhǔn)備功能
在本節(jié)中,我們將準(zhǔn)備filtered_loans_2007.csv用于機(jī)器學(xué)習(xí)的數(shù)據(jù)。我們將專注于處理缺失值,將分類列轉(zhuǎn)換為數(shù)字列并刪除任何其他無關(guān)的列。
在將數(shù)據(jù)輸入機(jī)器學(xué)習(xí)算法之前,我們需要處理缺失值和分類特征,因?yàn)榇蠖鄶?shù)機(jī)器學(xué)習(xí)模型所基于的數(shù)學(xué)假定數(shù)據(jù)是數(shù)值的并且不包含缺失值。為了加強(qiáng)此要求,如果在使用線性回歸和邏輯回歸等模型時嘗試使用包含缺失值或非數(shù)字值的數(shù)據(jù)訓(xùn)練模型,則scikit-learn將返回錯誤。
以下是我們在此階段將要做的事情的概述:
a、處理缺失值
b、調(diào)查分類列
1)將分類列轉(zhuǎn)換為數(shù)值特征
i)將序數(shù)值映射為整數(shù)
ii)將標(biāo)稱值編碼為虛擬變量
不過首先,讓我們從上一節(jié)的最終輸出中加載數(shù)據(jù):
處理缺失值
讓我們計算缺失值的數(shù)量并確定如何處理它們。我們可以像這樣在整個DataFrame中返回缺失值的數(shù)量:
a)首先,使用Pandas DataFrame方法isnull()返回包含布爾值的DataFrame:
1)True 如果原始值為null
2)False 如果原始值不為null
b)然后,使用Pandas DataFrame方法sum()計算每列中空值的數(shù)量。
請注意,盡管大多數(shù)列都有0個缺失值,title有9個缺失值,revol_util有48個,并pub_rec_bankruptcies包含675行有缺失值。
讓我們完全刪除列中該列中超過1%(392)的行包含空值的列。此外,我們將刪除其余包含空值的行。這意味著我們將丟失一些數(shù)據(jù),但作為回報,保留一些額外的功能以用于預(yù)測(因?yàn)槲覀儾槐貏h除那些列)。
我們將保留title和revol_util列,只是刪除包含缺失值的行,但pub_rec_bankruptcies由于該行中有1%以上的行具有缺失值,因此將其完全刪除。
具體來說,這是我們要做的事情:
a)使用滴法去除pub_rec_bankruptcies從列filtered_loans。
b)使用dropna方法,從刪除所有行filtered_loans包含任何遺漏值。
這就是代碼中的樣子。
請注意,有多種方法可以處理缺失值,這是用于機(jī)器學(xué)習(xí)的數(shù)據(jù)清理中最重要的步驟之一。我們針對Python的數(shù)據(jù)清理高級課程對清理數(shù)據(jù)時遺漏的值進(jìn)行了更深入的探討,這將是深入學(xué)習(xí)該主題的重要資源。
不過,出于此處的目的,我們已經(jīng)完成了這一步,因此讓我們繼續(xù)使用分類列。
調(diào)查分類列
我們的目標(biāo)是最終獲得一個可供機(jī)器學(xué)習(xí)使用的數(shù)據(jù)集,這意味著它不包含任何缺失值,并且列中的所有值均為數(shù)字(浮點(diǎn)或整型數(shù)據(jù)類型)。
我們已經(jīng)處理了缺少的值,所以現(xiàn)在讓我們找出對象數(shù)據(jù)類型的列數(shù),并弄清楚如何使這些值成為數(shù)字。
我們有11個對象列,其中包含需要轉(zhuǎn)換為數(shù)字特征的文本。讓我們使用DataFrame方法select_dtype只選擇對象列,然后顯示一個示例行,以更好地了解每一列中的值如何格式化。
請注意,該revol_util列包含數(shù)值,但被格式化為對象。我們從preview前面的DataFrame 列描述中學(xué)到的revol_util是“循環(huán)使用率或借款人相對于所有可用信貸所使用的信貸量”(在此處了解更多)。我們需要將其格式化revol_util為數(shù)字值。這是我們可以做的:
a、使用str.rstrip()字符串方法去除右尾的百分號(%)。
b、在產(chǎn)生的Series對象上,使用astype()方法轉(zhuǎn)換為type float。
c、將新的系列浮點(diǎn)值重新分配給中的revol_util列filtered_loans。
繼續(xù),這些列似乎代表分類值:
1)home_ownership —房屋所有權(quán)狀態(tài),根據(jù)數(shù)據(jù)字典,只能是4個分類值中的1個。
2)verification_status —表示收入是否已由個人貸款類驗(yàn)證。
3)emp_length -借款人在申請時受雇的年限。
4)term -貸款的還款次數(shù),為36或60。
5)addr_state -借款人的居住地。
6)grade — LC根據(jù)信用評分分配貸款等級。
7)purpose —借款人為貸款請求提供的類別。
8)title -借款人提供了借款名稱。
可以肯定的是,讓我們通過檢查每個值中的唯一值來進(jìn)行確認(rèn)。
此外,基于第一行的對值purpose和title,看來這兩列反映了同樣的信息。我們將分別探索其唯一值計數(shù),以確認(rèn)是否為真。
最后,請注意第一行的值earliest_cr_line和last_credit_pull_d列的值都包含日期值,這些日期值需要大量的功能設(shè)計,以使其可能有用:
1)earliest_cr_line —借款人最早報告的信貸額度開放的月份。
2)last_credit_pull_d —最近一個月個人貸款類提取了此筆貸款的信貸。
對于某些分析,進(jìn)行此功能工程可能是值得的,但是出于本教程的目的,我們將僅從DataFrame中刪除這些日期列。
首先,讓我們探索看起來好像包含分類值的六列的唯一值計數(shù):
這些列大多數(shù)包含離散的分類值,我們可以將其編碼為虛擬變量并保留。addr_state但是,該列包含太多唯一值,因此最好刪除它。
接下來,讓我們看看purpose和title列的唯一值計數(shù),以了解我們要保留哪些列。
似乎purpose和title列確實(shí)包含重疊的信息,但是該purpose列包含的離散值較少并且更整潔,因此我們將其保留并丟棄title。
讓我們刪除到目前為止我們決定不保留的列:
將分類列轉(zhuǎn)換為數(shù)值特征
首先,讓我們了解數(shù)據(jù)集中的兩種分類特征,以及如何將它們轉(zhuǎn)換為數(shù)字特征:
有序值:這些分類值是自然順序的。我們可以按升序或降序?qū)λ鼈冞M(jìn)行排序或排序。例如,我們較早地了解到個人貸款類將貸款申請人的等級從A 分級為G,并為每個申請人分配相應(yīng)的利率-A等級風(fēng)險最低,B等級風(fēng)險高于A,依此類推:
A
標(biāo)稱值:這些是常規(guī)分類值。您不能訂購標(biāo)稱值。例如,雖然我們可以emp_length根據(jù)在勞動力中花費(fèi)的年限在“就業(yè)時長”列()中訂購貸款申請人:
1年<2年<3年…
我們無法通過專欄來做到這一點(diǎn)purpose。說:
汽車<婚禮<教育<移動<房子
這些是我們現(xiàn)在在數(shù)據(jù)集中具有的列:
序數(shù)值
1)grade
2)emp_length
標(biāo)稱值 _home_ownership
1)verification_status
2)purpose
3)term
有兩種不同的方法來處理這兩種類型。為了序值映射到整數(shù),我們可以使用數(shù)據(jù)框大熊貓方法replace()來映射兩者grade并emp_length以適當(dāng)?shù)臄?shù)值:
完善!讓我們繼續(xù)看名義值。將名義特征轉(zhuǎn)換為數(shù)字特征需要將其編碼為偽變量。該過程將是:
1)使用pandas的get_dummies()方法返回一個新的DataFrame,其中包含每個虛擬變量的新列。
2)使用該concat()方法將這些虛擬列添加回原始DataFrame。
3)使用drop方法完全刪除原始列。
讓我們繼續(xù)對數(shù)據(jù)集中的標(biāo)稱列進(jìn)行編碼:
總結(jié)一下,讓我們檢查一下本節(jié)的最終輸出,以確保所有要素的長度相同,不包含空值且為數(shù)字。我們將使用pandas的info方法來檢查filtered_loansDataFrame:
一切看起來都不錯!恭喜,我們剛剛清理了大數(shù)據(jù)集進(jìn)行機(jī)器學(xué)習(xí),并在此過程中為我們的庫添加了一些有價值的數(shù)據(jù)清理技能。
但是,我們?nèi)匀恍枰瓿梢豁?xiàng)重要的最終任務(wù)!
保存為CSV
最好將工作流的每個部分或階段的最終輸出存儲在單獨(dú)的csv文件中。這種做法的好處之一是,它可以幫助我們更改數(shù)據(jù)處理流程,而不必重新計算所有內(nèi)容。
和以前一樣,我們可以使用方便的pandas to_csv()函數(shù)將DataFrame存儲為CSV 。
下一步
在本文中,我們介紹了處理大型數(shù)據(jù)集,清理數(shù)據(jù)并為機(jī)器學(xué)習(xí)項(xiàng)目準(zhǔn)備數(shù)據(jù)所需的基本步驟。但是,還有很多東西要學(xué)習(xí),您可以從這里選擇許多不同的方向。
如果您對數(shù)據(jù)清理技能感到滿意,并且想更多地使用該數(shù)據(jù)集,請查看我們的交互式機(jī)器學(xué)習(xí)演練課程,該課程涵蓋了使用個人貸款數(shù)據(jù)的后續(xù)步驟。
如果您想繼續(xù)研究數(shù)據(jù)清理技能,請查看我們的一個(或多個)交互式數(shù)據(jù)清理課程,以更深入地研究這項(xiàng)關(guān)鍵的數(shù)據(jù)科學(xué)技能:
1)數(shù)據(jù)清理和分析課程(Python)
2)高級數(shù)據(jù)清理課程(Python)
3)數(shù)據(jù)清理(R)
填寫下面表單即可預(yù)約申請免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會?助教全程陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!
?2007-2022/ mwtacok.cn 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc