Pandas 探索性數(shù)據(jù)分析綜合實(shí)戰(zhàn)
?本文主要分析數(shù)據(jù)、組織數(shù)據(jù)、清洗、過(guò)濾、排序、聚合、可視化變量之間的關(guān)系、分類圖和數(shù)據(jù)的分散性。在一個(gè)數(shù)據(jù)科學(xué)項(xiàng)目的生命周期中,我們有70%以上的時(shí)間用于數(shù)據(jù)分析,比如進(jìn)行特征工程和特征選擇。特征工程講的是根據(jù)我們的直覺(jué)用有效的數(shù)據(jù)來(lái)填補(bǔ)缺失值,糾正錯(cuò)誤的數(shù)據(jù)類型,組織不平衡的數(shù)據(jù)集,而特征選擇講的是只選擇那些有助于預(yù)測(cè)變量或你感興趣的輸出的特征。要做好探索性數(shù)據(jù)分析,需要對(duì)pandas、numpy、scipy、matplotlib和seaborn庫(kù)有很好的了解。
本文的目的是了解數(shù)據(jù)集的要點(diǎn),即對(duì)數(shù)據(jù)的初步了解。當(dāng)你收到一個(gè)數(shù)據(jù)集時(shí),你需要對(duì)數(shù)據(jù)集的變量、數(shù)據(jù)類型和變量之間的關(guān)系有一個(gè)概念。在大多數(shù)情況下,我們會(huì)在數(shù)據(jù)集中發(fā)現(xiàn)不完整的數(shù)據(jù),原因可能是用戶可能不想填寫數(shù)據(jù),在互聯(lián)網(wǎng)上傳輸時(shí)數(shù)據(jù)丟失,或者用戶可能沒(méi)有數(shù)據(jù)可以填寫。這是需要解決的第一步。不匹配的數(shù)據(jù)類型,如DateTime變量一般被讀成對(duì)象(String),或者有時(shí)整數(shù)被讀成浮點(diǎn)數(shù),反之亦然。在本文中,我們將使用一個(gè)實(shí)時(shí)的泰坦尼克號(hào)數(shù)據(jù)集,并對(duì)其進(jìn)行探索性數(shù)據(jù)分析。
導(dǎo)入庫(kù)和數(shù)據(jù)集
開(kāi)始導(dǎo)入所需的庫(kù)pandas、numpy、seaborn、matplotlib、魔法命令%matplotlib inline,并使用 read_csv 方法加載titanic數(shù)據(jù)集(titanic.csv),如圖所示。
現(xiàn)在我們可以開(kāi)始對(duì)數(shù)據(jù)框架做一些初步的檢查,比如讀取幾行幾列以確保數(shù)據(jù)被加載到數(shù)據(jù)框架中,找到它的形狀(行數(shù)和列數(shù)),數(shù)據(jù)類型的信息。
我們可以使用head方法查看前幾行,如圖所示。這個(gè)方法需要一個(gè)整數(shù)作為參數(shù),并返回總的行數(shù)。

我們可以通過(guò)shape?屬性知道數(shù)據(jù)集的大小,如行和列的總數(shù),如下所示,該屬性顯示一個(gè)有891行和12列的元組。為了找到變量的數(shù)據(jù)類型,我們有info方法,它可以返回變量、數(shù)據(jù)類型、內(nèi)存使用量和關(guān)于每個(gè)變量的缺失值,Age?只有714,Cabin只有 204,不是891,因此他們需要被填充,在接下來(lái)我們對(duì)其進(jìn)行可視化并處理缺失值。
處理缺失值
我們可以使用missingno?庫(kù)對(duì)數(shù)據(jù)集進(jìn)行可視化處理,也可以使用isnull?方法檢查 "Age"? 和 "Cabin" 兩列中缺失的數(shù)值。
我們可以看到 'Age'? 列有177個(gè)空值,'Cabin' 有687個(gè)空值,下面的圖是整個(gè)數(shù)據(jù)集的可視化圖。

