1. 项目背景与数据概览某天我接到一个来自某瓣读书的爬虫数据集打开一看差点没晕过去——6万多条图书信息里充斥着缺失值、异常值和格式混乱的字段。这就像收到一箱打翻的乐高积木需要先分类整理才能拼出完整模型。这个数据集包含9个字段书名存在点击上传封面图片这样的无效数据作者34412位作者中有3处缺失出版社4003家出版社存在同名不同写法的情况出版时间日期格式五花八门页数从1页到24万页的离奇数值价格单位不统一人民币/美元混用ISBN理论上应该唯一但出现重复评分0-10分制包含0分的无效评分评论数量最高达17万条存在大量0值小贴士处理脏数据时建议先备份原始文件我习惯用data_raw data.copy()保存初始状态避免操作失误无法回退。2. 数据清洗实战技巧2.1 处理缺失值与异常值首先用Python的Pandas库进行初步检查import pandas as pd data pd.read_csv(book_douban.csv) print(data.isnull().sum()) # 检查缺失值 print(data.describe()) # 查看数值分布清洗步骤分解删除无效行书名包含点击上传封面图片的记录处理缺失值直接删除作者缺失的3条记录占比不到0.005%统一价格单位去除货币符号全部转换为人民币数值修正出版时间将混乱日期统一替换为2001-2010年间的随机日期过滤异常页数删除小于25页和大于2000页的极端值# 价格清洗示例 def clean_price(price): if isinstance(price, str): price price.replace(¥,).replace($,) try: return float(price) except: return None return price data[价格] data[价格].apply(clean_price) data data[data[价格].between(10, 500)] # 保留10-500元的合理区间2.2 处理重复数据ISBN重复有两种特殊情况真实重复同一本书被多次收录如《红楼梦》不同版本错误重复不同书籍共享相同ISBN如丛书系列解决方案# 保留每个ISBN第一条记录 data_dedup data.drop_duplicates(subsetISBM, keepfirst) # 验证处理结果 print(f去重前: {len(data)}条, 去重后: {len(data_dedup)}条) print(data_dedup[ISBM].duplicated().sum()) # 检查是否还有重复3. 探索性分析(EDA)3.1 作者维度分析使用Seaborn可视化产出最多的作者import seaborn as sns import matplotlib.pyplot as plt top_authors data.groupby(作者)[书名].count()\ .sort_values(ascendingFalse).head(10) plt.figure(figsize(12,6)) sns.barplot(xtop_authors.values, ytop_authors.index, paletteviridis) plt.title(作品数量TOP10作者) plt.xlabel(作品数量) plt.ylabel(作者)发现有趣现象亦舒以1463本作品位居榜首鲁迅的作品平均评分最高9.5分东野圭吾的《解忧杂货店》评论数最多17.8万条3.2 价格与评分关系分析价格四分位数price_bins [0, 22.6, 45.7, 138, 999] data[价格区间] pd.cut(data[价格], binsprice_bins) plt.figure(figsize(10,6)) sns.boxplot(x价格区间, y评分, datadata) plt.title(不同价格区间的评分分布)关键发现22.6-45.7元区间书籍占比最大35%高价书138元评分波动更大价格与评分相关系数仅0.12几乎无关4. 深度洞察与推荐策略4.1 构建推荐模型定义优质书籍的4个维度作者影响力作品数量前20%的作者出版社声誉出版量前10%的出版社市场认可度评分7.5分且评论100条价格合理性22.6-138元主力区间# 定义筛选条件 author_threshold data[作者].value_counts().quantile(0.8) publisher_threshold data[出版社].value_counts().quantile(0.9) good_books data[ (data[作者].map(data[作者].value_counts()) author_threshold) (data[出版社].map(data[出版社].value_counts()) publisher_threshold) (data[评分] 7.5) (data[评论数量] 100) (data[价格].between(22.6, 138)) ] print(f优质书籍推荐数量: {len(good_books)})4.2 业务建议基于分析结果我给运营团队三个实用建议库存优化重点备货22.6-45.7元价格区间的书籍亦舒、东野圭吾等高产作者的作品保持库存深度促销策略高价书138元搭配赠品提升转化将高评分低销量的书加入编辑推荐栏目数据采集改进增加出版社名称标准化规则对页数异常值设置爬虫校验规则5. 完整代码结构项目采用Jupyter Notebook组织主要模块如下├── 数据加载与预处理 │ ├── 读取原始数据 │ └── 初步质量检查 ├── 数据清洗 │ ├── 缺失值处理 │ ├── 异常值过滤 │ └── 格式标准化 ├── 探索性分析 │ ├── 单变量分析 │ ├── 多变量关联 │ └── 可视化输出 └── 建模与推荐 ├── 推荐规则定义 └── 结果导出处理这种真实业务数据的关键是保持耐心——我花了70%时间在数据清洗上但这是值得的。记得第一次分析时没注意价格单位混合导致结论完全错误这个教训让我从此养成了数据质量检查清单的习惯。