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

kaggle竞赛:纽约出租车行程时间NYC Taxi Trip Duration

1.引言

作为一名(坦白说有点懒的)图像处理方向的研究生,说实话最近新开一个坑,可能是因为要寒假了比较无聊,这次带来的系列是kaggle数据处理竞赛的经典例题:纽约出租车行程时间问题。希望大家多多支持:)

1.1 问题背景

纽约充满了单行道、狭窄的街道,以及随时存在的无数行人。更不用说那些堵塞街道的汽车、摩托车和自行车了。再加上人们急于从A点赶到B点的情绪,结果就是你很可能会迟到,错过你需要准时参加的活动。

生活在像纽约这样的城市中,解决从A点到B点的问题(而不至于让自己抓狂)其实很简单:打车(或者使用Uber、Lyft等)。你不需要担心交通堵塞或行人问题,而且你还有时间做点别的事情,比如查看邮件。虽然听起来简单,但这并不意味着你一定能准时到达目的地。所以,你需要让司机走最短的路线。这里说的最短指时间最短。如果某条路线A比路线B长X公里,但能比路线B快Y分钟到达,那么你应该选择路线A。

要知道哪条路线是最佳路线,我们需要能够预测当选择某条路线时,行程会持续多长时间。因此,这场竞赛的目标是预测测试数据集中每个行程的持续时间,给定起始和结束坐标

1.2 使用的库与函数

在这个项目中,我们使用了 Python 3.6.1 和以下库来处理数据、构建模型和可视化结果:

  • Scikit-Learn:用于执行机器学习操作(如数据预处理、模型训练等)。
  • Pandas:用于数据操作和处理,方便加载、清洗和转换数据。
  • Numpy:Python中进行科学计算的基础包,支持高效的数值运算。
  • XGBoost:用于构建预测模型的梯度提升算法,常用于回归和分类任务。
  • Seaborn:基于Matplotlib构建的高级数据可视化工具,简化了绘图操作。
# 导入必需的库
import numpy as np                # 数值计算
import pandas as pd               # 数据处理
import seaborn as sns             # 数据可视化
import matplotlib.pyplot as plt    # 可视化
import xgboost as xgb             # XGBoost 模型
from sklearn.model_selection import train_test_split  # 数据划分
from sklearn.metrics import mean_squared_log_error    # RMSLE 计算
from sklearn.preprocessing import StandardScaler      # 标准化
from math import radians, cos, sin, asin, sqrt
import matplotlib
plt.rcParams['figure.figsize'] = [16, 10]

1.3 数据加载

train = pd.read_csv('new-york-city-taxi-with-osrm/train.csv')
test = pd.read_csv('new-york-city-taxi-with-osrm/test.csv')
X_train = train.drop(columns=['trip_duration'])
y_train = train['trip_duration']
X_test = test.drop(columns=['trip_duration'])
y_test = test['trip_duration']

2. 数据准备处理

2.1  Trip Duration Clean-up

# 设置显示样式
sns.set(style="whitegrid")
# 绘制 trip_duration 分布图(对数变换以更好显示分布)
plt.figure(figsize=(10, 6))
sns.histplot(train['trip_duration'], bins=100, kde=False, color='blue', log_scale=True)
plt.title('Distribution of Trip Duration (Log Scale)', fontsize=16)
plt.xlabel('Trip Duration (seconds, log scale)', fontsize=12)
plt.ylabel('Frequency', fontsize=12)
plt.show()

从上图中可以看到,trip_duration 变量存在一些异常值,例如,最大行程时长高达 980 小时,而最小行程时长仅为 1 秒。这些异常值可能会扭曲数据分布,并对模型性能产生负面影响。

清理方法:
决定排除超出平均值 2 个标准差范围的数据。这是因为,在正态分布的假设下,大多数数据(约 95%)应位于 2 个标准差范围内。此外,也可以尝试将范围扩大到 4 个标准差,观察其对最终结果的影响。
m = np.mean(train['trip_duration'])
s = np.std(train['trip_duration'])
train = train[train['trip_duration'] <= m + 2*s]
train = train[train['trip_duration'] >= m - 2*s]

2.2 Latitude and Longitude Clean-up

限制纽约市边界范围内的坐标点

纽约市的边界(以经纬度表示)为:

  • 经度范围:city_long_border = (-74.03, -73.75)
  • 纬度范围:city_lat_border = (40.63, 40.85)

通过与 train.describe() 的输出进行比较,可以发现某些坐标点(如 pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude)超出了这些边界范围。这些点可能是异常值或数据错误。

train = train[train['pickup_longitude'] <= -73.75]
train = train[train['pickup_longitude'] >= -74.03]
train = train[train['pickup_latitude'] <= 40.85]
train = train[train['pickup_latitude'] >= 40.63]
train = train[train['dropoff_longitude'] <= -73.75]
train = train[train['dropoff_longitude'] >= -74.03]
train = train[train['dropoff_latitude'] <= 40.85]
train = train[train['dropoff_latitude'] >= 40.63]

2.3 Passenger_Count Clean-up

