成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Pandas 探索性數據分析綜合實戰

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

?本文主要分析數據、組織數據、清洗、過濾、排序、聚合、可視化變量之間的關系、分類圖和數據的分散性。在一個數據科學項目的生命周期中,我們有70%以上的時間用于數據分析,比如進行特征工程和特征選擇。特征工程講的是根據我們的直覺用有效的數據來填補缺失值,糾正錯誤的數據類型,組織不平衡的數據集,而特征選擇講的是只選擇那些有助于預測變量或你感興趣的輸出的特征。要做好探索性數據分析,需要對pandas、numpy、scipy、matplotlib和seaborn庫有很好的了解。

本文的目的是了解數據集的要點,即對數據的初步了解。當你收到一個數據集時,你需要對數據集的變量、數據類型和變量之間的關系有一個概念。在大多數情況下,我們會在數據集中發現不完整的數據,原因可能是用戶可能不想填寫數據,在互聯網上傳輸時數據丟失,或者用戶可能沒有數據可以填寫。這是需要解決的第一步。不匹配的數據類型,如DateTime變量一般被讀成對象(String),或者有時整數被讀成浮點數,反之亦然。在本文中,我們將使用一個實時的泰坦尼克號數據集,并對其進行探索性數據分析。

導入庫和數據集

開始導入所需的庫pandas、numpy、seaborn、matplotlib、魔法命令%matplotlib inline,并使用 read_csv 方法加載titanic數據集(titanic.csv),如圖所示。

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

%matplotlib inline

現在我們可以開始對數據框架做一些初步的檢查,比如讀取幾行幾列以確保數據被加載到數據框架中,找到它的形狀(行數和列數),數據類型的信息。

我們可以使用head方法查看前幾行,如圖所示。這個方法需要一個整數作為參數,并返回總的行數。

圖片

我們可以通過shape?屬性知道數據集的大小,如行和列的總數,如下所示,該屬性顯示一個有891行和12列的元組。為了找到變量的數據類型,我們有info方法,它可以返回變量、數據類型、內存使用量和關于每個變量的缺失值,Age?只有714,Cabin只有 204,不是891,因此他們需要被填充,在接下來我們對其進行可視化并處理缺失值。

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?庫對數據集進行可視化處理,也可以使用isnull?方法檢查 "Age"? 和 "Cabin" 兩列中缺失的數值。

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個空值,'Cabin' 有687個空值,下面的圖是整個數據集的可視化圖。

圖片

現在來處理缺失的 "Age"? 值,"Age"? 的數據類型是數字(Float),一般來說,缺失的數字列會用它們的平均值或中位數或任何基于我們直覺的值來填補,無論哪種都是最好的。在更新空值之前,檢查一下基于 "Pclass"? 和 "Sex"? 列的均值和中值。下圖顯示了基于 "Pclass"? 和 "Sex" 分組的平均數和中位數。這里我們可以看到平均數和中位數都非常接近,所以更好的選擇是繼續使用中位數。

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

所以根據'Pclass'和'Sex'?,我們可以更新'Age'?變量的空值。這里我們可以使用loc?方法來尋找和替換'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

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

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

圖片

數據處理部分已經完成?,F在可以利用這些干凈的數據,對其進行分析。在進一步進行之前,了解每一列所代表的內容。下面描述了每一列含義,這些字段很簡單,不言自明。

PassengerId:只是一個序列號

Survived: 0 = No, 1 = Yes

pclass: Ticket class 1 = 1st, 2 = 2nd, 3 = 3rd

sibsp: # 在泰坦尼克號上的兄弟姐妹/配偶的數量

parch: # 泰坦尼克號上的父母/子女的數量

ticket: Ticket number

cabin: Cabin number

embarked: Port of Embarkation C = Cherbourg, Q = Queenstown, S = Southampton

現在我們對數據集有了一個概念,但我們想從數據集中定義的問題陳述是什么?它可以是像幸存的總人數或他們旅行的班級,或有多少人有兄弟姐妹或配偶,父母-子女,等等。接下來用seaborn來繪圖。

變量識別

僅僅重申我們在統計學章節中討論過的內容,我們有兩種變量分類和數字,這些變量又進一步細分為序數和名義,以及數字變量的連續和離散,如圖所示。

圖片

分類名義變量

順序變量的定義與分類變量類似;這里需要提到的是,它沒有任何特定的順序。一個例子是我們不能在這里假設男性大于女性。我們不能假設一個類別大于或小于其他類別,而且它們沒有任何特定的順序。

分類順序變量

分類的、序數的變量可以按特定的順序排列。一個例子是,如果你被要求填寫餐廳的食物和服務的反饋,這可能是諸如美味、好、更好、更差和最差。這有一個從正到負的特定順序,或者另一個例子是指一個班級的成績。

數值連續變量

數字連續變量有無限的值。這方面的例子可以是股票價格、身高、體重、年齡,等等。這些值沒有任何有限的區間。

數值離散變量

數值離散型變量有有限的值。一個例子是你有多少輛汽車或你有多少個孩子。它有一個確定的值,要么是0,1,2,等等。我們不可能有1.24輛汽車或1.05個孩子。

在泰坦尼克號數據集中有哪些不同的變量,并直觀地看到它們的數據類型表示。我們可以看到這些變量的單獨表示。

Name:分類名義變量。

Surviver:分類名義變量。

Pclass:分類順序變量。

Sex:分類名義變量。

Embark:分類名義變量。

Age:數值連續變量。

SibSp:數值離散變量。

Parch:數值離散變量。

Fare:數值連續變量。

