我的编程空间,编程开发者的网络收藏夹
学习永远不晚

全解Python的地理编码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

全解Python的地理编码

译者 | 崔皓

审校 | 孙淑娟

1、简介

大家在处理机器学习的大型数据集时,是否会遇到如下的地址栏?

图片

上面的位置数据非常混乱,难以处理。对地址进行编码是很困难的,因为它们具有非常高基数。如果你试图用单次编码技术来对某列进行编码,就会导致高维度的结果,这会导致机器学习模型表现欠佳。解决问题的最简单方法就是对列进行地理编码。

2、什么是地理编码?

地理编码是将地址转换为地理坐标,这意味着将把原始地址转化为经度/纬度的方式。

3、Python中的地理编码

有许多不同的库可以帮助你用Python进行地理编码。最快的是谷歌地图提供的API,如果有超过1000个地址需要在短时间内转换,我推荐你使用。然而,谷歌地图的API并不是免费的,你需要为每1000个请求支付约5美元。

谷歌地图API的免费替代品是OpenStreetMap API。然而,OpenStreetMap API的速度比起谷歌地图来说要慢得多,而且准确性也稍差。

在这篇文章中,我将指导你使用上述两个API完成地理编码过程。

4、谷歌地图API

让我们首先使用谷歌地图API将地址转换成精度/纬度。首先需要创建一个谷歌云账户,并输入信用卡信息。虽然这是一项付费服务,但当你第一次创建谷歌云账户时,谷歌会给你200美元的免费信用。这意味着,在你被收费之前,你可以用他们的地理编码API进行大约40,000次调用。只要你没有达到这个限制,你的账户就不会被收费。

首先,在谷歌云上建立一个免费账户。然后,一旦你建立了一个账户,你就可以按照这个教程来获得你的谷歌地图API密钥。

一旦你收到API密钥,就可以开始编码了!

(1)前提条件

在本教程中使用Zomato餐厅Kaggle数据集。确保在你的路径中安装了该数据集。然后,用这个命令安装googlemaps API包。

pip install -U googlemaps

(2)读取数据集

现在,让我们读取数据集并检查数据帧的头部。

data = pd. read_csv('zomato.csv',encoding="ISO-8859-1")
df = data.copy()
df.head()

图片

这个数据集合有21列,9551行。

只需要针对地址列来进行地理编码,所以去掉所有其他的列。然后,再去掉重复记录,最后只得到地址列信息。

df = df[['地址']]
df = df. drop_duplicates()

再看一下数据框架的头部,在处理之后就只看到地址信息了。

图片

接下来,就可以开始地理编码了。

(3)地理编码

首先,用Python访问我们的API密钥,运行下面几行代码来完成这个任务。

gmaps_key = googlemaps.Client(key="your_API_key")

现在,让我们先尝试对一个地址进行地理编码,并看看输出结果。

add_1 = df['地址'][0]
g = gmaps_key. geocode(add_1)
lat = g[0]["geometry"]["location"]["lat"]
long = g[0]["geometry"]["location"]["lng"]
print('Latitude: '+str(lat)+', Longitude: '+str(long))

运行上述代码,得到类似如下的输出结果。

图片

如果你得到上述输出,很好!表示一切顺利。我们可以针对整个数据集应用类似的处理,过程如下:

def geocode(add):
g = gmaps_key. geocode(add)
lat = g[0]["geometry"]["location"]["lat"]
lng = g[0]["geometry"]["location"]["lng"]
return(lat, lng)。
df['geocoded'] = df['Address']. apply(geocode)

再次检查数据集合的头部,看看代码是否生效。

df.head()

图片

如果输出类似上面的截图,恭喜你!你已经成功地对整个数据框架中的地址进行了地理编码。

5、OpenStreetMap API

OpenStreetMap API是完全免费的,但与谷歌地图API相比,速度较慢,精确度较低。这个API无法定位数据集中的许多地址,所以这次我们将使用地点栏来代替。在开始学习教程之前,让我们先看看地址栏和位置栏的区别。运行下面几行代码来完成这个任务。

print('Address: '+data['Address'][0]+'nnLocality: '+data['Locality'][0] )

图片

地址栏(Address)比地点(Locality)栏细化得多,它提供了餐厅的确切位置,包括楼层号。这可能是地址不被OpenStreetMap API识别,而地点却被识别的原因。

让我们对第一个Locality进行地理编码,看看输出结果。

地理编码

运行以下几行代码。

Import url
Import requests

data = data[['Locality']]

url = 'https://nominatim.openstreetmap.org/search/' + urllib. parse. quote(df['Locality'][0]) +'?format=json' 。
response = requests.get(url).json()
print('Latitude: '+response[0]['lat']+', Longitude: '+response[0]['lon'] )

左右滑动查看完整代码

上述代码的输出与谷歌地图API生成的结果非常相似。

图片

现在,让我们创建一个函数来寻找整个数据集合的坐标。

