Google Cloud Platform 机器学习实战:纽约出租车费用数据集探索与清洗
概述
本文是Google Cloud Platform机器学习实战系列的一部分,重点介绍如何使用BigQuery和Pandas对纽约出租车费用数据集进行探索性分析和数据清洗。我们将通过实际案例演示如何从海量数据中提取有价值的特征,为后续构建机器学习模型预测出租车费用奠定基础。
学习目标
通过本教程,您将掌握以下技能:
- 使用BigQuery查询大型数据集
- 实现可重复的数据采样方法
- 利用Pandas进行数据探索
- 识别并清洗数据中的异常值
数据集介绍
我们使用的数据集记录了纽约市的出租车行程信息,目标是构建一个机器学习模型来预估出租车费用。这种模型对乘客和叫车应用都非常有价值:
- 乘客可以提前了解大致费用,避免被多收费
- 叫车应用可以在行程开始前向用户报价
环境准备
首先需要安装必要的Python库并设置环境变量:
!pip install google-cloud-bigquery==1.21.0
PROJECT = "your-project-id" # 替换为您的GCP项目ID
REGION = "us-central1" # 选择可用的区域
import os
os.environ["PROJECT"] = PROJECT
os.environ["REGION"] = REGION
%load_ext google.cloud.bigquery
数据探索
1. 查看数据模式和大小
数据集存储在BigQuery中,这是一个PB级别的全托管云数据仓库。我们可以先了解数据的结构和规模:
%%bigquery --project $PROJECT
#standardSQL
SELECT *
FROM `nyc-tlc.yellow.trips`
WHERE RAND() < .0000001 # 随机采样一小部分数据
2. 可重复采样方法
随机采样虽然简单,但不可重复。我们推荐使用哈希函数实现确定性采样:
%%bigquery --project $PROJECT
#standardSQL
SELECT *
FROM `nyc-tlc.yellow.trips`
WHERE ABS(MOD(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING)), 5000)) = 1
这种方法使用pickup_datetime
作为哈希键,通过模运算实现可重复的1/5000采样。
3. 将数据加载到Pandas DataFrame
为了结合SQL和Python分析,我们可以将查询结果存入Pandas DataFrame:
from google.cloud import bigquery
bq = bigquery.Client(project=PROJECT)
query_string = """
#standardSQL
SELECT *
FROM `nyc-tlc.yellow.trips`
WHERE ABS(MOD(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING)), 5000)) = 1
"""
trips = bq.query(query_string).to_dataframe()
数据分析
1. 数据概览
使用Pandas的.describe()
方法查看数据统计信息:
trips.describe()
2. 数据质量问题
分析发现数据存在以下问题:
- 经纬度超出合理范围(纬度应在-90到90之间,经度应在-180到180之间)
- 存在负数的费用
- 乘客数为0的记录
- 行程距离为0但收费很高的记录
3. 行程距离与费用关系
绘制行程距离与费用的散点图:
%matplotlib inline
trips.plot(x="trip_distance", y="fare_amount", kind="scatter")
图表显示大量0距离但高费用的异常数据点。
数据清洗
1. 确定目标变量
应该使用fare_amount
还是total_amount
作为预测目标?分析显示:
trips[trips["tolls_amount"] > 0][:10]
total_amount
并不总是等于fare_amount
+ tolls_amount
+ tip
,因此我们选择fare_amount
+ tolls_amount
作为目标变量。
2. 特征选择
选择模型特征时应考虑:
- 与目标变量相关
- 预测时可获得
我们最终选择以下特征:
pickup_datetime
pickup_longitude
pickup_latitude
dropoff_longitude
dropoff_latitude
3. 完整清洗流程
最终的数据清洗查询:
%%bigquery --project $PROJECT
#standardSQL
SELECT
(tolls_amount + fare_amount) AS fare_amount,
pickup_datetime,
pickup_longitude,
pickup_latitude,
dropoff_longitude,
dropoff_latitude
FROM
`nyc-tlc.yellow.trips`
WHERE
trip_distance > 0
AND passenger_count > 0
AND fare_amount >= 2.50
AND pickup_longitude BETWEEN -78 AND -70
AND pickup_latitude BETWEEN 37 AND 45
AND dropoff_longitude BETWEEN -78 AND -70
AND dropoff_latitude BETWEEN 37 AND 45
AND ABS(MOD(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING)), 5000)) = 1
总结
通过本教程,我们完成了:
- 从BigQuery中查询纽约出租车数据
- 实现了可重复的数据采样方法
- 使用Pandas进行数据探索
- 识别并清洗了数据中的异常值
- 选择了合适的特征和目标变量
清洗后的数据集现在可以用于构建出租车费用预测模型。在后续教程中,我们将使用这个数据集训练机器学习模型。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考