数据集笔记:将POI数量映射到geolife location数据上

 需要的数据:

数据集笔记:geolife staypoint聚合的location 最近的10个其他location-****博客的location数据

数据集笔记:处理北大POI 数据:保留北京POI-****博客的北京POI数据

1 读取POI数据

import pandas as pd
dir1='D:/data/PKU POI/2018-POICSV-1'
gdf_bj=pd.read_csv(dir1+'/beijing_poi_in_five_ring.csv')

gdf_bj

2 poi类型提取

这边POI数据的类型是三级类型,我们逐级提取出来

try:
    gdf_bj['type_lst_layer0']=pd.DataFrame(gdf_bj['type'].apply(lambda x:x.split(';')[0]))
    gdf_bj['type_lst_layer1']=pd.DataFrame(gdf_bj['type'].apply(lambda x:x.split(';')[1]))
    gdf_bj['type_lst_layer2']=pd.DataFrame(gdf_bj['type'].apply(lambda x:x.split(';')[2]))
except:
    pass
gdf_bj

2.1 过滤不需要的POI类型

这个是自定义的,可要可不要

skip_poi=['道路附属设施','事件活动','摩托车服务','地名地址信息','汽车维修','通行设施','汽车销售','室内设施']
gdf_bj=gdf_bj[~gdf_bj['type_lst_layer0'].isin(skip_poi)]
gdf_bj

2.2 每种POI类型的数量

poi_type=set(gdf_bj['type_lst_layer0'].values.tolist())
poi_type
'''
{'交通设施服务',
 '住宿服务',
 '体育休闲服务',
 '公共设施',
 '公司企业',
 '医疗保健服务',
 '商务住宅',
 '*机构及社会团体',
 '汽车服务',
 '生活服务',
 '科教文化服务',
 '购物服务',
 '金融保险服务',
 '风景名胜',
 '餐饮服务'}
'''
poi_num=dict()
for i in poi_type:
    poi_num[i]=gdf_bj[gdf_bj['type_lst_layer0']==i].shape[0]


for i in poi_type:
    print(i,'  ',poi_num[i],'  ',set(gdf_bj[gdf_bj['type_lst_layer0']==i]['type_lst_layer1'].values))
'''
风景名胜    11095    {'风景名胜', '风景名胜相关', '公园广场'}
公司企业    61176    {'公司', '公司企业', '知名企业', '工厂', '农林牧渔基地'}
金融保险服务    26527    {'保险公司', '金融保险服务机构', '自动提款机', '银行', '财务公司', '银行相关', '证券公司'}
科教文化服务    56953    {'科研机构', '科教文化场所', '传媒机构', '会展中心', '学校', '科技馆', '培训机构', '博物馆', '天文馆', '图书馆', '文艺团体', '文化宫', '展览馆', '档案馆', '驾校', '美术馆'}
体育休闲服务    24476    {'体育休闲服务场所', '休闲场所', '度假疗养场所', '高尔夫相关', '运动场馆', '影剧院', '娱乐场所'}
*机构及社会团体    55626    {'外国机构', '交通车辆管理', '*党派', '*及社会团体相关', '公检法机构', '*机关', '工商税务机构', '社会团体'}
商务住宅    38761    {'商务住宅相关', '住宅区', '产业园区', '楼宇'}
住宿服务    25879    {'旅馆招待所', '宾馆酒店', '住宿服务相关'}
汽车服务    12476    {'汽车服务相关', '加气站', '充电站', '加油站', '其它能源站', '汽车俱乐部', '汽车配件销售', '汽车救援', '汽车租赁', '洗车场', '汽车养护/装饰', '二手车交易'}
生活服务    78873    {'电力营业厅', '自来水营业厅', '洗浴推拿场所', '生活服务场所', '美容美发店', '婴儿服务场所', '丧葬设施', '邮局', '售票处', '中介机构', '物流速递', '摄影冲印店', '旅行社', '洗衣店', '信息咨询中心', '搬家公司', '事务所', '彩票彩券销售点', '维修站点', '电讯营业厅', '人才市场'}
医疗保健服务    20296    {'疾病预防机构', '急救中心', '专科医院', '诊所', '动物医疗场所', '医药保健销售店', '综合医院', '医疗保健服务场所'}
交通设施服务    81364    {'长途汽车站', '过境口岸', '交通服务相关', '班车站', '机场相关', '港口码头', '出租车', '停车场', '地铁站', '火车站', '公交车站'}
购物服务    135395    {'商场', '便民商店/便利店', '家居建材市场', '特色商业街', '购物相关场所', '综合市场', '个人用品/化妆品店', '特殊买卖场所', '文化用品店', '专卖店', '服装鞋帽皮具店', '花鸟鱼虫市场', '家电电子卖场', '体育用品店', '超级市场'}
餐饮服务    64958    {'外国餐厅', '甜品店', '冷饮店', '快餐厅', '中餐厅', '糕饼店', '餐饮相关场所', '咖啡厅', '休闲餐饮场所', '茶艺馆'}
公共设施    23300    {'报刊亭', '公用电话', '公共厕所', '紧急避难场所', '公共设施'}
'''

