偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Pandas 探索性數(shù)據(jù)分析綜合實(shí)戰(zhàn)

大數(shù)據(jù) 數(shù)據(jù)分析
本文的內(nèi)容是關(guān)于對(duì)數(shù)據(jù)集進(jìn)行特別分析,并試圖找到關(guān)于數(shù)據(jù)的洞察力。我們做了處理缺失值、異常值的工作,并將單變量、雙變量和多變量的分析可視化。

?本文主要分析數(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),如圖所示。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

%matplotlib inline

現(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)行可視化并處理缺失值。

df.shape
(891, 12)
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId 891 non-null int64
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

處理缺失值

我們可以使用missingno?庫(kù)對(duì)數(shù)據(jù)集進(jìn)行可視化處理,也可以使用isnull?方法檢查 "Age"? 和 "Cabin" 兩列中缺失的數(shù)值。

df.isnull().sum()
PassengerId      0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64

我們可以看到 '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ù)。

df.groupby(["Pclass", "Sex"])["Age"].mean()
Pclass  Sex   
1 female 34.611765
male 41.281386
2 female 28.722973
male 30.740707
3 female 21.750000
male 26.507589
Name: Age, dtype: float64
df.groupby(["Pclass", "Sex"])["Age"].median()
Pclass  Sex   
1 female 35.0
male 40.0
2 female 28.0
male 30.0
3 female 21.5
male 25.0
Name: Age, dtype: float64

所以根據(jù)'Pclass'和'Sex'?,我們可以更新'Age'?變量的空值。這里我們可以使用loc?方法來(lái)尋找和替換'Age'變量的空值。

# Fillin the age values for  Pclass =1 for male  and  Female
df.loc[df.Age.isnull() & (df.Sex == "male") & (df.Pclass == 1), "Age"] = 37
df.loc[df.Age.isnull() & (df.Sex == "female") & (df.Pclass == 1), "Age"] = 35.5

# Fillin the age values for Pclass =2 for male and Female
df.loc[df.Age.isnull() & (df.Sex == "male") & (df.Pclass == 2), "Age"] = 29.0
df.loc[df.Age.isnull() & (df.Sex == "female") & (df.Pclass == 2), "Age"] = 28.5

# Fillin the age values for Pclass =2 for male and Female
df.loc[df.Age.isnull() & (df.Sex == "male") & (df.Pclass == 3), "Age"] = 25
df.loc[df.Age.isnull() & (df.Sex == "female") & (df.Pclass == 3), "Age"] = 22

現(xiàn)在我們已經(jīng)填補(bǔ)了'Age'?變量的缺失值,那么'Cabin'?變量呢,它只是船上的一個(gè)座位分配,這個(gè)變量對(duì)乘客的生存沒(méi)有任何影響,所以我們可以使用drop?方法放棄這個(gè)變量。再次繪圖并檢查是否有遺漏值。現(xiàn)在可以看到'Age'列沒(méi)有任何空值,如下圖所示,甚至'Cabin'列也被刪除了:

df.drop(columns="Cabin", inplace=True)
ms.bar(df, color="orange", inline=True)

圖片

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

sns.countplot(x="Survived", data=df)

圖片

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

sns.set_style("whitegrid")
sns.countplot(x="Embarked", data=df)

圖片

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

sns.countplot(x="Sex", data=df)

圖片

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

sns.countplot(x="SibSp", data=df)

圖片

雙變量分析

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

sns.set_style("darkgrid")
g = sns.relplot("Age", "Fare", data=df)
g.fig.set_figwidth(12)
g.fig.set_figheight(6)

圖片

我們可以看到年齡范圍從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',如下圖所示。

sns.relplot("Age", "Fare", kind="line", data=df)

圖片

熱圖

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

corr = df.corr()
sns.heatmap(corr, annot=True)

圖片

柱狀圖

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

sns.barplot(x="Pclass", y="Survived", data=df, ci=None)

