數據缺失、混亂、重複怎麼辦?最全數據清洗指南讓你所向披靡

2020-12-16 澎湃新聞

機器之心

選自TowardsDataScience

作者:Lianne & Justin

機器之心編譯

參與:魔王、杜偉

要獲得優秀的模型,首先需要清洗數據。這是一篇如何在 Python 中執行數據清洗的分步指南。

在擬合機器學習或統計模型之前,我們通常需要清洗數據。用雜亂數據訓練出的模型無法輸出有意義的結果。

數據清洗:從記錄集、表或資料庫中檢測和修正(或刪除)受損或不準確記錄的過程。它識別出數據中不完善、不準確或不相關的部分,並替換、修改或刪除這些髒亂的數據。

「數據清洗」光定義就這麼長,執行過程肯定既枯燥又耗時。

圖源:https://www.kdnuggets.com/2017/09/cartoon-machine-learning-class.html

為了將數據清洗簡單化,本文介紹了一種新型完備分步指南,支持在 Python 中執行數據清洗流程。讀者可以學習找出並清洗以下數據的方法:

缺失數據;

不規則數據(異常值);

不必要數據:重複數據(repetitive data)、複製數據(duplicate data)等;

不一致數據:大寫、地址等;

該指南使用的數據集是 Kaggle 競賽 Sberbank 俄羅斯房地產價值預測競賽數據(該項目的目標是預測俄羅斯的房價波動)。本文並未使用全部數據,僅選取了其中的一部分樣本。

本文兩位作者 Lianne & Justin。

在進入數據清洗流程之前,我們先來看一下數據概況。

# import packagesimport pandas as pdimport numpy as npimport seaborn as sns

import matplotlib.pyplot as pltimport matplotlib.mlab as mlabimport matplotlibplt.style.use('ggplot')from matplotlib.pyplot import figure

%matplotlib inlinematplotlib.rcParams['figure.figsize'] = (12,8)

pd.options.mode.chained_assignment = None

# read the datadf = pd.read_csv('sberbank.csv')

# shape and data types of the dataprint(df.shape)print(df.dtypes)

# select numeric columnsdf_numeric = df.select_dtypes(include=[np.number])numeric_cols = df_numeric.columns.valuesprint(numeric_cols)

# select non numeric columnsdf_non_numeric = df.select_dtypes(exclude=[np.number])non_numeric_cols = df_non_numeric.columns.valuesprint(non_numeric_cols)

從以上結果中,我們可以看到該數據集共有 30,471 行、292 列,還可以辨別特徵屬於數值變量還是分類變量。這些都是有用的信息。

現在,我們可以瀏覽「髒」數據類型檢查清單,並一一攻破。

開始吧!

缺失數據

處理缺失數據/缺失值是數據清洗中最棘手也最常見的部分。很多模型可以與其他數據問題和平共處,但大多數模型無法接受缺失數據問題。

如何找出缺失數據?

本文將介紹三種方法,幫助大家更多地了解數據集中的缺失數據。

方法 1:缺失數據熱圖

當特徵數量較少時,我們可以通過熱圖對缺失數據進行可視化。

cols = df.columns[:30] # first 30 columnscolours = ['#000099', '#ffff00'] # specify the colours - yellow is missing. blue is not missing.sns.heatmap(df[cols].isnull(), cmap=sns.color_palette(colours))

下表展示了前 30 個特徵的缺失數據模式。橫軸表示特徵名,縱軸表示觀察值/行數,黃色表示缺失數據,藍色表示非缺失數據。

例如,下圖中特徵 life_sq 在多個行中存在缺失值。而特徵 floor 只在第 7000 行左右出現零星缺失值。

缺失數據熱圖

方法 2:缺失數據百分比列表

當數據集中存在很多特徵時,我們可以為每個特徵列出缺失數據的百分比。

# if it's a larger dataset and the visualization takes too long can do this.# % of missing.for col in df.columns: pct_missing = np.mean(df[col].isnull()) print('{} - {}%'.format(col, round(pct_missing*100)))

得到如下列表,該表展示了每個特徵的缺失值百分比。

具體而言,我們可以從下表中看到特徵 life_sq 有 21% 的缺失數據,而特徵 floor 僅有 1% 的缺失數據。該列表有效地總結了每個特徵的缺失數據百分比情況,是對熱圖可視化的補充。

