纽约出租车计费问题:数据清洗与初探
机器学习案例详解的直播互动平台——
机器学习训练营(入群联系qq:2279055353)
下期直播案例预告:大数据预测商品的销售量波动趋势
这是“纽约出租车计费问题”的第二篇文章,重点介绍如何对大数据进行清洗整理,以及对整理后的数据进行初步的探索性分析。分析的要旨在于探索变量的分布规律,变量之间的关系等。
数据整理
加载数据子集
包括训练集和检验集在内的“纽约出租车运营”数据,训练集train.csv
特别巨大,包括55,423,855行观测,因此我们仅导入100万行的子集进行分析建模。
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import sklearn
import seaborn as sns
import matplotlib.pyplot as plttrain = pd.read_csv("../input/train.csv", nrows = 1000000)
test = pd.read_csv("../input/test.csv")
print(train.head())
print(train.describe())
删除缺失行与离群点
在训练集上建立预测模型,首先要检查训练集里是否有缺失值。如果有的话,则删除缺失行。
print(train.isnull().sum().sort_values(ascending=False))
#drop the missing values
train = train.drop(train[train.isnull().any(1)].index, axis = 0)
train.shape
检查目标变量fare_amount
, 根据实际含义删除负值。
train['fare_amount'].describe()
from collections import Counter
Counter(train['fare_amount']<0)
train = train.drop(train[train['fare_amount']<0].index, axis=0)
train['fare_amount'].describe()
接着,我们检查乘客人数变量passenger_count
.
print(train['passenger_count'].describe())
最大值是208个乘客,这是不可能的,所以删除这行观测。
train = train.drop(train[train['passenger_count']==208].index, axis = 0)
print(train['passenger_count'].describe())
查询Google地图得到纽约城的经度、纬度坐标范围:
经度从-180~180
纬度从-90~90
所以过滤掉乘客上、下车坐标超出经、纬度范围的行。
train = train.drop(((train[train['pickup_latitude']<-90])|(train[train['pickup_latitude']>90])|(train[train['pickup_longitude']<-180])|(train[train['pickup_longitude']>180])|(train[train['dropoff_latitude']<-90])|(train[train['dropoff_latitude']>90])|(train[train['dropoff_longitude']<-180])|(train[train['dropoff_longitude']>180])).index, axis=0)print(train.shape)
变量类型转换
检查列变量的数据类型。
print(train.dtypes)
转换key
, pickup_datetime
为datetime类型。
train['key'] = pd.to_datetime(train['key'])
train['pickup_datetime'] = pd.to_datetime(train['pickup_datetime'])
数据探索
乘车的日期时间影响车费吗?
乘车的星期影响车费吗?
乘车的距离影响车费吗?
产生新变量
首先,我们产生一个新变量distance
表示乘车距离。
根据Haversine
公式
其中,φA,φB\varphi_A, \varphi_BφA,φB分别表示上、下车的纬度,λA,λB\lambda_A, \lambda_BλA,λB分别表示上、下车的经度,RRR表示地球半径,这里取平均值6,371(km).
def haversine_distance(lat1, long1, lat2, long2):data = [train, test]for i in data:R = 6371 #radius of earth in kilometers#R = 3959 #radius of earth in milesphi1 = 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) #in kilometersi['H_Distance'] = dreturn d
haversine_distance('pickup_latitude', 'pickup_longitude', 'dropoff_latitude', 'dropoff_longitude')train['H_Distance'].head(10)
拆分新变量
产生distance
后,我们再把pickup_datetime
拆分成
year
month
date
hour
day of week
data = [train]
for i in data:i['Year'] = i['pickup_datetime'].dt.yeari['Month'] = i['pickup_datetime'].dt.monthi['Date'] = i['pickup_datetime'].dt.dayi['Day of Week'] = i['pickup_datetime'].dt.dayofweeki['Hour'] = i['pickup_datetime'].dt.hourtrain.head()
探索车费影响因素
现在,我们可视化分析哪些变量影响车费。
乘客人数影响车费吗?
plt.figure(figsize=(15,7))
plt.hist(train['passenger_count'], bins=15)
plt.xlabel('No. of Passengers')
plt.ylabel('Frequency')
plt.show()
plt.figure(figsize=(15,7))
plt.scatter(x=train['passenger_count'], y=train['fare_amount'], s=1.5)
plt.xlabel('No. of Passengers')
plt.ylabel('Fare')
plt.show()
从这两张图可以看出,单人乘客是频数最高的,最高的票价也来自单人乘客。
乘车的日期和时间影响车费吗?
plt.figure(figsize=(15,7))
plt.scatter(x=train['Date'], y=train['fare_amount'], s=1.5)
plt.xlabel('Date')
plt.ylabel('Fare')
plt.show()
整个月的车费似乎是均匀分布的,最高车费出现在第12天。
plt.figure(figsize=(15,7))
plt.hist(train['Hour'], bins=100)
plt.xlabel('Hour')
plt.ylabel('Frequency')
plt.show()
乘车频数在早上5点最低,而在晚上7点最高。
plt.figure(figsize=(15,7))
plt.scatter(x=train['Hour'], y=train['fare_amount'], s=1.5)
plt.xlabel('Hour')
plt.ylabel('Fare')
plt.show()
车费在上午9点和下午1点最高。
星期影响车费吗?
plt.figure(figsize=(15,7))
plt.hist(train['Day of Week'], bins=100)
plt.xlabel('Day of Week')
plt.ylabel('Frequency')
plt.show()
星期似乎对乘车频数没有明显的影响。
plt.figure(figsize=(15,7))
plt.scatter(x=train['Day of Week'], y=train['fare_amount'], s=1.5)
plt.xlabel('Day of Week')
plt.ylabel('Fare')
plt.show()
最高车费出现在周日和周一。
纽约出租车计费问题:数据清洗与初探相关推荐
- 单片机c语言出租车计时程序,基于单片机的出租车计费(c语言).doc
基于单片机的出租车计费(c语言) 基于单片机的出租车计费(c语言) 基于proteus仿真 一.设计要求: 1.用实现出租车计费器的设计. 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统 ...
- python 北京出租车收费3.45_北京出租车计费标准和价目表
北京出租车计费标准和价目表 2008-03-17 09:20 北京出租车的价目表是这样的: 1 .每公里 2 元,基价为 3 公里,起价 10 元: 2 .单程 15 公里以上的部分加收 50% 空驶 ...
- 纽约出租车旅途时间建模分析
根据纽约出租车的运营数据,针对客户旅途时间展开分析与建模. import os import pandas as pd import numpy as np from matplotlib.pyplo ...
- taxi计费器c语言程序,毕业论文:出租车计费系统(全文完整版)
<毕业论文:出租车计费系统.doc>由会员分享,可免费在线阅读全文,更多与<毕业论文:出租车计费系统>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索. ...
- Spark读写HBase:处理纽约出租车数据
一.数据及部分代码来源: 解析geojson数据:https://github.com/jwills/geojson 纽约出租车数据:http://www.andresmh.com/nyctaxitr ...
- 基于FPGA的数码管显示出租车计费器
基于FPGA简易出租车计价器设计技术规范 专业:集成电路设计与集成系统 班级:电路1401班 姓名:童峥 学号:05146034 一. 功能描述: 本设计基于FPGA设计并使用Verilog HDL硬 ...
- 设计题目:基于CPLD/FPGA的出租车计费器
一.设计任务及要求: 本设计要求设计一个基于CPLD/FBGA的出租车计费器,其具体要求如下: 1 能够实现计费功能 费用是按行驶的里程进行 计算的,设出租车的起价是6.0元,当里程小于3km时,按 ...
- Java出租车计费问题
Java出租车计费问题,一个简单小程序助你学会流程控制 出租车问题 出租车计费标准(表1) 任务实施 实现功能 出租车问题 某市出租车计费标准如表1所示. 请根据此标准完成一个出租车计费模拟功能. 能 ...
- python出租车计费_python的基础程序——判断语句(以出租车计费为例)
判断语句用于检测某个条件是否成立.如果成立,则执行判断语句内的程序:否则,跳过判断语句,执行后面的内容.(判断语句分为三类if,else,switch.但python编程语言中一般没有switch). ...
- python出租车计费_关于使用Python——写出租车计费系统
要求: #出租车计费************************************************************************************** # 要 ...
最新文章
- LeetCode简单题之查找共用字符
- 第二阶段团队项目冲刺站立会议(九)
- springboot 在配置文件写参数注入到类中
- 从字符串中删除HTML标签
- SQL server 中SQL语句实战操作
- python模块导入红色波浪线_解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题...
- 使用yml多环境配置
- MFC中char*,string和CString之间的转换
- mysql 3.5安装_MYSQL学习笔记-06-搭建数据库
- [BZOJ 4300]绝世好题
- math.fabs_带有Python示例的math.fabs()方法
- leetcode题解104- 二叉树的最大深度
- python3 unicodeencodeerror_解决 Python3 下 print 时出现 UnicodeEncodeError 的问题
- php pdo 错误信息,PHP的PDO错误与错误处理
- 收藏| 一些可供参考的游戏出海技术架构与经验总结
- Nutch开发(一)
- ImageAI (一) 使用Python快速简单实现图像内容预测 Image Prediction
- 多项式插值与样条插值的解释与示例(matlab)
- 用计算机弹熊出没,熊出没之熊大快跑2018辅助
- iOS开发·runtime原理与实践: 基本知识篇
热门文章
- 版本控制-代码和文档等用SVN管理
- JS实现各种页面的刷新
- POJ-1699 Best Sequence 状态压缩DP
- LeetCode Interview Qustions: Add Two Number
- ruby连接mysql问题
- 电器缺水保护控制介绍
- SpringBoot+Shiro学习(七):Filter过滤器管理
- oracle11 刚刚安装后提示invalid username password logon denied
- php数学和时间常用函数有哪些(总结表)(看学习视频效率挺高的)(复习)...
- 简要解析红外摄像机技术与市场