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–>6train['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_datetime
和dropoff_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.引言 作为一名(坦白说有点懒的)图像处理方向的研究生,说实话最近新开一个坑,可能是因为要寒假了比较无聊,这次带来的系列是kaggle数据处理竞赛的经典例题:纽约出租车行程时间问题。希望大家多多支持&…...
Freemarker模板进行判空
文章目录 freemarker判断对象是否为null使用 ?? 操作符使用 ?has_content 内建函数直接使用 ! 操作符取反 freemarker判断列表是否为空 freemarker判断对象是否为null 在 FreeMarker 模板引擎中,你可以使用内建的指令和条件判断来检测一个对象是否为 null。Free…...
C++ const关键字(八股总结)
作用 const修饰符用来定义常量,具有不可变性。 修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer&…...
Linux 清楚历史命令
在 Linux 中,执行完命令后,如果你想清除终端屏幕上的内容,可以使用以下几种方法: 1. 使用 clear 命令 clear 是 Linux 中最常用的清除屏幕命令。它会将终端屏幕清空,并将光标移动到屏幕左上角。 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主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务 哨兵的作用 1、监控redis运行状态,包括master和slave 2、当master down机,能自动将slave切换成新master 能干嘛…...

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

ros2笔记-2.5.3 多线程与回调函数
本节体验下多线程。 python示例 在src/demo_python_pkg/demo_python_pkg/下新建文件,learn_thread.py import threading import requestsclass Download:def download(self,url,callback):print(f线程:{threading.get_ident()} 开始下载:{…...
第5章:Go语言错误处理和异常
第5章: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…...
题库刷题知识点总结
算法与机器学习相关 支持向量机:是一种有监督的机器学习算法,用于分类和回归任务。它通过寻找一个最优超平面来将不同类别的数据点分开,最大化两类数据点到超平面的间隔,具有良好的泛化能力和抗噪声能力。机器学习:是…...
GraphRAG:LLM之Graphrag接入milvus
前言 微软目前的graphrag更像个demo,数据量大的时候不是很友好的啊,所以将milvus接入了graphrag,看完这篇文章,其他数据库接入应该也没问题 注:这篇文章只是在search的时候接入进来,index过程或者说整个流…...

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

omnipeek分析beacon帧
omnipeek查询设备发送beacon时同一信道两个beacon发送间隔 目录 用例要求分析抓包数据 1.用例要求 Beacon帧发送频率符合规范要求。参数-【同一个信道两个beacon发送间隔不能超过100ms】 2.分析抓包数据 打开becon.pkt文件(用omnipeek工具提前抓取包)…...
Java数组问题
题目2: 定义一个数组,存储1,2,3,4,5,6,7,8,9,10 遍历数组得到的每一个元素,统计数组里面一共多少个能被3整除的数字 package com.s…...
salesforce 可以为同一个简档的同一个 recordtype 的对象设置多种页面布局吗
在 Salesforce 中,对于同一个 Record Type(记录类型),默认情况下,每个 Profile(用户简档) 只能分配一个 Page Layout(页面布局)。也就是说,页面布局的分配规则…...
使用vue项目中,使用webpack模板和直接用vue.config来配置相关插件 区别是什么,具体有哪些提现呢
在 Vue 项目中,使用 Webpack 模板 和 vue.config.js 来配置相关插件的主要区别在于配置的复杂度、灵活性和易用性。以下是两者的详细对比: 1. Webpack 模板 Webpack 模板是 Vue CLI 早期版本(如 Vue CLI 2.x)中提供的项目初始化模…...

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

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

kafka使用以及基于zookeeper集群搭建集群环境
一、环境介绍 zookeeper下载地址:https://zookeeper.apache.org/releases.html kafka下载地址: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的最优化问题是,本文记录如何求解这一问题。 首先为了表示方便,记,这里让最大的可视作常量。 第一步,给定初始的,使用梯度上升找到 ,最大化。关于梯度下降,可以参考笔者另一篇…...

AUTOSAR实战教程--开放式通用DoIP刷写工具OpenOTA开发计划
目录 软件概述 安装与运行 界面说明 3.1 功能区划分 3.2 状态显示 基本操作流程 4.1 DoIP连接配置 4.2 服务配置(刷写流程) 4.3 执行操作 4.4 保存配置 4.5 加载配置 功能详解 5.1 核心功能模块 诊断服务配置 通信设置 文件下载 工具功…...
[论文阅读] 人工智能+软件工程 | 结对编程中的知识转移新图景
当AI成为编程搭档:结对编程中的知识转移新图景 论文信息 论文标题:From Developer Pairs to AI Copilots: A Comparative Study on Knowledge Transfer(从开发者结对到AI副驾驶:知识转移的对比研究) 作者及机构&#…...

android binder(四)binder驱动详解2
二、情景分析 1、ServiceManager 启动过程 2. 服务注册 服务注册过程(addService)核心功能:在服务所在进程创建binder_node,在servicemanager进程创建binder_ref。其中binder_ref的desc在同一个进程内是唯一的: 每个进程binder_proc所记录的…...

附加模块--Qt Shader Tools功能及架构解析
Qt 6.0 引入了全新的 Shader Tools 模块,为着色器管理提供了现代化、跨平台的解决方案。 一、主要功能 核心功能 跨平台着色器编译 支持 GLSL、HLSL 和 MetalSL 着色器语言 可在运行时或构建时进行着色器编译 自动处理不同图形API的着色器变体 SPIR-V 支持 能…...
将 tensorflow keras 训练数据集转换为 Yolo 训练数据集
以 https://www.kaggle.com/datasets/vipoooool/new-plant-diseases-dataset 为例 1. 图像分类数据集文件结构 (例如用于 yolov11n-cls.pt 训练) import os import csv import random from PIL import Image from sklearn.model_selection import train_test_split import s…...
如何确定微服务的粒度与边界
确定微服务的粒度与边界 在完成初步服务拆分之后,架构师往往会遇到另一个难题:该拆到多细?哪些功能可以归并为一个服务,哪些又必须单独部署?这就是“服务粒度与边界”的问题。本节将围绕实际架构经验,介绍…...
低代码平台前端页面表格字段绑定与后端数据传输交互主要有哪些方式?华为云Astro在这方面有哪些方式?
目录 🔧 一、低代码平台中常见的数据绑定与交互方式 1. 接口绑定(API 调用) 2. 数据源绑定(DataSource) 3. 变量中转(临时变量 / 页面状态) 4. 数据模型绑定(模型驱动) 🌐 二、华为云 Astro 轻应用的实现方式 ✅ 1. 数据源绑定(API服务+API网关) ✅ 2. 变…...
C语言 | C代码编写中的易错点总结
C语言易错点 **1. 指针与内存管理****2. 数组与字符串****3. 未初始化变量****4. 类型转换与溢出****5. 运算符优先级****6. 函数与参数传递****7. 宏定义陷阱****8. 结构体与内存对齐****9. 输入/输出函数****10. 其他常见问题****最佳实践**在C语言编程中,由于其底层特性和灵…...
【C/C++】std::vector成员函数清单
文章目录 std::vector使用指南1 不同版本提供的能力基础:C98 / C03 提供的成员函数C11 新增的成员函数C14:基本无变化(主要是标准库泛化,非 vector 成员变化)C17 引入的新特性(间接影响)C20 新增…...

用通俗的话解释下MCP是个啥?
在AI领域,模型的开发、部署和迭代速度日益加快,但随之而来的挑战也愈发显著:如何高效管理不同版本的模型?如何在复杂环境中确保模型的可追溯性和可复用性?如何实现跨团队、跨平台的模型协作? 在计算机领域…...