当前位置: 首页 > article >正文

MovieLens数据集预处理避坑指南:用Pandas处理‘::’分隔符、编码分类变量与异常值检测的完整流程

MovieLens数据集预处理实战从原始数据到推荐系统输入的完整避坑手册当你第一次从GroupLens官网下载MovieLens数据集时可能会被那些以.dat为扩展名的文件弄得一头雾水。这些文件使用::作为分隔符包含各种需要清洗和转换的数据字段。本文将带你一步步解决这些实际问题从数据加载、清洗到特征工程最终得到可以直接输入推荐算法的高质量数据。1. 数据加载与初始探索1.1 正确读取特殊格式的dat文件MovieLens数据集使用::作为字段分隔符这在使用pandas的read_csv函数时会遇到第一个坑import pandas as pd # 用户数据 users pd.read_csv(users.dat, sep::, enginepython, # 必须指定enginepython来处理非常规分隔符 headerNone, names[user_id, gender, age, occupation, zip_code]) # 电影数据 - 注意编码问题 movies pd.read_csv(movies.dat, sep::, enginepython, encodingISO-8859-1, # 处理特殊字符 headerNone, names[movie_id, title, genres]) # 评分数据 ratings pd.read_csv(ratings.dat, sep::, enginepython, headerNone, names[user_id, movie_id, rating, timestamp])提示当遇到ParserError: Error tokenizing data错误时首先检查分隔符是否正确其次考虑是否需要指定enginepython。1.2 数据概览与基本统计加载数据后我们需要快速了解数据的结构和质量print(用户数据形状:, users.shape) print(电影数据形状:, movies.shape) print(评分数据形状:, ratings.shape) # 各表基本信息 users.info() movies.info() ratings.info() # 描述性统计 print(users.describe()) print(movies.describe()) print(ratings.describe())典型输出可能显示用户表6,040个用户包含性别、年龄、职业和邮编电影表3,883部电影包含标题和类型评分表约1,000,000条评分记录2. 数据清洗与转换2.1 处理电影标题中的年份信息电影标题通常包含括号中的年份我们需要将其分离为单独的字段import re # 提取年份并创建新列 movies[year] movies[title].str.extract(r\((\d{4})\)$) movies[clean_title] movies[title].str.replace(r\(\d{4}\)$, , regexTrue).str.strip() # 检查结果 print(movies[[title, clean_title, year]].head())2.2 分类变量的编码处理性别和职业等分类变量需要转换为数值形式供模型使用from sklearn.preprocessing import LabelEncoder # 性别编码 gender_encoder LabelEncoder() users[gender_encoded] gender_encoder.fit_transform(users[gender]) # 职业编码假设已有职业映射字典 occupation_map { 0: other, 1: academic, 2: artist, # ...其他职业映射 } users[occupation_name] users[occupation].map(occupation_map) # 创建职业的one-hot编码 occupation_dummies pd.get_dummies(users[occupation_name], prefixoccupation) users pd.concat([users, occupation_dummies], axis1)2.3 处理多值类型的电影类型字段电影类型是以|分隔的多值字段需要转换为更适合分析的格式# 将类型拆分为单独列 genres_expanded movies[genres].str.get_dummies(sep|) # 合并回原数据框 movies pd.concat([movies, genres_expanded], axis1) # 统计各类型电影数量 genre_counts genres_expanded.sum().sort_values(ascendingFalse) print(genre_counts)3. 数据质量检查与异常值处理3.1 缺失值检测# 检查各表缺失值 print(用户表缺失值:\n, users.isnull().sum()) print(电影表缺失值:\n, movies.isnull().sum()) print(评分表缺失值:\n, ratings.isnull().sum()) # 处理电影表中可能缺失的年份 movies[year] movies[year].fillna(0).astype(int) # 0表示年份未知3.2 异常评分检测使用统计方法和可视化工具识别异常评分import seaborn as sns import matplotlib.pyplot as plt # 评分分布统计 print(ratings[rating].describe()) # 评分分布直方图 plt.figure(figsize(10, 6)) sns.histplot(ratings[rating], bins10, kdeTrue) plt.title(Rating Distribution) plt.show() # 箱线图检测异常值 plt.figure(figsize(8, 6)) sns.boxplot(xratings[rating]) plt.title(Rating Boxplot) plt.show()3.3 用户行为异常检测检查用户评分行为的异常模式# 计算每个用户的评分数量 user_rating_counts ratings[user_id].value_counts() # 找出评分数量异常多或异常少的用户 print(评分最多的用户:\n, user_rating_counts.head()) print(评分最少的用户:\n, user_rating_counts.tail()) # 可视化用户评分数量分布 plt.figure(figsize(10, 6)) sns.histplot(user_rating_counts, bins50) plt.title(Distribution of Number of Ratings per User) plt.xlabel(Number of Ratings) plt.ylabel(User Count) plt.show()4. 特征工程与数据增强4.1 时间特征提取从时间戳中提取有用的时间特征import datetime # 将时间戳转换为datetime ratings[datetime] pd.to_datetime(ratings[timestamp], units) # 提取各种时间特征 ratings[year] ratings[datetime].dt.year ratings[month] ratings[datetime].dt.month ratings[day] ratings[datetime].dt.day ratings[weekday] ratings[datetime].dt.weekday ratings[hour] ratings[datetime].dt.hour # 检查时间分布 print(ratings[[year, month, day, weekday, hour]].describe())4.2 用户画像构建结合用户信息和评分行为构建更丰富的用户特征# 计算用户平均评分 user_stats ratings.groupby(user_id)[rating].agg([mean, count, std]) user_stats.columns [avg_rating, rating_count, rating_std] # 合并用户统计信息 users users.merge(user_stats, left_onuser_id, right_indexTrue, howleft) # 计算用户评分偏离度 global_avg ratings[rating].mean() users[rating_deviation] users[avg_rating] - global_avg # 检查结果 print(users.head())4.3 电影特征增强基于评分数据增强电影特征# 计算电影评分统计 movie_stats ratings.groupby(movie_id)[rating].agg([mean, count, std]) movie_stats.columns [avg_rating, rating_count, rating_std] # 合并电影统计信息 movies movies.merge(movie_stats, left_onmovie_id, right_indexTrue, howleft) # 计算电影热度评分数量的标准化值 movies[popularity] (movies[rating_count] - movies[rating_count].min()) / \ (movies[rating_count].max() - movies[rating_count].min()) # 检查结果 print(movies.sort_values(rating_count, ascendingFalse).head())5. 数据准备与保存5.1 创建合并的数据集为推荐系统准备一个合并后的数据集# 合并用户和评分数据 user_ratings pd.merge(ratings, users, onuser_id) # 合并电影信息 full_data pd.merge(user_ratings, movies, onmovie_id) # 选择需要的列 final_data full_data[[user_id, movie_id, clean_title, year, gender, age, occupation_name, genres, rating, datetime]] print(final_data.head())5.2 保存处理后的数据将处理后的数据保存为更适合后续分析的格式# 保存为CSV final_data.to_csv(movielens_processed.csv, indexFalse) # 保存为Parquet格式更高效 final_data.to_parquet(movielens_processed.parquet, indexFalse) # 保存为HDF5适合大型数据集 final_data.to_hdf(movielens_processed.h5, keydata, modew)5.3 创建推荐系统输入格式根据不同的推荐算法准备特定格式的输入# 为协同过滤准备用户-物品-评分矩阵 rating_matrix ratings.pivot(indexuser_id, columnsmovie_id, valuesrating) # 为内容推荐准备电影特征矩阵 movie_features movies.set_index(movie_id)[[year] list(genres_expanded.columns)] # 为用户特征准备数据 user_features users.set_index(user_id)[[age, gender_encoded] [col for col in users.columns if occupation_ in col]]在实际项目中我发现正确处理电影标题中的年份和类型字段是最容易出错的部分。特别是当使用正则表达式提取年份时需要确保模式能够覆盖所有情况。另外将用户职业转换为one-hot编码时要注意内存使用情况对于大型数据集可能需要更高效的编码方式。