前 30 個特徵的缺失數據百分比列表

方法 3:缺失數據直方圖

在存在很多特徵時,缺失數據直方圖也不失為一種有效方法。

要想更深入地了解觀察值中的缺失值模式,我們可以用直方圖的形式進行可視化。

# first create missing indicator for features with missing datafor col in df.columns: missing = df[col].isnull() num_missing = np.sum(missing)

if num_missing > 0: print('created missing indicator for: {}'.format(col)) df['{}_ismissing'.format(col)] = missing

# then based on the indicator, plot the histogram of missing valuesismissing_cols = [col for col in df.columns if 'ismissing' in col]df['num_missing'] = df[ismissing_cols].sum(axis=1)

df['num_missing'].value_counts().reset_index().sort_values(by='index').plot.bar(x='index', y='num_missing')

直方圖可以幫助在 30,471 個觀察值中識別缺失值狀況。

例如,從下圖中可以看到,超過 6000 個觀察值不存在缺失值,接近 4000 個觀察值具備一個缺失值。

缺失數據直方圖

如何處理缺失數據?

這方面沒有統一的解決方案。我們必須研究特定特徵和數據集,據此決定處理缺失數據的最佳方式。

下面介紹了四種最常用的缺失數據處理方法。不過,如果情況較為複雜,我們需要創造性地使用更複雜的方法,如缺失數據建模。

解決方案 1:丟棄觀察值

在統計學中,該方法叫做成列刪除(listwise deletion),需要丟棄包含缺失值的整列觀察值。

只有在我們確定缺失數據無法提供信息時,才可以執行該操作。否則,我們應當考慮其他解決方案。

此外,還存在其他標準。

例如,從缺失數據直方圖中,我們可以看到只有少量觀察值的缺失值數量超過 35。因此,我們可以創建一個新的數據集 df_less_missing_rows,該數據集刪除了缺失值數量超過 35 的觀察值。

# drop rows with a lot of missing values.ind_missing = df[df['num_missing'] > 35].indexdf_less_missing_rows = df.drop(ind_missing, axis=0)

解決方案 2:丟棄特徵

與解決方案 1 類似,我們只在確定某個特徵無法提供有用信息時才丟棄它。

例如,從缺失數據百分比列表中,我們可以看到 hospital_beds_raion 具備較高的缺失值百分比——47%,因此我們丟棄這一整個特徵。

# hospital_beds_raion has a lot of missing.# If we want to drop.cols_to_drop = ['hospital_beds_raion']df_less_hos_beds_raion = df.drop(cols_to_drop, axis=1)

解決方案 3:填充缺失數據

當特徵是數值變量時,執行缺失數據填充。對同一特徵的其他非缺失數據取平均值或中位數,用這個值來替換缺失值。

當特徵是分類變量時,用眾數(最頻值)來填充缺失值。

以特徵 life_sq 為例,我們可以用特徵中位數來替換缺失值。

# replace missing values with the median.med = df['life_sq'].median()print(med)df['life_sq'] = df['life_sq'].fillna(med)

此外,我們還可以對所有數值特徵一次性應用同樣的填充策略。

# impute the missing values and create the missing value indicator variables for each numeric column.df_numeric = df.select_dtypes(include=[np.number])numeric_cols = df_numeric.columns.values

for col in numeric_cols: missing = df[col].isnull() num_missing = np.sum(missing) if num_missing > 0: # only do the imputation for the columns that have missing values. print('imputing missing values for: {}'.format(col)) df['{}_ismissing'.format(col)] = missing med = df[col].median() df[col] = df[col].fillna(med)

很幸運,本文使用的數據集中的分類特徵沒有缺失值。不然,我們也可以對所有分類特徵一次性應用眾數填充策略。

# impute the missing values and create the missing value indicator variables for each non-numeric column.df_non_numeric = df.select_dtypes(exclude=[np.number])non_numeric_cols = df_non_numeric.columns.values

for col in non_numeric_cols: missing = df[col].isnull() num_missing = np.sum(missing) if num_missing > 0: # only do the imputation for the columns that have missing values. print('imputing missing values for: {}'.format(col)) df['{}_ismissing'.format(col)] = missing top = df[col].describe()['top'] # impute with the most frequent value. df[col] = df[col].fillna(top)

