(數據科學學習手札89)geopandas&geoplot近期重要更新


本文示例代碼及數據已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

  最近一段時間(本文寫作於2020-07-10)geopandasgeoplot兩個常用的GIS類Python庫都進行了一系列較為重大的內容更新,新增了一些特性,本文就將針對其中比較實際的新特性進行介紹。

2 geopandas&geoplot近期重要更新內容

2.1 geopandas近期重要更新

2.1.1 新增高性能文件格式

  從geopandas0.8.0版本開始,在矢量文件讀寫方面,新增了.feather.parquet兩種嶄新的數據格式,他們都是Apache Arrow項目下的重要數據格式,提供高性能文件存儲服務,使得我們可以既可以快速讀寫文件,又可以顯著減少文件大小,做到了“多快好省”:

圖1

  在將geopandas更新到0.8.0版本后,便新增了read_feather()to_feather()read_parquet()以及to_parquet()這四個API,但要注意,這些新功能依賴於pyarrow,首先請確保pyarrow被正確安裝,推薦使用conda install -c conda-forge pyarrow來安裝。

  安裝完成后,我們就來一睹這些新功能的效率如何,首先我們創建一個足夠大的虛擬表(200萬行11列),並為其新增點要素矢量列:

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讀寫shapefilefeather以及parquet三種數據格式的耗時及文件占硬盤空間大小:

圖2
圖3

  具體的性能比較結果如下,可以看到與原始的shapefile相比,featherparquet取得了非常卓越的性能提升,且parquet的文件體積非常小:

類型 寫出耗時 讀入耗時 寫出文件大小
shapefile 325秒 96秒 619MB
feather 50秒 25.7秒 128MB
parquet 52.4秒 26秒 81.2MB

  所以當你要存儲的矢量數據規模較大時,可以嘗試使用featherparquet來代替傳統的文件格式。

2.2 geoplot近期重要更新

2.2.1 webplot在線底圖切換方式升級

  在之前我們出品的基於geopandas的空間數據分析系列文章中的geoplot篇(上)中,對可以添加在線底圖的webplot()進行過介紹,但在先前的版本中只能使用固定的少數幾種內置的在線地圖,而在最近的版本中,webplot()的底圖疊加方式進行了非常大的調整,使得可以利用參數provider來像folium那樣自由切換底圖,其傳入格式為:

{
    'url': 地圖源url, 
    'attribution': 自定義字符串,必填
}

  譬如我們可以在一個神奇的網站 http://openwhatevermap.xyz/#3/-60.50/167.87 上點擊自己感興趣的地圖樣式:

圖4

  將對應的url和自定義的attribution傳入webplot()中:

圖5
圖6

  你也可以利用下面的方式查看contextily中所有內置的底圖參數,從中選擇你心儀的底圖:

圖7

  以上就是本文的全部內容,歡迎在評論區與我們進行討論~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM