本文示例代码及数据已上传至个人
Github
仓库https://github.com/CNFeffery/DataScienceStudyNotesgit
最近一段时间(本文写做于2020-07-10)geopandas
与geoplot
两个经常使用的GIS类Python
库都进行了一系列较为重大的内容更新,新增了一些特性,本文就将针对其中比较实际的新特性进行介绍。github
从geopandas
0.8.0版本开始,在矢量文件读写方面,新增了.feather
与.parquet
两种崭新的数据格式,他们都是Apache Arrow
项目下的重要数据格式,提供高性能文件存储服务,使得咱们能够既能够快速读写文件,又能够显著减小文件大小,作到了“多快好省”:web
在将geopandas
更新到0.8.0版本后,便新增了read_feather()
、to_feather()
、read_parquet()
以及to_parquet()
这四个API,但要注意,这些新功能依赖于pyarrow
,首先请确保pyarrow
被正确安装,推荐使用conda install -c conda-forge pyarrow
来安装。app
安装完成后,咱们就来一睹这些新功能的效率如何,首先咱们建立一个足够大的虚拟表(200万行11列),并为其新增点要素矢量列:dom
import numpy as np from shapely.geometry import Point import pandas as pd from tqdm.notebook import tqdm # 建立虚拟表,其中字段名为了导出shapefile不报错加上非数字的前缀 base = pd.DataFrame(np.column_stack([np.random.randint(1, 100, (2000000, 10)), np.random.uniform(-90, 90, (2000000, 2))]), columns=['_'+str(i) for i in range(12)]) tqdm.pandas() # 开启apply进度条 base['geometry'] = base.progress_apply(lambda row: Point(row['_10'], row['_11']), axis=1) # 添加矢量列 base = gpd.GeoDataFrame(base, crs='EPSG:4326') # 转换为GeoDataFrame
最终获得一个较为庞大的GeoDataFrame
,接着咱们分别测试geopandas
读写shapefile
、feather
以及parquet
三种数据格式的耗时及文件占硬盘空间大小:ide
具体的性能比较结果以下,能够看到与原始的shapefile
相比,feather
与parquet
取得了很是卓越的性能提高,且parquet
的文件体积很是小:性能
类型 | 写出耗时 | 读入耗时 | 写出文件大小 |
---|---|---|---|
shapefile | 325秒 | 96秒 | 619MB |
feather | 50秒 | 25.7秒 | 128MB |
parquet | 52.4秒 | 26秒 | 81.2MB |
因此当你要存储的矢量数据规模较大时,能够尝试使用feather
和parquet
来代替传统的文件格式。测试
在以前咱们出品的基于geopandas的空间数据分析系列文章中的geoplot篇(上)中,对能够添加在线底图的webplot()
进行过介绍,但在先前的版本中只能使用固定的少数几种内置的在线地图,而在最近的版本中,webplot()
的底图叠加方式进行了很是大的调整,使得能够利用参数provider
来像folium
那样自由切换底图,其传入格式为:网站
{ 'url': 地图源url, 'attribution': 自定义字符串,必填 }
譬如咱们能够在一个神奇的网站 http://openwhatevermap.xyz/#3/-60.50/167.87 上点击本身感兴趣的地图样式:url
将对应的url和自定义的attribution
传入webplot()
中:
你也能够利用下面的方式查看contextily
中全部内置的底图参数,从中选择你心仪的底图:
以上就是本文的所有内容,欢迎在评论区与咱们进行讨论~