地理空間資料分析在資料科學領域應用廣泛,能揭示資料背後的地理位置關聯性。本文使用 DuckDB 結合 Python 程式函式庫,示範如何分析美國機場資料集。首先,利用 DuckDB 的空間擴充套件功能,結合 Shapely 函式庫進行幾何資料轉換,並使用 Folium 函式庫在地圖上視覺化機場位置,實作地理空間資料的有效展示。接著,運用描述性統計方法,分析各州的機場數量分佈,並使用 SQL 查詢搭配 Python 程式碼進行資料聚合和排序。最後,使用 Matplotlib 函式庫繪製圓餅圖和長條圖,比較不同視覺化方式的優缺點,並根據資料特性選擇最佳呈現方式,例如在呈現各州機場數量時,除了百分比之外,也加入實際數量標示,使圖表資訊更完整。
探索美國機場資料:玄貓的地理空間與描述性分析之旅
在資料分析的世界裡,地理空間資料往往隱藏著豐富的資訊。今天,玄貓(BlackCat)將帶領大家深入探索美國機場資料集,利用 DuckDB 的空間擴充套件和描述性分析,揭示資料背後的故事。
從 Folium 到 DuckDB:玄貓的資料探索之路
首先,我們回顧一下之前學到的技能:
- Folium 地圖展示:利用 Folium 函式庫,我們可以在地圖上視覺化機場的位置。
- 多樣圖資整合:Folium 支援多種圖資,讓地圖呈現更豐富的資訊。
- 標記機場:在地圖上使用標記,清晰呈現每個機場的位置。
- DuckDB 空間擴充套件:DuckDB 的空間擴充套件讓我們能夠執行地理空間查詢。
- Shapely 幾何轉換:使用 Shapely 函式庫將經緯度轉換為 Point 資料型別,方便 DuckDB 進行空間分析。
- GeoDataFrame 展示:利用 GeoDataFrame 物件,更有效地展示機場位置。
- 鄰近機場搜尋:透過經緯度和距離,找出鄰近的機場。
掌握了這些技能,我們就能更深入地探索機場資料,發現更多有趣的資訊。
描述性分析:解鎖資料背後的秘密
地理空間分析只是起點,描述性分析能讓我們更瞭解資料的本質。透過描述性分析,我們可以回答以下問題:
- 各州機場數量:哪個州擁有最多的機場?
- 機場間航班數量:哪些機場之間的航班最頻繁?
- 每週航班數量:一週中哪幾天航班數量較少?
- 每日最佳飛行時間:一天中哪個時段最不容易遇到航班延誤?
- 取消航班最多的航空公司:哪家航空公司的航班取消率最高?
- 延遲航班最多的航空公司:哪家航空公司的航班延遲率最高?
接下來,玄貓(BlackCat)將一步步帶領大家找到這些問題的答案。
各州與城市機場分佈:玄貓的資料洞察
讓我們先從簡單的開始,找出各州與城市的機場分佈。以下程式碼可以將機場按照州和城市排序:
df_city_state = conn.execute("""
SELECT
*
FROM
airports
ORDER BY
STATE,
CITY
""").df()
df_city_state
執行這段程式碼後,我們得到一個 DataFrame,其中包含按州和城市分組的機場詳細資訊。
為了更方便地查詢,我們可以將 STATE 和 CITY 設定為 MultiIndex:
df_city_state.set_index(['STATE','CITY'], inplace = True)
df_city_state
現在,我們可以輕鬆地使用 loc[] 索引器來查詢特定州或城市的機場。例如,要找出加州(CA)的所有機場,只需輸入:
df_city_state.loc['CA']
若要尋找舊金山(San Francisco)的機場,則輸入:
df_city_state.loc[('CA','San Francisco')]
透過 MultiIndex,我們可以快速定位到特定地點的機場資訊。
各州機場總數:玄貓的資料統計
接下來,讓我們統計各州的機場總數,並以降序排列:
df_airports_state = conn.execute("""
SELECT
STATE,
count(*) as COUNT
FROM
airports
GROUP BY
STATE
ORDER BY
Count DESC
""").df()
df_airports_state.head()
這段程式碼會回傳一個 DataFrame,其中包含各州的機場數量。我們可以透過 head() 函式檢視前五個州。
為了更直觀地呈現資料,我們可以將其繪製成圓餅圖。
import matplotlib.pyplot as plt
import seaborn
palette_color = seaborn.color_palette('pastel')
plt.figure(figsize = (7, 7))
plt.pie(df_airports_state['COUNT'],
labels = df_airports_state['STATE'],
colors = palette_color,
autopct = '%.0f%%',)
plt.legend(df_airports_state['STATE'], loc = "best")
然而,由於州數量眾多,圓餅圖可能顯得雜亂。為了改善視覺效果,我們可以只顯示機場數量最多的前十個州:
SELECT
STATE,
count(*) as COUNT
FROM
airports
GROUP BY
STATE
ORDER BY
Count DESC
LIMIT 10
重新繪製圓餅圖後,圖表會更加清晰。
但玄貓(BlackCat)認為,圓餅圖的重點應該是呈現各州機場的具體數量,而非百分比。因此,我們可以定義一個 fmt() 函式來格式化圓餅圖的標籤:
# total number of airports
total = df_airports_state['COUNT'].sum()
def fmt(x):
return '{:.1f}%\n({:.0f} airports)'.format(x, total * x / 100)
palette_color = seaborn.color_palette('pastel')
plt.figure(figsize = (7, 7))
plt.pie(df_airports_state['COUNT'],
labels = df_airports_state['STATE'],
colors = palette_color,
autopct = fmt)
plt.legend(df_airports_state['STATE'], loc = "best")
現在,圓餅圖會顯示每個州機場的百分比和實際數量。
當然,圓餅圖並非呈現資料的唯一方式。有些人認為圓餅圖存在一些問題。因此,玄貓(BlackCat)也提供另一種選擇:長條圖。
# create the bar chart
plt.bar(df_airports_state['STATE'],
df_airports_state['COUNT'],
color='skyblue')
plt.xlabel('State')
plt.ylabel('Number of Airports')
plt.title('Top 10 States with Most Airports')
plt.xticks(rotation = 45)
長條圖能更清晰地比較各州之間的機場數量差異。
更多航班資料探索:玄貓的下一步
除了機場數量,我們還可以探索更多航班相關的資料,例如:
- 各機場出發航班數量
- 起訖機場組合的航班數量
在接下來的文章中,玄貓(BlackCat)將會探討這些資料,揭示更多關於航班的秘密。
總結來說,透過地理空間分析和描述性分析,我們可以從美國機場資料集中獲得豐富的資訊。從 Folium 地圖展示到 DuckDB 空間查詢,再到 Matplotlib 資料視覺化,每個環節都扮演著重要的角色。希望這篇文章能幫助大家更瞭解如何利用資料分析工具,探索資料背後的故事。