解決方案 4:替換缺失值

對於分類特徵,我們可以添加新的帶值類別,如 _MISSING_。對於數值特徵,我們可以用特定值(如-999)來替換缺失值。

這樣,我們就可以保留缺失值,使之提供有價值的信息。

# categoricaldf['sub_area'] = df['sub_area'].fillna('_MISSING_')

# numericdf['life_sq'] = df['life_sq'].fillna(-999)

不規則數據(異常值)

異常值指與其他觀察值具備顯著差異的數據,它們可能是真的異常值也可能是錯誤。

如何找出異常值?

根據特徵的屬性(數值或分類),使用不同的方法來研究其分布,進而檢測異常值。

方法 1:直方圖/箱形圖

當特徵是數值變量時,使用直方圖和箱形圖來檢測異常值。

下圖展示了特徵 life_sq 的直方圖。

# histogram of life_sq.df['life_sq'].hist(bins=100)

由於數據中可能存在異常值,因此下圖中數據高度偏斜。

直方圖

為了進一步研究特徵,我們來看一下箱形圖。

# box plot.df.boxplot(column=['life_sq'])

從下圖中我們可以看到,異常值是一個大於 7000 的數值。

箱形圖

方法 2:描述統計學

對於數值特徵,當異常值過於獨特時,箱形圖無法顯示該值。因此,我們可以查看其描述統計學。

例如,對於特徵 life_sq,我們可以看到其最大值是 7478,而上四分位數(數據的第 75 個百分位數據)是 43。因此值 7478 是異常值。

df['life_sq'].describe()

方法 3:條形圖

當特徵是分類變量時,我們可以使用條形圖來了解其類別和分布。

例如,特徵 ecology 具備合理的分布。但如果某個類別「other」僅有一個值,則它就是異常值。

# bar chart -  distribution of a categorical variabledf['ecology'].value_counts().plot.bar()

條形圖

其他方法:還有很多方法可以找出異常值,如散點圖、z 分數和聚類,本文不過多探討全部方法。

如何處理異常值?

儘管異常值不難檢測,但我們必須選擇合適的處理辦法。而這高度依賴於數據集和項目目標。

處理異常值的方法與處理缺失值有些類似:要麼丟棄,要麼修改,要麼保留。(讀者可以返回上一章節處理缺失值的部分查看相關解決方案。)

不必要數據

處理完缺失數據和異常值,現在我們來看不必要數據,處理不必要數據的方法更加直接。

輸入到模型中的所有數據應服務於項目目標。不必要數據即無法增加價值的數據。

這裡將介紹三種主要的不必要數據類型。

不必要數據類型 1:信息不足/重複

有時一個特徵不提供信息,是因為它擁有太多具備相同值的行。

如何找出重複數據?

我們可以為具備高比例相同值的特徵創建一個列表。

例如,下圖展示了 95% 的行是相同值的特徵。

num_rows = len(df.index)low_information_cols = [] #

for col in df.columns: cnts = df[col].value_counts(dropna=False) top_pct = (cnts/num_rows).iloc[0] if top_pct > 0.95: low_information_cols.append(col) print('{0}: {1:.5f}%'.format(col, top_pct*100)) print(cnts) print()

我們可以逐一查看這些變量,確認它們是否提供有用信息。(此處不再詳述。)

如何處理重複數據?

我們需要了解重複特徵背後的原因。當它們的確無法提供有用信息時,我們就可以丟棄它。

不必要數據類型 2:不相關

再次強調,數據需要為項目提供有價值的信息。如果特徵與項目試圖解決的問題無關,則這些特徵是不相關數據。

如何找出不相關數據?

瀏覽特徵,找出不相關的數據。

例如,記錄多倫多氣溫的特徵無法為俄羅斯房價預測項目提供任何有用信息。

如何處理不相關數據?

當這些特徵無法服務於項目目標時,刪除之。

不必要數據類型 3:複製

複製數據即,觀察值存在副本。

複製數據有兩個主要類型。

複製數據類型 1:基於所有特徵

如何找出基於所有特徵的複製數據?

這種複製發生在觀察值內所有特徵的值均相同的情況下,很容易找出。