相关文章:

MovieLens数据集预处理避坑指南:用Pandas处理‘::’分隔符、编码分类变量与异常值检测的完整流程

MovieLens数据集预处理实战:从原始数据到推荐系统输入的完整避坑手册 当你第一次从GroupLens官网下载MovieLens数据集时,可能会被那些以.dat为扩展名的文件弄得一头雾水。这些文件使用::作为分隔符,包含各种需要清洗和转换的数据字段。本文将…...

Dify多租户数据隔离实战配置:从零搭建RBAC+Schema+Row-Level三级防护体系(附生产环境YAML校验清单)

更多请点击: https://intelliparadigm.com 第一章:Dify多租户数据隔离优化配置 在企业级 AI 应用部署中,Dify 默认采用单租户架构,若需支持多租户场景(如 SaaS 平台),必须显式强化数据隔离策略…...

开源AI智能体框架:如何用本地模型替代Claude实现自主可控

1. 项目概述:一个开源替代方案的诞生最近在AI应用开发圈里,一个名为“BlueBirdBack/openclaw-without-claude”的项目引起了我的注意。这个项目名本身就充满了故事性,它直指当前一个非常现实的问题:当我们依赖某个强大的闭源API&a…...

互联网大厂 Java 求职面试:从音视频场景到微服务的深入探讨