def geocode2(locality):
url = 'https://nominatim.openstreetmap.org/search/' + urllib. parse. quote(locality) +'?format=json'
response = requests.get(url).json()
if (len(response)!=0)。
return(response[0]['lat'], response[0]['lon'] )
else:
return('-1')

data['geocoded'] = data['Locality']. apply(geocode2)

很好!现在,让我们来看看数据集合的头部。

Data.head(15)

请注意,这个API无法为数据集合中的一些地方提供坐标。

虽然它是谷歌地图API的免费替代品,如果用OpenStreetMap进行地理编码,有可能会失去大量的数据。本教程到此结束!希望你从这里学到了一些新的东西,并对处理地理空间数据有了更好的理解。

原文链接:https://www.kdnuggets.com/2022/11/geocoding-python-complete-guide.html

译者介绍

崔皓,51CTO社区编辑,资深架构师,拥有18年的软件开发和架构经验,10年分布式架构经验。

以上就是全解Python的地理编码的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

全解Python的地理编码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么理解Python中的编码

这篇文章主要介绍“怎么理解Python中的编码”,在日常操作中,相信很多人在怎么理解Python中的编码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Python中的编码”的疑惑有所帮助!接下来,请跟
2023-06-02

python 安全编码&代码审计

现在一般的web开发框架安全已经做的挺好的了,比如大家常用的django,但是一些不规范的开发方式还是会导致一些常用的安全问题,下面就针对这些常用问题做一些总结。代码审计准备部分见《php代码审计》,这篇文档主要讲述各种常用错误场景,基本上
2023-01-31

python 默认编码的理解与设置

原链接:http://notewo.sinaapp.com/blog/full_article/?blogid=54 python 里面的编码和解码,就是unicode  和str 这两种形式的相对转换。 编码: unicode  →→→
2023-01-31

深入理解Python字符编码

不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError、UnicodeDecodeError 错误,每当遇到错误我们就拿着 encode、decode 函数翻来覆去的转换
2023-01-31

Python HTML编码解码

>>> import HTMLParser>>> h = HTMLParser.HTMLParser()>>> h.unescape("")u'\u59d3\u540d\uff1a'>>> s = h.unescape("")>>> pri
2023-01-31

如何理解Python vim检查编码

这篇文章将为大家详细讲解有关如何理解Python vim检查编码,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如果你在打开一个文件时中文编码是什么格式不太清楚的话,例如文件头可能指定是utf
2023-06-17

全息地球:Gaia 理论的全新解读

地球可以被视为一个全息图,其中任何部分都包含整个地球的信息。使用计算机模型,我们可以模拟这个全息地球,并分析其对气候变化、生态系统交互和灾难响应的影响,从而加深我们对地球系统性特性的理解。全息地球:Gaia 理论的全新解读前言:Gaia
全息地球:Gaia 理论的全新解读
2024-04-08

Python实现加解密,编码解码和进制转换(最全版)

这篇文章主要为大家详细介绍了Python实现加解密、编码解码、进制转换、字符串转换的最全版操作方法,文中的示例代码讲解详细,大家可以收藏一下
2023-01-09

Python安全编码与代码审计是怎样的

这篇文章给大家介绍Python安全编码与代码审计是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 前言现在一般的web开发框架安全已经做的挺好的了,比如大家常用的django,但是一些不规范的开发方式还是会导致
2023-06-17

Python并发编程中的GIL,理解全局解释器锁对Python并发编程的影响

Python并发编程中的GIL,解读全局解释器锁对Python并发编程的影响 : Python、GIL、并发编程、多线程、性能 Python是一种解释型语言,它的解释器采用单线程模型,即在同一时间只能执行一条指令。为了解决这个问题,Python引入了全局解释器锁(GIL)的概念。GIL是一种同步机制,它确保在同一时间只能有一个线程执行Python字节码。
Python并发编程中的GIL,理解全局解释器锁对Python并发编程的影响
2024-02-05

python单因素分析线性拟合及地理编码源码分析

今天小编给大家分享一下python单因素分析线性拟合及地理编码源码分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、单因
2023-07-02

JavaScript 安全编码技巧:编写更安全的代码

JavaScript 安全编码技巧对于编写更安全的代码至关重要。本文提供了几种有效的 JavaScript 安全编码技巧,包括使用严格模式、转义输入、验证输入、防止跨站脚本攻击、使用安全库等,帮助你编写更安全的代码。
JavaScript 安全编码技巧:编写更安全的代码
2024-02-04

Python 3.x 编解码

#-- coding:gbk -- 指定文件编码#Author:leiimport sysprint(sys.getdefaultencoding())s = "你好"print(s)print(s.encode("gbk")) #编码
2023-01-31

Python URL编解码 encode

urllib包中parse模块的quote和unquotefrom urllib import parse#这个是js的结果# encodeURIComponent('中国')# "%E4%B8%AD%E5%9B%BD"jsRet='%E4
2023-01-31

python密码学Base64编码和解码的方法

本文小编为大家详细介绍“python密码学Base64编码和解码的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“python密码学Base64编码和解码的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。B
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录