日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

竞赛数据清洗缺失值_Kaggle 数据清洗挑战 Day 1 - 手把手教你五步处理缺失值

發(fā)布時(shí)間:2024/9/27 87 豆豆
生活随笔 收集整理的這篇文章主要介紹了 竞赛数据清洗缺失值_Kaggle 数据清洗挑战 Day 1 - 手把手教你五步处理缺失值 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前些天報(bào)名參加了 Kaggle 的 Data Cleaning 5天挑戰(zhàn),5天的任務(wù)如下:

  • Day 1: Handling missing values
  • Day 2: Data scaling and normalization
  • Day 3: Cleaning and parsing dates
  • Day 4: Fixing encoding errors (no more messed up text fields!)
  • Day 5: Fixing inconsistent data entry & spelling errors

今天是第一天,任務(wù)是處理數(shù)據(jù)集中的缺失值。活動(dòng)的主持人 Rachael Tatman 給出的操作步驟如下:

  • Take a first look at the data
  • See how many missing data points we have
  • Figure out why the data is missing
  • Drop missing values
  • Filling in missing values
  • 我們一步一步來進(jìn)行操作~


    1、觀察數(shù)據(jù)

    首先我們在 notebook 中加載需要清理的數(shù)據(jù)集,數(shù)據(jù)集的位置可以在本地也可以在服務(wù)器上。今天官方例子中的數(shù)據(jù)集是關(guān)于美國橄欖球比賽的,然后我們動(dòng)手去做的是關(guān)于舊金山建筑許可證的數(shù)據(jù)集。

    引入 pandas 和 numpy 包,從給出的路徑讀數(shù)據(jù)集,

    # modules we'll use import pandas as pd import numpy as np# read in all our data sf_permits = pd.read_csv("../input/building-permit-applications-data/Building_Permits.csv")# set seed for reproducibility np.random.seed(0)

    然后用 sample(10) 方法隨機(jī)抽取數(shù)據(jù)集中的 10 條數(shù)據(jù),結(jié)果中有很多數(shù)據(jù)格被標(biāo)記了 "NaN" ,這些就是我們需要處理的缺失值。

    sf_permits.sample(10)


    2、觀察缺失值的數(shù)量

    現(xiàn)在我們知道了數(shù)據(jù)集中存在缺失值,再來看看每一個(gè) column 下缺失值的具體數(shù)量(由于 column 過多我們只選了前 15 列)。

    # get the number of missing data points per column missing_values_count = sf_permits.isnull().sum()# look at the # of missing points in the first ten columns missing_values_count[0:15]

    然后可以進(jìn)一步看看數(shù)據(jù)集中缺失值的數(shù)目占總數(shù)的百分比,結(jié)果約為 26.26%,四分之一的數(shù)據(jù)都缺失了!

    # how many total missing values do we have? total_cells = np.product(sf_permits.shape) total_missing = missing_values_count.sum()# percent of data that is missing (total_missing/total_cells) * 100


    3、分析出現(xiàn)缺失值的原因

    這一部分的重點(diǎn)之一是我們對數(shù)據(jù)的直覺,Rachael 所用的說法是 "data intuition",也就是說我們需要搞清楚我們面對的數(shù)據(jù)集為什么如此,以及對我們后續(xù)的數(shù)據(jù)分析會有什么樣的影響。由于缺乏經(jīng)驗(yàn),入門者這部分可能比較困擾。我們需要考慮的問題之一是:

    某個(gè)數(shù)據(jù)的缺失是因?yàn)樗鼪]有被記錄還是根本不存在?

    如果一個(gè)數(shù)據(jù)值缺失是因?yàn)樗静淮嬖?#xff0c;那么我們就沒有必要去猜它可能的值,我們需要做的就是讓它繼續(xù)為 NaN;如果一個(gè)數(shù)據(jù)值缺失是因?yàn)闆]有被記錄,我們就應(yīng)該基于與它同行同列的其他值,來猜想它的可能值。

    拿當(dāng)前的數(shù)據(jù)集做例子,我們來看一下 Street Number Suffix 和 Zipcode 的缺失值:

    missing_values_count = sf_permits.isnull().sum() missing_values_count[['Street Number Suffix', 'Zipcode']]

    我們看到 Street Number Suffix 下有大量缺失值,由于它對地址來說并不是一個(gè)普遍存在的數(shù)據(jù),所以我猜想它的缺失值根本不存在;有少量的 Zipcode 數(shù)據(jù)缺失,由于每個(gè)地址的郵編一定存在,所以它應(yīng)該是沒有被記錄。


    4、剔除缺失值

    如果你實(shí)在急于做分析,可以采取的方案之一就是剔除掉任何包含缺失值的行或列。但這種方法是并不推薦,要想得到更好的分析結(jié)果,還是要先合理地處理缺失值。

    如果確定想要剔除掉含有缺失值的數(shù)據(jù)行,可以直接使用 pandas 的 dropna() 方法:

    # remove all the rows that contain a missing value sf_permits.dropna()

    但是我們得到的結(jié)果是 0 rows × 43 columns,因?yàn)槊恳恍卸即嬖谌笔е?#xff01;

    再剔除含有缺失值的數(shù)據(jù)列:

    # remove all columns with at least one missing value columns_with_na_dropped = sf_permits.dropna(axis=1) columns_with_na_dropped.head()

    看一下剔除空值前后的 column 數(shù)目對比:

    # just how much data did we lose? print("Columns in original dataset: %d n" % sf_permits.shape[1]) print("Columns with na's dropped: %d" % columns_with_na_dropped.shape[1])


    5、自動(dòng)補(bǔ)全缺失值

    除了直接 drop 掉含有缺失值的行或列,另一個(gè)方案是去補(bǔ)全缺失的值。這部分我們先截取一部分 column 的數(shù)據(jù)進(jìn)行處理,便于觀察。

    # get a small subset of the sf_permits dataset subset_sf_permits = sf_permits.loc[:,"Street Number Suffix":"Issued Date"].head() subset_sf_permits

    如果數(shù)據(jù)的類型都是數(shù)字,我們可以考慮把所有的缺失值都填為 0:

    # replace all NA's with 0 subset_sf_permits.fillna(0)

    但該數(shù)據(jù)集中,有 string 型的數(shù)據(jù),還有另一種選擇就是將空值置為與它相鄰的下一行對應(yīng)的數(shù)據(jù),沒有下一行數(shù)據(jù)就置為 0:

    # comes directly after it and then subset_sf_permits.fillna(method = "bfill", axis=0).fillna("0")

    處理不同類型的數(shù)據(jù)集,需要采取不同的方法,還可以用相應(yīng) column 的平均值來補(bǔ)全該列的缺失值等。

    這就是 5 Day Challenge 第一天的內(nèi)容,總地來說是非常基礎(chǔ)的清洗數(shù)據(jù)方法,完畢~


    歡迎大家關(guān)注微信公眾號【數(shù)據(jù)池塘】:

    總結(jié)

    以上是生活随笔為你收集整理的竞赛数据清洗缺失值_Kaggle 数据清洗挑战 Day 1 - 手把手教你五步处理缺失值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。