简单的城市名转换成经纬度:
https://www.cnblogs.com/zle1992/p/7209932.html
批量获取经纬度:
https://www.cnblogs.com/reboot777/p/7124010.html
用Python计算北京地铁的两站间最短换乘路线:
http://blog.csdn.net/myjiayan/article/details/45954679
使用爬虫获取获取所有的 站点名
http://blog.csdn.net/wenwu_both/article/details/70168760
高德地图地理编码服务
http://blog.csdn.net/u013250416/article/details/71178156
https://www.cnblogs.com/xautxuqiang/p/6241561.html
滴滴订单系统介绍
https://zhuanlan.zhihu.com/p/152013415
geohash原理介绍
geohash用一个字符串表示经度和纬度两个坐标。某些情况下无法在两列上同时应用索引 (例如MySQL 4之前的版本,Google App Engine的数据层等),利用geohash,只需在一列上应用索引即可。
其次,geohash表示的并不是一个点,而是一个矩形区域。比如编码wx4g0ec19,它表示的是一个矩形区域。 使用者可以发布地址编码,既能表明自己位于北海公园附近,又不至于暴露自己的精确坐标,有助于隐私保护。
热力图展示中,用于geohash点聚合功能,可以提高大量点前端渲染的性能
地址聚类中,通过geohash计算,进行地址归类
地址信息缓存时,通过geohash为key,来索引缓存信息
#geohash中precision的值设置的越大精确度越高,代表的区域越小
taxiorder2019.apply(lambda x: geohash.encode(x['GETON_LATITUDE'], x['GETON_LONGITUDE'], precision=5), axis=1)
【注意】在cmd中直接pip install geohash
虽然能安装上,但是在jupyter中无法调用
可以使用pip install geohash2
安装上然后import geohash2 as geohash
文件读取、压缩及预处理
import pandas as pd
import numpy as np
import glob
INPUT_PATH='./input/taxiOrder/'
MAX_ROWS=None #文件读取行数
#读取出租车订单数据文件并进行压缩处理
taxiorder2019=pd.read_csv(INPUT_PATH+'taxiOrder20190531.csv',nrows=MAX_ROWS,
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)
下面对经纬度进行编码
import geohash2 as geohash
#对所有的经纬度实现了编码,percision编码的精确程度,设置的约精细hash范围越小,对每行进行操作所以设置axis=1
taxiorder2019.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)
通过value_counts查看下出现最多的位置,第一为经纬度为空的异常值,从第二个开始才是正常的
#其中7zzzzzzz为异常点,可以提出掉,下面来统计热门的经纬度中心
#通过下面这个步骤统计出了排前十的(去掉异常后)的位置
for idx in taxiorder2019['geohash'].value_counts().iloc[1:11].index:
print(idx)
df=taxiorder2019[taxiorder2019['geohash']==idx]
#因为geohash对应的是一个区域,suoy
print(idx, df['GETON_LONGITUDE'].mean(), df['GETON_LATITUDE'].mean())
分析哪些地方平均等待时间最长
#统计5000个热门的区域,value_counts.index返回了最热门5000区域的geohash的编码
legal_hash=taxiorder2019['geohash'].value_counts().iloc[:5000].index
#使用isin判断是否在5000个热门区域中,统计出来前50000个区域中的平均等待时间
taxiorder2019[taxiorder2019['geohash'].isin(legal_hash)].groupby(['geohash'])['WAITING_TIME'].mean().value_counts()
wycorder2019=pd.read_csv('./input/wycOrder/wycOrder20190531.csv')
#查看网约车等待时间存在着大量缺失,所以重新利用上车时间-预计上车时间来计算等待时间
wycorder2019.info()
#对时间进行处理
wycorder2019['DEP_TIME']=pd.to_datetime(wycorder2019['DEP_TIME'])
wycorder2019['BOOK_DEP_TIME']=pd.to_datetime(wycorder2019['BOOK_DEP_TIME'])
#计算等待时间
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()
出租车筛选出的数据是1635个,而网约车在出租车的legal_hash中筛选得到的数据是876个,所以可以判定网约车与巡游车达不到车的位置区域存在部分重叠,但还是会有交叉的情况
1.有没有其他对地理位置坐聚合的方法
2.如何定量衡量一个区域达不到车的情况
数据分析报告要有一个清晰的架构,层次分明能降低阅读成本,有助于信息的传达。虽然不同类型的分析报告有其适用的呈现方式,但总的来说作为议论文的一种,大部分的分析报告还是适用总-分-(总) 的结构。
本次DCIC2020详细分析报告要求为:以PDF形式提交,所有素材包括但不限于文字、图片、视频、网站等均需为中文,网站/视频素材可在方案里指明网站或视频链接地址。所提交方案要求设计架构完整、逻辑清晰,确保技术可行和可落地,内容可包括但不限于:
在赛题分析报告中,不能只是侧重分析,措施建议类、策略性的篇幅比例建议不低于30%,数据模型算法挖掘、数据分析结果不低于50%。
围绕赛题要求写,统计分析、结果对比和建议举措;
图要清晰美观,标注详细;
表要直接间接,数据竟可能正确;
分析报告模板
数据分析规范总结
动画交互效果实现:寻找相关工具