用Pandas轻松进行7项基本数据检查

大家好,作为一名数据工程师,面对糟糕的数据质量,可以使用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, columns=data.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: object

2.4 检查异常值

异常值是指与数据集中其他点显著不同的数据点,在“California Housing数据集概述”部分,本文对数据帧运行了describe()方法。

根据四分位值和最大值,可以确定一些特征包含异常值。具体而言,这些特征有:

  • MedInc

  • AveRooms

  • AveBedrms

  • Population

处理异常值的一种方法是使用四分位数间距(interquartile range,IQR),即第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(f"Outliers 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进行这些数据质量检查是一个很好的起点。根据问题和数据集的不同,还可以加入其他检查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/205280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【管理运筹学】背诵手册(七)| 网络计划与排队论

七、网络计划 网络图中的第一个事项称为起始事项&#xff0c;它只表示整个任务的开始&#xff1b;而最后一个事项称为终止事项&#xff0c;它只表示整个任务的结束&#xff1b;介于起始事项和终止事项之间的所有事项都称为中间事项&#xff0c;它既表示前项工作的结束&#xf…

智能优化算法应用:基于广义正态分布算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于广义正态分布算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于广义正态分布算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.广义正态分布算法4.实验参数设定5.算…

智能优化算法应用:基于原子轨道搜索算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于原子轨道搜索算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于原子轨道搜索算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.原子轨道搜索算法4.实验参数设定5.算…

Python 作业答疑_6.15~6.18

一、Python 一班 1. 比较字符串 1.1 问题描述 比较两个字符串A和B&#xff0c;字符串A和B中的字符都是大写字母&#xff0c;确定A中是否包含B中所有的字符。 1.2 问题示例 例如&#xff0c;给出A"ABCD"&#xff0c;B"ACD"&#xff0c;返回True&#x…

硬件基础:差模和共模

一直以来&#xff0c;都难以理解差模和共模这两个概念&#xff0c;什么差分信号、差模信号、共模信号&#xff0c;差模干扰、共模干扰……虽然看了一些资料&#xff0c;但貌似说法还挺多的&#xff0c;理解起来仍然是一头雾水。所以&#xff0c;专门用一篇文章来好好研究下这个…

结构体对齐和补齐

结构体的对齐和补齐的规则&#xff1a; 对齐&#xff1a;假定从零地址开始&#xff0c;每成员的起始地址编号&#xff0c;必须是它本身字节数的整数倍。 补齐&#xff1a;结构的总字节数必须是它最大成员的整数倍。 注意&#xff1a;在Linux系统下计算补齐、对齐时&#xff0c;…

算法学习系列(六):高精度加法、减法、乘法、除法

目录 引言一、高精度加法1.题目描述2.代码实现3.测试 二、高精度减法1.题目描述2.代码实现3.测试 三、高精度乘法1.题目描述2.代码实现3.测试 四、高精度除法1.题目描述2.代码实现3.测试 引言 本文介绍了高精度加法、高精度减法、高精度乘法、高精度除法&#xff0c;这个高精度…

软件开发自动化到智能文档检索:大语言模型驱动的开源项目盘点 | 开源专题 No.46

shroominic/codeinterpreter-api Stars: 2.4k License: MIT 这是一个 ChatGPT 代码解释器的开源实现项目&#xff0c;使用了 LangChain 和 CodeBoxes 进行后端沙盒式 Python 代码执行。该项目具有以下特性和优势&#xff1a; 数据集分析、股票图表绘制、图像处理等功能支持网…

KubeSphere Marketpalce 上新!Databend Playground 助力快速启动数据分析环境

12 月 5 日&#xff0c;Databend Labs 旗下 Databend Playground&#xff08;社区尝鲜版&#xff09;成功上架青云科技旗下 KubeSphere Marketplace 云原生应用扩展市场&#xff0c;为用户提供一个快速学习和验证 Databend 解决方案的实验环境。 关于 Databend Playground Dat…

Flask之手搓bootstrap翻页

使用bootstrap框架的翻页组件时&#xff0c;记起在学习使用laravel框架的时候&#xff0c;只需要添加相应的功能代码&#xff0c;就可以直接使用翻页组件了&#xff0c;但缺少自定义&#xff0c;或者说自定义起来有点麻烦。 自己手搓翻页组件&#xff0c;不仅能加深对flask的认…

Java架构师系统架构设计服务拆分应用

目录 1 概论2 微服务应用的分层架构-阿里系应用内部模块分层3 如何从不同维度对服务进行拆分4【案例分析】阿里新零售业务的微服务拆分5 如何理解微服务的无状态化6 如何通过接口版本控制实现向后兼容7 可用性的保障手段-流量整形8 如何设计网关层限流和分布式限流9 EDA事件驱动…

STM32基础教程 p18 UART通信协议基础知识

1 UART通信协议简介 UART通信协议详细介绍 1.1 串行通信的简介 1. 单工通信&#xff1a;学校广播 2. 半双工通信&#xff1a;对讲机 3. 全双工通信&#xff1a;手机打电话 UART:通用的同步异步收发器 1.1.1 同步通信 组成&#xff1a;数据线、时钟线、偏选信号线 收发双方…

从文字到使用,一文读懂Kafka服务使用

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

大数据在互联网营销中的应用:案例与策略

互联网时代的营销领域正经历着一场由大数据驱动的变革。在2023年&#xff0c;大数据的应用已成为推动市场策略和决策的关键因素。本文将探讨大数据如何影响互联网营销&#xff0c;并通过实际案例分析展示其在提升营销效果方面的作用。 首先&#xff0c;通过分析海量数据&#x…

NumSharp

github地址&#xff1a;https://github.com/SciSharp/NumSharp High Performance Computation for N-D Tensors in .NET, similar API to NumPy. NumSharp (NS) is a NumPy port to C# targetting .NET Standard. NumSharp is the fundamental package needed for scientific …

第二十一章——网络通信

一.网络程序设计基础 1.局域网与互联网 2.网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。 1.1 TCP/IP层次结构 2.TCP与UDP协议 TCP可保证数据从一端送至另一端时&#xff0c;能够确实送达&#xff0c;而且抵达的数据的排列顺序和送出时的顺序相…

设备间的指令通信

指令通信的概念 要进行设备和设备之间的交流就需要通过串口发送数据进行交流 而串口发送简单的数据只需要传输介质 但是要发送复杂的数据就需要介质和传输的规则了 三种应用场景 比如在上位机和mcu之间 通过上位机管理控制器 从而控制电池 单片机和单片机之间 用户输入数据到…

HTTPS加密协议:保护你的隐私与安全的铠甲

在当今数字时代&#xff0c;隐私和安全保护变得至关重要。而HTTPS加密协议作为互联网通信的保护铠甲&#xff0c;扮演着重要角色。无论你是网站开发者还是普通用户&#xff0c;了解HTTPS加密协议的工作原理和技术细节都是至关重要的。本篇博文将带你深入探索HTTPS加密协议&…

国产麒麟操作系统部署记录

前提&#xff1a;部署项目首先要安装各种软件&#xff0c;在内网环境下无法在线下载。 思路&#xff1a;首先部署一台能上网的系统&#xff0c;在此系统下只下载包&#xff0c;然后传到另一台内网系统下进行安装&#xff1b; 1、最开始yum未安装&#xff0c;因此需要先安装yu…

C语言中的动态内存管理

在C语言中&#xff0c;动态内存管理是通过一系列的标准库函数来实现的&#xff0c;这些函数包括malloc, free, calloc 和 realloc。它们允许程序在运行时动态地分配和释放内存&#xff0c;这是管理复杂数据结构&#xff08;如链表、树等&#xff09;时非常有用的功能。 为什么…