如何在Python

时间:2017-02-28 19:16:03

标签: python

我正在使用NYC旅行数据。我想将数据中存在的纬度转换为纽约市的各个行政区。我特别想知道在其中一次旅行中是否有纽约机场(拉瓜迪亚/肯尼迪机场)。

我知道Google Maps API甚至像Geopy这样的库都会获得反向地理编码。但是,他们中的大多数都提供城市和国家级别的编码。

我想从lat-long中提取自治市镇或机场(如Queens,Manhattan,JFK,Laguardia等)。对于接送和下降位置我都有lat-long。

以下是pandas dataframe中的示例数据集。

    VendorID    lpep_pickup_datetime    Lpep_dropoff_datetime   Store_and_fwd_flag  RateCodeID  Pickup_longitude    Pickup_latitude Dropoff_longitude   Dropoff_latitude    Passenger_count Trip_distance   Fare_amount Extra   MTA_tax Tip_amount  Tolls_amount    Ehail_fee   improvement_surcharge   Total_amount    Payment_type    Trip_type
0   2   2015-09-01 00:02:34 2015-09-01 00:02:38 N   5   -73.979485  40.684956   -73.979431  40.685020   1   0.00    7.8 0.0 0.0 1.95    0.0 NaN 0.0 9.75    1   2.0
1   2   2015-09-01 00:04:20 2015-09-01 00:04:24 N   5   -74.010796  40.912216   -74.010780  40.912212   1   0.00    45.0    0.0 0.0 0.00    0.0 NaN 0.0 45.00   1   2.0
2   2   2015-09-01 00:01:50 2015-09-01 00:04:24 N   1   -73.921410  40.766708   -73.914413  40.764687   1   0.59    4.0 0.5 0.5 0.50    0.0 NaN 0.3 5.80    1   1.0
In [5]:

您也可以在这里找到数据:

http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtml

经过一番研究后,我发现我可以利用Google Maps API来获取县级甚至企业级数据。

这是我写的代码:

一个映射器函数,用于从谷歌API获取地理编码数据,用于传输

def reverse_geocode(latlng):
    result = {}
    url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng={}'
    request = url.format(latlng)
    data = requests.get(request).json()
    if len(data['results']) > 0:
        result = data['results'][0]
    return result


# Geo_code data for pickup-lat-long
trip_data_sample["est_pickup"] = [y["address_components"][0]["long_name"] for y in map(reverse_geocode, trip_data_sample["lat_long_pickup"].values)]
trip_data_sample["locality_pickup"]=[y["address_components"][2]["long_name"] for y in map(reverse_geocode, trip_data_sample["lat_long_pickup"].values)]

但是,我最初有1.4MM的记录。完成这项工作需要花费大量时间。所以我减少到200K。即便这样也需要很多时间才能运行。那么我减少到115K。即便花费太多时间。

所以现在我减少到50K。但是这个样本几乎不具有整个数据的代表性分布。

我想知道是否有更好更快的方法来获得lat-long的反向地理编码。我没有使用Spark,因为我在本地mac上运行它。所以使用Spark可能无法在单台机器上提供那么多的速度杠杆。请指教。

0 个答案:

没有答案