升降平台找企汇优做网站推广,如何登陆wordpress,完成网站建设成本,网站 参数设置大家好#xff0c;作为一名数据工程师#xff0c;面对糟糕的数据质量#xff0c;可以使用Pandas执行快捷的数据质量检查。本文使用scikit-learn提供的California Housing数据集#xff0c;进行基本数据检查。
一、California Housing数据集概述
【数据集】#xff1a;
…大家好作为一名数据工程师面对糟糕的数据质量可以使用Pandas执行快捷的数据质量检查。本文使用scikit-learn提供的California Housing数据集进行基本数据检查。
一、California Housing数据集概述
【数据集】
https://scikit-learn.org/stable/modules/generated/sklearn.datasets.fetch_california_housing.html 本文使用Scikit-learn数据集模块中的California Housing数据集该数据集包含20000多条记录涵盖了八个数值特征和一个目标房价中值。
接下来将数据集读取到一个名为df的Pandas数据帧中
from sklearn.datasets import fetch_california_housing
import pandas as pd# 获取California Housing数据集
data fetch_california_housing()# 将数据集转换为Pandas DataFrame
df pd.DataFrame(data.data, columnsdata.feature_names)# 添加目标列
df[MedHouseVal] data.target要获取数据集的详细描述运行data.DESCR如下所示
print(data.DESCR)data.DESCR的输出结果
接下来了解一下数据集的基本信息
df.info()输出结果如下
Output RangeIndex: 20640 entries, 0 to 20639
Data columns (total 9 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 MedInc 20640 non-null float641 HouseAge 20640 non-null float642 AveRooms 20640 non-null float643 AveBedrms 20640 non-null float644 Population 20640 non-null float645 AveOccup 20640 non-null float646 Latitude 20640 non-null float647 Longitude 20640 non-null float648 MedHouseVal 20640 non-null float64
dtypes: float64(9)
memory usage: 1.4 MB由于存在数值特征因此也使用describe()方法获取摘要统计信息
df.describe()二、7项基本数据质量检查
2.1 检查缺失值
现实世界的数据集经常存在缺失值为了分析数据和建立模型就需要处理这些缺失值。
为确保数据质量应该检查缺失值的比例是否在特定的容差范围内。然后可以使用适当的填充策略对缺失值进行填充第一步是检查数据集中所有特征的缺失值。
以下代码会检查数据帧df中每一列的缺失值
# 检查数据帧中的缺失值
missing_values df.isnull().sum()
print(Missing Values:)
print(missing_values)结果是一个显示每列缺失值计数的Pandas序列
Output Missing Values:
MedInc 0
HouseAge 0
AveRooms 0
AveBedrms 0
Population 0
AveOccup 0
Latitude 0
Longitude 0
MedHouseVal 0
dtype: int64如上所示此数据集中没有缺失值。
2.2 识别重复记录
数据集中的重复记录可能会影响分析结果应该根据需要检查并删除重复记录。以下是识别并返回df中重复行的代码如果存在重复行它们将包含在结果中
# 检查数据帧中是否有重复行
duplicate_rows df[df.duplicated()]
print(Duplicate Rows:)
print(duplicate_rows)结果是一个空数据帧这意味着数据集中没有重复记录
Output Duplicate Rows:
Empty DataFrame
Columns: [MedInc, HouseAge, AveRooms, AveBedrms, Population, AveOccup, Latitude, Longitude, MedHouseVal]
Index: []2.3 检查数据类型
在分析数据集时经常需要转换或缩放一个或多个特征。为了避免在执行此类操作时出现意外错误重要的是检查列是否都是预期的数据类型。
以下代码检查数据框df中每一列的数据类型
# 检查DataFrame中每一列的数据类型
data_types df.dtypes
print(Data Types:)
print(data_types)在这里所有的数值特征都是预期的浮点数据类型
Output Data Types:
MedInc float64
HouseAge float64
AveRooms float64
AveBedrms float64
Population float64
AveOccup float64
Latitude float64
Longitude float64
MedHouseVal float64
dtype: object2.4 检查异常值
异常值是指与数据集中其他点显著不同的数据点在“California Housing数据集概述”部分本文对数据帧运行了describe()方法。
根据四分位值和最大值可以确定一些特征包含异常值。具体而言这些特征有 MedInc AveRooms AveBedrms Population
处理异常值的一种方法是使用四分位数间距interquartile rangeIQR即第75个四分位数和第25个四分位数之间的差值。如果Q1是第25个四分位数Q3是第75个四分位数那么四分位数间距的计算公式为Q3 - Q1。
然后使用四分位数和IQR来定义区间[Q1 - 1.5 * IQR, Q3 1.5 * IQR]所有在此范围之外的点都是异常值。
columns_to_check [MedInc, AveRooms, AveBedrms, Population]# 查找带有异常值的记录的函数
def find_outliers_pandas(data, column):Q1 data[column].quantile(0.25)Q3 data[column].quantile(0.75)IQR Q3 - Q1lower_bound Q1 - 1.5 * IQRupper_bound Q3 1.5 * IQRoutliers data[(data[column] lower_bound) | (data[column] upper_bound)]return outliers# 对每个指定的列查找带有异常值的记录
outliers_dict {}for column in columns_to-check:outliers_dict[column] find_outliers_pandas(df, column)# 打印每列中带有异常值的记录
for column, outliers in outliers_dict.items():print(fOutliers in {column}:)print(outliers)print(\n)AveRooms列中的异常值 | 用于异常值检查的截断输出
2.5 验证数值范围
对于数值特征一项重要的检查是验证范围。以下代码将验证MedInc值是否在预期范围内并识别出不符合这一标准的数据点
# 检查MedInc列的数值范围
valid_range (0, 16)
value_range_check df[~df[MedInc].between(*valid_range)]
print(Value Range Check (MedInc):)
print(value_range_check)也可以尝试选择其他的数值特征可以看到MedInc列中的所有数值都在预期范围内
Output Value Range Check (MedInc):
Empty DataFrame
Columns: [MedInc, HouseAge, AveRooms, AveBedrms, Population, AveOccup, Latitude, Longitude, MedHouseVal]
Index: []2.6 检查列间的依赖关系
大多数数据集都包含相关的特征因此根据列或特征之间的逻辑相关关系进行检查是很重要的。虽然单个特征本身可能在预期范围内取值但它们之间的关系可能是不一致的。
以下是本文数据集的一个示例在一个有效的记录中“AveRooms”通常应大于或等于“AveBedRms”。
# AveRooms不应小于AveBedrooms
invalid_data df[df[AveRooms] df[AveBedrms]]
print(Invalid Records (AveRooms AveBedrms):)
print(invalid_data)在正在处理的California housing数据集中没有发现这样的无效记录
Output Invalid Records (AveRooms AveBedrms):
Empty DataFrame
Columns: [MedInc, HouseAge, AveRooms, AveBedrms, Population, AveOccup, Latitude, Longitude, MedHouseVal]
Index: []2.7 检查不一致的数据输入
在大多数数据集中不一致的数据输入是一个常见的数据质量问题。例如 日期时间列中的格式不一致 分类变量值的记录不一致 以不同单位记录读数
在本文的数据集中已经验证了列的数据类型并识别了异常值但还可以尝试检查数据输入是否一致。接下来举一个简单的例子检查所有的日期输入是否具有一致的格式。
在这里本文使用正则表达式结合Pandas的apply()函数来检查所有日期输入是否符合YYYY-MM-DD的格式
import pandas as pd
import redata {Date: [2023-10-29, 2023-11-15, 23-10-2023, 2023/10/29, 2023-10-30]}
df pd.DataFrame(data)# 定义预期的日期格式
date_format_pattern r^\d{4}-\d{2}-\d{2}$ # YYYY-MM-DD format# 检查日期值是否符合预期格式的函数
def check_date_format(date_str, date_format_pattern):return re.match(date_format_pattern, date_str) is not None# 对Date列应用格式检查
date_format_check df[Date].apply(lambda x: check_date_format(x, date_format_pattern))# 识别并检索不符合预期格式的日期记录
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.)这将返回不符合预期格式的日期记录
Output Entries that do not follow the expected format:Date
2 23-10-2023
3 2023/10/29
综上当在处理较小的数据分析项目时使用Pandas进行这些数据质量检查是一个很好的起点。根据问题和数据集的不同还可以加入其他检查。