Python数据分析-数据清洗

目录

前言:

1.1数据清洗的背景:

1.1.1数据质量的概括

1.1.2数据质量问题通常可以分为以下几类:

1.1.3数据质量的总结:

1.2数据清洗的概括概述:

1.2.1数据清洗的定义:

1.2.2数据清洗的原理:

1.2.3数据清洗的基本流程:

1.3数据清洗缺失值的查看与处理:

1.4异常值的检测与处理


前言:

        在Python数据分析中,数据清洗是非常重要的一步,它涉及到对原始数据进行处理、筛选和转换,以便后续的数据分析和建模能够更加准确和有效。数据清洗主要是为了解决原始数据中存在的错误、缺失、重复、异常值等问题,以及将数据转换成适合分析的格式。

1.1数据清洗的背景:

        随着大数据时代的到来,数据量的增加和数据来源的多样化,原始数据往往会存在各种问题,如缺失值、异常值、格式不一致等。这些问题会对后续的分析和建模产生影响,因此需要进行数据清洗来提高数据质量和可用性。

1.1.1数据质量的概括

        在Python数据分析中,数据质量是指数据的准确性、完整性、一致性和可靠性。评价数据质量的指标可以包括数据的缺失情况、异常值、重复数据、数据格式是否正确等。

1.1.2数据质量问题通常可以分为以下几类:

  1. 缺失值:数据中存在缺失值,导致分析结果不准确或不完整。
  2. 异常值:数据中存在异常值,可能是由于测量误差或录入错误导致的。
  3. 一致性问题:数据中存在不一致的情况,比如同一属性的取值不一致。
  4. 不准确性:数据本身可能存在错误或不准确的情况。

对于分类问题,优质数据和劣质数据可以根据数据质量指标进行分类:

优质数据:

  • 数据完整性高,缺失值较少或者已经进行了有效处理。
  • 不存在明显的异常值,数据分布符合预期。
  • 数据一致性好,不同来源的数据之间一致性较高。
  • 数据准确性高,经过验证和清洗后可以被信任。

劣质数据:

  • 数据缺失严重,导致无法进行有效分析。
  • 存在大量异常值,影响了数据分析的结果。
  • 数据一致性差,不同来源的数据之间存在矛盾或不一致。
  • 数据准确性低,存在大量错误或不可信的数据。

1.1.3数据质量的总结:

        优质数据和劣质数据之间有着密切的关系,因为劣质数据会严重影响数据分析的结果和结论,甚至可能导致错误的决策。因此,在数据分析过程中,保证数据质量是非常重要的。对数据进行有效的清洗、验证和处理,可以提高数据的质量,从而提高数据分析的准确性和可信度。

1.2数据清洗的概括概述:

        数据清洗是指对原始数据进行处理,包括缺失值处理、异常值处理、重复值处理、数据格式转换等,以确保数据的准确性、完整性和一致性。

1.2.1数据清洗的定义:

        数据清洗是指对原始数据进行处理,包括数据预处理、数据转换等步骤,以清除数据中的错误、不完整或不准确的部分,以便后续的数据分析和建模能够更加准确和有效。

1.2.2数据清洗的原理:

        数据清洗的基本原理是通过一系列的处理步骤,对原始数据进行筛选、转换和处理,以达到清洗数据的目的。

1.2.3数据清洗的基本流程:

        数据清洗的基本流程包括以下几个步骤:

  1. 缺失值处理:检测数据中的缺失值,并采取相应的处理方式,如填充缺失值、删除包含缺失值的记录等。
  2. 异常值处理:检测数据中的异常值,并根据实际情况进行处理,如删除异常值、进行数据修正等。
  3. 重复值处理:检测数据中的重复记录,并根据实际情况进行处理,如删除重复记录、对重复记录进行合并等。
  4. 数据格式转换:对数据进行格式转换,以确保数据的一致性和适用性。

        总之,数据清洗是数据分析过程中不可或缺的一环,通过数据清洗可以提高数据的质量和可用性,为后续的数据分析和建模奠定基础。

        实践案例:假设我们有一个包含学生信息的数据集,其中包括学生姓名、年龄、成绩等信息。我们将使用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数据处理的一些基本操作,包括缺失值处理、重复值处理和异常值处理等。这些操作在实际的数据处理中非常常见,对于数据分析和建模非常重要。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值