現(xiàn)在來(lái)處理缺失的 "Age"? 值,"Age"? 的數(shù)據(jù)類型是數(shù)字(Float),一般來(lái)說(shuō),缺失的數(shù)字列會(huì)用它們的平均值或中位數(shù)或任何基于我們直覺(jué)的值來(lái)填補(bǔ),無(wú)論哪種都是最好的。在更新空值之前,檢查一下基于 "Pclass"? 和 "Sex"? 列的均值和中值。下圖顯示了基于 "Pclass"? 和 "Sex" 分組的平均數(shù)和中位數(shù)。這里我們可以看到平均數(shù)和中位數(shù)都非常接近,所以更好的選擇是繼續(xù)使用中位數(shù)。
所以根據(jù)'Pclass'和'Sex'?,我們可以更新'Age'?變量的空值。這里我們可以使用loc?方法來(lái)尋找和替換'Age'變量的空值。
現(xiàn)在我們已經(jīng)填補(bǔ)了'Age'?變量的缺失值,那么'Cabin'?變量呢,它只是船上的一個(gè)座位分配,這個(gè)變量對(duì)乘客的生存沒(méi)有任何影響,所以我們可以使用drop?方法放棄這個(gè)變量。再次繪圖并檢查是否有遺漏值。現(xiàn)在可以看到'Age'列沒(méi)有任何空值,如下圖所示,甚至'Cabin'列也被刪除了:

數(shù)據(jù)處理部分已經(jīng)完成?,F(xiàn)在可以利用這些干凈的數(shù)據(jù),對(duì)其進(jìn)行分析。在進(jìn)一步進(jìn)行之前,了解每一列所代表的內(nèi)容。下面描述了每一列含義,這些字段很簡(jiǎn)單,不言自明。
PassengerId:只是一個(gè)序列號(hào)
Survived: 0 = No, 1 = Yes
pclass: Ticket class 1 = 1st, 2 = 2nd, 3 = 3rd
sibsp: # 在泰坦尼克號(hào)上的兄弟姐妹/配偶的數(shù)量
parch: # 泰坦尼克號(hào)上的父母/子女的數(shù)量
ticket: Ticket number
cabin: Cabin number
embarked: Port of Embarkation C = Cherbourg, Q = Queenstown, S = Southampton
現(xiàn)在我們對(duì)數(shù)據(jù)集有了一個(gè)概念,但我們想從數(shù)據(jù)集中定義的問(wèn)題陳述是什么?它可以是像幸存的總?cè)藬?shù)或他們旅行的班級(jí),或有多少人有兄弟姐妹或配偶,父母-子女,等等。接下來(lái)用seaborn來(lái)繪圖。
變量識(shí)別
僅僅重申我們?cè)诮y(tǒng)計(jì)學(xué)章節(jié)中討論過(guò)的內(nèi)容,我們有兩種變量分類和數(shù)字,這些變量又進(jìn)一步細(xì)分為序數(shù)和名義,以及數(shù)字變量的連續(xù)和離散,如圖所示。

