當前位置:
首頁 > 知識 > 使用Python,GeoJSON和GeoPandas開始地理空間分析

使用Python,GeoJSON和GeoPandas開始地理空間分析

使用Python,GeoJSON和GeoPandas開始地理空間分析

Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。

使用Python,GeoJSON和GeoPandas開始地理空間分析

作為一個本地的紐約客,我每一次去任何紐約以外的地方,如果沒有谷歌地圖,都會一塌糊塗。 我們將谷歌地圖等產品視為理所當然,因為它們非常方便。 Google或Apple Maps等產品建立在地理空間技術基礎之上。 在更大的位置服務的生態系統中,這些技術的核心是位置,交互和角色。

這個領域被稱為地理空間分析。 地理空間分析對具有地理或幾何分量的數據應用統計分析。 在本教程中,我們將使用Python來學習獲取地理空間數據,處理它以及可視化的基礎知識。 更具體地說,我們將做一些美國地理的互動式可視化!

環境設置

本指南是用Python 3.6編寫的。 如果還沒有,請下載Python和Pip。 接下來,您將需要安裝我們將在本教程中使用的多個軟體包。 您可以通過在操作系統上打開終端或命令提示符來執行此操作:

使用Python,GeoJSON和GeoPandas開始地理空間分析

由於我們將以交互方式使用Python,所以使用Jupyter Notebook是充分利用本教程的最佳方式。 按照本安裝指南,一旦您的Jupyter Notebook程序安裝成功並正常運行,請繼續下載此文中的所有數據。 確保您的數據與Jupyter Notebook在相同的目錄,然後我們就可以開始了!

Jupyter快速注意事項

對於那些不熟悉Jupyter Notebook的人,我簡要回顧一下這個教程中特別有用的功能。

在下面的圖片中,您將看到標有1-3的三個按鈕,這對您來說很重要:保存按鈕(1),添加單元格按鈕(2)和運行單元格按鈕(3)。

使用Python,GeoJSON和GeoPandas開始地理空間分析

第一個按鈕(1),用來保存工作。隨時選擇何時保存工作。

接下來,我們有「添加單元格」按鈕(2)。單元格是可以一起運行的代碼塊。這些是jupyter Notebook的構建塊,因為它提供了增量運行代碼的選項,而不必一次運行所有代碼。在本教程中,您將看到代碼行被阻止。每一行代碼應該對應一個單元格。

最後還有「運行單元格」按鈕(3)。 Jupyter Notebook不會自動為您運行代碼;你必須通過點擊這個按鈕來告訴它。與添加按鈕一樣,一旦將本教程中的每個代碼塊寫入單元格,您應該運行它來查看輸出(如果有)。請注意,如果預期有任何輸出,請對比本教程中給出的結果,以確定結果是否正確。請務必隨時運行代碼,因為本教程中的許多代碼塊依賴於前面單元格的運行結果。

介紹

數據通常以幾種基本數據類型的形式出現:字元串,浮點數,整數和布爾值。 然而,地理空間數據使用一組不同的數據類型進行分析。 使用Shapely模塊,我們將審查這些數據類型的不同之處。

Shapely模塊有一個稱為幾何的類,它包含不同的幾何對象。 使用此模塊,我們能導入所需的數據類型:

使用Python,GeoJSON和GeoPandas開始地理空間分析

地理空間分析中最簡單的數據類型是Point數據類型。 Points是表示二維空間中單個位置的對象,或簡單地放置XY坐標。 在Python中,我們使用輸入x和y作為參數的點類來創建點對象:

使用Python,GeoJSON和GeoPandas開始地理空間分析

請注意,當我們列印p1時,輸出為POINT(0 0)。 這表明返回的對象不是我們將在Python中看到的內置數據類型。 我們可以通過詢問Python來解釋這個點是否等價於元組(0,0):

使用Python,GeoJSON和GeoPandas開始地理空間分析

上述代碼由於其類型而返回False。 如果我們列印p1的類型,我們得到一個shapely的Point對象:

使用Python,GeoJSON和GeoPandas開始地理空間分析

接下來,我們有一個多邊形,它是一個二維表面,被存儲為定義外部的一系列點。 由於多邊形由多個點組成,因此,Shapely的多邊形對象將以元組列表作為參數。

使用Python,GeoJSON和GeoPandas開始地理空間分析

奇怪的是,Shapely的多邊形對象不會將一個Shapely的點列表作為參數。 如果我們錯誤地輸入了一個Point,我們會收到一條錯誤消息,提醒我們不支持該數據類型。