互联网大厂 Java 求职面试:从音视频场景到微服务的深入探讨 在互联网大厂求职,面试过程常常充满紧张与期待。今天,我们将一起走进燕双非的面试现场,看看他是如何应对面试官的提问的。第一轮提问 面试官:燕双非&#xf…...

互联网大厂 Java 求职面试:从音视频到微服务的技术探讨

互联网大厂 Java 求职面试:从音视频到微服务的技术探讨 在这场严肃的面试中,面试官与搞笑的候选人燕双非之间的对话充满了技术和幽默。以下是他们的对话记录。第一轮提问 面试官:燕双非,首先请你介绍一下 Java SE 的特点&#xff…...

互联网大厂 Java 求职面试:从基础到微服务的技术深潜

互联网大厂 Java 求职面试:从基础到微服务的技术深潜在一个阳光明媚的下午,面试官坐在桌子后面,脸上挂着严肃的表情,而燕双非则略显紧张,但他努力让自己看起来从容不迫。第一轮提问面试官:首先,…...

t技巧笔记(十):Painter 详解与实践指南

简介 langchain中提供的chain链组件,能够帮助我门快速的实现各个组件的流水线式的调用,和模型的问答 Chain链的组成 根据查阅的资料,langchain的chain链结构如下: $$Input \rightarrow Prompt \rightarrow Model \rightarrow Outp…...

ESP32H2-N4开发板三模无线与低功耗设计解析

1. WeAct ESP32H2-N4开发板深度解析1.1 硬件架构与核心特性WeAct ESP32H2-N4开发板采用Espressif Systems的ESP32-H2-MINI-1无线模块作为核心组件。这颗32位RISC-V架构的微控制器运行频率最高可达96MHz,内置320KB SRAM和128KB ROM存储空间,特别值得注意的…...

FPGA加速机器学习:原理、优化与应用实践

1. FPGA加速的实时机器学习技术概述 在科学实验领域,数据处理的速度和效率直接决定了研究的深度和广度。传统CPU架构在处理TB/s量级的实时数据流时往往力不从心,而FPGA(现场可编程门阵列)凭借其可重构特性和并行计算能力&#xff…...

UM482 RTK差分定位实战:从基站固定到4G无线数传的全链路配置

UM482 RTK差分定位实战:从基站固定到4G无线数传的全链路配置 在自动驾驶、精准农业和移动测绘等领域,厘米级定位精度已成为刚需。传统GNSS定位误差约2-5米,而RTK(实时动态差分定位)技术通过基站与流动站的协同工作&…...