分類名義變量
順序變量的定義與分類變量類似;這里需要提到的是,它沒(méi)有任何特定的順序。一個(gè)例子是我們不能在這里假設(shè)男性大于女性。我們不能假設(shè)一個(gè)類別大于或小于其他類別,而且它們沒(méi)有任何特定的順序。
分類順序變量
分類的、序數(shù)的變量可以按特定的順序排列。一個(gè)例子是,如果你被要求填寫餐廳的食物和服務(wù)的反饋,這可能是諸如美味、好、更好、更差和最差。這有一個(gè)從正到負(fù)的特定順序,或者另一個(gè)例子是指一個(gè)班級(jí)的成績(jī)。
數(shù)值連續(xù)變量
數(shù)字連續(xù)變量有無(wú)限的值。這方面的例子可以是股票價(jià)格、身高、體重、年齡,等等。這些值沒(méi)有任何有限的區(qū)間。
數(shù)值離散變量
數(shù)值離散型變量有有限的值。一個(gè)例子是你有多少輛汽車或你有多少個(gè)孩子。它有一個(gè)確定的值,要么是0,1,2,等等。我們不可能有1.24輛汽車或1.05個(gè)孩子。
在泰坦尼克號(hào)數(shù)據(jù)集中有哪些不同的變量,并直觀地看到它們的數(shù)據(jù)類型表示。我們可以看到這些變量的單獨(dú)表示。
Name:分類名義變量。
Surviver:分類名義變量。
Pclass:分類順序變量。
Sex:分類名義變量。
Embark:分類名義變量。
Age:數(shù)值連續(xù)變量。
SibSp:數(shù)值離散變量。
Parch:數(shù)值離散變量。
Fare:數(shù)值連續(xù)變量。
單變量分析
單變量分析是關(guān)于一個(gè)單一的變量。使用seaborn,我們可以將一些最重要的圖示可視化。我們把船上幸存的乘客總數(shù)可視化??梢允褂糜?jì)數(shù)圖的方法,如圖所示。我們可以看到891人中只有350多人幸存下來(lái)。

"Embarked"變量是分類類型的,它表示在不同港口上船的人數(shù)。我們可以用countplot方法繪制,如下圖所示。

另一個(gè)分類變量是Sex(性別);我們也可以繪制它,如下圖所示。

我們也可以對(duì)數(shù)字變量使用countplot?方法。我們可以繪制'SibSp'(配偶和兄弟姐妹)變量,如圖所示,它顯示600人是單獨(dú)旅行,200人以上有1個(gè)兄弟姐妹或配偶,以此類推。

雙變量分析
到現(xiàn)在為止,我們已經(jīng)學(xué)習(xí)了單變量的分析,稱為單變量分析,而雙變量分析是用來(lái)尋找兩個(gè)變量之間的關(guān)系。為此尋找'Fare'和'Age'?變量之間的關(guān)系,我們可以使用relplot方法,如圖所示。

我們可以看到年齡范圍從0到80,大部分票價(jià)都落在0到100的范圍內(nèi),同時(shí),38歲的人有一個(gè)500以上的票價(jià)的離群值。很少有變量落在200到300的范圍內(nèi)。不同的雙變量圖是散點(diǎn)圖、熱圖、線圖和柱狀圖。
散點(diǎn)圖
散點(diǎn)圖是統(tǒng)計(jì)可視化的骨干。它用一團(tuán)數(shù)據(jù)點(diǎn)描述了兩個(gè)變量之間的聯(lián)合分布。這一點(diǎn)我們已經(jīng)在上圖中比較了 "Fare"?和 "Age"的例子。
線形圖
在seaborn中,線狀圖可以通過(guò)relplot?方法完成,通過(guò)設(shè)置參數(shù)kind='line',如下圖所示。

熱圖
使用熱圖法,我們可以用二維的形式來(lái)表示數(shù)據(jù)。數(shù)據(jù)值在圖中被表示為顏色,同時(shí)還有變量之間的數(shù)字相關(guān)性。在這里使用泰坦尼克號(hào)數(shù)據(jù)集,我們?cè)噲D表示變量之間是否有任何相關(guān)性。下圖顯示,這些變量之間沒(méi)有太大的相關(guān)性,而且它們是相互獨(dú)立的。

柱狀圖
柱狀圖是最常見(jiàn)的一種圖表類型。它顯示了數(shù)字變量和分類變量之間的關(guān)系,如圖所示。從圖中我們可以看出,第1類乘客的生存率更高。

多變量分析
多變量分析同時(shí)使用兩個(gè)以上的變量。通常我們可以看到,更多的變量可以是多維的,如下圖所示。這里我們將性別及他們的存活率與他們所乘坐的客運(yùn)等級(jí)一起繪制出來(lái)。我們可以看到,與男性相比,女性乘客的存活率更高,而且Pclass ?1和Pclass 2的存活率也更高。

