自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

嚴(yán)把數(shù)據(jù)質(zhì)量關(guān),用Pandas輕松進(jìn)行七項(xiàng)基本數(shù)據(jù)檢查

大數(shù)據(jù) 數(shù)據(jù)分析
當(dāng)在處理較小的數(shù)據(jù)分析項(xiàng)目時(shí),使用Pandas進(jìn)行這些數(shù)據(jù)質(zhì)量檢查是一個(gè)很好的起點(diǎn)。根據(jù)問(wèn)題和數(shù)據(jù)集的不同,還可以加入其他檢查。

一、簡(jiǎn)介

作為一名數(shù)據(jù)工程師,面對(duì)糟糕的數(shù)據(jù)質(zhì)量,該如何進(jìn)行必要的數(shù)據(jù)質(zhì)量檢查呢?可以使用Pandas執(zhí)行快捷的數(shù)據(jù)質(zhì)量檢查。

本文使用scikit-learn提供的California Housing數(shù)據(jù)集。

【數(shù)據(jù)集】:https://scikit-learn.org/stable/modules/generated/sklearn.datasets.fetch_california_housing.html

二、California Housing數(shù)據(jù)集概述

本文使用Scikit-learn數(shù)據(jù)集模塊中的California Housing數(shù)據(jù)集。該數(shù)據(jù)集包含20000多條記錄,涵蓋了八個(gè)數(shù)值特征和一個(gè)目標(biāo)房?jī)r(jià)中值。

【數(shù)據(jù)集模塊】:https://scikit-learn.org/stable/datasets/real_world.html#real-world-datasets

接下來(lái),將數(shù)據(jù)集讀取到一個(gè)名為df的Pandas數(shù)據(jù)幀中:

from sklearn.datasets import fetch_california_housing
import pandas as pd

# 獲取California Housing數(shù)據(jù)集
data = fetch_california_housing()

# 將數(shù)據(jù)集轉(zhuǎn)換為Pandas DataFrame
df = pd.DataFrame(data.data, columns=data.feature_names)

# 添加目標(biāo)列
df['MedHouseVal'] = data.target

要獲取數(shù)據(jù)集的詳細(xì)描述,運(yùn)行data.DESCR,如下所示:

print(data.DESCR)

圖片圖片

data.DESCR的輸出結(jié)果

接下來(lái)了解一下數(shù)據(jù)集的基本信息:

df.info()

輸出結(jié)果如下:

Output >>>


RangeIndex: 20640 entries, 0 to 20639
Data columns (total 9 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   MedInc    20640 non-null  float64
 1   HouseAge  20640 non-null  float64
 2   AveRooms  20640 non-null  float64
 3   AveBedrms 20640 non-null  float64
 4   Population   20640 non-null  float64
 5   AveOccup  20640 non-null  float64
 6   Latitude  20640 non-null  float64
 7   Longitude 20640 non-null  float64
 8   MedHouseVal  20640 non-null  float64
dtypes: float64(9)
memory usage: 1.4 MB

由于存在數(shù)值特征,因此也使用describe()方法獲取摘要統(tǒng)計(jì)信息:

df.describe()

圖片圖片

df.describe()的輸出結(jié)果

三、7項(xiàng)基本數(shù)據(jù)質(zhì)量檢查

3.1 檢查缺失值

現(xiàn)實(shí)世界的數(shù)據(jù)集經(jīng)常存在缺失值。為了分析數(shù)據(jù)和建立模型,就需要處理這些缺失值。

為確保數(shù)據(jù)質(zhì)量,應(yīng)該檢查缺失值的比例是否在特定的容差范圍內(nèi)。然后,可以使用適當(dāng)?shù)奶畛洳呗詫?duì)缺失值進(jìn)行填充。

因此,第一步是檢查數(shù)據(jù)集中所有特征的缺失值。

以下代碼會(huì)檢查數(shù)據(jù)幀df中每一列的缺失值:

# 檢查數(shù)據(jù)幀中的缺失值
missing_values = df.isnull().sum()
print("Missing Values:")
print(missing_values)

結(jié)果是一個(gè)顯示每列缺失值計(jì)數(shù)的Pandas序列:

Output >>>

Missing Values:
MedInc      0
HouseAge    0
AveRooms    0
AveBedrms   0
Population  0
AveOccup    0
Latitude    0
Longitude   0
MedHouseVal 0
dtype: int64

如上所示,此數(shù)據(jù)集中沒(méi)有缺失值。

3.2 識(shí)別重復(fù)記錄

數(shù)據(jù)集中的重復(fù)記錄可能會(huì)影響分析結(jié)果。因此,應(yīng)該根據(jù)需要檢查并刪除重復(fù)記錄。

以下是識(shí)別并返回df中重復(fù)行的代碼。如果存在重復(fù)行,它們將包含在結(jié)果中:

# 檢查數(shù)據(jù)幀中是否有重復(fù)行
duplicate_rows = df[df.duplicated()]
print("Duplicate Rows:")
print(duplicate_rows)