我們需要先刪除數據集中的唯一標識符 id,然後刪除複製數據得到數據集 df_dedupped。對比 df 和 df_dedupped 這兩個數據集的形態,找出複製行的數量。

# we know that column 'id' is unique, but what if we drop it?df_dedupped = df.drop('id', axis=1).drop_duplicates()

# there were duplicate rowsprint(df.shape)print(df_dedupped.shape)

我們發現,有 10 行是完全複製的觀察值。

如何處理基於所有特徵的複製數據?

刪除這些複製數據。

複製數據類型 2:基於關鍵特徵

如何找出基於關鍵特徵的複製數據?

有時候,最好的方法是刪除基於一組唯一標識符的複製數據。

例如,相同使用面積、相同價格、相同建造年限的兩次房產交易同時發生的概率接近零。

我們可以設置一組關鍵特徵作為唯一標識符,比如 timestamp、full_sq、life_sq、floor、build_year、num_room、price_doc。然後基於這些特徵檢查是否存在複製數據。

key = ['timestamp', 'full_sq', 'life_sq', 'floor', 'build_year', 'num_room', 'price_doc']

df.fillna(-999).groupby(key)['id'].count().sort_values(ascending=False).head(20)

基於這組關鍵特徵,我們找到了 16 條複製數據。

如何處理基於關鍵特徵的複製數據?

刪除這些複製數據。

# drop duplicates based on an subset of variables.

key = ['timestamp', 'full_sq', 'life_sq', 'floor', 'build_year', 'num_room', 'price_doc']df_dedupped2 = df.drop_duplicates(subset=key)

print(df.shape)print(df_dedupped2.shape)

刪除 16 條複製數據,得到新數據集 df_dedupped2。

不一致數據

在擬合模型時,數據集遵循特定標準也是很重要的一點。我們需要使用不同方式來探索數據,找出不一致數據。大部分情況下,這取決於觀察和經驗。不存在運行和修復不一致數據的既定代碼。

下文介紹了四種不一致數據類型。

不一致數據類型 1:大寫

在類別值中混用大小寫是一種常見的錯誤。這可能帶來一些問題,因為 Python 分析對大小寫很敏感。

如何找出大小寫不一致的數據?

我們來看特徵 sub_area。

df['sub_area'].value_counts(dropna=False)

它存儲了不同地區的名稱,看起來非常標準化。

但是,有時候相同特徵內存在不一致的大小寫使用情況。「Poselenie Sosenskoe」和「pOseleNie sosenskeo」指的是相同的地區。

如何處理大小寫不一致的數據?

為了避免這個問題,我們可以將所有字母設置為小寫(或大寫)。

# make everything lower case.df['sub_area_lower'] = df['sub_area'].str.lower()df['sub_area_lower'].value_counts(dropna=False)

不一致數據類型 2:格式

我們需要執行的另一個標準化是數據格式。比如將特徵從字符串格式轉換為 DateTime 格式。

如何找出格式不一致的數據?

特徵 timestamp 在表示日期時是字符串格式。

df

如何處理格式不一致的數據?

使用以下代碼進行格式轉換,並提取日期或時間值。然後,我們就可以很容易地用年或月的方式分析交易量數據。

df['timestamp_dt'] = pd.to_datetime(df['timestamp'], format='%Y-%m-%d')df['year'] = df['timestamp_dt'].dt.yeardf['month'] = df['timestamp_dt'].dt.monthdf['weekday'] = df['timestamp_dt'].dt.weekday

print(df['year'].value_counts(dropna=False))print()print(df['month'].value_counts(dropna=False))

相關文章:https://towardsdatascience.com/how-to-manipulate-date-and-time-in-python-like-a-boss-ddea677c6a4d

不一致數據類型 3:類別值

分類特徵的值數量有限。有時由於拼寫錯誤等原因可能出現其他值。

如何找出類別值不一致的數據?

我們需要觀察特徵來找出類別值不一致的情況。舉例來說:

由於本文使用的房地產數據集不存在這類問題,因此我們創建了一個新的數據集。例如,city 的值被錯誤輸入為「torontoo」和「tronto」,其實二者均表示「toronto」(正確值)。

識別它們的一種簡單方式是模糊邏輯(或編輯距離)。該方法可以衡量使一個值匹配另一個值需要更改的字母數量(距離)。