數據結構

GeoJSON是用於表示地理對象的格式。 它與常規JSON不同,因為它支持幾何類型,例如:Point,LineString,Polygon,MultiPoint,MultiLineString,MultiPolygon和GeometryCollection。

使用GeoJSON,使可視化瞬間變得更加容易,您將在後面的部分中看到。 這主要是因為GeoJSON允許我們將集合的幾何數據類型存儲在一個中央結構中。

GeoPandas是一個Python模塊,用於通過擴展Python模塊Pandas使用的數據類型來簡化在python中的地理空間數據,以允許對幾何類型進行空間操作。 如果你不熟悉Pandas,請查看其教程。

通常,GeoPandas縮寫為gpd,用於將GeoJSON數據讀入DataFrame。 下面你可以看到我們列印出了五行GeoJSON DataFrame:

使用Python,GeoJSON和GeoPandas開始地理空間分析

就像常規JSON和Pandas數據幀一樣,GeoJSON和GeoPandas具有允許您輕鬆地將在二者間互相轉換的功能。 使用上面的示例數據集,我們可以使用to_json函數將DataFrame轉換為geojson對象:

使用Python,GeoJSON和GeoPandas開始地理空間分析

能夠輕鬆地將GeoJSON從一種格式轉換為另一種格式,使我們處理數據更加自由,無論是分析,可視化還是操縱。

接下來,我們將審查geojsonio,一種用於在瀏覽器上可視化GeoJSON的工具。 使用上面的狀態數據集,我們可以將美國視為一系列具有geojsonio的display方法的多邊形:

使用Python,GeoJSON和GeoPandas開始地理空間分析

運行此代碼後,瀏覽器將打開一個鏈接,顯示如下所示的界面:

使用Python,GeoJSON和GeoPandas開始地理空間分析

在頁面左側,您可以看到GeoJSON顯示並可用於編輯。 如果您放大並選擇幾何對象,您將看到您還可以自定義它:

使用Python,GeoJSON和GeoPandas開始地理空間分析

也許最重要的是,geojsonio有多種共享內容的選項。 可以直接共享鏈接的選項:

使用Python,GeoJSON和GeoPandas開始地理空間分析

並且為了方便大家,保存為GitHub,GitHub Gist,GeoJSON,CSV和各種其他格式的選項使開發人員在決定如何共享或託管內容時具有很大的靈活性。

使用Python,GeoJSON和GeoPandas開始地理空間分析

在我們使用GeoPandas將GeoJSON傳遞給display函數之前看看這個例子。 如果不需要對地理空間進行操縱,我們可以將該文件視為任何其他操作,並將其內容設置為變數:

使用Python,GeoJSON和GeoPandas開始地理空間分析

該格式仍然是display函數的合適參數,因為JSON在技術上是一個字元串。 再次,使用GeoPandas的主要區別在於是否需要進行任何操作。

這個例子只是一個要點,除了閱讀JSON之外,沒有必要做任何事情,所以我們只需直接傳入GeoJSON字元串:

使用Python,GeoJSON和GeoPandas開始地理空間分析

再次,在瀏覽器中打開了一個鏈接,我們完美可視化了曼哈頓的一個位置。

使用Python,GeoJSON和GeoPandas開始地理空間分析

這是一個打包介紹

它介紹了使用Python執行geoSpatial分析。大多數這些技術在R中是可互換的,但Python是地理空間分析的最佳語言之一。其模塊和工具已經由開發人員開發好了,使得過渡到地理空間分析更加容易。

在本教程中,我們可視化了美國的地圖,並在曼哈頓繪製了坐標數據點。可以通過多種方式擴展這些練習,狀態輪廓對於創建多個可視化來比較狀態之間的結果至關重要。

從本教程開始,您不僅可以創建這種可視化,還可以組合我們用於繪製多個狀態中坐標的技術。要了解有關地理空間分析的更多信息,請查看以下資源:

  • GeoJSON

  • OpenStreetMap

  • CartoDB

如果你喜歡這裡介紹的,請在Twitter上@lesleyclovesyou以獲得更多的內容,數據科學漫遊,最重要的是,可以點擊超級可愛的小狗進行retweets。

英文原文:https://www.twilio.com/blog/2017/08/geospatial-analysis-python-geojson-geopandas.html
譯者:ljw

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

測試Windows Subsystem for Linux
詭異的Python整數
機器學習入門課今日9折,機不可失
用Python實現鏈表
魯棒有效的日誌工具:logzero,支持Python2 & Python3

TAG:Python部落 |