本書介紹了為什么發現并量化數據模式對空間數據分析非常重要。你將學會:在數據問題中應用空間關系。使用柵格和矢量圖。使用開源工具和公共數據集為地圖增加信息量。使用 Python 腳本自動化處理地理數據。理解空間數據科學的圖形化表現形式,激發好奇心。
編輯推薦
托布勒的地理的第d一定律告訴我們,所有事物之間都相關,但是距離近的事物比距離遠的關系更密切。但是當我們再看托布勒的第二定律:特定地理區域外部的現象對內部產生影響,就會理解為什么地理學家和數據分析師在數據故事和大規模研究項目中引入位置科學。
本書注重實踐,地理空間專家、數據科學家、地理學家、地質學家,以及其他致力于數據分析和可視化的專業人員都能從中學到空間數據分析的基本知識。
本書作者展示了為什么發現并量化數據模式對空間數據分析非常重要。本書面向對Python結合地理空間分析有興趣的專業人員和業余愛好者。
專家推薦
本書涵蓋了各種數據可視化的問題,每一章都很有價值。通過閱讀本書,我感到提升了使用Python工具解決地理空間數據問題的能力。
Patrick Viafore
Robust Python作者
前言本書是關于如何做地理空間數據分析的入門指南,書中采用的Python 庫和包都針對數據的探索和挖掘做了優化。近年來,隨著物聯網的出現,以及位置數據在本地計算機上的普及,包括地理空間專家、數據科學家、商業分析師、地理學家、地質學家、研究人員、分析師、計算機科學家和統計專家等不同領域的專業人員都在使用帶有內置分析功能的地理信息平臺。他們在探索學習的過程中,往往希望對日常使用的分析工具底層所采用的技術有更深入的了解。圖形化用戶界面的分析工具固然強大,但通過自己編寫Python 代碼來完全定制化或自動化分析結果,不但能提升你的核心技能,也有助于更好地掌握大型平臺和系統的運作原理。開源項目已經無處不在,如今,大多數行業的專業人士可以獲得各種定位數據和公開的數據集。隨著云計算的發展,我們不再需要將大量數據下載到本地計算機,這就意味著,任何擁有互聯網設備的人都有同等的機會獲取數據。本書旨在成為能滿足業內人士需求的資源庫,無論他們身處哪一領域,本書都將成為他們實現目標和達成愿望的指南。我們也鼓勵各種背景的讀者參與地理空間數據分析,為城市規劃、氣候變化研究等各個領域的決策提供支持信息。即使是對于有經驗的數據分析師, 技術往往也有其固有的難度。如果你熟悉Python,會調用QGIS 或者ArcGIS 等類庫,在現成的數據系統上工作,那么即使你不了解其背后運作的工作流,不理解柵格、向量、數學模型等概念,也可以完成工作。但了解這些基礎概念,將有助于你對數據的探索和解釋變得更嚴謹、更深刻。為什么我要寫這本地理空間數據分析與Python 相結合的書?因為我遇到了亟待解決的問題。我在分析電子健康記錄時發現,這些記錄中包含了大量的醫療數據,但可用的人口統計信息卻十分匱乏。而在檢查既有的醫療保健基礎數據時,我發覺定位數據對預測健康結果有著重要的作用。要制定公共衛生政策,我們就必須回答諸如以下這類問題:? 患者所在的社區周邊,在步行范圍內或者便捷的交通沿線上是否有生鮮市場?? 患者所在的社區是否適合步行,治安狀況怎樣?? 患者是否有參與綠地活動的機會?? 高速公路、輸電線和廢物處理廠等設施對周邊社區健康有怎樣的影響?? 如何結合位置數據研究這些關于環境的問題?將這些類型的非空間數據與空間信息相結合,將有助于制作地圖和其他可視化產物,幫助你思考更復雜的問題,探索你周圍的環境,或者地球上你感興趣的其他任何地方。選擇Python 的理由Python 是一種流行的輕量級腳本語言,因其語法十分直觀,所以比大多數編程語言更易于學習,也更能快速上手。而且Python 已經和ArcGIS 和QGIS 等地理信息系統(geographic information system,GIS)有所結合,因此非常適合地理空間數據分析。同時,Python 擁有充滿活力的開源社區,有十分豐富的代碼庫和工具包支持。本書并不是一本Python 入門教材。如果你剛開始接觸Python,需要從基礎開始學習,在本書之外,有很多更為適合的資源。你可以從Matt Harrison 與Theodore Petrou(Packt Publishing)編寫的《Pandas 1.x Cookbook》(第二版)入手,或者參與一些線下面授或在線的課程,比如Dunder Data 提供的Master the Fundamentals of Python(https://oreil.ly/swed0)。盡管我建議你至少掌握一門編程語言,但你可能沒有系統學習的計劃或時間,那也沒關系,本書的目的是讓你掌握并使用公開地理空間數據所構成的龐大的生態系統,并不要求你具備全面的編程能力。書中提供了代碼片段以及對應的分步指導,我還將為你介紹本書未涵蓋的各類外部資源,以便你可以實踐所學的知識。當你逐漸熟悉大型庫或包中的一兩個函數后,你一定會更自信地去探索更加廣闊的領域。本書的組織結構我們將從介紹幾個關鍵GIS 概念開始逐步深入,隨著內容的推進,我會循序漸進地引入Python 的學習,而不是默認你具有豐富的編程或地理信息數據分析的專業知識。本書采用的資源都是開源的,大多數使用Python 完成,開發人員免費分享這些源代碼,其中有些還包含開源社區其他成員的貢獻。我會盡我所能確保本書提供的資源無需繁瑣的訂閱服務即可使用,所有可能產生的費用,無論大小,都會在本書中明確標注,方便你做出決定。我著重強調開源,也并不意味著我不支持商業化的解決方案,我只是希望可以盡量減少學習中的阻力,集中圍繞重要的問題開展有意義的分析,把好鋼用在刀刃上。本書涉及許多開源工具、數據和各種數據集,其中一些資源你可能暫時無法獲取。本書的結構不同于典型的技術書籍(尤其是針對Python 的書籍),沒有采用線性組織方式。完成數據分析任務的方法多種多樣,你可能在集成開發環境(IDE)中更容易獲得靈感,也可能更喜歡在終端或控制臺中工作。任何一本書都不可能涵蓋Python 所有包和庫的每個細節,你可能已經對某個特定的工具或庫很熟悉,但你最常用的函數并沒有收錄在本書中,這也無傷大雅,我只希望你能對這些都有基本的感性認識,便于你繼續深入探索更豐富的功能。本書面向的讀者對象本書介紹的這個領域對我也是一次挑戰:有些Python 程序員剛開始接觸地理空間分析,有些地理空間從業者剛開始學習Python,那么我應該如何寫一本能兼顧這兩類讀者需求的書?我決定化繁為簡,從激發興趣開始。我的目標不是在任何一個領域拓展你的專業知識,而是讓大家一起專注于學習工具的使用和最佳實踐。在本書結束時,我希望所有讀者都有足夠的自信,能夠熟練并單獨進行地理信息數據分析。為此,在我教授每一種工具和技術時,希望你能親自動手,安裝必要的工具,并使用Jupyter 或Google Colab notebook 運行代碼。而且我希望你不僅僅止步于此,我還提供了大量不同的經驗,邀請你繼續探索。一些關于工具的技巧世上不存在絕對可靠的代碼,所以你需要學習如何排除代碼故障,而這正是數據女神發明Stack Overflow(https://stackoverflow.com)的原因。但請注意,這些網站提供的答案不一定是最佳的,甚至不一定是對的,請你仔細甄別。為了更好地提供幫助,我選擇了有著穩定GitHub 來源的Python 包,希望可以獲得更可靠的支持。話雖如此,但我還是有一些建議,希望有助于你安裝以及熟悉本書涉及的工具:? 請盡量創建Python 虛擬環境,以便你控制Python 版本以及相關依賴。? 如果你不使用Conda 或Mamba 環境,請時刻關注你使用的Python 和其他軟件或包的版本。代碼錯誤最常見的原因就是版本問題。? 不確定你的pip install 是否運行成功?請運行pip list。所有已經安裝的包都會顯示在會話窗口的運行結果中。? 不要懼怕閱讀文檔!閱讀教學材料是重要的學習技能,也是排除故障的關鍵。找到你的學習路徑本書前兩章介紹了一些初入地理空間分析領域時需要了解的基礎概念和技能,在你未來的深入研究中會用到它們。此后的章節里,我們將展開介紹具體工具,并通過實戰操作幫助你熟練運用。第3 章介紹QGIS,第4 章介紹Google Earth Engine 和其他云端的分析工具。第5 章介紹OpenStreetMap,第6 章講解ArcGIS Python API,第7 章介紹如何使用GeoPandas 庫做空間統計。第8 將暫停介紹工具,開始講解數據清洗,學習如何從有價值的數據中去除難以避免的噪聲數據。之后的第9 章將介紹一個非常有用的資源:地理空間數據抽象庫(Geospatial Data Abstraction Library,GDAL)。最后,在第10 章中,我們會通過三個實踐項目,將你在本書中所學的全部內容結合起來,通過研究氣候變化這一緊迫的全球問題,展現你的地理空間數據分析能力。在本書末尾,你可以找到大量工具、包和數據資源的鏈接,以及本書所使用的資料來源和推薦閱讀的參考資料,幫助你繼續學習之旅。排版約定本書采用以下排版約定。斜體(Italic)表示新術語、URL、電子郵件地址、文件名和文件擴展名。等寬字體(Constant Width)表示程序清單,在段落內表示程序元素,例如變量、函數名稱、數據庫、數據類型、環境變量、語句和關鍵字。粗體等寬字體(Constant width bold)表示應由用戶原封不動輸入的命令或其他文本。斜體等寬字體(Constant width italic)表示應該替換成用戶提供值的文本,或者由上下文決定的值。使用代碼示例補充材料(代碼示例、練習等)可從https://github.com/datamongerbonny/geopynotebooks.git 下載。與本書相關的技術問題,或者在使用代碼示例上有疑問,請發電子郵件到errata@oreilly.com.cn。本書是要幫你完成工作的。一般來說,如果本書提供了示例代碼,你可以把它用在你的程序或文檔中。除非你使用了很大一部分代碼,否則無需聯系我們獲得許可。比如,用本書的幾個代碼片段寫一個程序就無需獲得許可,銷售或分發OReilly 圖書的示例集則需要獲得許可;引用本書中的示例代碼回答問題無需獲得許可,將書中大量的代碼放到你的產品文檔中則需要獲得許可。我們很希望但并不強制要求你在引用本書內容時加上引用說明。引用說明一般包括書名、作者、出版社和ISBN,例如:Python for Geospatial Data Analysis by Bonny P. McClain (OReilly). Copyright 2023 Grapheme Consulting, Inc., 978-0-098-10479-5。如果你覺得自己對示例代碼的使用超出了上述許可范圍,請通過permissions@oreilly.com 與我們聯系。OReilly 在線學習平臺(OReilly Online Learning)近40 年來,OReilly Media 致力于提供技術和商業培訓、知識和卓越見解,來幫助眾多公司取得成功。公司獨有的專家和改革創新者網絡通過OReilly 書籍、文章以及在線學習平臺,分享他們的專業知識和實踐經驗。OReilly 在線學習平臺按照您的需要提供實時培訓課程、深入學習渠道、交互式編程環境以及來自OReilly 和其他200 多家出版商的大量書籍與視頻資料。更多信息,請訪問網站:https://www.oreilly.com/。聯系我們任何有關本書的意見或疑問,請按照以下地址聯系出版社。美國:OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國:北京市西城區西直門南大街2 號成銘大廈C 座807 室(100035)奧萊利技術咨詢(北京)有限公司勘誤、示例和其他信息可訪問https://oreil.ly/python-for-geo-data 獲取。對本書的評論或技術疑問,可以發電子郵件到errata@oreilly.com.cn。欲了解本社圖書和課程的新聞和信息,請訪問我們的網站http://oreilly.com。我們的LinkedIn:https://linkedin.com/company/oreilly-media。我們的Twitter:https://twitter.com/oreillymedia。我們的YouTube:https://youtube.com/oreillymedia。致謝我要感謝眾多地理空間專業的學生與學者,他們為我提供了指導、建議和疑問,而這些也是成書的動力。作為一本既能入門又能為有經驗者提供指導的書,大家對此書的熱情讓我倍感自豪。我十分感激田納西大學諾克斯維爾分校地理系(the Department of Geography atthe University of Tennessee, Knoxville)助理教授吳秋生的大量工作與支持。吳博士對地理空間社區的貢獻是無可比擬的,正是他在2021 年GeoPython 研討會(GeoPython Conference 2021)上有關GEE 和geemap(https://oreil.ly/X4Pv6)工作坊的演講使我了解到GEE 和Python 集成的重要價值,一年后我也有幸登上了同樣的研討會講壇。我還要感謝來自Dunder Data(https://www.dunderdata.com)的Python 和數據探索專家Ted Petrou。Ted 提供的實時資源和實惠的工作坊,填補了Python 教學與工作環境中的Python 實踐間的空白。SpatialThoughts(https://oreil.ly/3eJ0c)的Ujaval Gandhi 長期致力于介紹地理空間平臺和技巧,無論對于注冊學員還是獨立學習者,他都傾囊相授,我也從他那里獲益良多。還要由衷的感謝GeospatialConnections(https://oreil.ly/SeeNU)社區的各位版主:Bruce Buxton,Juliana McMillan-Wilhoit,Tim Nolan 和Kendrick Faison。感謝你們無私的幫助,在社區中與各位同行的交流讓我增長了不少見識。感謝我的丈夫Steve,他給予的支持不只是幽默和陪伴,還有沙拉和小熊軟糖。還要感謝我的兩個兒子Harrison 和Ryland,像北極星一般為我照亮前路,不斷給我智慧、魔力,以及一切的動力。
Bonny P. McClain博士是美國國家出版俱樂部(National Press Club)、500女性科學家(500 Women Scientists),以及城市和地區信息系統協會(Urban and Regional Information Systems Association, URISA)的成員,還曾經是Tableau 演講局(Tableau Speaker Bureau)和美國調查記者編輯協會(Investigative Reporters and Editors,IRE)成員,因此有大量機會參與衛生政策制定和衛生經濟學研討。
目錄
前言 1
第1 章 地理空間分析入門 . 11
1.1 數據普及12
1.2 提出數據問題 .15
1.3 空間數據科學的概念框架 18
1.3.1 地圖投影 .20
1.3.2 矢量數據:用對象表示地點 .24
1.3.3 柵格數據:了解空間關系 25
1.4 數據集的選擇和評估 27
1.5 總結 .28
第2 章 空間分析的基本設施 .31
2.1 探索QGIS 中的空間數據 .32
2.1.1 安裝配置QGIS 32
2.1.2 將底圖添加到QGIS 33
2.1.3 探索數據資源 36
2.2 可視化紐約市的環境投訴 37
2.2.1 上傳數據到QGIS 37
2.2.2 設置項目CRS 41
2.2.3 使用查詢構建器過濾數據 42
2.3 人口數據可視化 43
2.3.1 QGIS Python 控制臺 .45
2.3.2 加載柵格層 48
2.3.3 紅線區:反映不平等.49
2.4 小結 .53
第3 章 QGIS:探索用于空間分析的PyQGIS 和
原生算法 .55
3.1 探索QGIS 工作區:舊金山的綠化和不平等現象 56
3.1.1 Python 插件 57
3.1.2 訪問數據 .60
3.1.3 使用圖層面板 62
3.1.4 處理研究問題 65
3.2 WFS:識別馬薩諸塞州的環境威脅 66
3.2.1 訪問數據 .66
3.2.2 探索屬性 .69
3.2.3 使用迭代器 71
3.2.4 圖層樣式 .74
3.3 在Python 控制臺中使用處理算法 74
3.3.1 使用算法 .75
3.3.2 按表達式提取 77
3.3.3 緩沖區 78
3.3.4 按位置提取 79
3.4 總結 .81
第4 章 云上的地理空間分析:Google Earth Engine
以及其他工具 .83
4.1 配置Google Earth Engine .85
4.2 使用GEE 控制臺和geemap 86
4.2.1 創建Conda 環境 .88
4.2.2 打開Jupyter Notebook .89
4.2.3 安裝geemap 和其他包 .89
4.3 geemap 概覽 92
4.3.1 圖層和工具 93
4.3.2 底圖 95
4.4 探索Landsat 9 影像集 96
4.5 使用光譜帶 97
4.6 國土覆蓋數據庫底圖 101
4.6.1 訪問數據 102
4.6.2 建立自定義圖例 104
4.7 Leafmap:Google Earth Engine 的代用品 .106
4.8 總結 109
第5 章 OpenStreetMap:使用OSMnx 訪問
地理空間數據 111
5.1 OpenStreetMap 的概念模型 112
5.1.1 標簽 . 112
5.1.2 多重圖 114
5.2 安裝OSMnx . 115
5.3 選擇一個地點 116
5.4 了解變量和參數 .120
5.5 計算出行時間 122
5.6 OSMnx 中的基本統計度量指標 .125
5.6.1 迂回性 126
5.6.2 路網分析:法國巴黎的迂回性 127
5.6.3 中間向心性 .129
5.6.4 網絡類型 131
5.7 定制地區地圖 133
5.7.1 通過地點生成幾何圖像 .133
5.7.2 通過地址生成幾何圖像 .134
5.8 在QGIS 中使用QuickOSM .141
5.9 總結 141
第6 章 ArcGIS 的Python API 143
6.1 安裝配置.143
6.1.1 ArcGIS Python API 中的可用模塊 143
6.1.2 安裝ArcGIS Pro144
6.1.3 環境設置 145
6.1.4 安裝依賴 146
6.2 連接到ArcGIS Python API 147
6.2.1 以匿名用戶身份連接到ArcGIS Online .147
6.2.2 使用證書連接到ArcGIS 用戶賬戶 .147
6.3 探索圖像層:城市熱島圖 .148
6.4 柵格函數.153
6.5 探索圖像屬性 158
6.5.1 圖像提升 163
6.5.2 比較位置的不同時間點數據 164
6.5.3 過濾圖層 166
6.6 總結 172
第7 章 GeoPandas 和空間統計 173
7.1 安裝GeoPandas 173
7.2 使用GeoJSON 文件 .174
7.3 創建GeoDataFrame 176
7.4 使用美國人口普查數據:洛杉磯(LA)人口密度地圖 182
7.4.1 通過人口普查API 和FTP 訪問區域和人口數據 .183
7.4.2 在瀏覽器中通過人口普查API 訪問數據 .187
7.4.3 使用數據配置文件 190
7.4.4 創建地圖 191
7.5 總結 195
第8 章 數據清洗 . 197
8.1 檢查缺失數據 197
8.1.1 上傳到Colab 198
8.1.2 空值和非空值 .201
8.1.3 數據類型 202
8.1.4 元數據 202
8.1.5 匯總統計 204
8.1.6 替換缺失值 .209
8.2 使用Missingno 可視化數據 .209
8.3 映射模式.213
8.3.1 緯度和經度 .213
8.3.2 shapefile 214
8.4 總結 217
第9 章 探索地理空間數據抽象庫(GDAL) 219
9.1 安裝配置GDAL .220
9.1.1 安裝Spider 220
9.1.2 安裝GDAL .221
9.2 在命令行中使用GDAL 221
9.3 使用GDAL 編輯數據 223
9.3.1 Warp 函數 .225
9.3.2 獲取輸入光柵波段 225
9.4 在Python 中使用GDAL 庫 227
9.4.1 初識Spyder .227
9.4.2 在Spyder 中瀏覽數據 229
9.4.3 在GDAL 中轉換文件 230
9.4.4 在GDAL 中使用Binmask 232
9.4.5 完整腳本 235
9.5 探索開源光柵文件 .236
9.5.1 USGS EarthExplorer 236
9.5.2 Copernicus Open Access Hub .240
9.5.3 Google Earch Engine 240
9.6 總結 242
第10 章 使用Python 測量氣候數據 245
10.1 案例1:使用降水數據驗證氣候預測 246
10.1.1 目標 246
10.1.2 下載數據 246
10.1.3 使用Xarray 247
10.1.4 合并2015 年和2021 年的數據集 249
10.1.5 生成圖像 252
10.1.6 其他探索 256
10.2 案例2:使用WTSS Series 分析亞馬遜雨林中的森林砍伐和碳排放 257
10.2.1 安裝設置 257
10.2.2 創建地圖 260
10.2.3 分析 262
10.2.4 調優 262
10.3 案例3:使用Forest at Risk 對瓜德羅普島的森林砍伐建模和預測 268
10.3.1 安裝配置 269
10.3.2 數據圖像化272
10.3.3 數據抽樣 273
10.3.4 圖像關聯 276
10.3.5 使用iCAR 模型對森林被砍伐的概率建模 278
10.3.6 馬爾科夫鏈蒙特卡洛方法(MCMC)距離矩陣 279
10.3.7 使用predict_raster_binomial_iCAR 對森林被砍伐的概率建模 .281
10.3.8 碳排放 .284
10.3.9 分析 285
10.4 總結 285
附錄 推薦閱讀 . 287
參考資料 291