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的最优化问题是,本文记录如何求解这一问题。 首先为了表示方便,记,这里让最大的可视作常量。 第一步,给定初始的,使用梯度上升找到 ,最大化。关于梯度下降,可以参考笔者另一篇…...
新浪舆情通:数据大屏让信息一目了然
新浪舆情通:数据大屏让信息一目了然网络时代,面对海量数据,如何快速发现重要信息、准确判断发展态势、及时开展分析研判?新浪舆情通数据大屏,通过多维数据的可视化大屏,将复杂的数据转化为直观的分析图表&a…...
BBDown_GUI终极指南:三步完成B站视频批量下载的完整教程
BBDown_GUI终极指南:三步完成B站视频批量下载的完整教程 【免费下载链接】BBDown_GUI BBDown的图形化版本 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown_GUI BBDown_GUI是一款功能强大的B站视频下载工具,通过直观的图形化界面让用户无需记…...
Chromebook Pixel 2013 从FydeOS迁移至Deepin v20.2.1实战指南(一)
1. 为什么选择Deepin替代FydeOS Chromebook Pixel 2013作为一款经典的Chromebook设备,出厂预装的是Chrome OS系统。很多用户会选择安装FydeOS来获得更完整的桌面体验,但FydeOS本质上还是基于Chrome OS的修改版,在某些方面仍然存在限制。Deepi…...
2026年OpenClaw怎么部署?5分钟腾讯云零技术安装及百炼Coding Plan方法
2026年OpenClaw怎么部署?5分钟腾讯云零技术安装及百炼Coding Plan方法。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启动、Skills集…...
穷举法实战:如何高效解决复杂问题
1. 穷举法:暴力美学的智慧结晶 第一次接触穷举法时,我盯着屏幕上的三重循环发呆了十分钟——这种把所有可能性都试一遍的"笨办法",居然也能算算法?直到后来在真实项目中用它解决了密码锁破解问题,才明白这种…...
STM32F4 HAL库串口+DMA接收数据,为啥第一次总是收不到?一个配置顺序的坑
STM32F4 HAL库串口DMA接收异常解析:从第一次失败到稳定运行的深度优化 最近在调试STM32F407的串口DMA接收功能时,遇到了一个典型问题——系统上电后的第一次数据接收总是失败,而后续通信却完全正常。这个现象在嵌入式开发中并不罕见ÿ…...
用ShaderToy灵感改造Cesium:动态水面效果从创意到落地的完整流程
从ShaderToy到Cesium:动态水面效果的创意移植实战 在三维地理可视化领域,水面效果的真实感直接影响场景的整体表现力。ShaderToy作为全球顶尖的GLSL创意平台,积累了无数令人惊叹的水面着色器,而将这些艺术级效果移植到Cesium这样的…...
007、声码器技术对比:WaveNet、WaveGlow 与 HiFi-GAN 原理剖析
从一段深夜调试日志说起 上周在部署新版 TTS 时遇到个诡异问题:合成出的语音在安静环境下听着还行,一到车载环境就出现断续的“嘶嘶”声。频谱仪上能看到 8kHz 附近有些奇怪的谐波残留——这不是梅尔谱的问题,声码器背锅。于是又把几个主流声码器重新拉出来跑了一遍对比测试…...
驾驶行为识别图像数据集 疲劳驾驶图像识别数据集 驾驶员闭眼识别 开车打盹图像识别人员疲劳状态识别图像数据集 YOLO第10332期
数据集说明 本文档为计算机视觉数据集的核心信息说明,旨在为深度学习相关研究与开发提供数据支撑参考。数据集核心信息表信息类别具体内容数据集类别目标检测类数据集,包含 4 个核心类别:closed_eye(闭眼)、closed_mou…...
AI 时代:祛魅、适应与重新定义肝
指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c #includ…...