3 poi DataFrame转GeoDataFrame

import geopandas as gpd

from shapely import wkt
gdf_bj['geometry'] = gdf_bj['geometry'].apply(wkt.loads)
gdf_bj=gpd.GeoDataFrame(gdf_bj,geometry='geometry')
gdf_bj

 

4读取location数据

location=pd.read_csv(dir1+'/location_with_neighbor.csv')
location

4.1 location数据转GeoDataFrame

location['extent']=location['extent'].apply(wkt.loads)
location=gpd.GeoDataFrame(location,geometry='extent')

5 空间连接location和POI数据

gdf_bj_with_location = gpd.sjoin(gdf_bj, location, how="left", op='within')
gdf_bj_with_location
  • "left"表示左连接,意味着结果中将包含左侧数据框(gdf_bj)的所有记录,即使某些记录在右侧数据框(location)中没有匹配的记录。 
  • op='within':这个参数定义了用于连接的地理关系操作。'within'意味着函数会检查location中的地理位置点是否位于gdf_bj中定义的区域内部。

718931条数据

6 过滤未匹配到location的POI

gdf_bj_with_location_matched=gdf_bj_with_location[~gdf_bj_with_location['id'].isnull()]
gdf_bj_with_location_matched

还剩35378条POI

len(set(gdf_bj_with_location_matched['id'].values))
#806
#匹配到806个location,也就是说有100个左右的location是没有POI的

7 location添加表示各个poi数量的列

for i in poi_num.keys():
    location[i]=0
location

7.1 每一个location 添加对应poi数量

for _,row in gdf_bj_with_location_matched.iterrows():
    location.loc[int(row['id']),row['type_lst_layer0']]+=1
location

8 重命名中文列为对应的英文名称

location.rename(columns={
    '风景名胜': 'Scenic Spots',
    '公司企业': 'Companies and Enterprises',
    '金融保险服务': 'Financial and Insurance Services',
    '科教文化服务': 'Science, Education, and Cultural Services',
    '体育休闲服务': 'Sports and Recreation Services',
    '*机构及社会团体': 'Government Agencies and Social Organizations',
    '商务住宅': 'Commercial and Residential Areas',
    '住宿服务': 'Accommodation Services',
    '汽车服务': 'Automotive Services',
    '生活服务': 'Daily Services',
    '医疗保健服务': 'Medical and Health Services',
    '交通设施服务': 'Transportation Services',
    '购物服务': 'Shopping Services',
    '餐饮服务': 'Dining Services',
    '公共设施': 'Public Facilities'
}, inplace=True)
location

上一篇:深入理解C语言中的 extern`和 static


下一篇:ABTest如何计算最小样本量-工具篇