异常值:0,7,8,9
由于test中也有异常值,不能直接删除,考虑用最近的值替代:0–>1,7、8、9–>6

train['passenger_count'] = train['passenger_count'].replace({0: 1, 7: 6, 8: 6, 9: 6})
test['passenger_count'] = test['passenger_count'].replace({0: 1, 7: 6, 8: 6, 9: 6})

2.4 Date Clean-up

在数据准备的最后一步,我们需要将日期变量(pickup_datetimedropoff_datetime)的格式转换为 datetime 类型。这一步将极大地简化后续的时间特征提取操作,例如:提取年、月、日、小时、分钟、星期、日期、其中加上“time”,用hour+minute/60,为了区分7:01与7:59;是否工作日、是否节假日 24小时切分为不同时段;早高峰、晚高峰、白天、夜晚 划分方式需要区分是否节假日,节假日没有早/晚高峰;

# 提取基本时间特征
train['year'] = train['pickup_datetime'].dt.year
train['month'] = train['pickup_datetime'].dt.month
train['day'] = train['pickup_datetime'].dt.day
train['hour'] = train['pickup_datetime'].dt.hour
train['minute'] = train['pickup_datetime'].dt.minute
train['weekday'] = train['pickup_datetime'].dt.weekday  # 0=Monday, 6=Sunday
train['date'] = train['pickup_datetime'].dt.date  # 仅日期部分
# 创建 time 特征 (hour + minute / 60)
train['time'] = train['hour'] + train['minute'] / 60
# 是否工作日 (0=周末, 1=工作日)
train['is_workday'] = train['weekday'].apply(lambda x: 1 if x < 5 else 0)
# 是否节假日
train['is_holiday'] = train['date'].apply(lambda x: 1 if x in holidays else 0)
# 时间段划分函数
def assign_time_period(hour, is_holiday):if is_holiday:  # 节假日if 7 <= hour < 21:return 'day'  # 白天else:return 'night'  # 夜晚else:  # 非节假日if 7 <= hour <= 9:return 'morning_rush'  # 早高峰elif 17 <= hour <= 21:return 'evening_rush'  # 晚高峰elif 9 < hour < 17:return 'daytime'  # 白天else:return 'night'  # 夜晚
# 应用时间段划分
train['time_period'] = train.apply(lambda row: assign_time_period(row['hour'], row['is_holiday']), axis=1)
# 查看结果
print(train[['year', 'month', 'day', 'hour', 'minute', 'weekday', 'time', 'is_workday', 'is_holiday', 'time_period']].head())

懒得更新了,明天继续吧

相关文章:

kaggle竞赛:纽约出租车行程时间NYC Taxi Trip Duration

1.引言 作为一名&#xff08;坦白说有点懒的&#xff09;图像处理方向的研究生&#xff0c;说实话最近新开一个坑&#xff0c;可能是因为要寒假了比较无聊&#xff0c;这次带来的系列是kaggle数据处理竞赛的经典例题&#xff1a;纽约出租车行程时间问题。希望大家多多支持&…...

Freemarker模板进行判空

文章目录 freemarker判断对象是否为null使用 ?? 操作符使用 ?has_content 内建函数直接使用 ! 操作符取反 freemarker判断列表是否为空 freemarker判断对象是否为null 在 FreeMarker 模板引擎中&#xff0c;你可以使用内建的指令和条件判断来检测一个对象是否为 null。Free…...

C++ const关键字(八股总结)

作用 const修饰符用来定义常量&#xff0c;具有不可变性。 修饰变量&#xff0c;说明该变量不可以被改变&#xff1b;修饰指针&#xff0c;分为指向常量的指针&#xff08;pointer to const&#xff09;和自身是常量的指针&#xff08;常量指针&#xff0c;const pointer&…...

Linux 清楚历史命令

在 Linux 中&#xff0c;执行完命令后&#xff0c;如果你想清除终端屏幕上的内容&#xff0c;可以使用以下几种方法&#xff1a; 1. 使用 clear 命令 clear 是 Linux 中最常用的清除屏幕命令。它会将终端屏幕清空&#xff0c;并将光标移动到屏幕左上角。 bash clear 2. 使用快…...

服务器双网卡NCCL通过交换机通信

1、NCCL变量设置 export CUDA_DEVICE_MAX_CONNECTIONS1 export NCCL_SOCKET_IFNAMEeno2 export NCCL_IB_DISABLE0 #export NCCL_NETIB export NCCL_IB_HCAmlx5_0,mlx5_1 export NCCL_IB_GID_INDEX3 export NCCL_DEBUGINFOGPUS_PER_NODE4MASTER_ADDR192.168.1.2 MASTER_PORT600…...

Redis哨兵(sentinel)

是什么 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为新主库&#xff0c;继续对外服务 哨兵的作用 1、监控redis运行状态&#xff0c;包括master和slave 2、当master down机&#xff0c;能自动将slave切换成新master 能干嘛…...

小白学Pytorch

小白学Pytorch 发现一个比较好的教程&#xff0c;对于自己来说比较合适&#xff0c;适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚&#xff1a; 我们使用nn包中的Sequential搭建网络&#…...

