Pandas电商订单数据清洗实战:缺失值、重复值、异常值处理及影响分析
为什么电商订单数据清洗如此重要?
Pandas数据清洗实战:手把手教你处理“脏”数据
1. 模拟电商订单数据集
2. 缺失值处理
2.1 删除缺失值:dropna()
2.2 填充缺失值:fillna()
2.3 缺失值处理的影响分析
3. 重复值处理
3.1 查找重复值:duplicated()
3.2 删除重复值:drop_duplicates()
3.3 重复值处理的影响分析
4. 异常值处理
4.1 异常值检测
4.2 异常值处理
4.3 异常值处理的影响分析
总结与思考
大家好,我是你们的IT老朋友,今天咱们来聊聊电商数据分析中至关重要的一环——数据清洗。相信不少做数据分析,特别是电商数据分析的朋友,都遇到过各种“脏”数据:缺失值、重复值、异常值……这些问题数据如果不处理,就像一颗颗定时炸弹,会严重影响后续分析结果的准确性和可靠性。别担心,今天我就带你用Pandas这把“瑞士军刀”,手把手教你搞定这些数据“拦路虎”,并深入分析不同处理方法对后续分析结果的影响。
为什么电商订单数据清洗如此重要?
在深入探讨具体操作之前,咱们先来明确一下数据清洗的重要性。电商订单数据,可以说是电商运营的“生命线”。通过分析订单数据,我们可以了解用户行为、商品销售情况、营销活动效果等等,从而做出更明智的商业决策。但是,原始的订单数据往往包含各种各样的问题,例如:
- 缺失值: 用户信息不完整(如缺失收货地址)、商品信息缺失(如缺失商品价格)等。
- 重复值: 由于系统bug或者人为操作失误,导致同一订单被重复记录。
- 异常值: 订单金额异常高(可能是刷单)或异常低(可能是系统错误)、下单时间异常等。
这些问题数据如果不处理,会直接影响后续分析的准确性。比如,如果订单金额存在大量缺失值,那么计算GMV(总交易额)时就会出现严重偏差;如果存在大量重复订单,那么统计订单量时就会虚高。因此,数据清洗是电商数据分析的“地基”,只有把“地基”打牢了,才能盖起“高楼大厦”。
Pandas数据清洗实战:手把手教你处理“脏”数据
接下来,咱们就进入实战环节,看看如何利用Pandas处理电商订单数据中的缺失值、重复值和异常值。为了方便大家理解,我会结合一个模拟的电商订单数据集来进行演示。
1. 模拟电商订单数据集
首先,我们用Pandas创建一个模拟的电商订单数据集,其中包含一些常见的缺失值、重复值和异常值:
import pandas as pd import numpy as np # 创建模拟数据 data = { 'order_id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'user_id': [101, 102, 103, 101, 105, 106, 107, 108, 109, 110], 'order_time': ['2023-10-26', '2023-10-26', '2023-10-27', '2023-10-27', '2023-10-28', '2023-10-28', '2023-10-29', '2023-10-29', '2023-10-30', '2023-10-30'], 'product_id': [1, 2, np.nan, 1, 5, 6, 7, 8, 9, 10], 'product_name': ['A', 'B', None, 'A', 'E', 'F', 'G', 'H', 'I', 'J'], 'price': [100, 200, np.nan, 100, 500, 600, 700, 800, 900, 10000], 'quantity': [1, 2, 1, 1, 1, 1, 1, 1, 1, 2], 'address': ['北京', '上海', '广州', '北京', '深圳', np.nan, '杭州', '成都', '重庆', '武汉'] } # 创建DataFrame df = pd.DataFrame(data) # 插入重复数据 df = pd.concat([df, df.iloc[0:2]], ignore_index=True) print(df)
这个数据集包含订单ID、用户ID、下单时间、商品ID、商品名称、价格、数量、收货地址等字段。其中,product_id
、product_name
、price
和address
字段存在缺失值(np.nan
),price
字段存在异常值(10000),并且前两条订单是重复的。
2. 缺失值处理
Pandas提供了多种处理缺失值的方法,常见的有:
- 删除缺失值:
dropna()
方法 - 填充缺失值:
fillna()
方法
2.1 删除缺失值:dropna()
dropna()
方法可以删除包含缺失值的行或列。对于电商订单数据,我们通常不会直接删除包含缺失值的订单,因为这可能会损失大量有价值的信息。但是,如果某些字段的缺失值比例非常高,或者缺失值对分析结果影响不大,那么可以考虑删除。
# 删除包含缺失值的行 df_dropna = df.dropna() print(df_dropna) # 删除'address'列中包含缺失值的行 df_dropna_address = df.dropna(subset=['address']) print(df_dropna_address)
注意: dropna()
方法默认会删除包含任何缺失值的行。可以通过subset
参数指定要检查的列,how
参数指定删除方式('any'表示只要有缺失值就删除,'all'表示所有值都缺失才删除),thresh
参数指定非缺失值的最小数量。
2.2 填充缺失值:fillna()
fillna()
方法可以用指定的值填充缺失值。对于不同的字段,我们可以采用不同的填充策略:
product_id
和product_name
: 可以用众数(出现次数最多的值)或者相邻值填充。price
: 可以用平均值、中位数或者根据业务规则填充(例如,用同类商品的平均价格填充)。address
: 可以用“未知”或者根据用户ID查找历史订单的地址进行填充。
# 用众数填充'product_id'和'product_name' df['product_id'].fillna(df['product_id'].mode()[0], inplace=True) df['product_name'].fillna(df['product_name'].mode()[0], inplace=True) # 用平均值填充'price' df['price'].fillna(df['price'].mean(), inplace=True) # 用'未知'填充'address' df['address'].fillna('未知', inplace=True) print(df)
注意: fillna()
方法可以通过value
参数指定填充值,method
参数指定填充方法('ffill'表示用前一个非缺失值填充,'bfill'表示用后一个非缺失值填充),inplace
参数指定是否修改原始DataFrame。
2.3 缺失值处理的影响分析
不同的缺失值处理方法会对后续分析结果产生不同的影响。例如:
- 删除缺失值: 可能会导致样本量减少,信息损失,甚至引入偏差(如果缺失值不是随机分布的)。
- 用平均值/中位数填充: 可能会降低数据的方差,掩盖数据的真实分布。
- 用众数填充: 可能会导致某些值的比例过高,影响分析结果。
因此,在选择缺失值处理方法时,我们需要综合考虑数据的特点、缺失值的比例、业务需求等因素,选择最合适的处理方法。没有绝对正确的处理方法,只有相对合适的。
3. 重复值处理
Pandas提供了duplicated()
方法和drop_duplicates()
方法来处理重复值。
3.1 查找重复值:duplicated()
duplicated()
方法可以查找重复的行,返回一个布尔Series,表示每一行是否是重复的。
# 查找所有重复行 duplicated_rows = df.duplicated() print(duplicated_rows) # 查找'order_id'列的重复值 duplicated_order_ids = df.duplicated(subset=['order_id']) print(duplicated_order_ids)
注意: duplicated()
方法默认会检查所有列,可以通过subset
参数指定要检查的列,keep
参数指定保留哪一个重复值('first'表示保留第一个,'last'表示保留最后一个,False表示全部标记为重复)。
3.2 删除重复值:drop_duplicates()
drop_duplicates()
方法可以删除重复的行。
# 删除所有重复行 df_drop_duplicates = df.drop_duplicates() print(df_drop_duplicates) # 删除'order_id'列的重复值 df_drop_duplicates_order_id = df.drop_duplicates(subset=['order_id']) print(df_drop_duplicates_order_id)
注意: drop_duplicates()
方法的参数与duplicated()
方法类似。
3.3 重复值处理的影响分析
删除重复值通常不会对后续分析结果产生负面影响,反而可以提高数据的准确性。但是,在某些情况下,我们可能需要保留重复值,例如:
- 分析重复购买行为: 如果我们想分析用户的重复购买行为,那么就需要保留重复的订单数据。
- 区分不同类型的重复: 有些重复值可能是正常的,例如同一用户在不同时间下了相同的订单;有些重复值可能是异常的,例如同一订单被重复记录。我们需要根据业务需求区分不同类型的重复,并采取不同的处理方法。
4. 异常值处理
Pandas本身没有提供专门的异常值处理方法,但我们可以结合统计学知识和Pandas的数据操作功能来处理异常值。
4.1 异常值检测
常见的异常值检测方法有:
- 基于统计的方法: 例如3σ原则(超出平均值±3倍标准差的值被认为是异常值)、箱线图等。
- 基于距离的方法: 例如K近邻算法(距离最近的K个点的平均距离过大的点被认为是异常值)。
- 基于密度的方法: 例如局部异常因子(LOF)算法(密度明显低于周围点的点被认为是异常值)。
# 使用3σ原则检测'price'字段的异常值 mean = df['price'].mean() std = df['price'].std() threshold_upper = mean + 3 * std threshold_lower = mean - 3 * std abnormal_values = df[(df['price'] > threshold_upper) | (df['price'] < threshold_lower)] print(abnormal_values)
4.2 异常值处理
常见的异常值处理方法有:
- 删除异常值: 如果异常值数量较少,且对分析结果影响不大,可以直接删除。
- 替换异常值: 可以用平均值、中位数、上下限值等替换异常值。
- 将异常值视为缺失值: 然后按照缺失值的处理方法进行处理。
# 将'price'字段的异常值替换为上限值 df.loc[df['price'] > threshold_upper, 'price'] = threshold_upper print(df)
4.3 异常值处理的影响分析
异常值处理对后续分析结果的影响与缺失值处理类似。不同的处理方法可能会导致不同的结果,我们需要根据具体情况选择最合适的处理方法。
总结与思考
数据清洗是电商数据分析中非常重要的一环。通过Pandas,我们可以方便地处理缺失值、重复值和异常值。但是,数据清洗没有“万金油”的方法,我们需要根据数据的特点、业务需求等因素,选择最合适的处理方法。在实际工作中,数据清洗往往是一个迭代的过程,需要不断尝试、调整,才能达到最佳效果。
希望通过今天的分享,你已经掌握了Pandas数据清洗的基本方法和技巧。如果你在实际操作中遇到任何问题,欢迎随时向我提问。记住,数据清洗是数据分析的“基石”,只有打好“基石”,才能构建出稳固的数据分析“大厦”!
此外,我还想强调一点:数据清洗不仅仅是技术活,更需要我们具备业务sense。只有深入理解业务,才能更好地理解数据,才能更准确地判断哪些数据是“脏”数据,哪些数据是“宝藏”。
好了,今天就分享到这里。希望大家都能成为数据清洗的高手,让数据分析之路更加顺畅!咱们下次再见!