Pandas數據分析實戰01——Abalone Data Set(鮑魚數據集)

> 打算從基礎開始學習數據分析,給自己一個整理內容和學習消化的時間,所以,這也將成為我的學習筆記。

1. 數據描述

原始數據集包括六個屬性:Gender,Length,Diameter,Height,Weight,Rings:

  • Gender :M (male), F (female), I (infant)
  • Length:最長外殼尺寸(毫米)
  • Diameter:垂直於長度的直徑(毫米)
  • Height:帶殼肉的高度(毫米)
  • Weight:整隻鮑魚的重量(克)
  • Rings:確定鮑魚的實際年齡,有點像估計一棵樹的年齡。 隨著鮑魚的生長,在鮑魚殼中形成環,通常以每年一環的速度形成。

2. 數據讀取

2.1 導入庫

<code>import pandas as pd/<code> 

2.2 讀取文件

<code>data = pd.read_csv("abalone.csv")/<code>

2.3 查看數據表信息

先來一波兒基礎操作,熱熱身~

<code>data.columns                          # 查看數據列名
data.shape # 查看數據框中有多少個觀測值
data.head(4) # 打印數據的前四行
data.head(4)['Rings'] # 打印前四行中Rings的值
data.tail(3) # 提取數據集的最後三行
data.tail(3)['Weight'] # 輸出最後三行鮑魚的重量
data.loc[577]['Diameter'] # 輸出第577行的直徑值
data.mean()['Height'] # 輸出高度列的平均值/<code>

什麼(O_o)?? 沒難度?那是因為我不想掉頭髮!

<code># 提取 gender 為M並且 weight 值低於0.75的數據框的行子集
subset=data[(data['Gender']=='M') & (data['Weight']<0.75)]
# 輸出此子集中 diameter 的平均值
subset.mean()['Diameter']
# 輸出年齡等於18的鮑魚的最小長度
data.loc[data["Rings"]==18,"Length"].min()/<code>

3. 數據呈現

3.1 鮑魚任意兩個屬性之間的關係可視化:

==交叉表與熱圖結合==(個人覺得是數據分析界的炸雞和啤酒)

熱圖的色彩變化豐富多樣、信息表達生動飽滿,搭配交叉表的使用,是一種非常不錯的可視化手段,被用於各種大數據分析場景,我在這裡嘗試一下:

<code>import seaborn as sns                                                 # 導入seaborn繪圖模塊
tab = pd.crosstab(data['Height'],data['Gender']) # 做Height列和Gender列的交叉表
sns.heatmap(tab) # 對交叉表進行熱圖呈現/<code>

輸出結果如下圖:

Pandas數據分析實戰01——Abalone Data Set(鮑魚數據集)

3.2 鮑魚三個屬性之間的關係可視化:

<code>sns.scatterplot(data=data,x='Length',y='Weight',hue='Gender',s=300) 
plt.legend(loc='upper left')/<code>

輸出結果如圖:一般很難讀懂按這種方式可視化的多種特徵的關係信息,下一次,會有更好地方式,值得期待。

Pandas數據分析實戰01——Abalone Data Set(鮑魚數據集)


4. 數據分析

鮑魚的體重與它們有多少個環有關嗎?

==劃重點== 開始分析之前,先把數據清洗一下:

<code>data.describe()/<code>

運行之後,是這醬紫的......

Pandas數據分析實戰01——Abalone Data Set(鮑魚數據集)

我們囧囧有神.....哦不.....是炯炯有神的兩隻“照妖鏡”發現一隻千年鮑魚精,呔!妖精,哪裡逃,快還我真實數據~

於是,便有了下面一場"惡戰"(其實也就一行代碼,看來這隻鮑魚精道行不夠).........

<code>data.loc[data.Rings==1500,'Rings']=15/<code>

言歸正傳,數據集中難免存在數據錯誤,根據數據集中的其他相關數據,我將其修正為了15。

回到問題:鮑魚的體重和環之間是否存在聯繫?

==解決方案1==

<code>import matplotlib.pyplot as plt
plt.scatter(data['Rings'],data['Weight'])
plt.show()/<code>

輸出結果如下圖:從散點圖中可以看出,鮑魚的環和體重不存在明顯的相關關係。

Pandas數據分析實戰01——Abalone Data Set(鮑魚數據集)

==解決方案2==

<code>data.corr()        # 對數據集進行相關性分析/<code>

輸出結果如下:可見鮑魚的weight和rings並沒有很強的關聯。

Pandas數據分析實戰01——Abalone Data Set(鮑魚數據集)

==解決方案3==

<code>data_mean=data.groupby('Rings').mean()     # 求所有鮑魚的環的平均值
plt.plot(data_mean['Weight']) # 繪製折線圖/<code>

輸出結果如下:

Pandas數據分析實戰01——Abalone Data Set(鮑魚數據集)

奉上一張思維導圖

Pandas數據分析實戰01——Abalone Data Set(鮑魚數據集)

> 這篇筆記一定還有很多不完善的地方,希望朋友們多多提出不足,大家一起交流,期待!

> 下一次的筆記:把所有數據分析可能用到的模塊函數進行總結。


分享到:


相關文章: