pyhton根据城市名称获取省份名称

获取地理数据
Fetching geodata with geopy
在Feature Engineering的环节中经常会遇到地理数据的处理。地理数据通常包括地市\省份\经纬度等信息,这些不同level的特征可以被利用在模型训练中。

但是通常我们能拿到的数据只是部分信息,如果想要增加特征维度,Python的geopy是一个获取geographic data很好的package。它内含地区的完整地址和经度纬度,并且支持包括中英文在内的多语言输入。

以下是geopy的基本查询方式:

!pip install geopy
from geopy.geocoders import Nominatim
# initiate nominatim
geolocator = Nominatim(user_agent="aaa515")
# search for location
location = geolocator.geocode("广州市")
print(location.address)
print((location.latitude, location.longitude))
print(location.raw)

>>>广州市, 广东省, China 中国
>>>(23.1301964, 113.2592945)
>>>{'place_id': 235779999, 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright', 'osm_type': 'relation', 'osm_id': 3287346, 'boundingbox': ['22.5176916', '23.9360754', '112.9529252', '114.0500833'], 'lat': '23.1301964', 'lon': '113.2592945', 'display_name': '广州市, 广东省, China 中国', 'class': 'boundary', 'type': 'administrative', 'importance': 0.6885781941264866, 'icon': 'https://nominatim.openstreetmap.org/images/mapicons/poi_boundary_administrative.p.20.png'}

获取中国城市所属省份
mapping provinces for Chinese cities
当只有城市信息时,我们想得到对应的省份信息,需要用regrex expression将address中包含‘省’的字段提取出来。PS.因为re不能直接匹配中文,所以我们需要利用encode-decode将中文的utf-8编码进行decode后,再与中文地址进行匹配。

'省'.encode('utf-8')
>>>b'\xe7\x9c\x81'

import re
re.findall(b'\w+\xe7\x9c\x81'.decode('utf-8'), '广州市, 广东省, China 中国')
>>>['广东省']

总结
Python geopy能获取完整的地理信息,包括地名,省份,lat, long。
使用Regrex expression匹配中文时需要做一些转换,点击链接可查看现成def function:
中文城市省份匹配 - CityToProvince mapping
参考链接:https://blog.csdn.net/qq_44695832/article/details/105915424

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一种实现方式: ```python # 定义省份和省会城市的字典 provinces = { "北京市": "北京", "天津市": "天津", "河北省": "石家庄", "山西省": "太原", "内蒙古自治区": "呼和浩特", "辽宁省": "沈阳", "吉林省": "长春", "黑龙江省": "哈尔滨", "上海市": "上海", "江苏省": "南京", "浙江省": "杭州", "安徽省": "合肥", "福建省": "福州", "江西省": "南昌", "山东省": "济南", "河南省": "郑州", "湖北省": "武汉", "湖南省": "长沙", "广东省": "广州", "广西壮族自治区": "南宁", "海南省": "海口", "重庆市": "重庆", "四川省": "成都", "贵州省": "贵阳", "云南省": "昆明", "西藏自治区": "拉萨", "陕西省": "西安", "甘肃省": "兰州", "青海省": "西宁", "宁夏回族自治区": "银川", "新疆维吾尔自治区": "乌鲁木齐", "台湾省": "台北", "香港特别行政区": "香港", "澳门特别行政区": "澳门", } # 获取用户输入的省份名称 province = input("请输入省份名称:") # 根据用户输入的省份名称,在字典中查找对应的省会城市 if province in provinces: print(f"{province}的省会城市是{provinces[province]}") else: print("输入的省份名称有误!") ``` 运行程序后,会提示用户输入省份名称,并根据用户输入的省份名称输出对应的省会城市,例如: ``` 请输入省份名称:广东省 广东省的省会城市是广州 ``` 如果用户输入的省份名称不在字典中,则会提示输入的省份名称有误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值