码迷,mamicode.com
首页 > 其他好文 > 详细

Pilosa文档翻译(三)示例

时间:2018-12-03 15:31:11      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:https   隐式   目标   函数应用   max   经纬   rop   its   ping   

目录

原文地址

传输Transportation

简单说明 Introduction

纽约市发布了一个非常详细的包含了超过10亿条出租车相关数据的集合。该数据已经成为科技博客分析的热门目标,并且已经得到了很好的研究。出于这个原因,我们认为将这些数据导入Pilosa,以便确定同一数据集情况下与其他数据存储和技术进行比较。

一般来说,传输(Transportation)是Pilosa的值得关注的用例,因为它通常涉及多个不同的数据源,以及高速率,实时和极大量的数据(特别是如果想得出合理的结论)。

我们编写了一个工具来帮助将NYC(纽约市)出租车数据导入Pilosa这个工具是PDK(Pilosa开发工具包)的一部分,并利用了许多可重复使用的模块,这些模块也可以帮助您导入其他数据。 接下来,我们将逐步解释整个过程。

初始设置之后,PDK导入工具会执行我们定义Pilosa架构所需的一切,相应地将数据映射到位图,然后将其导入Pilosa

数据模型 Data Model

纽约出租车数据由以下列出的许多csv文件组成:http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtml。 这些数据文件大约有20列,其中大约一半与我们正在研究的基准查询相关:

  • 距离(Distance): miles(英里), floating point(浮点值)
  • 车费(Fare): dollars(美元), floating point(浮点值)
  • 乘客人数(Number of passengers): integer(整数值)
  • 下车位置(Dropoff location): latitude and longitude(经纬度), floating point(浮点值)
  • 上车位置(Pickup location): latitude and longitude(经纬度), floating point(浮点值)
  • 下车时间(Dropoff time): timestamp(时间戳)
  • 上车时间(Pickup time): timestamp(时间戳)

注意:下面表格中的row ID就是指记录的值,不要理解成MySQL等数据库的rowID。
我们导入这些字段,从每个字段创建一个或多个Pilosa字段:

字段(Field) 映射(Mapping)
cab_type(出租车类型) 直接映射整数枚举值 → row ID
dist_miles(距离) 四舍五入round(dist) → row ID
total_amount_dollars(总金额) 四舍五入round(dist) → row ID
passenger_count(乘车人数) 直接映射整数值 → row ID
drop_grid_id(下车位置网格ID) (lat, lon) → 100x100矩形分割网格 → cell(格子) ID
drop_year 年份year(timestamp) → row ID
drop_month 月份month(timestamp) → row ID
drop_day 该月第几天day(timestamp) → row ID
drop_time(下车时间) 该天中的时间映射到48个半小时组成的桶中
pickup_grid_id(下车位置网格ID) (lat, lon) → 100x100矩形分割网格 → cell ID
pickup_year year(timestamp) → row ID
pickup_month month(timestamp) → row ID
pickup_day day(timestamp) → row ID
pickup_time(上车时间) time of day mapped to one of 48 half-hour buckets → row ID

我们还创建了两个附加字段表示持续时间和每一次乘坐的平均速度:

字段(Field) 映射(Mapping)
duration_minutes(持续时间) round(drop_timestamp - pickup_timestamp) → row ID
speed_mph() round(dist_miles ÷ (drop_timestamp - pickup_timestamp)) → row ID

映射Mapping

我们要使用的每个列(column)都必须根据某些规则映射到字段(fields)row ID的组合。 有很多方法可以实现这个映射,出租车数据集为我们提供了一个可能性的很好的描述。

0列(colums) --> 1字段(field)

cab_type: 每一行表示一个出租车的类型,在一行数据中有一些bit位来表示一次乘车中使用的出租车类型。 这是一个简单的枚举映射,例如黄色yellow=0,绿色green=1等。这个字段值的位宽(bits)由数据源确定。也就是说,我们有几个数据来源(NYC出租车-黄色, NYC出租车-绿色,Uber汽车),对于每一个数据来源,要设置不同的cab_type常量值。

1列(colums) --> 1字段(field)

以下三个字段以简单的直接方式从原始数据的单个列进行映射。
dist_miles:每一行值(row ID)表示乘车的距离,这个映射关系很简单:例如行值1(row 1)表示乘车距离在[0.5,1.5]这个区间内。也就是说,我们将距离这个浮点值舍入为整数并将其直接用作row ID。通常,从浮点值到row ID的映射可以是任意的。
舍入映射实现简洁,简化了导入和分析。并且,它是人类可读的。 我们会看到这种模式多次使用。

PDK使用中,我们定义了一个Mapper,它是一个只返回整数row ID的函数。 PDK具有许多预定义的映射器,可以使用一些参数进行描述。 其中之一是LinearFloatMapper。在下面代码中它将线性函数应用于输入,并将其转换为整数,因此隐式处理舍入。

lfm := pdk.LinearFloatMapper{
    Min: -0.5,
    Max: 3600.5,
    Res: 3601,
}

MinMax定义线性函数,Res确定输出row ID的最大允许值。我们选择这些值以产生一个舍入到最接近的整数的行为。其他预定义的映射器也有自己的特定参数,通常是两个或三个。

Pilosa文档翻译(三)示例

标签:https   隐式   目标   函数应用   max   经纬   rop   its   ping   

原文地址:https://www.cnblogs.com/oloroso/p/10058051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!