TMDB 5000电影数据集:3步数据清洗实战,异常值处理与字段筛选详解

TMDB 5000电影数据集:3步数据清洗实战,异常值处理与字段筛选详解

电影数据分析的第一步往往不是建模或可视化,而是处理那些令人头疼的原始数据。当打开TMDB数据集时,你会发现预算为0的"大片"、时长仅1分钟的"电影",以及大量缺失的宣传语——这些数据质量问题会直接影响后续分析的可靠性。本文将带你用Pandas完成一次专业级的数据清洗,从4803条原始记录中提炼出3229条高质量数据。

1. 数据质量诊断:发现隐藏的问题

在动手清洗之前,我们需要像医生检查病人一样对数据集进行全面"体检"。使用Pandas的 info() describe() 方法可以快速发现表面问题,但真正的挑战在于识别那些不易察觉的数据异常。

import pandas as pd

# 加载数据集
movies = pd.read_csv('tmdb_5000_movies.csv')

# 基础信息检查
print(movies.info())

# 数值型字段统计
print(movies[['budget', 'revenue', 'runtime']].describe())

典型的数据质量问题通常表现为:

  • 缺失值陷阱 homepage 字段缺失率高达82.4%, tagline 缺失率也有82.3%
  • 异常值警报 budget revenue 的最小值为0(占全部记录的32.7%)
  • 时间错乱 release_date 有少量缺失,且存在历史日期错误
  • 字段冗余 :如 id imdb_id 存在重复标识

更隐蔽的问题还包括JSON格式的嵌套字段(如 genres production_companies ),这些字段需要特殊处理才能用于分析。通过初步检查,我们确定需要重点处理以下字段:

字段名 问题类型 问题严重程度 处理优先级
budget 零值异常 高 (31.8%) 1
revenue 零值异常 高 (32.1%) 1
runtime 零值/异常 中 (1.2%) 2
homepage 缺失值 低 (分析无关) 3
tagline 缺失值 低 (分析无关) 3

2. 三阶清洗法:结构化处理流程

专业的数据清洗应该遵循分阶段、可回溯的原则。我们采用"过滤-修复-验证"的三阶清洗法,确保每个处理步骤都有明确的目的和可衡量的效果。

2.1 第一阶段:字段筛选与缺失处理

首先删除与分析目标无关的字段,然后处理缺失值:

# 删除非必要列
cols_to_drop = ['homepage', 'tagline', 'keywords', 
               'overview', 'imdb_id', 'poster_path']
movies_clean = movies.drop(cols_to_drop, axis=1)

# 处理release_date缺失
movies_clean = movies_clean[movies_clean['release_date'].notna()]

# 处理runtime缺失 - 用中位数填充
runtime_median = movies_clean['runtime'].median()
movies_clean['runtime'] = movies_clean['runtime'].fillna(runtime_median)

对于JSON格式的嵌套字段,我们进行扁平化处理:

# 解析genres字段示例
import json

def parse_json_column(df, column):
    df[column] = df[column].apply(
        lambda x: ', '.join([i['name'] for i in json.loads(x)]) if pd.notna(x) else ''
    )
    return df

movies_clean = parse_json_column(movies_clean, 'genres')
movies_clean = parse_json_column(movies_clean, 'production_companies')

2.2 第二阶段:异常值处理策略

针对不同类型的异常值,我们采用差异化的处理方案:

预算/收入零值问题

# 创建布尔掩码识别有效财务数据
financial_valid = (movies_clean['budget'] > 0) & (movies_clean['revenue'] > 0)
movies_financial = movies_clean[financial_valid].copy()

# 计算投入产出比
movies_financial['ROI'] = (
    (movies_financial['revenue'] - movies_financial['budget']) / 
    movies_financial['budget']
)

电影时长异常处理

# 过滤无效时长(小于45分钟或大于240分钟)
time_filter = (movies_clean['runtime'] >= 45) & (movies_clean['runtime'] <= 240)
movies_time = movies_clean[time_filter].copy()

