B2C电商数据集实操手册:从解压、清洗到分析建模

📅 2026/8/27 2:13:17
B2C电商数据集实操手册:从解压、清洗到分析建模
简介在数据分析与机器学习实践中真实业务数据往往比理想数据更“脏”而电商数据因其多表关联、字段口径繁杂等特点成为锻炼数据清洗与特征工程能力的绝佳样本。高质量的数据集是构建可靠模型和驱动业务决策的基础然而多数从业者难以直接接触生产环境。本文以一份国内B2C电子商务网站公开数据集为例系统讲解从RAR压缩包解压、核心表结构拆解到金额单位校验、时间格式统一、重复记录处理等数据清洗关键环节随后展示基于清洗后数据落地RFM用户分层、销售漏斗、商品连带率及建模特征构建等典型分析场景并分享Python分块读取与质量检查脚本。内容兼顾工程实践与业务逻辑适合数据分析初学者及推荐系统研究者离线演练完整流程帮助读者在安全合规前提下用真实数据还原电商分析全链路。 说句实在话我看到“国内某B2C电子商务网站的数据集.rar”这个文件名的时候第一反应是“又是一份从硬盘角落翻出来的老货”。但真把压缩包拉下来光是尾部那串“accordingi3n/ran12j”就透着一股分享者自己打标的味道解压进去之后发现内容比我想象的完整不少。这个数据集适合两类人一类是刚入门数据分析、想找一份真实电商订单练手的小白另一类是做推荐系统或者用户增长需要线下验证特征工程和模型效果的研究型选手。它解决的核心问题很朴素——让你在没有生产环境权限的情况下也能拿到一份带时间跨度、带用户行为的 B2C 交易数据去做清洗、分析和建模演练。这篇东西我不会写成文档说明书而是把我从解压到清洗、再到跑分析的全过程包括踩过的坑一次性讲清楚。你可以把它当成一份“电商数据集使用手册”也可以当成一套完整的数据分析实操笔记。1. 拿到压缩包先别急着解压先弄清楚这份数据集的全貌1.1 压缩包里通常放着什么我实际解压完这份“国内某B2C电子商务网站的数据集.rar”之后看到的不是单一文件而是几个明显按业务域划分的 CSV 和文本文件。比较典型的组合是这样订单主表包含订单号、用户ID、下单时间、支付时间、订单状态、商品金额、运费、优惠金额、实付金额。订单明细表一张订单对应多行每个 SKU 一行包含商品ID、商品名称、数量、单价、小计。商品信息表商品ID、类目ID、品牌、标题、上下架时间、售价、成本价部分脱敏。用户信息表用户ID、注册时间、性别、生日、会员等级、所在省份城市。用户行为日志表访问时间、用户ID、商品ID、行为类型浏览、收藏、加购、下单、会话ID。如果你拿到的版本比我这份更完整可能还会有优惠券核销表、售后订单表、支付流水表。别嫌表多电商数据集的真正价值就在于“多表可关联”单看一张订单表你只能算销售额把商品、用户、行为串起来之后才能做漏斗分析、复购分析、品类管理和用户分层。1.2 为什么分享者偏爱用 rar 而不是直接发 CSV很多人不理解为什么数据集分享者非要用 .rar 压缩包直接扔一个 CSV 下载链接不是更省事这里有几个很现实的原因。第一个原因是压缩率。电商导出的原始 CSV 是纯文本字段之间用逗号分隔重复值极高尤其是商品标题、品牌名、用户地址这类长文本字段。rar 格式在压缩高重复文本时的表现通常比 zip 好一些订单明细几 GB 压完之后可能只剩几百 MB传输成本和存储成本都降下来了。第二个原因是文件完整性。rar 分卷压缩可以解决“文件太大”的问题比如原始数据超过单个网盘上传限制就把数据集拆成 .part1.rar、.part2.rar下载完必须全部放在同一目录下才能正常解压。这能防止别人只下载了部分文件就怨声载道。第三个原因不太起眼但很实际可以加解压密码。很多数据集分享者不希望数据被搜索引擎直接收录解析设置一个密码就能挡住大部分爬虫和伸手党。你如果拿到压缩包提示需要密码先看看文件名里是否带了联系方式或者去原始分享页找密码说明这是常规操作。1.3 解压前先做一次“体检”我不建议拿到 rar 就直接双击解压尤其是当压缩包体积十几个 GB 的时候。解压到一半报错“文件头损坏”或者“密码错误”白白浪费时间和磁盘空间。我的习惯是先用工具校验一遍。查看压缩包大小和分卷数量确认所有分卷都在同一目录。用 WinRAR 的“测试”功能或者命令行执行unrar t 数据集.rar它会逐个文件校验 CRC 校验码。有密码的压缩包先输入一次密码测试确认密码正确再正式解压。这一步花不了几分钟但能帮你排除掉“下到残缺包”这种最常见的问题。数据文件本身是拿来用的不是拿来折腾解压软件的。2. B2C 核心表结构与字段含义拆解2.1 订单主表是分析的基本盘订单主表是整个数据集里信息密度最高的表也是后续所有分析的起点。它的典型字段包括订单号、用户ID、下单时间、支付时间、订单状态、商品总金额、运费、优惠总金额、实付金额、支付方式、收货省份城市。有一个字段必须第一时间确认订单状态。不同网站的状态编码差异很大有的用字符串“已完成”、“已退款”有的用数字0待支付、1已支付、2已发货、3已完成、4已取消。这份数据集里我遇到的是数字编码所以做统计前必须先做映射否则“已退款”订单会被误计入销售额GMV 直接虚高一大截。再强调一个容易忽略的字段支付时间。下单时间不等于支付时间更不等于成交时间。做日报、周报和同比分析的时候要统一口径。有的数据统计用“下单时间”有的用“支付时间”两者之间隔着支付转化环节数据可能差出几个百分点。我建议在分析初期就把口径固定下来凡是涉及“成交金额”一律以支付时间已支付状态为准。2.2 订单明细表决定分析的粒度订单主表是“一头”订单明细表是“多行”。因为 B2C 网站普遍存在“一单多商品”的情况所以必须用订单号把两张表关联起来。订单明细表里最有用的字段是 SKU ID、商品名称、类目ID、数量、单价、小计。这里就出现了一个我在实操中栽过跟头的点订单主表里的“商品金额”和订单明细表里明细小计的“汇总金额”不一定相等。原因可能是部分商品使用了单品级优惠券或者运费和包装费只挂在主表上明细表里不体现。所以我做关联校验的时候会用订单号分组把明细表的小计求和再和主表的商品金额做比对差异超过一定阈值就标记异常订单单独排查。2.3 用户表不能直接用于建模得先加工用户信息表在原始状态下的可用性通常不高。性别字段缺失率可能超过 30%生日是明文日期但没法直接用你需要先转成年龄再分年龄段会员等级和注册时间倒是相对完整。我习惯把用户表先拆成两个部分静态属性性别、年龄区间、会员等级、省份城市、注册时间跨度。行为特征这个不是从用户表直接拿到的而是需要从订单表和日志表里聚合出来的比如累计订单数、累计消费金额、最近一次购买距今天数、平均客单价、偏好类目Top3。静态属性描述“用户是谁”行为特征描述“用户做过什么”。到了建模阶段行为特征的重要性通常会超过静态属性这一点在后续做 RFM 分层时会体现得非常明显。2.4 行为日志表是最值钱也最麻烦的一张表行为日志表记录的是用户和商品互动的事件流常见行为类型包括曝光、浏览、收藏、加购、下单。它的数据量通常远大于订单表因为一个用户一天可能产生几十条甚至上百条浏览记录。这张表最值钱的地方在于它能帮你还原用户从“看到商品”到“最终购买”的完整路径。比如我们要算“加购转化率”公式就是“加购且最终下单的用户数/加购用户数”前提是你得把日志表里的加购行为和订单表里的下单行为按用户商品关联起来。但行为日志表的麻烦程度同样突出。首先是行为类型编码不统一其次是没有统一的 primary key同一个用户在同一个商品上可能有多条重复浏览记录再就是 session_id 可能为空导致无法准确切分会话。所以这张表我一般不会全量加载而是先按用户ID和商品ID做聚合把行为流压缩成一张“用户在商品上的行为序列表”再进入建模流程。3. 数据清洗中的实际坑3.1 金额字段的单位和口径最容易翻车电商系统导出数据时金额字段一般有两种存储方式一种是以“元”为单位存浮点数比如 199.00另一种是以“分”为单位存整数比如 19900。这份数据集里订单主表的金额是“元”但优惠分摊金额却出现了“分”单位两头一混算出来结果整个不可信。我的处理方式非常简单粗暴先对所有金额字段做一次极值扫描看最大值是否在合理区间。如果 50 元以上的订单占比异常高而客单价却写的是几千那大概率是单位已经错了。另一个更靠谱的办法是找一个金额字段之间的业务恒等式比如“商品总额 运费 - 优惠总额 ≈ 实付金额”用这个等式去反推哪个字段单位异常。3.2 时间字段的格式和时区必须统一很多 CSV 导出工具在不同环境下导出的时间格式不一样有的写“2023-07-01 10:23:45”有的写“2023/7/1 10:23”还有的写时间戳。这份数据集的用户注册时间和订单时间就混了三种格式直接pd.to_datetime解析会报错或者解析出奇怪的日期。我采用的方案是先强制统一成字符串再用统一格式解析解析失败的行单独挑出来人工核对。还有一个细节如果数据集的服务器是 UTC 时区而实际业务使用的是东八区那所有日期都需要先转换时区再下钻分析否则“当天订单”的口径会偏几个小时。3.3 用户标识缺失与同人合并电商场景里用户ID通常不会完全缺失但会存在“同一个用户多个ID”的情况。比如未登录状态下产生的行为日志用户ID可能是空的或匿名ID登录后统一下单又生成了正式ID。如果你拿日志表直接关联订单表未登录行为会全部丢失漏斗分析就会失真。这种问题没有完美解法我一般用一个“设备指纹”字段来辅助合并把相同设备、相近时间段内、行为高度相似的两个用户ID视为同一个人。注意这只是一个工程妥协不要把它当成精确的用户识别。3.4 SKU 与 SPU 的粒度选择电商数据里最容易被忽略的概念区分就是 SKU 和 SPU。SKU 是库存量单位比如“iPhone 15 Pro Max 256G 蓝色”SPU 是标准化产品单元比如“iPhone 15 Pro Max”这个商品本身。一份商品信息表里如果同时有 SKU 和 SPU 两个字段直接拿 SKU 做品类分析会把同款商品拆碎。我建议先确定分析目标再选粒度做库存和价格分析必须用 SKU 粒度。做品类销售占比和连带率分析建议归并到 SPU 或叶子类目粒度。做推荐系统候选集通常用 SKU 粒度因为用户点击的确实是具体 SKU。3.5 重复记录与补偿订单数据集里出现完全重复的行并不罕见大多是因为上游表在导出时做了多表 join产生了笛卡尔积。我处理重复数据的顺序是先去重再按业务主键检查。订单表用“订单号SKU ID”做唯一键用户表用“用户ID”做唯一键日志表用“用户ID商品ID行为类型时间戳”做唯一键。还有一个更隐蔽的业务脏数据补偿订单。也就是原订单因为退款/售后问题系统自动生成了一张正负金额相抵的新订单。这种订单如果不剔除你会看到同一个订单号出现两行一正一负或者一个用户短期内有大量金额为负的订单。我的建议是保留一张“订单类型”字段有标记的单独处理没有标记的话先用金额绝对值过小订单量突变来识别。3.6 中文乱码与 Excel 打开损坏这个坑非常普遍。CSV 文件里如果包含中文不同编码保存出来会有 UTF-8、GBK、GB2312 等差异。你用 Excel 直接双击打开大概率看到满屏乱码用 Python 的pandas.read_csv不指定编码也有可能直接报UnicodeDecodeError。实际操作里我的顺序是先尝试encodingutf-8报错就换encodinggbk再不行就encodingutf-8-sig。如果你怀疑文件混合编码可以用二进制方式读取前 100 行把能识别的编码逐一试一遍。还有一个习惯源文件永远是只读的清洗之后另存为新的 UTF-8 文件不要让原始文件被二次污染。4. 清洗完之后你能落地哪些分析方向4.1 交易概览与销售漏斗拿到干净数据之后第一件事不是建模而是算清楚基本盘总订单量、总成交额GMV、客单价、支付转化率、退款率、复购率。这些指标看起来基础但却是整份数据集的“体检报告”。销售漏斗可以拆成两层外层是“浏览→加购→下单→支付”的转化链路内层是“曝光→点击→加购→下单”的商品转化链路。外层用用户行为日志表里的行为类型统计即可内层就得用到行为表和订单表的关联数据。我做这类分析时喜欢把结果输出成一张按日/周/月聚合的趋势表然后单独检查是否存在“双十一式”的极端峰值日。如果发现某一天的订单量是平日的 10 倍以上要先确认是不是大促日的正常波动还是数据重复导致的假峰值。套用生活里的类比这就像体检时看到一项指标爆表先别急着吃药得先确认仪器有没有读数异常。4.2 用户价值分层RFM 模型RFMRecency、Frequency、Monetary是电商用户分析里最经典、也最容易被讲烂的一个模型。它的核心逻辑很简单最近一次购买时间越近Recency 越小、购买频率越高Frequency 越大、累计消费金额越高Monetary 越大用户价值越高。但在实操中要注意三个维度要分别打分不要直接拿原始数值做归一化因为金额和频率的量纲差异太大。打分标准不能用全局均值一刀切更好的做法是按业务周期滑动窗口计算比如近 90 天、近 180 天分别打分。RFM 分层出来之后一定要落到运营动作上否则只是画了一张好看的四象限图。我用这份数据集跑完 RFM 之后发现真正产生高价值的用户集中在少数品类上他们的 Recency 很短、Frequency 很高。如果后续要做推荐这类用户的候选集应该以“最近浏览历史高复购品类”为主而不是泛泛的“猜你喜欢”。4.3 商品与类目分析商品维度最值得看的是三个问题哪些商品贡献了主要销售额、哪些商品承担了引流职能、哪些商品是“高曝光低转化”的问题品。具体方法按叶子类目汇总销售额占比画出头部集中度曲线看是否依赖少数爆款。计算商品连带率也就是同一张订单里同时购买两类商品的比例用来做推荐和捆绑销售的参考。公式可以写成包含A又包含B的订单数 / 包含A的订单数。用价格带切分商品销售额找出不同价格段的转化率差异。价格带切分不能只用固定区间要结合类目均值和分位数来定比如 0-50 元、50-100 元这类区间要针对品类单独调整。4.4 建模前需要先做特征工程很多人拿到数据集就想直接训练一个“预测用户是否购买”的模型但训练之前必须先把特征表建好。特征是模型学习的基础特征工程做的不好再高级的算法也白搭。我基于这套 B2C 数据集通常会构建三类特征用户特征用户历史订单数、历史消费金额、品类偏好向量、平均购买间隔。商品特征商品价格、类目、历史转化率、历史曝光点击率、上架时长。行为特征近 7 天浏览该用户/商品的次数、加购次数、收藏次数、最近一次行为时间差。特征表构建好之后先做一次特征相关性检查把相关性过高的特征合并掉避免模型共线性。同时要观察特征的缺失率缺失率超过 50% 的特征要么剔除要么用中位数或众数填充不能直接丢给模型。5. 实操记录用 Python 批量处理这套电商数据集5.1 解压 rar 的几种方式我用解压工具的环境是 Windows生产服务器是 Linux。这里分两种场景说Windows 下最简单的方法是安装 WinRAR 后用命令行解压C:\Program Files\WinRAR\WinRAR.exe x 国内某B2C电子商务网站的数据集.rar D:\data_output\Linux 服务器上更推荐用 unrar 命令unrar x 数据集.rar /data/ecommerce/如果你的环境没有 unrar可以先安装Ubuntu 系用apt install unrarCentOS 系用yum install unrar-free。另外 Python 的rarfile库也能解压但底层依赖上述命令行工具不是纯 Python 实现环境配置稍微麻烦。5.2 分块读取大表订单明细表和用户行为日志表如果解压出来超过 1GB直接用read_csv一次性加载很可能会内存溢出。我的做法是分块读取先抽样再全量。import pandas as pd # 先看看总共多少行再决定分块大小 for chunk in pd.read_csv(order_detail.csv, chunksize500000, encodingutf-8): print(chunk.shape) # 每次只处理 50 万行聚合后释放内存 # 比如统计总数量、总金额再把结果累加 break # 这里只是示例实际要循环处理分块处理的思路是“以空间换时间”宁可多循环几次也不要让内存爆掉。实际操作中我会先随机采样 5% 的数据做探索性分析确认字段类型和业务口径之后再写全量脚本跑批。5.3 一个简单的数据质量检查脚本我每次接手新数据集都会跑一遍质量检查脚本把每个字段的缺失率、唯一值数量、类型、极值输出成一份报告。下面是一个简化版import pandas as pd df pd.read_csv(orders.csv, encodingutf-8) report [] for col in df.columns: report.append({ 字段: col, 非空值数量: df[col].notna().sum(), 缺失率: round(df[col].isna().mean(), 4), 唯一值数量: df[col].nunique(), 数据类型: str(df[col].dtype), }) quality_report pd.DataFrame(report) print(quality_report) # 金额字段常见的合理性检查 print(\n实付金额分布) print(df[pay_amount].describe()) # 业务恒等式检查 df[calc_amount] df[goods_amount] df[freight] - df[discount] df[diff] (df[calc_amount] - df[pay_amount]).abs() print(\n恒等式偏差超过0.01的订单数, (df[diff] 0.01).sum())跑完这个脚本基本就能判断这份数据能不能用、哪些字段需要重点清洗。如果恒等式偏差订单比例超过 5%我建议先回到底层表去排查关联逻辑而不是继续做后续分析。5.4 常见报错与排查速查表我把处理这套数据集时最容易遇到的报错整理成一个速查表方便你直接对号入座。报错场景可能原因处理方式解压提示“密码错误”密码为空/复制时带了空格/大小写不对先用压缩包注释或文件名找密码再手动输一遍read_csv 报 UnicodeDecodeError编码不是 UTF-8多为 GBK/GB2312换encodinggbk或utf-8-sig重新读取时间列解析出现 NaT时间格式不统一或存在空值先转字符串再统一解析异常行单独处理订单表里有负数金额存在退款单/补偿单用订单状态或退款标记剔除或单独归为退款分析内存不足文件太大或字段太宽分块读取、只保留所需字段、把中间结果落盘Excel 打开 CSV 乱码UTF-8 BOM 缺失读取时指定encodingutf-8-sig再保存6. 拿到数据集后的合规与安全注意事项6.1 隐私字段必须二次脱敏电商数据集即使已经标注“脱敏”拿到之后仍然需要再处理一次。用户姓名、手机号、详细地址、身份证号这类字段绝对不能直接出现在分析报告或者演示文稿里更不要上传到公开仓库。我处理这份数据集时第一件事就是把用户表中的敏感字段全部 drop 掉只保留用户ID、性别、年龄区间、城市级别、会员等级这类分析可用字段。6.2 不要用这套数据反推真实业务数据集里涉及的品类、品牌、价格、优惠金额很可能经过了纵向脱敏或数值扰动。如果你拿这份数据去反推某家网站的原始经营情况得出的结论大概率不准甚至会被带偏。正确的使用方式是把这份数据当成一份“结构真实、数值近似”的样板数据用来练手、做模型验证而不是做商业判断。6.3 文件版本和数据时间范围要记录这种网上分享的数据集通常没有正式版本号压缩包里的数据可能只是某个时间段的全量导出或抽样导出。我的习惯是解压之后立刻生成一份README.md记录数据集的来源文件名、解压时间、数据时间范围、字段口径、已做的清洗步骤。这样哪怕过了一个月再回来继续分析也不用重新猜字段含义。结尾再分享一个实操细节操作这套 B2C 数据集时最让我意外的一个点是订单明细表里的“商品标题”居然包含很多 HTML 转义字符比如amp;、quot;下单时是照原始标题抓的后来标题改了历史订单的标题却没跟着变。清洗时如果不做反转义和标准化后面做商品关键词分析时会把“洗发水护发素”和“洗发水护发素”看成两个商品。我个人现在的习惯是拿到任何 csv 数据后最后再统一捋一遍文本字段把不可见字符、HTML 实体、全角半角差异都处理干净再生成特征。别小看这些细节电商数据的脏程度往往比你想象中高得多。这个 rar 包里的数据同样如此先耐心清洗后面的分析才会省心。本文还有配套的精品资源点击获取