基于Couchbase和Cloud9图表的纽约市出租车乘坐分析


卧床N1QL是Couchbase上的一个查询处理引擎,为分布式数据上的JSON提供SQL。Cloud9 Charts是一个为现代数据堆栈构建的分析平台,具有对NoSQL数据库,传统SQL数据库,REST API和其他源的原生支持。

原生NoSQL分析

传统上,NoSQL数据库上的分析通常意味着以下一种:

  1. 使用传统BI工具可以理解的ODBC驱动程序将数据强行转换为关系形式。这通常需要一个ODBC驱动程序,一个传统的(通常基于桌面的)BI工具和预先定义的模式。

  2. ETL处理将相关数据加载到关系数据库中进行分析。这就否定了NoSQL数据库(如Couchbase)的模式灵活性,因为必须预先定义模式以及将什么移动到哪里。这通常意味着要传播对数据结构的任何更改需要相对较长的前置时间和协调。

原生NoSQL分析解除了对ODBC驱动程序和ETL流程的依赖,从而使业务和技术用户能够最大程度地利用底层数据库,快速获得可操作的洞察。

简单地说,Couchbase-Cloud9图表集成具有以下特性:

  • 没有ODBC驱动程序的完全本机N1QL集成

  • 指向并单击N1QL查询生成器

  • 对嵌套对象和数组的支持

  • 在Couchbase和其他基于SQL/NoSQL或REST API的源之间连接

  • 即时可视化和嵌入式仪表板

  • 预测和高级分析

数据集

我们将用于分析的数据集包括4500万辆绿色出租车,由NYC Taxi and Limousine Commission

绿色出租车于2013年在纽约市推出,目标是纽约市外围地区的出租车,而这些地区传统上都是黄色出租车服务不足的地区。

分析的重点如下:

  • 上客区和下客区的地理空间分析

  • 跨街区的出行时间(按小时,按天)

  • 票价分析

  • 游程预测

可以找到CSV形式的原始数据集here(2 GB压缩,15 GB解压缩)。

Couchbase集群

我们的朋友在Couchbase上提供了一个3节点Couchbase集群。cbtransfertool用于将数据从CSV文件加载到Couchbase中。

原始数据如下所示(为简洁起见被截断):

{
"greentaxi": {
  "Dropoff_latitude": "40.824813842773438",
  "Dropoff_longitude": "-73.902938842773438",
  "Ehail_fee": "",
  "Extra": 0.5,
  "Fare_amount": 10.5,
  "Lpep_dropoff_datetime": "2013-12-22 02:17:35",
     …..
   "dropoff_city": "New York City-Bronx",
   "dropoff_county": "Bronx",
       "pickup_city": "New York City-Manhattan",
   "pickup_county": "New York”,  
     }
}

索引和性能注意事项

Memory optimized secondary indexes添加了dropoff_city,pickup_city,dropoff_city,pickup_date和dropoff_date(除了主索引之外)。

将按小时/日/接送/下线跟踪乘车情况的原始数据聚合创建到另一个桶中,以支持快速查询执行:

INSERT INTO rides_agg (KEY UUID())  
select 
    count(*) as rides, 
round(avg(Fare_amount),0) as fare,
    round(avg(duration),0) as duration, 
    day,
    hour,
    pickup_region,
    dropoff_region
    from 
     (select date_part_str(millis_to_zone_name(dropoff_ts, "EST"),"day_of_week") as day,
        date_part_str(millis_to_zone_name(dropoff_ts, "EST"),"hour") as hour,
        pickup_region,
        dropoff_region,
        fare_amount,
        date_diff_millis(dropoff_ts,pickup_ts,"minute") as duration
        from greentaxi 
      ) as tmp
group by 
    day,
    hour,
    dropoff_region,
pickup_region
order by day,hour

分析

可以访问以下分析的完整仪表板here

上落货

以下N1QL查询对拾取地理位置进行聚类,使用Cloud9图表可以从中导出拾取位置的地理空间视图:

select 
    round(to_number(Pickup_latitude),3) as latitude, 
    round(to_number(Pickup_longitude),3) as longitude, 
    count(*) as count 
from cloud9 
GROUP BY round(to_number(Pickup_latitude),3),round(to_number(Pickup_longitude),3) 
order BY count DESC

在地图上看到曼哈顿地区的死亡区域了吗?

原因如下:绿色出租车只允许从东96街和西110街北面上客。

与此形成对比的是下面的黄色出租车皮卡,那里的大部分皮卡集中在曼哈顿地区。

虽然上客区受到限制,但绿色出租车服务对乘客落客区没有限制。下拉热图如下所示:

游乐设备趋势和预测

让我们来看看自绿色出租车服务推出以来,每月的总体乘坐趋势。

趋势显示,服务在2013年末出现增长,从2014年开始,每月乘坐量的趋势有所稳定。

通过对其应用预测模型,我们可以确定未来几个月的总骑乘次数(图中用黄色表示):

邻域比较

从出租车车主的角度来看,限制接送车辆是一个有趣的难题。将车辆落到限制区域意味着司机必须回到上客区域进行下一次上客。

司机/车主操作员最有生产力的领域是什么?为了回答这个问题,我们来看一些邻域分析。

下面显示了开始区域与结束区域之间关系的弦图。例如,有更多(43%以上)的骑乘从哈莱姆汉密尔顿高地,对汉密尔顿高地哈莱姆。

N1QL查询

select pickup_region,dropoff_region,sum(rides) as rides
from rides_agg
where pickup_region !='' and dropoff_region !=''
group by pickup_region, dropoff_region
order by rides desc 

票价分析

如果是在哈莱姆区接送,而在切尔西区下车,这是一个禁止接送的区域。在周三下午5点到6点期间,它的行程为35分钟,如下面的网格热图所示,平均票价为28美元。但这意味着司机必须回到一个接站区域,以便下一次乘车。站在一个司机的立场上,并不理想。

对比一下另一个落水地点,比如布鲁克林的格林堡街区(来自哈莱姆)。这是一个47美元的旅程,在高峰时间平均花费57分钟,也提供了充足的机会,在福特格林地区,如地球同步轨道热图所示。

为了更进一步,出租车操作员应该在哪些领域部署他们的资产?

下面的图表有助于回答这个问题,它提供了在一天和一天中的某一小时,不同地点的最高平均票价。

按地点和日期/时间分列的最高票价


所以看起来,周二早上8点到9点,Nkew Gardens小区的平均接送费用最高,而周六晚上11点,牙买加小区的平均接送费用最高。

摘要

冗长的ETL过程或将半结构化数据硬塞进关系格式以用于分析的日子一去不复返了。通过NoSQL分析解决方案,您可以利用N1QL获得即时的,可操作的见解,这些见解可以在短时间内共享和嵌入。

特别感谢Prasad Varakur,Chin Hong和Couchbase的其他人,感谢他们对Couchbase部署和查询优化的实际支持。

资源