python中文地址映射省市县行政区域及经纬度解析

面对这样的需求

从下面地址详情中提取其所在行政区域(省、市、县/区 ),切分为右边表格的形式。

地址详情映射后地址信息
详细地址县/区详细地址
平罗县御景安家25-1-102宁夏回族自治区石嘴山市平罗县御景安家25-1-102
达州渠县渠江镇珠山村一组57号四川省达州市渠县渠江镇珠山村一组57号
兴庆区在水一方C区5-3-101宁夏回族自治区银川市兴庆区在水一方C区5-3-101
成都市武侯区佳灵路九峰家园2栋四川省成都市武侯区佳灵路九峰家园2栋
大田县集美路21号福建省三明市大田县集美路21号
邢台桥东区高开东汪镇西静庵村河北省邢台市桥东区高开东汪镇西静庵村

 

方法一

pip install cpca

    原理是通过jieba工具先对详细地址做分词,再将结果分段对比行政地区域地址库,代码如下:

import cpca
area_str = ["平罗县御景安家25-1-102"]
df_str = cpca.transform(area_str )
df_str

结果展示:

   市     区  地址
宁夏回族自治区  石嘴山市  平罗县 御景安家25-1-102

经纬度解析

cpca.latlng 以字典的形式将全国的行政区域经纬度保存(如下图:)

                   

我们直接从该字典中查询行政区域对应的经纬度即可(如下:)

cpca.latlng['北京市', '北京市', '西城区']

结果:('39.93428014370851', '116.37319010401802')

另一种类似的方法也可以解析地址经纬度(如下:)

方法二

pip install chinese_province_city_area_mapper

 原理与方法相似,但在使用过程要比方法一更上手,很多拼写不全的地址用方法二都可以映射正确的省市县。实验以下地址的时候使用方法一解析失败,使用方法二解析成功,如下:

from chinese_province_city_area_mapper.transformer import CPCATransformer
Ca = CPCATransformer()
Ca.transform(['湖南省株洲县朱亭镇水口村跃进组12号',
              '青海省海东地区乐都县高庙镇白崖子村42号',
              '湖南省株洲县渌口镇凯裕名城B栋4单元301
'])

使用chinese_province_city_area_mapper解析结果:

                                                      

使用cpca解析结果:

                                     

 

只有市级和市级以下的行政区域存在重名的情况,例如中国有很多城市的区叫“朝阳区” ,如果详细地址中没有别的地址描述的话系统是不知道应该映射到哪个“朝阳区”,所以我们需要为一些市区指定默认所属省。

有两种方式指定默认值:

# 方法一:直接通过 CPCATransformer 指定
cpca = CPCATransformer({"朝阳区":"北京市"})
df = cpca.transform(location_str)

# 方法二:通过内置模块 umap 调用默认地址字典
from chinese_province_city_area_mapper import myumap
cpca = CPCATransformer(myumap.umap)
df = cpca.transform(location_str)

打印myumap.umap ,结果如下 :

{'南关区': '长春市', '南山区': '深圳市', '宝山区': '上海市', '市辖区': '东莞市', 
'普陀区': '上海市', '朝阳区': '北京市', '河东区': '天津市', '白云区': '广州市', 
'西湖区': '杭州市', '铁西区': '沈阳市'}

 

   对经纬度的解析结果大体相当,代码如下:

from chinese_province_city_area_mapper.infrastructure import SuperMap
SuperMap.lat_lon_mapper.get("北京市,北京市,朝阳区")
结果:(39.92, 116.43)

   绘图功能,两行代码完成:

# 绘制城市热力地图
from chinese_province_city_area_mapper import drawers
drawers.draw_locations(DF, "df.html")

 

chinese_province_city_area_mapper  模块还有其他功能模块,例如 SuperMap模块简要介绍如下:

from chinese_province_city_area_mapper.infrastructure import SuperMap
#地区到市的映射数据库,是一个字典类型(key为区名,value为其所属的市名),注意其中包含重复的区名
SuperMap.area_city_mapper
#重复的区名列表,列表类型,如果区名在这个列表中,则area_city_mapper的映射是不准确的
SuperMap.rep_areas
#市到省的映射数据库,字典类型(key为市的名称,value为省的名称)
SuperMap.city_province_mapper
#全国省市区的经纬度数据库,字典类型(key为"省,市,区",value为(维度,经度))
SuperMap.lat_lon_mapper
#获取北京市朝阳区的经纬度
SuperMap.lat_lon_mapper.get("北京市,北京市,朝阳区")

 

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值