地理資料視覺化的神奇組合:Python和Geopandas

华为云开发者联盟發表於2024-05-15

本文分享自華為雲社群《Python與Geopandas:地理資料視覺化與分析指南》,作者:檸檬味擁抱。

地理資料視覺化在許多領域都是至關重要的,無論是研究地理空間分佈、城市規劃、環境保護還是商業決策。Python語言以其強大的資料處理和視覺化庫而聞名,而Geopandas作為其地理資訊系統(GIS)領域的擴充套件,為處理地理空間資料提供了方便的工具。本文將介紹如何使用Python和Geopandas進行地理資料視覺化,並提供實用的程式碼示例。

1. 準備工作

在開始之前,確保已經安裝了Python和Geopandas庫。可以使用pip來安裝Geopandas:

pip install geopandas

2. 載入地理資料

首先,我們需要載入地理資料。Geopandas支援多種地理資料格式,包括Shapefile、GeoJSON、Geopackage等。在本示例中,我們將使用一個Shapefile格式的地圖資料。

import geopandas as gpd

# 讀取Shapefile格式的地圖資料
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

3. 資料探索與處理

載入資料後,我們可以進行一些基本的探索和處理,例如檢視資料的前幾行、資料型別等。

# 檢視資料的前幾行
print(world.head())

# 檢視資料的列名
print(world.columns)

# 檢視資料的幾何型別
print(world.geom_type)

4. 地理資料視覺化

接下來,讓我們使用Matplotlib庫將地理資料視覺化出來。

import matplotlib.pyplot as plt

# 繪製地圖
world.plot()
plt.show()

5. 自定義地圖樣式

你也可以自定義地圖的樣式,例如更改顏色、新增標籤等。

# 自定義地圖樣式
world.plot(color='lightblue', edgecolor='black')
plt.title('World Map')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.show()

6. 新增資料

除了繪製地圖外,我們還可以將其他資料新增到地圖上,以提供更多的資訊。

# 新增其他資料
cities = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))
world.plot()
cities.plot(marker='o', color='red', markersize=5)
plt.show()

7. 空間分析與查詢

Geopandas不僅可以用於地理資料的視覺化,還可以進行空間分析和查詢。例如,我們可以透過空間查詢來找出某個地點附近的其他地點。

from shapely.geometry import Point

# 建立一個點物件代表某個地點的經緯度
point = Point(-74.006, 40.7128)

# 空間查詢,找出距離該點最近的城市
nearest_city = cities[cities.distance(point).idxmin()]
print("最近的城市是:", nearest_city['name'])

8. 地圖疊加與分組

在地圖視覺化中,有時候需要將不同的地理資料疊加在一起,並根據某些條件進行分組顯示。

# 根據大陸進行分組
world_grouped = world.groupby('continent').agg({'geometry': 'union'})
world_grouped.plot()
plt.title('World Map Grouped by Continent')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.show()

9. 更復雜的地理資料操作

除了上述基本操作外,Geopandas還支援更復雜的地理資料操作,如空間緩衝區、空間疊加、地理拓撲關係分析等。

# 空間緩衝區示例
buffered_area = world.geometry.buffer(5)
buffered_area.plot()
plt.title('Buffered World Map')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.show()

13. 互動式地理資料視覺化

除了靜態的地理資料視覺化外,還可以使用互動式工具來進行地理資料的探索和展示。Bokeh和Folium是兩個常用的Python庫,可以實現互動式地理資料視覺化。

import folium

# 建立一個地圖物件
m = folium.Map(location=[40.7128, -74.006], zoom_start=10)

# 新增城市標記
for idx, row in cities.iterrows():
    folium.Marker([row['latitude'], row['longitude']], popup=row['name']).add_to(m)

# 顯示地圖
m

14. 多圖層疊加與控制

在互動式地圖中,可以新增多個圖層,並提供控制選項,以便使用者自定義顯示內容。

# 建立一個地圖物件
m = folium.Map(location=[40.7128, -74.006], zoom_start=10)

# 新增世界地圖圖層
folium.GeoJson(world).add_to(m)

# 新增城市圖層
city_layer = folium.FeatureGroup(name='Cities')
for idx, row in cities.iterrows():
    folium.Marker([row['latitude'], row['longitude']], popup=row['name']).add_to(city_layer)
city_layer.add_to(m)

# 新增圖層控制
folium.LayerControl().add_to(m)

# 顯示地圖
m

15. 資料整合與視覺化應用

透過將地理資料視覺化與其他資料整合,可以實現更豐富的應用場景。例如,結合人口資料、經濟指標等資訊,進行更深入的地理資料分析和視覺化展示。

