【参考:New York City Taxi Fare Prediction | Kaggle】

【参考:美国纽约市出租车大数据探索-基于kaggle比赛_@Irene的博客-CSDN博客】这个参考较多
代码【参考:2 机器学习实战 纽约出租车车费预测_哔哩哔哩_bilibili】

【参考:Kaggle-纽约市出租车费预测_qq_28584559的博客-CSDN博客】

代码:【参考:机器学习/Kaggle/出租车车费预测/版本一车费预测实战.ipynb · myaijarvis/AI - 码云 - 开源中国】

这篇也不错 【参考:Cleansing+EDA+Modelling(LGBM + XGBoost starters) | Kaggle】

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn

1. 数据导入

train = pd.read_csv("data/train.csv", nrows=1000000) # 加载训练集
test = pd.read_csv("data/test.csv") # 加载测试集

2. 数据审查与处理

边审查边处理

2.1 整体情况



从上面两个表看出来有异常值(min,max),后面需要处理

2.2 缺失值

train.isnull().sum().sort_values(ascending=False) # 统计空值的数量,根据数量大小排序

test.isnull().sum().sort_values(ascending=False) # 统计空值的数量,根据数量大小排序

# 处理缺失值# 删除掉train中为空的数据(10行)
train.drop(train[train.isnull().any(1)].index, axis=0, inplace=True)# 由于缺失值占比非常小,这里直接将缺失值删除。删除缺失值之后还剩下999990条数据。
train.shape # 比原始数据少了10行

(999990, 8)

2.3 异常值

检查车费fare_amount

# 最小值为负数,这是不合理。计算’fare_amount’小于0的,一共有38个,全部将其删除。
# 查看车费这列数据(车费不可能为负数)
train['fare_amount'].describe()

# 统计train中车费小于0的数据有多少
from collections import CounterCounter(train['fare_amount']<0) # 有38行数据,车费小于0

Counter({False: 999952, True: 38})

# 删除掉车费小于0的数据
train.drop(train[train['fare_amount']<0].index, axis=0, inplace=True)
# 可视化(直方图):0 < 票价 < 100
train[train.fare_amount<100].fare_amount.hist(bins=100, figsize=(14,3))
plt.xlabel('fare $USD')
plt.title("Histogram")

检查乘客passenger_count

# 下面查看坐车人数。max是208位乘客。 假设公交车是纽约市的“出租车”,我们认为公交车不能载208名乘客.
# 检查乘客列的数据
train['passenger_count'].describe() # max异常

# 查看乘客人数大于6的数据
train[train['passenger_count']>6]

# 删除掉这个离异值
train.drop(train[train['passenger_count']>6].index, axis=0, inplace=True)

检查上车点的经度和纬度

  1. 纬度范围:-90 ~ 90
  2. 经度范围:-180 ~ 180

快速谷歌搜索可以知道:纬度范围是-90至90,经度的范围是-180至180.下面的描述明显地显示了一些异常值。 让我们删除它们。
删除之后的训练集还有999928条记录。

train['pickup_latitude'].describe() # 查看上车点纬度数据(min和max的值异常)

# 纬度小于-90的数据 ( 有3行 )
train[train['pickup_latitude']<-90]

# 经度大于90的数据 (有9行)
train[train['pickup_latitude']>90]

# 删除掉这些离异值数据train.drop(train[(train['pickup_latitude']<-90) | (train['pickup_latitude']>90)].index, axis=0, inplace=True)
# 查看上车点经度数据(min的值异常)
train['pickup_longitude'].describe()

# 查看经度小于-180的数据train[train['pickup_longitude']<-180]

# 删除掉这些离异值train.drop(train[train['pickup_longitude']<-180].index, axis=0, inplace=True)

检查下车点的经度和纬度

# 删除掉那些纬度小于-90,大于90的数据train.drop(train[(train['dropoff_latitude']<-90) | (train['dropoff_latitude']>90)].index, axis=0, inplace=True)# 删除掉那些经度小于-180, 大于180的数据train.drop(train[(train['dropoff_longitude']<-180) | (train['dropoff_longitude']>180)].index, axis=0, inplace=True)

2.3 数据类型

train.dtypes # key和pickup_datetime似乎是对象格式的datetime列。我们将它们转换为日期时间。

# 日期类型转换:key, pickup_datetimefor dataset in [train, test]:dataset['key'] = pd.to_datetime(dataset['key']) # pandas 自带处理日期类型函数dataset['pickup_datetime'] = pd.to_datetime(dataset['pickup_datetime'])

处理日期数据