結(jié)果是一個(gè)空數(shù)據(jù)幀。這意味著數(shù)據(jù)集中沒(méi)有重復(fù)記錄:

Output >>>

Duplicate Rows:
Empty DataFrame
Columns: [MedInc, HouseAge, AveRooms, AveBedrms, Population, AveOccup, Latitude, Longitude, MedHouseVal]
Index: []

3.3 檢查數(shù)據(jù)類型

在分析數(shù)據(jù)集時(shí),經(jīng)常需要轉(zhuǎn)換或縮放一個(gè)或多個(gè)特征。為了避免在執(zhí)行此類操作時(shí)出現(xiàn)意外錯(cuò)誤,重要的是檢查列是否都是預(yù)期的數(shù)據(jù)類型。

以下代碼檢查數(shù)據(jù)框df中每一列的數(shù)據(jù)類型:

# 檢查DataFrame中每一列的數(shù)據(jù)類型
data_types = df.dtypes
print("Data Types:")
print(data_types)

在這里,所有的數(shù)值特征都是預(yù)期的浮點(diǎn)數(shù)據(jù)類型:

Output >>>

Data Types:
MedInc      float64
HouseAge    float64
AveRooms    float64
AveBedrms   float64
Population  float64
AveOccup    float64
Latitude    float64
Longitude   float64
MedHouseVal float64
dtype: object

3.4 檢查異常值

異常值是指與數(shù)據(jù)集中其他點(diǎn)顯著不同的數(shù)據(jù)點(diǎn)。在“California Housing數(shù)據(jù)集概述”部分,本文對(duì)數(shù)據(jù)幀運(yùn)行了describe()方法。

根據(jù)四分位值和最大值,可以確定一些特征包含異常值。具體而言,這些特征有:

  • MedInc
  • AveRooms
  • AveBedrms
  • Population

處理異常值的一種方法是使用四分位數(shù)間距(interquartile range,IQR),即第75個(gè)四分位數(shù)和第25個(gè)四分位數(shù)之間的差值。如果Q1是第25個(gè)四分位數(shù),Q3是第75個(gè)四分位數(shù),那么四分位數(shù)間距的計(jì)算公式為Q3 - Q1。

然后使用四分位數(shù)和IQR來(lái)定義區(qū)間[Q1 - 1.5 * IQR, Q3 + 1.5 * IQR]。所有在此范圍之外的點(diǎn)都是異常值。

columns_to_check = ['MedInc', 'AveRooms', 'AveBedrms', 'Population']

# 查找?guī)в挟惓V档挠涗浀暮瘮?shù)
def find_outliers_pandas(data, column):
 Q1 = data[column].quantile(0.25)
 Q3 = data[column].quantile(0.75)
 IQR = Q3 - Q1
 lower_bound = Q1 - 1.5 * IQR
 upper_bound = Q3 + 1.5 * IQR
 outliers = data[(data[column] < lower_bound) | (data[column] > upper_bound)]
 return outliers

# 對(duì)每個(gè)指定的列查找?guī)в挟惓V档挠涗?outliers_dict = {}

for column in columns_to-check:
 outliers_dict[column] = find_outliers_pandas(df, column)

# 打印每列中帶有異常值的記錄
for column, outliers in outliers_dict.items():
 print(f"Outliers in '{column}':")
 print(outliers)
 print("\n")

圖片圖片

'AveRooms'列中的異常值 | 用于異常值檢查的截?cái)噍敵?/p>

3.5 驗(yàn)證數(shù)值范圍

對(duì)于數(shù)值特征,一項(xiàng)重要的檢查是驗(yàn)證范圍。這可以確保特征的所有觀測(cè)值都在預(yù)期范圍內(nèi)。

以下代碼將驗(yàn)證MedInc值是否在預(yù)期范圍內(nèi),并識(shí)別出不符合這一標(biāo)準(zhǔn)的數(shù)據(jù)點(diǎn):

# 檢查'MedInc'列的數(shù)值范圍
valid_range = (0, 16)  
value_range_check = df[~df['MedInc'].between(*valid_range)]
print("Value Range Check (MedInc):")
print(value_range_check)

也可以嘗試選擇其他的數(shù)值特征。但可以看到,MedInc列中的所有數(shù)值都在預(yù)期范圍內(nèi):

Output >>>

Value Range Check (MedInc):
Empty DataFrame
Columns: [MedInc, HouseAge, AveRooms, AveBedrms, Population, AveOccup, Latitude, Longitude, MedHouseVal]
Index: []

3.6 檢查列間的依賴關(guān)系

大多數(shù)數(shù)據(jù)集都包含相關(guān)的特征。因此,根據(jù)列(或特征)之間的邏輯相關(guān)關(guān)系進(jìn)行檢查是很重要的。

雖然單個(gè)特征本身可能在預(yù)期范圍內(nèi)取值,但它們之間的關(guān)系可能是不一致的。

