目录
前言:
在Python数据分析中,数据清洗是非常重要的一步,它涉及到对原始数据进行处理、筛选和转换,以便后续的数据分析和建模能够更加准确和有效。数据清洗主要是为了解决原始数据中存在的错误、缺失、重复、异常值等问题,以及将数据转换成适合分析的格式。
1.1数据清洗的背景:
随着大数据时代的到来,数据量的增加和数据来源的多样化,原始数据往往会存在各种问题,如缺失值、异常值、格式不一致等。这些问题会对后续的分析和建模产生影响,因此需要进行数据清洗来提高数据质量和可用性。
1.1.1数据质量的概括
在Python数据分析中,数据质量是指数据的准确性、完整性、一致性和可靠性。评价数据质量的指标可以包括数据的缺失情况、异常值、重复数据、数据格式是否正确等。
1.1.2数据质量问题通常可以分为以下几类:
- 缺失值:数据中存在缺失值,导致分析结果不准确或不完整。
- 异常值:数据中存在异常值,可能是由于测量误差或录入错误导致的。
- 一致性问题:数据中存在不一致的情况,比如同一属性的取值不一致。
- 不准确性:数据本身可能存在错误或不准确的情况。
对于分类问题,优质数据和劣质数据可以根据数据质量指标进行分类:
优质数据:
- 数据完整性高,缺失值较少或者已经进行了有效处理。
- 不存在明显的异常值,数据分布符合预期。
- 数据一致性好,不同来源的数据之间一致性较高。
- 数据准确性高,经过验证和清洗后可以被信任。
劣质数据:
- 数据缺失严重,导致无法进行有效分析。
- 存在大量异常值,影响了数据分析的结果。
- 数据一致性差,不同来源的数据之间存在矛盾或不一致。
- 数据准确性低,存在大量错误或不可信的数据。
1.1.3数据质量的总结:
优质数据和劣质数据之间有着密切的关系,因为劣质数据会严重影响数据分析的结果和结论,甚至可能导致错误的决策。因此,在数据分析过程中,保证数据质量是非常重要的。对数据进行有效的清洗、验证和处理,可以提高数据的质量,从而提高数据分析的准确性和可信度。
1.2数据清洗的概括概述:
数据清洗是指对原始数据进行处理,包括缺失值处理、异常值处理、重复值处理、数据格式转换等,以确保数据的准确性、完整性和一致性。
1.2.1数据清洗的定义:
数据清洗是指对原始数据进行处理,包括数据预处理、数据转换等步骤,以清除数据中的错误、不完整或不准确的部分,以便后续的数据分析和建模能够更加准确和有效。
1.2.2数据清洗的原理:
数据清洗的基本原理是通过一系列的处理步骤,对原始数据进行筛选、转换和处理,以达到清洗数据的目的。
1.2.3数据清洗的基本流程:
数据清洗的基本流程包括以下几个步骤:
- 缺失值处理:检测数据中的缺失值,并采取相应的处理方式,如填充缺失值、删除包含缺失值的记录等。
- 异常值处理:检测数据中的异常值,并根据实际情况进行处理,如删除异常值、进行数据修正等。
- 重复值处理:检测数据中的重复记录,并根据实际情况进行处理,如删除重复记录、对重复记录进行合并等。
- 数据格式转换:对数据进行格式转换,以确保数据的一致性和适用性。
总之,数据清洗是数据分析过程中不可或缺的一环,通过数据清洗可以提高数据的质量和可用性,为后续的数据分析和建模奠定基础。
实践案例:假设我们有一个包含学生信息的数据集,其中包括学生姓名、年龄、成绩等信息。我们将使用Python进行数据分析,处理数据中的缺失值、重复值,并进行数据填充和删除处理。
1.3数据清洗缺失值的查看与处理:
1.首先创建了一个包含学生信息的DataFrame,输出其数据并查看该数据。
import pandas as pd
# 创建示例数据
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十', '郑十一', '周九'],
'年龄': [18, 20, 22, None, 25, 26, 27, 28, None, 27],
'成绩': [85, 90, 75, 60, None, 88, 92, 78, 80, 92]
}
df = pd.DataFrame(data)
图1
2.判断数据查看方法和是否存在缺失值:
可以使用isnull()方法和notnull()方法,代码如图2:
# 缺失值查看方法
print("数据缺失值情况:")
print(df.isnull())
# 判断数据是否存在缺失值
print("判断数据是否存在缺失值:")
print(df.isnull().any())
图2
图2运行代码结果:
使用isnull()方法缺失值返回True,非缺失值返回False;
使用notnull()方法与isnull()方法正好相反,缺失值返回是False,非缺失值返回True。
现展示isnull()方法,notnull()方法则反之。
补充一个小知识点:如果使用df[df.isnull()=False],则会将所有非缺失值的数据找出来,只针对Serise对象。
3.缺失值的删除处理:
通过数据缺失的情况,将下面的缺失值删除,主要使用dropna()方法,该方法用于删除含有缺失值的行,代码如图3:
# 缺失值删除处理
print("删除缺失值处理后的数据:")
df_dropna = df.dropna()
print(df_dropna)
图3
图3代码运行结果:
从运行结果得知:dropna()方法将所有包含缺失值的数据全部删除了。
4.缺失值填充处理,如图4:
对于缺失数据,如果比例高于30%可以选择放弃这个指标,做删除处理;低于30%尽量不要删除,而是选择将这部分数据填充,一般以0、均值、众数(大多数)填充。 DataFrame 对象中的 fillna ()函数可以实现填充缺失数据。
# 缺失值填充处理
print("填充缺失值处理后的数据:")
df_fillna = df.fillna(0) # 填充为0
print(df_fillna)
图4
图4代码运行结果:
5.数据清洗重复值的处理,如图5:
# 重复值处理
# 判断每行数据是否重复
print("判断每行数据是否重复:")
print(df.duplicated())
# 去除全部重复的数据
print("去除全部重复的数据:")
df_drop_duplicates = df.drop_duplicates()
print(df_drop_duplicates)
# 去除指定列的重复数据
print("去除指定列的重复数据:")
df_drop_duplicates_col = df.drop_duplicates(subset=['姓名'])
print(df_drop_duplicates_col)
图5
图5代码运行结果:
6.以下是完整的代码,如图6:
import pandas as pd
# 创建示例数据
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十', '郑十一', '周九'],
'年龄': [18, 20, 22, None, 25, 26, 27, 28, None, 27],
'成绩': [85, 90, 75, 60, None, 88, 92, 78, 80, 92]
}
df = pd.DataFrame(data)
# 缺失值查看方法
print("数据缺失值情况:")
print(df.isnull())
# 判断数据是否存在缺失值
print("判断数据是否存在缺失值:")
print(df.isnull().any())
# 缺失值删除处理
print("删除缺失值处理后的数据:")
df_dropna = df.dropna()
print(df_dropna)
# 缺失值填充处理
print("填充缺失值处理后的数据:")
df_fillna = df.fillna(0) # 填充为0
print(df_fillna)
# 重复值处理
# 判断每行数据是否重复
print("判断每行数据是否重复:")
print(df.duplicated())
# 去除全部重复的数据
print("去除全部重复的数据:")
df_drop_duplicates = df.drop_duplicates()
print(df_drop_duplicates)
# 去除指定列的重复数据
print("去除指定列的重复数据:")
df_drop_duplicates_col = df.drop_duplicates(subset=['姓名'])
print(df_drop_duplicates_col)
图6
在上面的代码中,我们使用了Pandas库来处理数据。
首先创建了一个包含学生信息的DataFrame,然后使用Pandas提供的方法对缺失值和重复值进行处理。
通过isnull()方法和notnull()方法可以判断数据中是否存在缺失值。
使用dropna()方法可以删除缺失值,fillna()方法可以填充缺失值。
对于重复值,使用duplicated()方法可以判断每行数据是否重复,使用drop_duplicates()方法可以去除重复的数据。
这些方法可以帮助我们在数据分析中处理缺失值和重复值,使得数据更加清洁和准确。
1.4异常值的检测与处理
首先了解一下什么是异常值。在数据分析中异常值是指超出或低于正常范围的值,如年龄大于200、身高大于3米、宝贝总数量为负数等类似数据。那么这些数据如何检测呢?主要有以下几种方法。
(1)根据给定的数据范围进行判断,不在范围内的数据视为异常值。
(2)均方差。
在统计学中,如果一个数据分布近似正态分布(数据分布的一种形式,正态分布的概率密度函数曲线呈钟形,两头低、中间高、左右对称,因此人们又经常称之为钟形曲线),那么大约68%的数据值会在均值的一个标准差范围内,大约95%会在两个标准差范围内,大约99.7%会在3个标准差范围内。
(3)箱形图。
箱形图是显示一组数据分散情况资料的统计图。它可以将数据通过四分位数的形式进行图形化描述。箱形图通过上限和下限作为数据分布的边界。任何高于上限或低于下限的数据都可以认为是异常值,如图 所示
箱形图
了解异常值的检测,接下来介绍如何处理异常值,主要包括以下几种处理方式。
(1)最常用的方式是删除。
(2)将异常值当缺失值处理,以某个值充填。
案例如图7
#处理异常值
#删除异常值
df_drop_outliers = df[(df['年龄'] >= 18) & (df['年龄'] <= 30) & (df['成绩'] >= 60) & (df['成绩'] <= 100)]
print("删除异常值后的数据:")
print(df_drop_outliers)
#将异常值当缺失值处理,以某个值填充
df_fill_outliers = df.copy()
df_fill_outliers['年龄'] = df_fill_outliers['年龄'].fillna(25)
df_fill_outliers['成绩'] = df_fill_outliers['成绩'].fillna(80)
print("填充异常值后的数据:")
print(df_fill_outliers)
图7
其图7代码运行结果:
以下是完整的代码:
import pandas as pd
# 创建示例数据
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十', '郑十一', '周九'],
'年龄': [18, 20, 22, None, 25, 26, 27, 28, None, 27],
'成绩': [85, 90, 75, 60, None, 88, 92, 78, 80, 92]
}
df = pd.DataFrame(data)
# 缺失值查看方法
print("数据缺失值情况:")
print(df.isnull())
# 判断数据是否存在缺失值
print("判断数据是否存在缺失值:")
print(df.isnull().any())
# 缺失值删除处理
print("删除缺失值处理后的数据:")
df_dropna = df.dropna()
print(df_dropna)
# 缺失值填充处理
print("填充缺失值处理后的数据:")
df_fillna = df.fillna(0)
# 填充为0
print(df_fillna)
# 重复值处理
# 判断每行数据是否重复
print("判断每行数据是否重复:")
print(df.duplicated())
# 去除全部重复的数据
print("去除全部重复的数据:")
df_drop_duplicates = df.drop_duplicates()
print(df_drop_duplicates)
# 去除指定列的重复数据
print("去除指定列的重复数据:")
df_drop_duplicates_col = df.drop_duplicates(subset=['姓名'])
print(df_drop_duplicates_col)
#处理异常值
#删除异常值
df_drop_outliers = df[(df['年龄'] >= 18) & (df['年龄'] <= 30) & (df['成绩'] >= 60) & (df['成绩'] <= 100)]
print("删除异常值后的数据:")
print(df_drop_outliers)
#将异常值当缺失值处理,以某个值填充
df_fill_outliers = df.copy()
df_fill_outliers['年龄'] = df_fill_outliers['年龄'].fillna(25)
df_fill_outliers['成绩'] = df_fill_outliers['成绩'].fillna(80)
print("填充异常值后的数据:")
print(df_fill_outliers)
以上代码主要涉及了以下知识点:
1. 创建示例数据:使用字典构建数据,并使用pandas的DataFrame函数将数据转换为DataFrame格式。
2. 缺失值查看和处理:使用pandas的isnull()函数查看数据中的缺失值,使用any()函数判断数据中是否存在缺失值,使用dropna()函数删除缺失值,使用fillna()函数填充缺失值。
3. 重复值处理:使用duplicated()函数判断每行数据是否重复,使用drop_duplicates()函数去除重复数据。
4. 处理异常值:使用布尔索引筛选出符合条件的数据,使用fillna()函数填充缺失值。
总结起来,以上代码主要涉及了pandas数据处理的一些基本操作,包括缺失值处理、重复值处理和异常值处理等。这些操作在实际的数据处理中非常常见,对于数据分析和建模非常重要。