圖片

多變量分析

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

sns.barplot(x="Sex", y="Survived", hue="Pclass", data=df, ci=None)

圖片

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

sns.relplot(x="Age", y="Fare", hue="Survived", data=df)

圖片

處理離群點(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)度,也可以用箱形圖直觀地看到異常值,如下圖所示。

sns.boxplot("price", data=df)

圖片

我們可以看到我們有3個(gè)離群點(diǎn)?,F(xiàn)在如果我們計(jì)算價(jià)格的平均值,我們得到的數(shù)值是35.12。

由于存在離群點(diǎn),我們可以把它們丟掉,如下所示,再次計(jì)算平均值,這里我們可以看到平均值是16.67,幾乎是有離群點(diǎn)的數(shù)值的一半。所以在數(shù)據(jù)分析過(guò)程中,去除離群值是很重要的。

df.drop(df[df.price == 160.32].index, inplace=True)
df.drop(df[df.price == 63.43].index, inplace=True)
df.drop(df[df.price == 158.38].index, inplace=True)

特征選擇

在特征選擇中,我們?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值。

df_main["Sex"].value_counts()
male      577
female 314
Name: Sex, dtype: int64
df_main["Embarked"].value_counts()
S    644
C 168
Q 77
Name: Embarked, dtype: int64

我們更新 S、Q 和 C 的性別欄0、1(男性和女性)和 0、1、2(登船)的值。

df_main.loc[df_main["Sex"] == "male", "Sex"] = 1
df_main.loc[df_main["Sex"] == "female", "Sex"] = 0
df_main.loc[df_main["Embarked"] == "S", "Embarked"] = 0
df_main.loc[df_main["Embarked"] == "Q", "Embarked"] = 1
df_main.loc[df_main["Embarked"] == "C", "Embarked"] = 2
df_main.head()

圖片

現(xiàn)在我們可以將數(shù)據(jù)集的信息特征和目標(biāo)進(jìn)行劃分。X?變量就像一個(gè)帶有行和列的矩陣,稱為特征,而y變量是目標(biāo)。

X = df_main.drop(columns="Survived")
X.head()

因此,我們可以結(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ù)分析中最核心和最重要的概念之一。

責(zé)任編輯:武曉燕 來(lái)源: 數(shù)據(jù)STUDIO
相關(guān)推薦

2020-05-13 11:32:28

數(shù)據(jù)分析數(shù)值分析

2020-10-28 18:28:12

Pandas數(shù)據(jù)分析GUI

2024-07-30 12:10:22

2024-06-12 11:57:51

2012-09-04 09:20:26

測(cè)試軟件測(cè)試探索測(cè)試

2023-12-22 09:14:48

EDA數(shù)據(jù)分析探索性數(shù)據(jù)分析

2024-05-21 13:33:49

2016-10-11 15:32:26

探索性大數(shù)據(jù)

2023-05-11 13:39:39

EDA數(shù)據(jù)分析

2023-11-30 07:23:53

數(shù)據(jù)分析EDA

2017-04-25 18:35:47

硅谷數(shù)據(jù)科學(xué)家數(shù)據(jù)分析

2020-08-18 13:30:01

Python命令數(shù)據(jù)分析

2020-05-19 17:09:33

Pandas大數(shù)據(jù)數(shù)據(jù)分析

2024-10-23 09:00:00

數(shù)據(jù)分析Pandas

2021-04-28 16:00:55

數(shù)據(jù)分析人工智能機(jī)器學(xué)習(xí)

2016-08-27 16:16:40

大數(shù)據(jù)

2019-01-28 17:42:33

Python數(shù)據(jù)預(yù)處理數(shù)據(jù)標(biāo)準(zhǔn)化

2025-07-09 07:50:00

2022-07-08 06:01:37

D-Tale輔助工具

2022-07-12 09:02:36

探索性測(cè)試測(cè)試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)