机器学习案例详解的直播互动平台——
机器学习训练营(入群联系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'])

数据探索

  1. 乘车的日期时间影响车费吗?

  2. 乘车的星期影响车费吗?

  3. 乘车的距离影响车费吗?

产生新变量

首先,我们产生一个新变量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()


最高车费出现在周日和周一。

纽约出租车计费问题:数据清洗与初探相关推荐

  1. 单片机c语言出租车计时程序,基于单片机的出租车计费(c语言).doc

    基于单片机的出租车计费(c语言) 基于单片机的出租车计费(c语言) 基于proteus仿真 一.设计要求: 1.用实现出租车计费器的设计. 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统 ...

  2. python 北京出租车收费3.45_北京出租车计费标准和价目表

    北京出租车计费标准和价目表 2008-03-17 09:20 北京出租车的价目表是这样的: 1 .每公里 2 元,基价为 3 公里,起价 10 元: 2 .单程 15 公里以上的部分加收 50% 空驶 ...

  3. 纽约出租车旅途时间建模分析

    根据纽约出租车的运营数据,针对客户旅途时间展开分析与建模. import os import pandas as pd import numpy as np from matplotlib.pyplo ...

  4. taxi计费器c语言程序,毕业论文:出租车计费系统(全文完整版)

    <毕业论文:出租车计费系统.doc>由会员分享,可免费在线阅读全文,更多与<毕业论文:出租车计费系统>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索. ...

  5. Spark读写HBase:处理纽约出租车数据

    一.数据及部分代码来源: 解析geojson数据:https://github.com/jwills/geojson 纽约出租车数据:http://www.andresmh.com/nyctaxitr ...

  6. 基于FPGA的数码管显示出租车计费器

    基于FPGA简易出租车计价器设计技术规范 专业:集成电路设计与集成系统 班级:电路1401班 姓名:童峥 学号:05146034 一. 功能描述: 本设计基于FPGA设计并使用Verilog HDL硬 ...

  7. 设计题目:基于CPLD/FPGA的出租车计费器

    一.设计任务及要求: 本设计要求设计一个基于CPLD/FBGA的出租车计费器,其具体要求如下: 1  能够实现计费功能 费用是按行驶的里程进行 计算的,设出租车的起价是6.0元,当里程小于3km时,按 ...

  8. Java出租车计费问题

    Java出租车计费问题,一个简单小程序助你学会流程控制 出租车问题 出租车计费标准(表1) 任务实施 实现功能 出租车问题 某市出租车计费标准如表1所示. 请根据此标准完成一个出租车计费模拟功能. 能 ...

  9. python出租车计费_python的基础程序——判断语句(以出租车计费为例)

    判断语句用于检测某个条件是否成立.如果成立,则执行判断语句内的程序:否则,跳过判断语句,执行后面的内容.(判断语句分为三类if,else,switch.但python编程语言中一般没有switch). ...

  10. python出租车计费_关于使用Python——写出租车计费系统

    要求: #出租车计费************************************************************************************** # 要 ...

最新文章

  1. LeetCode简单题之查找共用字符
  2. 第二阶段团队项目冲刺站立会议(九)
  3. springboot 在配置文件写参数注入到类中
  4. 从字符串中删除HTML标签
  5. SQL server 中SQL语句实战操作
  6. python模块导入红色波浪线_解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题...
  7. 使用yml多环境配置
  8. MFC中char*,string和CString之间的转换
  9. mysql 3.5安装_MYSQL学习笔记-06-搭建数据库
  10. [BZOJ 4300]绝世好题
  11. math.fabs_带有Python示例的math.fabs()方法
  12. leetcode题解104- 二叉树的最大深度
  13. python3 unicodeencodeerror_解决 Python3 下 print 时出现 UnicodeEncodeError 的问题
  14. php pdo 错误信息,PHP的PDO错误与错误处理
  15. 收藏| 一些可供参考的游戏出海技术架构与经验总结
  16. Nutch开发(一)
  17. ImageAI (一) 使用Python快速简单实现图像内容预测 Image Prediction
  18. 多项式插值与样条插值的解释与示例(matlab)
  19. 用计算机弹熊出没,熊出没之熊大快跑2018辅助
  20. iOS开发·runtime原理与实践: 基本知识篇

热门文章

  1. 版本控制-代码和文档等用SVN管理
  2. JS实现各种页面的刷新
  3. POJ-1699 Best Sequence 状态压缩DP
  4. LeetCode Interview Qustions: Add Two Number
  5. ruby连接mysql问题
  6. 电器缺水保护控制介绍
  7. SpringBoot+Shiro学习(七):Filter过滤器管理
  8. oracle11 刚刚安装后提示invalid username password logon denied
  9. php数学和时间常用函数有哪些(总结表)(看学习视频效率挺高的)(复习)...
  10. 简要解析红外摄像机技术与市场