Google Cloud Platform 机器学习实战:纽约出租车费用数据集探索与清洗

Google Cloud Platform 机器学习实战:纽约出租车费用数据集探索与清洗

training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

概述

本文是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. 特征选择

选择模型特征时应考虑:

  1. 与目标变量相关
  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

总结

通过本教程,我们完成了:

  1. 从BigQuery中查询纽约出租车数据
  2. 实现了可重复的数据采样方法
  3. 使用Pandas进行数据探索
  4. 识别并清洗了数据中的异常值
  5. 选择了合适的特征和目标变量

清洗后的数据集现在可以用于构建出租车费用预测模型。在后续教程中,我们将使用这个数据集训练机器学习模型。

training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常琚蕙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值