一、实验目的:
对于出租车轨迹数据可以进行正确的预处理
二、实验内容:
1. 数据质量提升
观察在实验一中导入的出租车GPS数据,发现其中的数据质量问题,并进行修复。
提示 原始数据中可能存在以下问题: a. 记录重复问题;b. 车辆的时刻表在变而GPS坐标不变;c. 车辆状态字段频繁跳动。常见数据修复手段:a. 删除问题数据;b. 对问题数据进行修改
2. 在百度地图上绘制某辆出租车的轨迹
(1)从数据表中提取某辆车的GPS记录并按时间排序,得到该车辆的轨迹,为便于实验,可以从轨迹中选择20个点在百度地图上绘制。
(2)将所选择的轨迹点由GPS坐标系转化为百度坐标系。
(3)在百度地图中绘制出该条轨迹的线路。
三、实验步骤
1. 构造测试数据集
首先构造一个测试数据集,数据集中包括有完整数据、缺失值数据、重复值数据、异常数据等,然后导入到SQL表中。
(1)重复数据
![]()
(2)缺失数据

(3)车辆状态字段频繁跳动

(4)时刻表变,但经纬度没变

2. 数据质量提升
(1)数据缺失值处理
对数据表中的数据进行缺失值处理,由于样本数据量比较大,缺失值数据比较少,因此此处就直接将缺失值数据删除。
代码:
import pymysql
# 连接数据库
try:
db = pymysql.connect(host='localhost', user='root', password='123456', database='traffic_data', charset='utf8')
cursor = db.cursor()
# 获取表结构
cursor.execute("SHOW COLUMNS FROM traffic_data.test;")
columns = [column[0] for column in cursor.fetchall()]
# 查询每列的空缺值数量
null_counts = {}
for column in columns:
null_query = f"SELECT COUNT(*) FROM traffic_data.test WHERE {column} IS NULL;"
cursor.execute(null_query)
null_count = cursor.fetchone()[0]
null_counts[column] = null_count
# 输出每列的空缺值数量
print("Null value counts for each column:")
for column, count in null_counts.items():
print(f"{column}: {count}")
# 删除含有空缺值的记录
for column in columns:
if null_counts[column] > 0:
delete_query = f"DELETE FROM traffic_data.test WHERE {column} IS NULL;"
cursor.execute(delete_query)
db.commit() # 提交事务以保存更改
print("含有空缺值的记录已删除。")
except Exception as e:
print("数据库操作失败:", e)
if 'db' in locals():
db.rollback() # 回滚事务以撤销更改
finally:
if 'db' in locals():
db.close() # 关闭数据库连接
利用测试数据集,测试程序,

能正确将数据表中的空缺值删除,因此对本实验的整体出租车数据进行空缺值处理:

发现并没有空缺值。
(2)数据重复值处理
由于数据表的数据量太大,创建索引:
ALTER TABLE test1 ADD INDEX idx_id_date_time (ID, DATE, TIME);
这里认为某辆出租车在同一日期同一时间同一海拔高度只能有一条数据,如果有多条数据记录,则为重复数据,因此每组重复数据记录,只保留其中一条数据记录,其余的应该删除。利用测试数据,测试程序,运行结果:

从结果来看,已经筛选出重复数据记录,并对每组重复数据只保留了其中的一条记录,其余重复记录已经删除,在测试集中共有2314条重复记录。在SQL中查看测试集test1是否已经成功进行重复值处理:

最低0.47元/天 解锁文章
8922

被折叠的 条评论
为什么被折叠?