已知這些類別應僅有四個值:「toronto」、「vancouver」、「montreal」和「calgary」。計算所有值與單詞「toronto」(和「vancouver」)之間的距離,我們可以看到疑似拼寫錯誤的值與正確值之間的距離較小,因為它們只有幾個字母不同。

from nltk.metrics import edit_distance

df_city_ex = pd.DataFrame(data={'city': ['torontoo', 'toronto', 'tronto', 'vancouver', 'vancover', 'vancouvr', 'montreal', 'calgary']})

df_city_ex['city_distance_toronto'] = df_city_ex['city'].map(lambda x: edit_distance(x, 'toronto'))df_city_ex['city_distance_vancouver'] = df_city_ex['city'].map(lambda x: edit_distance(x, 'vancouver'))df_city_ex

如何處理類別值不一致的數據?

我們可以設置標準將這些拼寫錯誤轉換為正確值。例如,下列代碼規定所有值與「toronto」的距離在 2 個字母以內。

msk = df_city_ex['city_distance_toronto'] <= 2df_city_ex.loc[msk, 'city'] = 'toronto'

msk = df_city_ex['city_distance_vancouver'] <= 2df_city_ex.loc[msk, 'city'] = 'vancouver'

df_city_ex

不一致數據類型 4:地址

地址特徵對很多人來說是老大難問題。因為人們往資料庫中輸入數據時通常不會遵循標準格式。

如何找出地址不一致的數據?

用瀏覽的方式可以找出混亂的地址數據。即便有時我們看不出什麼問題,也可以運行代碼執行標準化。

出於隱私原因,本文採用的房地產數據集沒有地址列。因此我們創建具備地址特徵的新數據集 df_add_ex。

# no address column in the housing dataset. So create one to show the code.df_add_ex = pd.DataFrame(['123 MAIN St Apartment 15', '123 Main Street Apt 12 ', '543 FirSt Av', ' 876 FIRst Ave.'], columns=['address'])df_add_ex

我們可以看到,地址特徵非常混亂。

如何處理地址不一致的數據?

運行以下代碼將所有字母轉為小寫,刪除空格,刪除句號,並將措辭標準化。

df_add_ex['address_std'] = df_add_ex['address'].str.lower()df_add_ex['address_std'] = df_add_ex['address_std'].str.strip() # remove leading and trailing whitespace.df_add_ex['address_std'] = df_add_ex['address_std'].str.replace('\.', '') # remove period.df_add_ex['address_std'] = df_add_ex['address_std'].str.replace('\bstreet\b', 'st') # replace street with st.df_add_ex['address_std'] = df_add_ex['address_std'].str.replace('\bapartment\b', 'apt') # replace apartment with apt.df_add_ex['address_std'] = df_add_ex['address_std'].str.replace('\bav\b', 'ave') # replace apartment with apt.

df_add_ex

現在看起來好多了:

結束了!我們走過了長長的數據清洗旅程。

現在你可以運用本文介紹的方法清洗所有阻礙你擬合模型的「髒」數據了。

參考連結:https://towardsdatascience.com/data-cleaning-in-python-the-ultimate-guide-2020-c63b88bf0a0d

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

原標題:《數據缺失、混亂、重複怎麼辦?最全數據清洗指南讓你所向披靡》

閱讀原文