Dify插件沙箱逃逸实录:从CVE-2026-0891漏洞复现到RCE防护加固的7步闭环方案

更多请点击: https://intelliparadigm.com 第一章:Dify插件沙箱逃逸实录:从CVE-2026-0891漏洞复现到RCE防护加固的7步闭环方案 CVE-2026-0891 是 Dify v0.6.10 及更早版本中插件执行沙箱的关键绕过漏洞,攻击者可通过构造恶意 plu…...

渗透测试干货:WiFi 无线网络攻防详解,一步一步手把手教学,小白也能学会

【渗透干货-近源渗透】破解WiFi无线网络教程(保姆级教程) 前言 破解无线的原理就是大量多次重复性的密码碰撞爆破,理论上只要你的密码足够多,就可以很轻松的爆破无线网络。 总体步骤 ​ 01 连接无线网卡 ​ 02 开启网卡监听 …...

从STTN到PDFormer:手把手拆解Transformer交通预测模型的演进与核心代码

从STTN到PDFormer:Transformer交通预测模型的技术迭代与核心实现剖析 交通预测作为智能城市建设的核心技术之一,其准确性直接影响着从导航软件到交通信号控制的各类应用。传统时序预测方法在处理复杂的时空依赖关系时往往力不从心,而Transfor…...

从游戏UI到GIS地图:一个Python函数搞定不规则多边形‘最佳中心点’的选取与可视化

从游戏UI到GIS地图:Python实战不规则多边形中心点智能选取 在游戏开发中,当玩家点击一个不规则形状的岛屿时,如何确定触发区域的最佳响应点?在GIS系统中,当地图需要为一个复杂地块自动放置标签时,该把文字定…...

实战指南:基于快马平台生成51单片机智能小车完整项目代码,从理论到产品

实战指南:基于快马平台生成51单片机智能小车完整项目代码,从理论到产品 最近在做一个51单片机的智能小车项目,用STC89C52作为主控芯片,实现了一些基础功能。整个过程还挺有意思的,特别是用InsCode(快马)平台来辅助开发…...

重新定义室内人员定位:高精度、无感化、连续化——镜像视界引领定位范式革新

重新定义室内人员定位:高精度、无感化、连续化——镜像视界引领定位范式革新长期以来,室内人员定位行业陷入“精度不足、有感知负担、轨迹断链”的困境,传统定位方案要么依赖佩戴设备、体验不佳,要么定位模糊、无法连续追踪&#…...

[LangChain Agent]Agent实战篇

LangChain Agent 详解 本文详细介绍了 LangChain 中 Agent(智能体)的核心概念、ReAct 推理模式、create_agent 高级 API 的使用方法,以及 Agent-to-Agent(A2A)多智能体协作架构。通过电商助手、天气查询助手和出行规划…...

新手无需纠结cursor价格:在快马用一句话生成你的第一个ai辅助编程项目

作为一个刚接触编程的新手,我最近一直在寻找合适的工具来学习AI辅助开发。之前听说Cursor很火,但看到订阅价格后有点犹豫——毕竟作为初学者,我还不确定自己是否需要这么专业的工具。直到发现了InsCode(快马)平台,才发现原来用自然…...

别再只会插卡了!用示波器实测SIM卡上电时序与通信波形(附故障排查)

示波器实战:SIM卡通信波形全解析与故障诊断指南 当物联网设备的SIM卡突然无法识别时,大多数工程师的第一反应是重新插拔卡片。但真正的硬件高手会拿起示波器探头——因为电气信号从不说谎。本文将带您深入SIM卡通信的微观世界,通过实测波形揭…...

数学推理轨迹评估:从算法到教学实践

1. 数学推理轨迹评估的核心价值数学推理过程的评估一直是教育测量和认知科学领域的难点问题。传统评分方式往往只关注最终答案的正确性,却忽视了思维过程中的关键信息。这就好比两位学生都解出了正确答案,但一位是胡乱猜测,另一位则是通过严谨…...

