使用Pyecharts进行全国水质TDS地图可视化全过程3:用Python拆分物流地址以及实现地址补全

目录

 1.提取省市区信息

2.提取街镇乡、村或居委会信息

3.自动补全省市信息


简介:本文介绍用Python编程,实现对物流地址的拆分及补全。在快递物流中会用到这种技术。

在TDS地图可视化项目中,我们获取了非常详细的安装地址。但在地图展示上,我们还想把它分解到具体的省、市、区(县)。

几十万条数据,用手工肯定不现实。该如何实现?

第一反应是Excel截取两个指定字符间的字符,例如截取省市之间的字符。但这种方法会存在问题,因为我们地址的格式非标准化,有填得好的,省市区等等都有信息,有填的差的,缺那么一部分。数据质量并不是那么的好,例如下面一些地址:

广东省龙华区龙华街道清湖花半里花园
兰山区柳青街道柳青街道万城花开
贵阳市白云区艳山红社区旭辉观云
兴宁区三塘镇广西南宁市兴宁区三塘镇昆仑大道995号嘉和城白鹭南山
湘阴县六塘乡茶木村八组

得换一个方法。我联想到的是我们寄快递的时候,输入一个地址,系统自动实现了分割。于是我去查了下,网上有这种服务。这个技术并不难,但是要收费。

为了省点钱,只好自己写代码解决。这次我用Python并借助第三方库jionlp来实现。

jionlp是一个中文NLP(Natural Language Processing,自然语言处理)预处理、解析工具包。

首先用pip安装jionlp

建议用下面这个镜像网站下载,速度很快。

pip install jionlp -i https://pypi.douban.com/simple/

安装截图:

现在我们来试下:

 1.提取省市区信息

# -*- coding:utf-8 -*-
#王永平 2022.6.15
import jionlp  as jio
#测试地址
raw_addres = [
'广东深圳市龙华区龙华街道清湖花半里花园',
'山东省临沂市兰山区柳青街道柳青街道万城花开',
'贵州省贵阳市白云区艳山红社区旭辉观云',
'广西壮族自治区南宁市兴宁区三塘镇广西南宁市兴宁区三塘镇昆仑大道995号嘉和城白鹭南山',
'湖南岳阳市湘阴县六塘乡茶木村八组'
]

for i in range(5):
  #解析地址信息
  result=jio.parse_location(raw_addres[i])
  print("------地址:"+str(i+1)+"------")
  #输出省
  print(result['province'])
  #输出市
  print(result['city'])
  #输出区、县
  print(result['county'])

运行结果:

2.提取街镇乡、村或居委会信息

设置参数town_village=True,可以额外尝试提取出街镇乡、村或居委会信息等级别的信息字段。注意这个是尝试提取,不一定能提出出来。还是刚刚的那些数据。我们试下:

# -*- coding:utf-8 -*-
#王永平 2022.6.15
import jionlp  as jio
#测试地址
raw_addres = [
'广东深圳市龙华区龙华街道清湖花半里花园',
'山东省临沂市兰山区柳青街道柳青街道万城花开',
'贵州省贵阳市白云区艳山红社区旭辉观云',
'广西壮族自治区南宁市兴宁区三塘镇广西南宁市兴宁区三塘镇昆仑大道995号嘉和城白鹭南山',
'湖南岳阳市湘阴县六塘乡茶木村八组'
]

for i in range(5):
  #解析地址信息
  result=jio.parse_location(raw_addres[i],town_village=True)
  print("------地址:"+str(i+1)+"------")
  #输出省
  print(result['province'])
  #输出市
  print(result['city'])
  #输出区、县
  print(result['county'])
  #输出镇
  print(result['town'])
  #输出村
  print(result['village'])

运行结果:

可见基本上村是没有提取出来的,镇这个级别还有可能提取出来。但对于我这个项目来说,只需要定位到区、县就足够了。

3.自动补全省市信息

很多时候,我们的录单没有很规范,有些地址填的不全,这给我们处理带来了一些麻烦。这时我们可以尝试进行省市的补全:

# -*- coding:utf-8 -*-
#王永平 2022.6.15
import jionlp  as jio
#测试地址,部分省市信息是不全的
raw_addres = [
'广东省龙华区龙华街道清湖花半里花园',
'兰山区柳青街道柳青街道万城花开',
'贵阳市白云区艳山红社区旭辉观云',
'兴宁区三塘镇广西南宁市兴宁区三塘镇昆仑大道995号嘉和城白鹭南山',
'湘阴县六塘乡茶木村八组'
]

for i in range(5):
  #解析地址信息
  result=jio.parse_location(raw_addres[i])
  print("------地址:"+str(i+1)+"------")
  #输出补全后的地址信息
  print(result['full_location'])

运行后,地址自动补全:

一般来说,有定位到省,或者定位到市,相对来说就能自动补全而不出错。因为全国有很多地方可能存在相同名字的区,所以最好能够定位一下到省或者市,不然就可能补全得不对,补到其他省市去了。

幸运的是,我们的原始数据里,省的信息还是有的,这给自动补全带来了极大方便。

利用这种方法,我们就实现了地址的分割,将TDS与省、市、区、县,甚至下面的镇、村对应起来。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于Python爬取虎扑球员信息并使用openpyxl库储存至Excel并进行可视化的问题。下面是一些步骤和代码示例,希望能对你有所帮助。 1. 爬取球员信息 首先,我们需要爬取虎扑的球员信息。这里我们可以利用Python的requests和BeautifulSoup库来实现。以下是一个简单的爬取虎扑球员信息的示例代码: ```python import requests from bs4 import BeautifulSoup url = 'https://nba.hupu.com/players' html = requests.get(url).text soup = BeautifulSoup(html, 'html.parser') player_list = [] for tr in soup.find_all('tr')[1:]: tds = tr.find_all('td') name = tds[0].text.strip() position = tds[1].text.strip() height = tds[2].text.strip() weight = tds[3].text.strip() team = tds[4].text.strip() player_list.append([name, position, height, weight, team]) ``` 2. 储存至Excel 接下来,我们需要将爬取到的球员信息储存至Excel文件中。这里我们可以使用openpyxl库来实现。以下是一个简单的储存至Excel文件的示例代码: ```python from openpyxl import Workbook wb = Workbook() ws = wb.active ws.append(['姓名', '位置', '身高', '体重', '球队']) for player in player_list: ws.append(player) wb.save('player_info.xlsx') ``` 3. 可视化 最后,我们可以使用Matplotlib库对爬取到的球员信息进行可视化。以下是一个简单的可视化示例代码: ```python import matplotlib.pyplot as plt positions = [player[1] for player in player_list] position_counts = {} for position in positions: if position in position_counts: position_counts[position] += 1 else: position_counts[position] = 1 plt.bar(position_counts.keys(), position_counts.values()) plt.title('NBA球员位置分布') plt.xlabel('位置') plt.ylabel('球员数量') plt.show() ``` 希望以上代码示例能对你有所帮助,如果你有任何问题或需要更多帮助,请随时问我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值