# 分箱处理
bins = [0, 60, 90, 120, 180, 240]
labels = ['短片', '标准', '常规', '长篇', '超长']
movies_time['runtime_category'] = pd.cut(
    movies_time['runtime'], bins=bins, labels=labels
)

2.3 第三阶段:数据一致性验证

清洗完成后,我们需要验证数据质量:

# 验证财务数据
print(f"原始记录数: {len(movies)}")
print(f"有效财务记录: {len(movies_financial)}")
print(f"财务数据保留率: {len(movies_financial)/len(movies):.1%}")

# 检查字段完整性
print("\n字段完整性检查:")
print(movies_financial.isnull().sum())

# 验证异常值处理
print("\n时长分布验证:")
print(movies_time['runtime_category'].value_counts())

验证结果应该显示:

  • 财务有效记录约3229条(保留率67.2%)
  • 无关键字段缺失
  • 时长分布符合电影行业常识

3. 高级清洗技巧与实战案例

对于复杂的数据质量问题,我们需要更精细的处理方法。

3.1 时间序列数据处理

处理时间字段时需要考虑格式统一和有效性:

# 统一日期格式
movies_clean['release_date'] = pd.to_datetime(
    movies_clean['release_date'], errors='coerce'
)

# 提取时间特征
movies_clean['release_year'] = movies_clean['release_date'].dt.year
movies_clean['release_month'] = movies_clean['release_date'].dt.month

# 过滤不合理年份(早于1888年或晚于当前年份)
current_year = pd.Timestamp.now().year
year_filter = (movies_clean['release_year'] >= 1888) & (
    movies_clean['release_year'] <= current_year
)
movies_time_clean = movies_clean[year_filter].copy()

3.2 文本字段标准化

对于文本类字段,需要进行标准化处理:

# 统一语言代码
movies_clean['original_language'] = movies_clean['original_language'].str.upper()

# 处理标题特殊字符
movies_clean['clean_title'] = (
    movies_clean['original_title']
    .str.replace(r'[^\w\s]', '', regex=True)
    .str.strip()
)

# 生成文本长度特征
movies_clean['title_length'] = movies_clean['clean_title'].str.len()

3.3 关系型数据验证

检查数据间的逻辑关系可以捕获隐藏问题:

# 验证预算与收入关系
illogical_finance = movies_financial['budget'] > movies_financial['revenue']
print(f"异常财务记录: {illogical_finance.sum()}")

# 验证评分与投票数关系
vote_filter = movies_clean['vote_count'] < 10
high_rating = movies_clean['vote_average'] >= 8
suspicious_ratings = vote_filter & high_rating
print(f"可疑高评分电影: {suspicious_ratings.sum()}")

4. 清洗结果与应用建议

经过系统清洗后,我们得到三个净化后的数据集:

  1. 财务分析专用集 (3229条)

    • 包含有效预算和收入数据
    • 已计算ROI等衍生指标
  2. 时长分析专用集 (4621条)

    • 合理的电影时长范围(45-240分钟)
    • 添加时长分类标签
  3. 时间序列分析集 (4765条)

    • 有效的时间范围(1888-当前年份)
    • 提取年月等时间特征

针对不同分析场景,建议:

  • 商业价值分析 :使用财务分析集,重点关注ROI>1的电影
  • 观众偏好研究 :结合清洗后的评分和流行度数据
  • 时间趋势分析 :使用时间序列集,按年度/月份聚合

提示:始终保留原始数据和清洗脚本的对应版本,方便回溯和复现清洗过程

清洗后的数据可以支持更可靠的分析结论。例如,我们发现预算与收入并非简单线性关系——中等预算(2000-5000万美元)的电影往往有最佳ROI表现,而超高预算电影的投资回报率反而下降。

