iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 6
0
AI & Data

特徵工程 in 30 days系列 第 7

[瞭解資料特徵]Part3-資料的四個尺度-B

titanic四尺度資料辨別

本文將探討titanic資料中各欄位的資料尺度,並且校正不恰當的資料類型。

#匯入maplotlib做視覺化
import matplotlib.pyplot as plt
#讀取資料
data = pd.read_csv('data/train.csv')

我們可以透過Dataframe的describe方法,讓我們觀看各資料欄位的描述統計。描述統計可以幫助我們對觀測(observation)有初步的了解,通過給定該方法"include='all'"的參數才能看到所有欄位的描述統計,否則預設僅顯示資料類型為數字型的欄位。

describe方法的統計描述

敘述名稱 含意
count 欄位非虛值資料的計數
unique 共有多少值(不重複)
top 出現最多的值
freq 值出現的頻率
mean 算術平均數
std 標準差
min 最小值
25% 落在下四分位數的值的總計
50% 落在中位數的值的總計
75% 落在上四分位數的值的總計
max 最大值

上述的統計描述中,unique/top/freq此三項是針對非數字類型資料的統計描述,而mean/std/25%/50%/75%/max這些欄位針對數字型資料。因此只要是屬於非數字的類型如object/category,都不會有針對數字型的統計敘述,反之亦然。

先看看titanic的統計敘述:

data.describe(include='all')

https://ithelp.ithome.com.tw/upload/images/20181009/20111826rK6ZcgjcAt.jpg

在讀取資料時,若無聲明每個欄位的類型,pandas自行將每個欄位轉換為特定的類型,例如int、float、object、category...等等。但是通常pandas自行的轉換會有不恰當的類型產生,例如將category類型誤轉為int類型。從上面產生的描述統計結果我們已經可以觀察到一些錯誤,第一個欄位PassengerId明顯是屬於名目尺度資料,但是居然有著算術平均數。錯誤的轉換將影響描述統計的結果,對錯誤的類型進行描述統計將會使其描述內容無意義,因此首先需要對每個欄位的資料尺度有所認知,才能為每個欄位設置正確的類型。

以下為各欄位的資料尺度以及應設置的資料類型:
|欄位 | 資料尺度 | 類型|
|---|---|
| PassengerId | 名目尺度 |category|
| Survived | 名目尺度 |category|
| Pclass | 次序尺度 |int|
| Name | 名目尺度 |category|
| Sex | 名目尺度 |category|
| Age | 等比尺度 |float|
| SibSp | 等比尺度 |int|
| Parch | 等比尺度 |int|
| Fare | 等比尺度 |float|
| Cabin | 名目尺度 |category|
| Embarked | 名目尺度 |category|

將每個欄位修正成正確的類型:

data.PassengerId = data.PassengerId.astype('category')
data.Survived = data.Survived.astype('category')
data.Pclass = data.Pclass.astype(int)
data.Name = data.Name.astype('category')
data.Sex = data.Sex.astype('category')
data.Age = data.Age.astype(float)
data.SibSp = data.SibSp.astype(int)
data.Parch = data.Parch.astype(int)
data.Fare = data.Fare.astype(float)
data.Cabin = data.Cabin.astype('category')
data.Embarked = data.Embarked.astype('category')
data.describe(include='all')

https://ithelp.ithome.com.tw/upload/images/20181010/20111826HXzNKwteLS.jpg

透過設定各欄位的正確類型,終於敘述統計都正常了,也因此我們可以程度上的理解每個欄位的基本情形。

補充

以下是另一種在讀取檔案時就處理各欄位類型的設置方式:

column_types={'PassengerId':'category',
                'Survived':'category',
                'Pclass':int,
                'Name':'category',
                'Sex':'category',
                'Age':float,
                'SibSp':int,
                'Parch':int,
                'Fare':float,
                'Cabin':'category',
                'Embarked':'category',}
data = pd.read_csv('data/train.csv', dtype=column_types)

下一篇文章將介紹各尺度資料的視覺化方式。


上一篇
[瞭解資料特徵]Part3-資料的四個尺度-A
下一篇
[瞭解資料特徵]Part3-資料的四個尺度-C
系列文
特徵工程 in 30 days23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言