• cpca 使用python提取中文地址描述中的省市区信息


    引言


    在一次建模比赛中,我手头里的原始数据中有一个“地址描述”地段,如下:

    地址描述
    广州国际采购中心1401
    上海市长宁区金钟路658弄5号楼5楼
    徐汇区虹漕路461号58号楼5楼
    济南市历下区和平路34号轻骑院内东二层山东朵拉

    这样的地址描述字段过于随意,很难使用,但是看这些字符串的样子似乎又可以提取出其所在的省、市和区,即使只能够提取出区或者市,如果我们有一个省、市和区的归属数据库的话,应该也能够将剩下的信息映射出来,如果自己写的话肯定很麻烦,还要去网上找数据库,于是我做了一个可以复用的python模块,一条命令就可以将上面的“地址描述”字段转换成如下的样子:

    广东省 广州市  
    上海市 上海市 长宁区
    上海市 上海市 徐汇区
    山东省 济南市 历下区

    模块安装


    目前支持python3

    • 1

    Github地址


    更详细的模块介绍见Github上的README
    https://github.com/DQinYuan/chinese_province_city_area_mapper

    如果觉得这个模块对你有帮助的话,请给个star啊

    基本功能


    本模块中最主要的方法是cpca.transform,该方法可以输入任意的可迭代类型(如list,pandas的Series类型等),然后将其转换为一个DataFrame,下面演示一个最为简单的使用方法:

    location_str = ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", "北京朝阳区北苑华贸城"]
    import cpca
    df = cpca.transform(location_str)
    df
    • 1
    • 2
    • 3
    • 4

    输出的结果为(adcode为官方地址编码):

    • 1
    • 2
    • 3
    • 4

    地理小提示:在中国行政区划中,直辖市的区都不是直接挂在直辖市下面的,而是挂在唯一的一个市辖区下面,普通的市下面也会有市辖区,但是普通的市辖区只是 三级行政单位,不像直辖市的市辖区,是二级行政单位

    如果你想获知程序是从字符串的哪个位置提取出省市区名的,可以添加一个pos_sensitive=True参数:

    location_str = ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘西工业区", "北京朝阳区北苑华贸城"]
    import cpca
    df = cpca.transform(location_str, pos_sensitive=True)
    df
    • 1
    • 2
    • 3
    • 4

    输出如下:

    • 1
    • 2
    • 3
    • 4

    其中省_pos市_pos区_pos三列大于-1的部分就代表提取的位置。-1则表明这个字段是靠程序推断出来的,或者没能提取出来。

    地图绘制


    模块中还自带一些简单绘图工具,可以在地图上将上面输出的数据以热力图的形式画出来.

    这个工具依赖folium,为了减小本模块的体积,所以并不会预装这个依赖,在使用之前请使用pip install folium .

    代码如下:

    from cpca import drawer
    #df为上一段代码输出的df
    drawer.draw_locations(df, "df.html")
    • 1
    • 2
    • 3

    这一段代码运行结束后会在运行代码的当前目录下生成一个df.html文件,用浏览器打开即可看到
    绘制好的地图(如果某条数据’省’,'市’或’区’字段有缺,则会忽略该条数据不进行绘制),速度会比较慢,需要耐心等待,绘制的图像如下:

    地图绘制

    还有更多的绘图工具请参考Github上的README中大标题为“示例与测试用例”的部分。

     
  • 相关阅读:
    Longest Consecutive Sequence 分类: Leetcode(线性表) 2015-02-04 09:54 55人阅读 评论(0) 收藏
    Median of Two Sorted Arrays 分类: Leetcode(线性表) 2015-02-04 09:05 54人阅读 评论(0) 收藏
    Python+Scrapy(完整包全安装过程) 分类: 安装配置说明 2015-02-02 21:29 108人阅读 评论(0) 收藏
    Remove Element 分类: Leetcode(线性表) 2015-01-29 10:47 55人阅读 评论(0) 收藏
    Search in Rotated Sorted Array 分类: Leetcode(线性表) 2015-01-29 10:23 58人阅读 评论(0) 收藏
    机器学习基础(四)LMS,代价函数的求解和概率意义 分类: 机器学习 2015-01-26 14:52 114人阅读 评论(0) 收藏
    机器学习基础(一)线性回归
    AcWing1341. 十三号星期五
    JavaWebServle执行流程解析
    AcWing 466. 回文日期
  • 原文地址:https://www.cnblogs.com/du-jun/p/14009661.html
Copyright © 2020-2023  润新知