现在,对于EDA。以下是我的考虑 -
乘客人数会影响票价吗?
取车日期和时间会影响票价吗?
星期几会影响票价吗?
行驶距离会影响票价吗?

将日期分隔为:

  1. year
  2. month
  3. day
  4. hour
  5. day of week
dataset.shape # ??? 行数怎么变少了

(9914, 7)

dataset.head() # pickup_datetime

type(dataset['pickup_datetime'][0])

pandas._libs.tslibs.timestamps.Timestamp

# 增加5列,分别是:year, month, day, hour, day of weekfor dataset in [train, test]:dataset['year'] = dataset['pickup_datetime'].dt.yeardataset['month'] = dataset['pickup_datetime'].dt.monthdataset['day'] = dataset['pickup_datetime'].dt.daydataset['hour'] = dataset['pickup_datetime'].dt.hourdataset['day of week'] = dataset['pickup_datetime'].dt.dayofweek

根据经纬度计算距离

首先,让我们将接到乘客的日期时间字段“ pickup_datetime”拆分为年、月、日期、小时、星期几。
下面再计算接到乘客的地点和乘客下车地点的距离。利用Haversine公式算得。Haversine公式表示给出纬度和经度时,我们可以计算球体中的距离(网址https://en.wikipedia.org/wiki/Haversine_formula )Haversine(θ)=sin²(θ/ 2)。利用纬度经度,地球半径R(平均半径= 6,371 km)来计算。得到结果如图所示.

# 计算公式
''''''
def distance(lat1, long1, lat2, long2):''':param lat1:  字段名 str 下同:param long1::param lat2::param long2::return: 距离 float'''global ddata = [train, test] # 同时操作训练集和测试集for i in data:R = 6371  # 地球半径(单位:千米)phi1 = np.radians(i[lat1])phi2 = np.radians(i[lat2])delta_phi = np.radians(i[lat2]-i[lat1])delta_lambda = np.radians(i[long2]-i[long1])#a = sin²((φB - φA)/2) + cos φA . cos φB . sin²((λB - λA)/2)a = np.sin(delta_phi / 2.0) ** 2 + np.cos(phi1) * np.cos(phi2) * np.sin(delta_lambda / 2.0) ** 2#c = 2 * atan2( √a, √(1−a) )c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1-a))#d = R*cd = (R * c) # 单位:千米i['H_Distance'] = d # 给数据添加H_Distance字段return ddistance('pickup_latitude','pickup_longitude','dropoff_latitude','dropoff_longitude')

# 统计距离为0,票价为0的数据 全部为0 对模型来说没有用处train[(train['H_Distance']==0) & (train['fare_amount']==0)]

# 删除
train.drop(train[(train['H_Distance']==0) & (train['fare_amount']==0)].index, axis=0, inplace=True)
# 统计距离为0,票价不为0的数据# 原因1:司机等待乘客很长时间,乘客最终取消了订单,乘客依然支付了等待的费用;
# 原因2:车辆的经纬度没有被准确录入或缺失;len(train[(train['H_Distance']==0) & (train['fare_amount']!=0)])

28477

# 删除
train.drop(train[(train['H_Distance']==0) & (train['fare_amount']!=0)].index, axis=0, inplace=True)

改进

【参考:Cleansing+EDA+Modelling(LGBM + XGBoost starters) | Kaggle】

新的字段:每公里车费

根据距离、车费,计算每公里的车费

train['fare_per_mile'] = train.fare_amount / train.H_Distancetrain.fare_per_mile.describe()

# 统计每一年的不同时间段的每小时车费train.pivot_table('fare_per_mile', index='hour', columns='year').plot(figsize=(14, 6))
plt.ylabel('Fare $USD/mile')

3.模型训练和数据预测

3.1 特征选择

选择特征列,构建数据

X_train = train.iloc[:, [3,4,5,6,7,8,9,10,11,12,13]] # 选取某些列

y_train = train.iloc[:, [1]] # are_amount 车费

3.2 选择模型、训练、预测、评估

# 随机森林实现from sklearn.ensemble import RandomForestRegressorrf = RandomForestRegressor()rf.fit(X_train, y_train)

rf_predict = rf.predict(test.iloc[:, [2,3,4,5,6,7,8,9,10,11,12]]) # 要和训练集选择一样的列

3.3 生成结果并提交

submission = pd.read_csv("data/sample_submission.csv")submission.head()

# 提交submission['fare_amount'] = rf_predictsubmission.to_csv("submission_1.csv", index=False) # 成绩: 4.49170submission.head()


【Kaggle】纽约市出租车费预测(经典)相关推荐

  1. 某天没有数据能查出来0数量_用Excel对纽约市出租车费数据探索性分析

    一.引言 背景:在纽约,游客们往往把自由女神象.帝国大厦.中央公园等视为纽约的象征, 但穿梭在人海中的出租车也是纽约靓丽的人文景观之一, 是其流动的风景线, 在纽约公共文化中别具魅力.本篇文章利用之前 ...

  2. Kaggle-纽约市出租车费预测

    1 数据导入 在kaggle上下载完训练数据和测试数据之后,将数据导入.由于训练数据集过大,电脑配置有限,训练集只导入100000条记录. trainData=pd.read_csv('train.c ...

  3. 使用ML.NET预测纽约出租车费

    有了上一篇<.NET Core玩转机器学习>打基础,这一次我们以纽约出租车费的预测做为新的场景案例,来体验一下回归模型. 场景概述 我们的目标是预测纽约的出租车费,乍一看似乎仅仅取决于行程 ...

  4. 动手学深度学习:3.16 实战Kaggle比赛:房价预测

    3.16 实战Kaggle比赛:房价预测 作为深度学习基础篇章的总结,我们将对本章内容学以致用.下面,让我们动手实战一个Kaggle比赛:房价预测.本节将提供未经调优的数据的预处理.模型的设计和超参数 ...

  5. Dataset:New York City Taxi Fare Prediction纽约市出租车票价预测数据集的简介、下载、使用方法之详细攻略

    Dataset:New York City Taxi Fare Prediction纽约市出租车票价预测数据集的简介.下载.使用方法之详细攻略 目录 New York City Taxi Fare P ...

  6. 贪心入门——出租车费

    问题 B: 出租车费 时间限制: 1 Sec 内存限制: 32 MB 提交: 6 解决: 6 [提交][状态][讨论版] 题目描述 某市出租车计价规则如下:起步4公里10元,即使你的行程没超过4公里: ...

  7. 广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码)

    CTR 系列文章: 广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码) CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解 CTR深度学习模型之 ...

  8. codeup 1128: 出租车费 贪心|找规律

    1128: 出租车费 时间限制: 1 Sec 内存限制: 32 MB 提交: 871 解决: 299 [提交][状态][讨论版][命题人:外部导入] 题目描述 某市出租车计价规则如下:起步4公里10元 ...

  9. [Kaggle] Housing Prices 房价预测

    文章目录 1. Baseline 1. 特征选择 2. 异常值剔除 3. 建模预测 2. 待优化特征工程 房价预测 kaggle 地址 参考文章:kaggle比赛:房价预测(排名前4%) 1. Bas ...