我們還可以畫一個(gè)散點(diǎn)圖來(lái)表示多變量分析,如下圖所示,它顯示了"Age"和 "Fare"?以及他們的 "Survived"?。這里我們可以描述出,與低票價(jià)相比,高票價(jià)的人存活率更高,也就是說(shuō),Pclass 1和Pclass 2比Pclass 3存活率更高。有時(shí)單變量和雙變量分析并不能提供太多的信息,所以這里我們可以使用多變量分析。

處理離群點(diǎn)
離群點(diǎn)大多可能是數(shù)據(jù)中的一個(gè)錯(cuò)誤,如打字錯(cuò)誤、季節(jié)性趨勢(shì)等。在這種情況下,在計(jì)算匯總統(tǒng)計(jì)或從數(shù)據(jù)中得出見(jiàn)解之前,應(yīng)該將其從數(shù)據(jù)集中糾正或刪除,否則會(huì)導(dǎo)致不正確的分析。假設(shè)你有一個(gè)美國(guó)不同州的披薩價(jià)格數(shù)據(jù)集,如下圖所示。

我們可以計(jì)算變量的長(zhǎng)度,也可以用箱形圖直觀地看到異常值,如下圖所示。

我們可以看到我們有3個(gè)離群點(diǎn)?,F(xiàn)在如果我們計(jì)算價(jià)格的平均值,我們得到的數(shù)值是35.12。
由于存在離群點(diǎn),我們可以把它們丟掉,如下所示,再次計(jì)算平均值,這里我們可以看到平均值是16.67,幾乎是有離群點(diǎn)的數(shù)值的一半。所以在數(shù)據(jù)分析過(guò)程中,去除離群值是很重要的。
特征選擇
在特征選擇中,我們?cè)谀切?duì)使用機(jī)器學(xué)習(xí)進(jìn)行預(yù)測(cè)很重要的變量上下功夫。一些特征,如'Passengerid'、'Name'、'Cabin' 和 'Ticket'在進(jìn)行分析時(shí)不會(huì)產(chǎn)生任何影響,因此在使用機(jī)器學(xué)習(xí)算法進(jìn)行任何預(yù)測(cè)之前,最好放棄這些變量。
還是使用泰坦尼克號(hào)數(shù)據(jù)集并對(duì)其進(jìn)行特征選擇,如下圖所示。

我們可以使用刪除法,刪除 "Passengerid"、"Name"、"Cabin "和 "Ticket "這幾列,如下圖所示。

在上圖中,我們可以看到這些列被刪除了,很好,但是這里有一個(gè)問(wèn)題。ML算法只理解數(shù)字,但是我們這里有兩個(gè)類別列'Sex'和'Embarked'?,它們是對(duì)象(字符串)類型。性別列有男性和女性兩個(gè)類別,而對(duì)于Embarked,我們有S、C和Q值。
我們更新 S、Q 和 C 的性別欄0、1(男性和女性)和 0、1、2(登船)的值。

現(xiàn)在我們可以將數(shù)據(jù)集的信息特征和目標(biāo)進(jìn)行劃分。X?變量就像一個(gè)帶有行和列的矩陣,稱為特征,而y變量是目標(biāo)。
因此,我們可以結(jié)束特征選擇部分,進(jìn)一步將特征分為train_test_split,并應(yīng)用適當(dāng)?shù)臋C(jī)器學(xué)習(xí)算法,進(jìn)行預(yù)測(cè)。

總結(jié)
本文的內(nèi)容是關(guān)于對(duì)數(shù)據(jù)集進(jìn)行特別分析,并試圖找到關(guān)于數(shù)據(jù)的洞察力。我們做了處理缺失值、異常值的工作,并將單變量、雙變量和多變量的分析可視化。探索性數(shù)據(jù)分析是數(shù)據(jù)分析中最核心和最重要的概念之一。















 
 
 











 
 
 
 