以下是本文數(shù)據(jù)集的一個(gè)示例。在一個(gè)有效的記錄中,“AveRooms”通常應(yīng)大于或等于“AveBedRms”。

# AveRooms不應(yīng)小于AveBedrooms
invalid_data = df[df['AveRooms'] < df['AveBedrms']]
print("Invalid Records (AveRooms < AveBedrms):")
print(invalid_data)

在正在處理的California housing數(shù)據(jù)集中,沒(méi)有發(fā)現(xiàn)這樣的無(wú)效記錄:

Output >>>

Invalid Records (AveRooms < AveBedrms):
Empty DataFrame
Columns: [MedInc, HouseAge, AveRooms, AveBedrms, Population, AveOccup, Latitude, Longitude, MedHouseVal]
Index: []

3.7 檢查不一致的數(shù)據(jù)輸入

在大多數(shù)數(shù)據(jù)集中,不一致的數(shù)據(jù)輸入是一個(gè)常見的數(shù)據(jù)質(zhì)量問(wèn)題。例如:

  • 日期時(shí)間列中的格式不一致
  • 分類變量值的記錄不一致
  • 以不同單位記錄讀數(shù)

在本文的數(shù)據(jù)集中,已經(jīng)驗(yàn)證了列的數(shù)據(jù)類型并識(shí)別了異常值。但還可以嘗試檢查數(shù)據(jù)輸入是否一致。

接下來(lái)舉一個(gè)簡(jiǎn)單的例子,檢查所有的日期輸入是否具有一致的格式。

在這里,本文使用正則表達(dá)式結(jié)合Pandas的apply()函數(shù)來(lái)檢查所有日期輸入是否符合YYYY-MM-DD的格式:

import pandas as pd
import re

data = {'Date': ['2023-10-29', '2023-11-15', '23-10-2023', '2023/10/29', '2023-10-30']}
df = pd.DataFrame(data)

# 定義預(yù)期的日期格式
date_format_pattern = r'^\d{4}-\d{2}-\d{2}$'  # YYYY-MM-DD format

# 檢查日期值是否符合預(yù)期格式的函數(shù)
def check_date_format(date_str, date_format_pattern):
 return re.match(date_format_pattern, date_str) is not None

# 對(duì)'Date'列應(yīng)用格式檢查
date_format_check = df['Date'].apply(lambda x: check_date_format(x, date_format_pattern))

# 識(shí)別并檢索不符合預(yù)期格式的日期記錄
non_adherent_dates = df[~date_format_check]

if not non_adherent_dates.empty:
 print("Entries that do not follow the expected format:")
 print(non_adherent_dates)
else:
 print("All dates are in the expected format.")

這將返回不符合預(yù)期格式的日期記錄:

Output >>>

Entries that do not follow the expected format:
      Date
2  23-10-2023
3  2023/10/29

四、總結(jié)

本文介紹了使用Pandas進(jìn)行常見數(shù)據(jù)質(zhì)量檢查的方法。

當(dāng)在處理較小的數(shù)據(jù)分析項(xiàng)目時(shí),使用Pandas進(jìn)行這些數(shù)據(jù)質(zhì)量檢查是一個(gè)很好的起點(diǎn)。根據(jù)問(wèn)題和數(shù)據(jù)集的不同,還可以加入其他檢查。

責(zé)任編輯:武曉燕 來(lái)源: Python學(xué)研大本營(yíng)
相關(guān)推薦

2024-02-22 16:54:02

2025-01-13 08:20:00

Python數(shù)據(jù)抓取

2010-10-08 09:02:03

JavaScript基

2022-08-02 09:32:47

pandas移動(dòng)計(jì)算

2022-04-28 18:47:04

Pandas函數(shù)Python

2023-02-08 07:44:56

Pandas數(shù)據(jù)分析

2016-08-18 14:13:55

JavaScript基本數(shù)據(jù)引用數(shù)據(jù)

2019-06-27 08:03:34

Oracle數(shù)據(jù)庫(kù)監(jiān)聽

2017-04-26 14:23:08

互聯(lián)網(wǎng)虛擬藥庫(kù)公共服務(wù)

2011-05-26 14:27:56

java

2021-04-28 18:16:24

Rust數(shù)據(jù)類型

2019-11-11 14:55:25

Redis數(shù)據(jù)類型命令

2020-03-02 13:45:18

Redis數(shù)據(jù)結(jié)構(gòu)Java

2023-08-15 16:20:42

Pandas數(shù)據(jù)分析

2020-10-30 11:09:30

Pandas數(shù)據(jù)代碼

2016-08-23 00:33:56

數(shù)據(jù)中心創(chuàng)新

2023-06-11 17:00:06

2009-08-14 11:15:45

C#基本數(shù)據(jù)類型

2024-10-28 12:57:36

Pandas數(shù)據(jù)清洗

2010-04-27 11:03:39

Oracle Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)