單變量分析

單變量分析是關于一個單一的變量。使用seaborn,我們可以將一些最重要的圖示可視化。我們把船上幸存的乘客總數可視化。可以使用計數圖的方法,如圖所示。我們可以看到891人中只有350多人幸存下來。

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

圖片

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

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

圖片

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

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

圖片

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

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

圖片

雙變量分析

到現在為止,我們已經學習了單變量的分析,稱為單變量分析,而雙變量分析是用來尋找兩個變量之間的關系。為此尋找'Fare'和'Age'?變量之間的關系,我們可以使用relplot方法,如圖所示。

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

圖片

我們可以看到年齡范圍從0到80,大部分票價都落在0到100的范圍內,同時,38歲的人有一個500以上的票價的離群值。很少有變量落在200到300的范圍內。不同的雙變量圖是散點圖、熱圖、線圖和柱狀圖。

散點圖

散點圖是統計可視化的骨干。它用一團數據點描述了兩個變量之間的聯合分布。這一點我們已經在上圖中比較了 "Fare"?和 "Age"的例子。

線形圖

在seaborn中,線狀圖可以通過relplot?方法完成,通過設置參數kind='line',如下圖所示。

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

圖片

熱圖

使用熱圖法,我們可以用二維的形式來表示數據。數據值在圖中被表示為顏色,同時還有變量之間的數字相關性。在這里使用泰坦尼克號數據集,我們試圖表示變量之間是否有任何相關性。下圖顯示,這些變量之間沒有太大的相關性,而且它們是相互獨立的。

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

圖片

柱狀圖

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

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

圖片

多變量分析

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

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

圖片

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

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

圖片

處理離群點

離群點大多可能是數據中的一個錯誤,如打字錯誤、季節性趨勢等。在這種情況下,在計算匯總統計或從數據中得出見解之前,應該將其從數據集中糾正或刪除,否則會導致不正確的分析。假設你有一個美國不同州的披薩價格數據集,如下圖所示。

圖片

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

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

圖片

我們可以看到我們有3個離群點。現在如果我們計算價格的平均值,我們得到的數值是35.12。

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

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)

特征選擇

在特征選擇中,我們在那些對使用機器學習進行預測很重要的變量上下功夫。一些特征,如'Passengerid'、'Name'、'Cabin' 和 'Ticket'在進行分析時不會產生任何影響,因此在使用機器學習算法進行任何預測之前,最好放棄這些變量。

還是使用泰坦尼克號數據集并對其進行特征選擇,如下圖所示。

圖片

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

圖片

在上圖中,我們可以看到這些列被刪除了,很好,但是這里有一個問題。ML算法只理解數字,但是我們這里有兩個類別列'Sex'和'Embarked'?,它們是對象(字符串)類型。性別列有男性和女性兩個類別,而對于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()

圖片

現在我們可以將數據集的信息特征和目標進行劃分。X?變量就像一個帶有行和列的矩陣,稱為特征,而y變量是目標。

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

因此,我們可以結束特征選擇部分,進一步將特征分為train_test_split,并應用適當的機器學習算法,進行預測。

圖片

總結

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

責任編輯:武曉燕 來源: 數據STUDIO
相關推薦

2020-05-13 11:32:28

數據分析數值分析

2020-10-28 18:28:12

Pandas數據分析GUI

2024-06-12 11:57:51

2024-07-30 12:10:22

2012-09-04 09:20:26

測試軟件測試探索測試

2023-12-22 09:14:48

EDA數據分析探索性數據分析

2024-05-21 13:33:49

2016-10-11 15:32:26

探索性大數據

2023-05-11 13:39:39

EDA數據分析

2023-11-30 07:23:53

數據分析EDA

2017-04-25 18:35:47

硅谷數據科學家數據分析

2020-08-18 13:30:01

Python命令數據分析

2020-05-19 17:09:33

Pandas大數據數據分析

2024-10-23 09:00:00

數據分析Pandas

2016-08-27 16:16:40

大數據

2021-04-28 16:00:55

數據分析人工智能機器學習

2019-01-28 17:42:33

Python數據預處理數據標準化

2022-07-08 06:01:37

D-Tale輔助工具

2022-07-12 09:02:36

探索性測試測試

2021-04-12 09:00:00

機器學習深度學習技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区在线播放 | 一本大道久久a久久精二百 欧洲一区二区三区 | 久久99网 | 天天拍天天草 | 欧美在线小视频 | 久久av网| 三级欧美 | 中文字幕人成乱码在线观看 | 日韩欧美理论片 | 久久久国| 欧美综合在线观看 | 91精品国产综合久久小仙女图片 | 午夜亚洲 | 亚洲成人一区二区三区 | 欧美日韩在线视频一区 | 色综合久久天天综合网 | 九九九国产| 欧美在线视频一区 | 久久精品一区 | 中文字幕在线精品 | 久久精品毛片 | 剑来高清在线观看 | www.成人.com | 亚洲精选久久 | h视频在线观看免费 | 91精品国产综合久久婷婷香蕉 | 天天射影院 | 国产精品久久久久久久 | 国产精品免费一区二区三区四区 | 精品在线一区二区三区 | 日韩精品极品视频在线观看免费 | 亚洲 欧美 综合 | 在线一区视频 | 亚洲综合中文字幕在线观看 | 欧美一区二区三区电影 | 青青草精品视频 | 中文字幕乱码一区二区三区 | 精品久久久久一区二区国产 | 波多野结衣一区二区 | 亚洲成人高清 | 99精品免费久久久久久久久日本 |