前端焦虑?收藏这份AI转型指南,助你从程序员变身AI产品经理!

文章分析了AI对前端编程领域的冲击,指出前端业务逻辑简单且GitHub语料丰富,适合转型AI工程师或产品经理。文章还探讨了AI在前端开发中的实际应用,如Cursor工具在需求分析、UI还原、业务逻辑实现等环节的效率提升,并指出AI完全替代…...

用ALV动态单元格编辑实现采购订单审批流:基于采购数量控制字段可编辑性

基于ALV动态单元格编辑的采购订单审批流设计与实现 在SAP MM模块的日常运营中,采购订单审批流程的效率直接影响企业采购成本和供应链响应速度。传统审批方式往往需要开发复杂的增强程序或依赖多级工作流系统,而利用ALV(ABAP List Viewer&…...

实战应用:开发一款用户可自助解决vcruntime140.dll错误的桌面工具

今天想和大家分享一个实战项目:开发一款帮助用户自助解决vcruntime140.dll错误的桌面工具。这个需求来源于实际工作中频繁遇到用户反馈"程序启动报错vcruntime140.dll缺失"的问题,每次都需要远程指导操作,效率很低。于是决定用InsC…...

Taotoken用量看板如何清晰展示各项目模型消耗占比

Taotoken 用量看板如何清晰展示各项目模型消耗占比 1. 用量看板的核心功能 Taotoken 用量看板为项目管理者提供了多维度的 API 调用数据可视化能力。通过聚合不同项目、功能模块的 token 消耗数据,帮助管理者快速掌握资源分配情况。看板默认展示最近 30 天的累计用…...

AI编码代理执行力插件:反偷懒机制与多Agent协作优化

1. 项目概述:一个让AI编码代理“卷起来”的执行力插件如果你用过Claude Code、Cursor或者OpenClaw这类AI编码助手,肯定遇到过这种情况:让它修个bug,试了两三次不行,它就开始摆烂,跟你说“建议您手动检查一下…...

ARM NEON技术:SIMD加速与优化实践

1. ARM NEON技术概述 NEON是ARM架构中的SIMD(单指令多数据)扩展技术,作为Cortex-A系列处理器的标准功能模块,它通过并行数据处理能力显著提升了多媒体编解码、数字信号处理等计算密集型任务的执行效率。这项技术最早在ARMv7架构中…...

从零搭建AI智能助手:基于LangChain与Ollama的模块化架构实践

1. 项目概述:从零构建一个AI驱动的智能助手最近在GitHub上看到一个挺有意思的项目,叫openclaw-setup。光看名字,可能有点摸不着头脑,但点进去研究了一下,发现这是一个关于如何搭建和配置一个名为“OpenClaw”的AI智能助…...

RAB7传感器扩展板:多源数据融合与物联网应用实战

1. RAB7传感器融合扩展板概述Rutronik RAB7是一款专为Arduino生态系统设计的开源硬件传感器扩展板,集成了来自Bosch、Infineon和Sensirion三大厂商的七种高性能环境与惯性传感器。作为从事嵌入式开发十余年的工程师,我首次接触这款扩展板时就被其精妙的传…...

初次使用Taotoken从注册到完成第一次API调用的全过程

初次使用Taotoken从注册到完成第一次API调用的全过程 1. 注册Taotoken账号 访问Taotoken官网完成账号注册是使用服务的第一步。在浏览器地址栏输入https://taotoken.net进入官网首页,点击右上角的"注册"按钮。按照页面提示填写邮箱、设置密码并完成验证…...

视频理解与多模态推理技术解析与应用实践

1. 视频理解与多模态推理技术概述视频理解与多模态推理是当前计算机视觉领域最前沿的研究方向之一。简单来说,这项技术让机器能够像人类一样"看懂"视频内容,并结合文本、语音等多种信息进行综合判断。我在实际项目中发现,这项技术正…...