1. 项目背景与数据理解
作为一名从传统行业转行到IT领域的数据分析师,我最近接手了一个公交刷卡数据分析项目。这个项目让我深刻体会到真实场景中数据挖掘的挑战与乐趣。公交刷卡数据看似简单,但蕴含着丰富的用户行为信息,特别是对城市通勤模式的刻画具有重要价值。
我们手头的数据集包含以下核心字段:
- user_id:匿名化的用户唯一标识
- station_id:公交站点或地铁站的编码
- type:刷卡类型,包括上车/下车/进站/出站四种状态
- timestamp:精确到秒的时间戳记录
注意:原始数据可能存在重复刷卡、设备误触等噪声,分析前必须进行数据清洗。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据预处理实战
2.1 原始数据质量检查
首先我们需要用MySQL进行数据质量验证:
sql复制-- 检查数据完整性
SELECT
COUNT(DISTINCT user_id) AS user_count,
COUNT(DISTINCT station_id) AS station_count,
COUNT(*) AS total_records
FROM bus_transactions;
-- 检查时间范围
SELECT
MIN(timestamp) AS earliest,
MAX(timestamp) AS latest
FROM bus_transactions;
2.2 异常数据处理策略
在实际操作中会遇到几种典型数据问题:
- 连续刷卡:30秒内同一用户的重复记录
- 单边记录:只有进站没有出站(或相反)
- 时间异常:凌晨3点的通勤记录
处理代码示例:
sql复制-- 删除30秒内的重复记录
DELETE t1 FROM bus_transactions t1
INNER JOIN bus_transactions t2
WHERE
t1.id < t2.id AND
t1.user_id = t2.user_id AND
t1.type = t2.type AND
TIMESTAMPDIFF(SECOND, t1.timestamp, t2.timestamp) < 30;