# 讀取人口資料
population_data = pd.read_csv("population.csv")

# 根據城市名稱將人口資料與城市資料合併
cities_with_population = pd.merge(cities, population_data, how='left', on='name')

# 在地圖上繪製城市,並根據人口數量調整標記大小
m = folium.Map(location=[40.7128, -74.006], zoom_start=4)
for idx, row in cities_with_population.iterrows():
    folium.CircleMarker(location=[row['latitude'], row['longitude']], radius=row['population'] / 100000,
                        fill_color='blue', fill_opacity=0.6).add_to(m)
m

16. 地理資料分析與視覺化案例

讓我們透過一個案例來演示如何利用Python和Geopandas進行地理資料分析和視覺化。假設我們有一組關於世界各國GDP和人口的資料,我們想要分析各國的經濟和人口情況,並將結果視覺化出來。

# 讀取GDP和人口資料
gdp_data = pd.read_csv("gdp_data.csv")
population_data = pd.read_csv("population_data.csv")

# 將資料合併為一個DataFrame
world_data = pd.merge(world, gdp_data, how='left', left_on='name', right_on='Country Name')
world_data = pd.merge(world_data, population_data, how='left', left_on='name', right_on='Country Name')

# 計算人均GDP
world_data['GDP per capita'] = world_data['GDP (current US$)'] / world_data['Population']

# 繪製人均GDP地圖
fig, ax = plt.subplots(1, 1, figsize=(10, 6))
world_data.plot(column='GDP per capita', cmap='OrRd', linewidth=0.8, ax=ax, edgecolor='0.8', legend=True)
ax.set_title('World GDP per Capita')
plt.show()

17. 分析結果

透過上述程式碼,我們可以得到世界各國的人均GDP地圖,從中可以看出不同國家之間的經濟發展水平差異。接下來,我們可以進一步分析人口密度、地區發展不平衡等問題,並提出相應的政策建議。

# 計算人口密度
world_data['Population Density'] = world_data['Population'] / world_data.geometry.area

# 繪製人口密度地圖
fig, ax = plt.subplots(1, 1, figsize=(10, 6))
world_data.plot(column='Population Density', cmap='Blues', linewidth=0.8, ax=ax, edgecolor='0.8', legend=True)
ax.set_title('World Population Density')
plt.show()

18. 結論與展望

透過本文的介紹和案例演示,我們瞭解瞭如何使用Python和Geopandas進行地理資料的分析和視覺化。地理資料分析和視覺化可以幫助我們更深入地理解地球上的空間分佈和特徵,從而為決策提供更有力的支援。

未來,隨著資料採集和處理技術的不斷髮展,地理資料分析和視覺化將扮演越來越重要的角色,為人類社會的可持續發展和環境保護提供更多有益的資訊和洞見。

感謝閱讀本文,希望對你有所啟發和幫助!

總結

本文深入探討了如何利用Python和Geopandas進行地理資料視覺化和分析,並提供了豐富的程式碼示例和案例演示。以下是本文的主要總結:

  1. 準備工作:在開始之前,需要確保已經安裝了Python和Geopandas庫,可以使用pip來安裝Geopandas。

  2. 載入地理資料:Geopandas支援多種地理資料格式,包括Shapefile、GeoJSON、Geopackage等,可以使用gpd.read_file()函式載入資料。

  3. 資料探索與處理:載入資料後,可以進行一些基本的探索和處理,如檢視資料的前幾行、列名、資料型別等。

  4. 地理資料視覺化:利用Matplotlib庫可以將地理資料視覺化出來,透過調整樣式和新增標籤等方式可以定製地圖。

  5. 空間分析與查詢:Geopandas支援空間分析和查詢,如空間查詢、空間緩衝區等操作。

  6. 資料儲存與匯出:可以使用Geopandas將地理資料儲存為Shapefile、GeoJSON等格式的檔案。

  7. 資料投影與座標轉換:Geopandas支援資料投影和座標轉換,可以將地圖投影為不同的投影方式。

  8. 互動式地理資料視覺化:透過Bokeh和Folium等庫可以實現互動式地理資料視覺化,增強資料探索和展示的互動性。

  9. 地理資料分析與視覺化案例:透過案例演示,展示瞭如何利用Python和Geopandas分析世界各國的經濟和人口情況,並將結果視覺化出來。

  10. 結論與展望:地理資料分析和視覺化在各個領域都有著廣泛的應用,隨著技術的發展,將為我們提供更多有益的資訊和洞見。

透過本文的學習,讀者可以掌握使用Python和Geopandas處理和視覺化地理資料的基本方法,為實際應用提供支援和指導。

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章