大气污染是影响公众健康生态环境的重要问题,精准的空气质量时空预测污染源贡献度量化是精准治污的关键支撑。针对现有研究多源融合不充分、时空关联刻画不足、预测源解析割裂三方面缺陷,本文设计实现了城市空气质量时空预测污染源贡献度分析系统,融合监测、气象、工业排放交通四类数据,构建基于时空注意力的LSTM(STAM-LSTM)预测模型基于正定矩阵因子分解(PMF)的源解析模型,形成数据融合-特征工程-预测-源解析-可视化闭环。 系统实现四类数据时空对齐融合,构建时序空间邻域特征,以普通克里金插值生成1km网格浓度场;STAM-LSTM引入时空注意力自适应学习站点间污染传输时变权重,以72小时输入预测未来24小时逐小时PM2.5浓度;PMF识别交通、工业、燃煤、扬尘二次生成五个源因子,量化各源全年贡献度并分析时空演变。 实验表明:STAM-LSTM预测RMSE 24.6、MAE 17.8、R² 0.88,相对LSTM基线(30.2)提升18.5%;普通克里金插值误差8.9,优于反距离加权(11.4);源解析显示交通源28.4%、工业源23.1%、燃煤源19.6%为主要贡献源,冬季燃煤源升至27.3%、早高峰交通源达34.8%,下风向工业源贡献高出上风向8~12个百分点;减排情景显示交通源减排20%可使年均PM2.5下降5.7%,源贡献度排序一致。 系统按五模块14组件实现,功能测试16项用例全部通过,为大气污染预警、源管控减排政策制定提供了决策依据。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术理论 第3章 系统需求分析 第4章 系统总体设计 第5章 系统详细设计实现 第6章 系统测试分析 第7章 总结展望 参考文献 附件-实现指南
基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测研究(Python代码实现)内容概要:本文提出了一种基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测方法,旨在通过结合多种先进深度学习模型的优势,提升在复杂工况下的预测精度鲁棒性。该方法利用iTransformer捕捉长期时间序列中的全局依赖关系,通过BiGRU模型提取双向时序特征,最后引入KAN(Kernel Attention Network)增强非线性映射关键特征的自适应加权能力,实现对轴承退化过程的精准建模。文中详细介绍了模型架构设计、训练流程及在公开数据集上的实验验证,结果表明该融合模型相比单一模型在预测精度和稳定性方面均有显著提升。; 适合人群:具备一定机器学习深度学习基础,从事设备故障诊断、工业大数据分析或智能运维相关领域的研究人员及工程技术人员,尤其适合研究生及以上学历或有相关项目经验的专业人员。; 使用场景及目标:①应用于工业设备状态监测预测性维护系统中,实现对滚动轴承等关键部件剩余寿命的精准预测;②为复杂时间序列回归任务提供多模型融合的设计思路技术参考;③推动深度学习在智能制造工业物联网领域的落地应用。; 阅读建议:建议读者结合Python代码实现部分,深入理解各子模型的接口设计融合逻辑,重点关注特征融合机制注意力权重的可视化分析,以便在实际项目中灵活调整优化模型结构。
代码下载地址: https://pan.quark.cn/s/f675b88243cd 《华大HC32L110库函数例程详解》 华大HC32L110属于低功耗且高性能的微控制器,在众多嵌入式系统设计中具有广泛的应用,特别是在需要电池供电的物联网设备和便携式装置中表现出色。该微控制器的库函数例程为程序设计者提供了重要的参考资料,包含了丰富的功能接口和示范性代码,从而辅助开发者迅速掌握并运用该芯片。库函数是事先编写完成且可反复使用的代码单元,针对HC32L110的特定硬件特性进行了优化,使得开发者无需深入探究底层机制,仅需调用相应的库函数即可达成预期功能。这些库函数一般涵盖了时钟管理、GPIO操控、ADC转换、串行通信(包含UART、SPI、I2C等形式)以及中断管理等多个方面。比如,若需将一个GPIO端口设置为输出模式并设定其电平状态,开发者可通过调用`HAL_GPIO_Init()``HAL_GPIO_WritePin()`函数来实现。 例程则是展示如何运用库函数的应用范例代码,它们具体说明了在实际操作中如何适当地调用库函数及设定相关参数。以HC32L110的串行通信例程为例,它可能涉及初始化UART接口、传输数据、接收数据等环节,借助这些例程,开发者能够清晰地洞察每个功能的具体实现途径。对于新手而言,例程是理解芯片特性及库函数使用的理想途径。 在华大HC32L110的库函数例程中,通常包含以下核心组成部分: 1. **初始化函数**:诸如`SystemInit()`,其作用是配置系统时钟,作为其他功能的基础。 2. **外设驱动函数**:例如GPIO的`HAL_GPIO_xxx()`系列函数,ADC的`HAL_ADC_xxx()`函数等,用于管理和设定...
【多变量输入超前多预测】基于CNN-BiGRU的光伏功率预测研究(Matlab代码实现)内容概要:本文研究基于CNN-BiGRU混合神经网络模型的多变量输入超前多光伏功率预测方法,并提供了完整的Matlab代码实现。该模型结合卷积神经网络(CNN)强大的局部特征提取能力和双向门控循环单元(BiGRU)对时间序列前后向依赖关系的建模能力,能够有效处理光伏发电受光照强度、温度、湿度等多因素影响的非线性、非平稳特性,实现对未来多个时间长的功率输出进行精准预测。研究涵盖了数据预处理、模型构建、训练优化及结果分析全过程,并通过实验验证了模型在不同天气条件下的预测性能,展示了其在提升预测精度方面的有效性。; 适合人群:具备一定机器学习和时间序列预测基础知识,从事新能源发电预测、电力系统调度或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于光伏发电站的功率预测系统,为电网调度、能量管理和电力交易提供数据支持;②作为深度学习在可再生能源预测领域应用的教学案例,帮助理解CNNRNN类模型的融合机制;③为进一研究更复杂的预测模型(如加入注意力机制)提供基础框架和技术参考。; 阅读建议:建议读者结合Matlab代码逐复现文中实验,重点关注数据预处理流程、模型结构设计细节以及超参数调优策略,同时可尝试在不同数据集上验证模型泛化能力,以深入掌握多变量时间序列预测的关键技术要点。
内容概要:本文提出了一种基于高创新模型MS-TCN-TiDE的短期负荷预测方法,该模型融合多尺度时序卷积网络(MS-TCN)时间解码器(TiDE)的优势,旨在实现对电力系统短期负荷的高精度预测。MS-TCN能够有效捕捉负荷序列在不同时间尺度下的局部特征长期依赖关系,而TiDE则通过编码-解码架构建模周期性、趋势性等全局时序模式,二者协同提升了模型对复杂负荷动态的表达能力。研究通过Python代码实现了完整的模型构建、训练优化预测流程,并在实际电力负荷数据集上进行了实验验证,结果表明该模型在预测精度、稳定性及泛化性能方面均优于传统时序预测方法。同时,文章探讨了模型在周尺度负荷预测中的适用性,验证了其在长期趋势建模方面的潜力,为电网调度、能源管理及电力市场运营提供了可靠的技术支撑。; 适合人群:具备一定Python编程基础和机器学习知识,从事电力系统分析、能源管理、智能电网或相关领域研究的研发人员及高校研究生。; 使用场景及目标:①应用于电力系统短期负荷预测场景,提升电网运行调度的智能化精细化水平;②为新能源并网规划、需求响应策略制定、电力市场竞价决策等提供高质量的负荷数据支持;③推动深度学习技术在能源时序预测领域的落地应用方法创新。; 阅读建议:建议读者结合文中提供的Python代码进行实践复现,重点关注数据预处理流程、模型结构设计细节及超参数调优策略,同时可通过消融实验深入理解MS-TCNTiDE模块的协同机制及其对预测性能的贡献。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值