当前位置: 首页 > 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;可以参考笔者另一篇…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...

基于 HTTP 的单向流式通信协议SSE详解

SSE&#xff08;Server-Sent Events&#xff09;详解 &#x1f9e0; 什么是 SSE&#xff1f; SSE&#xff08;Server-Sent Events&#xff09; 是 HTML5 标准中定义的一种通信机制&#xff0c;它允许服务器主动将事件推送给客户端&#xff08;浏览器&#xff09;。与传统的 H…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer&#xff1a;二进制数据的“瑞士军刀” 在JavaScript中&#xff0c;我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时&#xff0c;单纯依赖字符串或数组就显得力不从心了。这时&#xff…...