使用Python「秒开」100GB+数据( 三 )

使用Python「秒开」100GB+数据

文章插图
 

使用Python「秒开」100GB+数据

文章插图
 
出租车司机是一份相当灵活的工作 。除了知道应该去哪里,如果让他们知道什么时候开车最赚钱也是很有用的 。为了回答这个问题,让我们制作一个图表,显示每天和每小时的平均票价与行程的比率:
使用Python「秒开」100GB+数据

文章插图
 
上面的数字是合理的,最好的收入发生在高峰时间, 特别是中午 ,在工作日 。作为一名出租车司机,我们收入的一部分给了出租车公司,所以我们可能会对哪一天、哪段时间顾客给的小费最多感兴趣 。让我们制作一个类似的图,这次显示的是平均小费的比例:
使用Python「秒开」100GB+数据

文章插图
 
上面的结论很有趣 。它告诉我们, 乘客在早上7点到10点之间给出租车司机的小费最多 ,如果你在凌晨3点或4点接乘客,不要指望会有大额小费 。
更深入的分析
私信小编01 领取完整项目代码1
在本文的前一部分中,我们简要地集中讨论了trip_distance列,在去除异常值时,我们保留了所有值小于100英里的行程 。但这仍然是一个相当大的临界值,尤其是考虑到Yellow Taxi公司主要在曼哈顿运营 。trip_distance列描述出租车从上客点到下客点的距离 。然而,人们经常可以选择不同的路线,在两个确切的上落地点之间有不同的距离,例如为了避免交通堵塞或道路工程 。因此,作为trip_distance列的一个对应项,让我们计算接送位置之间可能的最短距离,我们称之为arc_distance:
使用Python「秒开」100GB+数据

文章插图
 
对于用Numpy编写的复杂表达式,vaex可以在Numba、Pythran甚至CUDA(如果你有NVIDIA GPU的话)的帮助下使用即时编译来极大地提高你的计算速度 。
arc_distance的计算公式非常复杂,它包含了大量的三角函数和算术知识,特别是在处理大数据集的情况下,计算量很大 。如果表达式或函数仅使用来自Numpy包的Python操作和方法编写,Vaex将使用计算机的所有核心并行地计算它 。除此之外,Vaex通过Numba(使用LLVM)或Pythran(通过C++加速)支持即时编译,从而提供更好的性能 。如果你有NVIDIA显卡,你可以通过jit_cuda方法使用CUDA来获得更快的性能 。
无论如何,我们来画一下trip_distance和arc_distance的分布:
使用Python「秒开」100GB+数据

文章插图
 

使用Python「秒开」100GB+数据

文章插图
 
有趣的是,arc_distance从未超过21英里,但出租车实际行驶的距离可能是它的5倍 。事实上,在数百万次的出租车行程中,落客点距离接客点只有100米(0.06英里) 。
我们这次试用的数据集跨越了7年 。我们可以看看在这段时间里,人们对某些东西的兴趣是如何演变的,可能会很有趣 。使用Vaex,我们可以进行out-of-core group-by和aggregation操作 。让我们来看看这7年中票价和旅行距离的变化:
使用Python「秒开」100GB+数据

文章插图
 
在拥有四核处理器的笔记本电脑上,对一个拥有超过10亿个样本的Vaex DataFrame进行8个聚合的分组操作只需不到2分钟 。
在上面的单元格格中,我们执行groupby操作,然后执行8个聚合,其中2个位于虚拟列上 。上面的单元格在我们的笔记本电脑上执行不到2分钟 。考虑到我们使用的数据包含超过10亿个样本,这是相当令人印象深刻的 。不管怎样,让我们看看结果 。以下是多年来乘坐出租车的费用是如何演变的:
使用Python「秒开」100GB+数据

文章插图
 

使用Python「秒开」100GB+数据

文章插图
 
我们看到,随着时间的流逝,出租车费和小费都在上涨 。现在让我们看看出租车的trip_distance 和arc_distance作为年的函数:
使用Python「秒开」100GB+数据

文章插图
 

使用Python「秒开」100GB+数据

文章插图
 
上图显示,trip_distance和arc_distance都有一个小的增长,这意味着,平均而言,人们倾向于每年走得更远一点 。
让我们再调查一下乘客是如何支付他们的车费的:payment_type列,让我们看看它包含的值:


推荐阅读