最新文章

  1. Tafficserver旁路接入方案综述
  2. python安装哪个版本-python到底安装哪个版本
  3. AI最优论文+代码查找神器:966个ML任务、8500+论文任你选
  4. JavaScript的案例(数据校验,js轮播图,页面定时弹窗)
  5. ORACLE RAC+DG 硬件配置
  6. Wordcounter,使用Lambdas和Fork / Join计算Java中的单词数
  7. 数据库数据过长避免_为什么要避免使用商业数据科学平台
  8. 思维修炼之 第三种选择
  9. mysql desc show_mysql 查看信息的命令(show\desc\explain)
  10. switch case穿透Java_Java switch的用法与case的穿透现象举例详解
  11. 【五级流水线CPU】—— 8. 测试结果
  12. 用组策略彻底禁止USB存储设备、光驱、软驱、ZIP软驱
  13. Wordpress如何正确书写Robots.txt
  14. mastercam西门子840d后处理_MasterCAM对西门子802D后置处理
  15. 软件开发人员简历项目经验怎么写
  16. 自适应中值滤波器和自适应局部(均值)滤波器的设计 python+matlab各实现
  17. WinRAR分割超大文件
  18. mysql-使用Navicat导出sql查询数据
  19. AutoCAD Civil 3D里材质资源管理器手动重安装
  20. 回归测试对比确认测试的区别

热门文章

  1. 小周资源导航站——导航站
  2. 买Mac做设计玩游戏?各类Mac图形设计能力浅析
  3. 分析现行的常用的文件格式类别
  4. OSChina 周六乱弹 —— 到底谁是小公猫……
  5. 《杜拉拉升职记》职场36计总结
  6. 测试用例(QQ消息模块)
  7. CTF常用工具之Burp Suit的下载、安装到使用
  8. Alitum designer查看的PCB 3D 渲染图上边没有元器件,怎么办?(如何为3D渲染图中的元器件添加3D模型?)
  9. 清华梦的破碎——写给清华的退学申请 王垠
  10. NLP数据集SQuAD数据的形式