相關焦點

  • EXCEL數據缺失、混亂、重複怎麼辦?我用ETL帶你走出困境
    在我們的日常工作中,數據清洗通常是一個非常複雜和繁瑣的過程,特別在EXCEL裡進行數據清洗會顯得格外痛苦,例如對數據進行簡單的合併、去重、分列都需要花費不少的時間和功夫。雖然微軟推出了power query這個厲害的清洗組件,但是M語言的門檻相對較高,一般人不易掌握。因此選擇一個簡潔的ETL工具去對數據進行清洗是一個非常好的選擇。
  • 讓數據清澈如水:數據清洗的策略與方法
    在數據倉庫中,數據是面向某一主題的數據的集合,這些數據從多個業務系統抽取而來,不同的數據來源加上歷史數據的堆積,難免會有問題數據出現,這些問題數據大致可以分為三大類:不完整的數據、錯誤的數據以及重複的數據。數據清洗的職責就是分辨、處理這些問題數據。
  • 數據分析師的80%時間都在清洗數據?到底怎麼洗?
    而數據清洗要解決的問題,遠不止7條,我們萬一漏掉一項該怎麼辦呢?有沒有一種方法,我們既可以很方便地記住,又能保證我們的數據得到很好的清洗,提升數據質量呢?  在這裡,我將數據清洗規則總結為以下4個關鍵點,統一起來叫「完全合一」,下面我來解釋下:   完整性:單條數據是否存在空值,統計的欄位是否完善;   全面性:觀察某一列的全部數值,比如在Excel表中,我們選中一列,可以看到該列的平均值、最大值、最小值。
  • Pandas數據清洗工具箱
    在用pandas進行數據處理時,同一個操作經常會重複很多次,由於這些常見的場景涉及到不同類型的數據集,因此本文更加側重於展示和解釋這些代碼可以用於完成哪些工作,以便讀者更加方便地使用它們。在下面的代碼片段中,數據清洗代碼被封裝在了一些函數中,代碼的目的十分直觀。
  • 5大SQL數據清洗方法!
    但真正的原始表是混亂且包含了很多無用的冗餘特徵,所以能夠根據原始數據清洗出相對乾淨的特徵表就很重要。前兩天在Towards Data Science上看到一篇文章,講的是用Pandas做數據清洗,作者將常用的清洗邏輯封裝成了一個個的清洗函數。
  • 數據清洗常用流程
    數據分析80%的時間其實都用在了數據清洗上,數據標準、乾淨、連續才能實施後續的數據統計和數據挖掘。在通常情況下,數據分析有4個關鍵點:1、完善性:單條數據是否完整,統計的欄位是否完整。2、全面性:觀察一列全部數值,查看最大值、最小值、平均值,可以通過常識和業務了解粗略估計數據的可靠性。
  • 我的pandas數據清洗小工具箱
    在用pandas進行數據處理時,同一個操作經常會重複很多次,由於這些常見的場景涉及到不同類型的數據集,因此本文更加側重於展示和解釋這些代碼可以用於完成哪些工作,以便讀者更加方便地使用它們。在下面的代碼片段中,數據清洗代碼被封裝在了一些函數中,代碼的目的十分直觀。
  • Python數據清洗--類型轉換和冗餘數據刪除
    數據分析過程中最頭疼也是工作量最大的部分算是探索和清洗了,探索的目的是了解數據,了解數據背後隱藏的規律,清洗的目的則是為了讓乾淨的數據進入分析或建模的下一個環節。作者將通過三篇文章,詳細講解工作中常規的數據清洗方法,包括數據類型的轉換,重複數據的處理,缺失值的處理以及異常數據的識別和處理。
  • 用Pandas做數據清洗的常用操作!
    數據清洗的乾貨作為一名數據分析師,每天都在完成各種數據分析需求,其中數據清洗是必不可少的一個步驟。一般而言,當提及數據清洗時,其實是主要包括了缺失值處理、重複值處理和異常值處理三類操作,本文即圍繞這這三個方面介紹一下個人的一些習慣操作。01 缺失值處理缺失值是各類數據集中經常會遇到的情形,相較於工整完全的數據記錄,帶有一定的缺失值更接近於數據的真實原貌。
  • Python數據清洗(二):缺失值識別與處理
    Python數據清洗(一):類型轉換和冗餘數據刪除》中分享了有關數據類型轉換和冗餘信息刪除的兩個知識點,接下來繼續講解缺失值的識別和處理辦法。缺失值指的是由於人為或機器等原因導致數據記錄的丟失或隱瞞,缺失值的存在一定程度上會影響後續數據分析和挖掘的結果,所以對他的處理將顯得尤為重要。缺失值的識別判斷一個數據集是否存在缺失觀測,通常從兩個方面入手,一個是變量的角度,即判斷每個變量中是否包含缺失值;另一個是數據行的角度,即判斷每行數據中是否包含缺失值。
  • 知識|數據清洗(data cleaning)的重要性
    但是你要知道「幾行代碼實現XXX」的前提,也就是把一個「髒」數據變成能夠在「幾行代碼」中直接跑出結果的過程可能需要幾十行幾百行代碼進行清洗。根據Ron Cody在他的《Cody's Data Cleaning Techniques Using SAS》中的定義是:確保原始數據的準確輸入檢查字符型變量僅包含有效值檢查數值型變量在預定範圍內檢查是否存在缺失數據檢查並刪除重複數據檢查特殊值是否唯一,如患者編號檢查是否存在無效數據檢查每一個文件內的
  • 數據分析的準備工作:從問題分析到數據清洗
    關於怎麼辦一類的工程問題,本質上是一類關於過程描述模型和概率描述模型的問題。對問題邊界的邊界分析對問題的邊界分析就是我們這個問題解決之後,最好可以達到什麼樣的效果,如果問題沒有能夠解決,最壞的結果是什麼樣的。為什麼我們要對問題進行邊界分析?
  • 數據治理:數據清洗的5個步驟和最佳實踐
    今天來聊一聊數據治理中最磨人的活:數據清洗01  數據清洗到底是什麼?數據清洗也叫數據清理,是指從資料庫或數據表中更正和刪除不準確數據記錄的過程。廣義地說,數據清洗包括識別和替換不完整、不準確、不相關或有問題的數據和記錄。
  • 三步搞定數據清洗【代碼+案例】
    三步搞定數據清洗【代碼+案例】在數據處理的過程中,一般都需要進行數據的清洗工作,如數據集是否存在重複、是否存在確實、數據是否具有完整性和一致性、數據中是否存在異常值等。當發現數據中存在如上可能的問題時,都需要有針對性地處理。長文乾貨預警!
  • 缺失值插補方法程序和數據release, 總結加註解
    1.數據缺失方法處理大全, 經典書籍助你修複數據2.數據清洗管理的知識點全在裡面, 徵服數管不是夢3.數據缺失的填補方法千千種, 總有一款適合你4.實證研究前的數據清理原則缺失值處理的最終目的是讓樣本儘可能代表總體,這樣才能夠讓審稿人放心你的樣本不存在偏差,從而讓推斷出來的結果不具有generalization特徵。在看下面的內容之前,還是先總結一下基本的概念:在對缺失數據進行處理前,了解數據缺失的機制和形式是十分必要的。
  • 重複數據太多怎麼辦?excel下教你如何刪除重複數據
    我們在使用excel表格時經常會從很多表格匯總數據,因此可能就會產生很多數據重複,如果數據少的話,可以通過直接查看來過濾刪除重複數據,但是如果數據多了再通過人工的方式就很不現實了,也非常容易誤刪,那麼有什麼辦法可以自動按規則刪除重複的數據呢?下面就來介紹一下。這使用的是excel2016版本,其它版本也類似。
  • 數據分析之Pandas缺失數據處理
    缺失值的分類按照數據缺失機制可分為:可忽略的缺失完全隨機缺失(missing completely at random, MCAR),所缺失的數據發生的概率既與已觀察到的數據無關,也與未觀察到的數據無關隨機缺失(missing at random, MAR),假設缺失數據發生的概率與所觀察到的變量是有關的
  • 8個Python數據清洗代碼,拿來即用
    如果你經歷過數據清洗的過程,你就會明白我的意思。而這正是撰寫這篇文章的目的——讓讀者更輕鬆地進行數據清洗工作。事實上,我在不久前意識到,在進行數據清洗時,有一些數據具有相似的模式。也正是從那時起,我開始整理並編譯了一些數據清洗代碼(見下文),我認為這些代碼也適用於其它的常見場景。
  • 數據分析:手把手教你Excel實戰
    |沙龍精選自公眾號秦路(ID:tracykanc)文|秦路本文是如何七周成為數據分析師的第三篇教程,如果想要了解寫作初衷,可以先行閱讀七周指南。溫馨提示:如果您已經熟悉Excel,大可不必再看這篇文章,或只挑選部分。
  • 乾貨 | 使用Pandas進行數據清洗的具體操作
    ,或多或少都存在一些瑕疵和不足,比如數據缺失、極端值、數據格式不統一等問題。因此,在分析數據之前需要對數據進行預處理,包括數據的清洗、合併、重塑與轉換。Pandas中專門提供了用於數據預處理的很多函數與方法,用於替換異常數據、合併數據、重塑數據等。數據清洗是一項複雜且繁瑣的工作,同時也是整個數據分析過程中最為重要的環節。