本文示例代碼及數據已上傳至個人
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
中全部內置的底圖參數,從中選擇你心儀的底圖:
以上就是本文的所有內容,歡迎在評論區與咱們進行討論~