geohash用一个字符串表示经度和纬度两个坐标。某些情况下无法在两列上同时应用索引 (例如MySQL 4之前的版本,Google App Engine的数据层等),利用geohash,只需在一列上应用索引即可。
其次,geohash表示的并不是一个点,而是一个矩形区域。比如编码wx4g0ec19,它表示的是一个矩形区域。 使用者可以发布地址编码,既能表明自己位于北海公园附近,又不至于暴露自己的精确坐标,有助于隐私保护。
import pandas as pd
import numpy as np
import glob
INPUT_PATH = '../input/' #文件目录
MAX_ROWS = None # 文件读取行数
taxiorder2019 = pd.read_csv(INPUT_PATH + 'taxiOrder20190531.csv', nrows=None,
dtype = {
'GETON_LONGITUDE': np.float32,
'GETON_LATITUDE': np.float32,
'GETOFF_LONGITUDE': np.float32,
'GETOFF_LATITUDE': np.float32,
'PASS_MILE': np.float16,
'NOPASS_MILE': np.float16,
'WAITING_TIME': np.float16
})
taxiorder2019['GETON_DATE'] = pd.to_datetime(taxiorder2019['GETON_DATE'])
taxiorder2019['GETOFF_DATE'] = pd.to_datetime(taxiorder2019['GETOFF_DATE'])
taxiorder2019 = taxiorder2019.rename(columns={'CAR_NO':'CARNO'})
taxiorder2019.sort_values(by=['CARNO','GETON_DATE'], inplace=True)
taxiorder2019.reset_index(inplace=True, drop=True)
# taxigps2019.apply(lambda x: geohash.encode(x['GETON_LATITUDE'], x['GETON_LONGITUDE'], precision=5), axis=1)
taxiorder2019['geohash'] = taxiorder2019.apply(lambda x: geohash.encode(x['GETON_LATITUDE'], x['GETON_LONGITUDE'], precision=8), axis=1)
taxiorder2019['geohash'].value_counts().head(10)
s0000000 6335
ws7unv0q 813
wsk584c9 745
ws7grb9s 617
ws7unv0r 608
wsk52k80 447
wsk584cd 416
ws7grbsy 409
ws7grb6d 394
wsk52dj9 362
Name: geohash, dtype: int64
其中s0000000
为经纬度异常点,可以剔除掉。接下来我们统计下热门经纬度的中心:
for idx in taxiorder2019['geohash'].value_counts().iloc[1:11].index:
df = taxiorder2019[taxiorder2019['geohash'] == idx]
print(idx, df['GETON_LONGITUDE'].mean(), df['GETON_LATITUDE'].mean())
ws7unv0q 118.070595 24.637962
wsk584c9 118.127205 24.53685
ws7grb9s 118.116165 24.48105
ws7unv0r 118.07057 24.63811
wsk52k80 118.136154 24.502394
wsk584cd 118.1272 24.536997
ws7grbsy 118.12063 24.481407
ws7grb6d 118.11762 24.479357
wsk52dj9 118.15463 24.48881
wsk58ktu 118.14406 24.546976
巡游车根据等待时间统计具体位置:
legal_hash = taxiorder2019['geohash'].value_counts().iloc[:5000].index
taxiorder2019[taxiorder2019['geohash'].isin(legal_hash)].groupby(['geohash'])['WAITING_TIME'].mean().sort_values()
网约车根据等待时间统计具体位置:
wycorder2019['DEP_TIME'] = pd.to_datetime(wycorder2019['DEP_TIME'], format='%Y%m%d%H%M%S')
wycorder2019['BOOK_DEP_TIME'] = pd.to_datetime(wycorder2019['BOOK_DEP_TIME'], format='%Y%m%d%H%M%S')
wycorder2019['WAITING_TIME'] = (wycorder2019['DEP_TIME'] - wycorder2019['BOOK_DEP_TIME']).dt.seconds
wycorder2019['geohash'] = wycorder2019.apply(lambda x: geohash.encode(x['DEP_LATITUDE'], x['DEP_LONGITUDE'], precision=8), axis=1)
wycorder2019[wycorder2019['geohash'].isin(legal_hash)].groupby(['geohash'])['WAITING_TIME'].mean().sort_values()
通过统计发现,网约车与巡游车达不到车的位置区域存在部分重叠,但还是会有交叉的情况
geohash
发掘2019年端午假期,网约车热门的下车地点(Top3);geohash
发掘2019年端午假期,网约车热门的打车(上车)地点(Top3);geohash
分别发掘2019和2020年端午假期,网约车打车预计上车时间
到上车时间
平均时间最长且地点出现次数大于100的地点(两年的Top1)。© 2019-2023 coggle.club 版权所有 京ICP备20022947 京公网安备 11030102010643号