ros2笔记-2.5.3 多线程与回调函数

本节体验下多线程。 python示例 在src/demo_python_pkg/demo_python_pkg/下新建文件&#xff0c;learn_thread.py import threading import requestsclass Download:def download(self,url,callback):print(f线程&#xff1a;{threading.get_ident()} 开始下载&#xff1a;{…...

第5章:Go语言错误处理和异常

第5章&#xff1a;Go语言错误处理和异常 5.1 错误类型基础 5.1.1 error接口 // error接口定义 type error interface {Error() string }// 自定义错误 type CustomError struct {Message stringCode int }func (e *CustomError) Error() string {return fmt.Sprintf(&quo…...

题库刷题知识点总结

算法与机器学习相关 支持向量机&#xff1a;是一种有监督的机器学习算法&#xff0c;用于分类和回归任务。它通过寻找一个最优超平面来将不同类别的数据点分开&#xff0c;最大化两类数据点到超平面的间隔&#xff0c;具有良好的泛化能力和抗噪声能力。机器学习&#xff1a;是…...

GraphRAG:LLM之Graphrag接入milvus

前言 微软目前的graphrag更像个demo&#xff0c;数据量大的时候不是很友好的啊&#xff0c;所以将milvus接入了graphrag&#xff0c;看完这篇文章&#xff0c;其他数据库接入应该也没问题 注&#xff1a;这篇文章只是在search的时候接入进来&#xff0c;index过程或者说整个流…...

adb使用及常用命令

目录 介绍 组成 启用adb调试 常用命令 连接设备 版本信息 安装应用 卸载应用 文件操作 日志查看 屏幕截图和录制 设备重启 端口转发 调试相关 设置属性 设备信息查询 获取帮助 模拟输入 介绍 adb全称为 Android Debug Bridge(Android调试桥)&#xff0c;是 A…...

omnipeek分析beacon帧

omnipeek查询设备发送beacon时同一信道两个beacon发送间隔 目录 用例要求分析抓包数据 1.用例要求 Beacon帧发送频率符合规范要求。参数-【同一个信道两个beacon发送间隔不能超过100ms】 2.分析抓包数据 打开becon.pkt文件&#xff08;用omnipeek工具提前抓取包&#xff09…...

Java数组问题

题目2&#xff1a; 定义一个数组&#xff0c;存储1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8&#xff0c;9&#xff0c;10 遍历数组得到的每一个元素&#xff0c;统计数组里面一共多少个能被3整除的数字 package com.s…...

salesforce 可以为同一个简档的同一个 recordtype 的对象设置多种页面布局吗

在 Salesforce 中&#xff0c;对于同一个 Record Type&#xff08;记录类型&#xff09;&#xff0c;默认情况下&#xff0c;每个 Profile&#xff08;用户简档&#xff09; 只能分配一个 Page Layout&#xff08;页面布局&#xff09;。也就是说&#xff0c;页面布局的分配规则…...

使用vue项目中,使用webpack模板和直接用vue.config来配置相关插件 区别是什么,具体有哪些提现呢

在 Vue 项目中&#xff0c;使用 Webpack 模板 和 vue.config.js 来配置相关插件的主要区别在于配置的复杂度、灵活性和易用性。以下是两者的详细对比&#xff1a; 1. Webpack 模板 Webpack 模板是 Vue CLI 早期版本&#xff08;如 Vue CLI 2.x&#xff09;中提供的项目初始化模…...

五、包图

包图 、基本概念 概念&#xff1a; 用来描述模型中的包和其所含元素的组织方式的图&#xff0c;是维护和控制系统总体结构的重要内容。 包可以把所建立的各种模型组织起来&#xff0c;形成各种功能或用途的模块&#xff0c;并可以控制包中元素的可见性以及描述包之间的依赖…...

关于重构一点简单想法

关于重构一点简单想法 当前工作的组内&#xff0c;由于业务开启的时间正好处于集团php-》go技术栈全面迁移的时间点&#xff0c;组内语言技术栈存在&#xff1a;php、go两套。 因此需求开发过程中通常要考虑两套技术栈的逻辑&#xff0c;一些基础的逻辑也没有办法复用。 在这…...

kafka使用以及基于zookeeper集群搭建集群环境

一、环境介绍 zookeeper下载地址&#xff1a;https://zookeeper.apache.org/releases.html kafka下载地址&#xff1a;https://kafka.apache.org/downloads 192.168.142.129 apache-zookeeper-3.8.4-bin.tar.gz kafka_2.13-3.6.0.tgz 192.168.142.130 apache-zookee…...

GAN对抗生成网络(二)——算法及Python实现

1 算法步骤 上一篇提到的GAN的最优化问题是&#xff0c;本文记录如何求解这一问题。 首先为了表示方便&#xff0c;记&#xff0c;这里让最大的可视作常量。 第一步&#xff0c;给定初始的&#xff0c;使用梯度上升找到 ,最大化。关于梯度下降&#xff0c;可以参考笔者另一篇…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...