Vương quốc Anh choropleth bản đồ Python

Nếu bạn đã bắt đầu thực hiện một số thao tác trực quan hóa dữ liệu với Matplotlib và Pandas, nhưng đang tìm kiếm bước đơn giản tiếp theo để bắt đầu với dữ liệu địa lý, thì tôi hiểu rồi. Tôi đã từng ở đó. Trên thực tế, tôi đã dành hàng giờ để xem qua các hướng dẫn trực tuyến để tìm gói dễ dàng nhất để bắt đầu tạo bản đồ [cụ thể là choropleth]. Và trong khi có rất nhiều lựa chọn để lựa chọn, cuối cùng tôi đã chọn Geopandas là rào cản gia nhập thấp nhất

Geopandas rất tuyệt, vì nó giống như Pandas [nhưng sử dụng dữ liệu địa lý từ những thứ như tệp hình dạng]. Khung dữ liệu Geopandas rất giống với khung dữ liệu Pandas, vì vậy cả hai thường hoạt động tốt. Trên hết, Geopandas cho phép bạn tạo các bản đồ choropleth nhanh chóng, độc lập mà không cần nhiều phụ thuộc khác [và không có quá nhiều dòng mã. ]

Đây là bản xem trước của những gì chúng tôi sẽ thực hiện

Đó là Luân Đôn. Được tạo bằng Python

Bên cạnh đó, có rất nhiều cách tuyệt vời để tạo bản đồ [đáng chú ý là Datawrapper vừa thêm trình bao bọc GeoJson để tải bản đồ tùy chỉnh của riêng bạn]. Không có một kích thước phù hợp với tất cả. Tuy nhiên, hầu hết các dịch vụ này đều có một số hạn chế [chẳng hạn như không thể tải xuống tệp dưới dạng svg. Ngoài ra, tạo bản đồ bằng Python mang lại cho bạn một số lợi ích độc đáo

  • Khả năng tái tạo — luôn là một điểm bán hàng mạnh mẽ với Python, nhưng đặc biệt là để tạo các biểu đồ siêu nhanh. Hướng dẫn này sẽ đơn giản hóa quá trình tạo bản đồ nhiều nhất có thể [sử dụng các biến toàn cầu, làm sạch, v.v.] để lần sau khi bạn muốn tạo bản đồ, bạn chỉ cần thay đổi tệp csv [giả sử đó là cùng một vị trí địa lý]
  • Kiểm soát tối đa — tùy chỉnh, tải xuống ở bất kỳ định dạng nào bạn muốn, bạn thực hiện cuộc gọi. Mặc dù có thể mất một số thao tác với mã, nhưng Matplotlib rất mạnh mẽ
  • Rất nhiều bản đồ — nếu bạn cần trực quan hóa cùng một bản đồ với nhiều biến số [nhiều bản đồ nhỏ?] hoặc bản đồ thể hiện sự thay đổi theo thời gian, thì gói mã này trong vòng lặp for là một cách thông minh [tôi sẽ trình bày . Trình tạo biểu đồ có giao diện GUI rất tuyệt, nhưng thường không tốt lắm trong việc tự động hóa các tác vụ. Trăn rất tốt
  • Không cần kỹ năng thiết kế - tốt, hầu như không cần kỹ năng thiết kế. Một con mắt để thiết kế dữ liệu tốt là hữu ích. Nhưng không cần kỹ năng Adobe Illustrator hoặc Photoshop

Ok, chúng ta hãy làm điều này. Đây là những gì bạn sẽ cần. Tôi sử dụng Máy tính xách tay Jupyter để chứa tất cả mã [mà tôi thực sự khuyên dùng để bạn có thể xem trước kết xuất], nhưng bạn thì có

  • gấu trúc
  • gấu trúc
  • Matplotlib

Đó là nó

Lấy dữ liệu

Hãy lấy một số dữ liệu vào Notebook của chúng tôi. Vì tôi hiện đang sống ở Luân Đôn nên tôi sẽ lập bản đồ Luân Đôn theo phường địa phương [cấp quận]. Kho dữ liệu Luân Đôn thực hiện rất tốt việc công khai nhiều dữ liệu và có thể truy cập được, đồng thời tôi tìm thấy trang này có nhiều tệp hình dạng với các mức độ chi tiết khác nhau. Đẹp

Nhấp vào → tải xuống → Lưu dưới dạng → Di chuyển đến thư mục cục bộ của sổ ghi chép. đóng đinh nó

Nhưng shapefile chỉ là một lớp dữ liệu. Điều này sẽ giúp vẽ bản đồ, nhưng nếu chúng tôi muốn liên kết dữ liệu với nó, chúng tôi cũng sẽ cần một bộ dữ liệu khác. Quay lại Kho dữ liệu Luân Đôn. hãy tải xuống bộ dữ liệu hồ sơ quận London dưới dạng csv [đã được làm sạch trước và gọn gàng]. Tệp csv này có rất nhiều cột mà chúng ta có thể sử dụng làm biến để trực quan hóa

Bây giờ cả hai bộ dữ liệu đã sẵn sàng hoạt động, tôi quay lại Notebook Jupyter của mình. Thời gian để tải trong. shp và. tệp csv

# set the filepath and load in a shapefilefp = “datasets/geo-data/gis-boundaries-london/ESRI/London_Borough_Excluding_MHW.shp”map_df = gpd.read_file[fp]# check data type so we can see that this is not a normal dataframe, but a GEOdataframemap_df.head[]

Bây giờ, hãy xem trước bản đồ của chúng ta trông như thế nào khi không có dữ liệu trong đó

map_df.plot[]

Thật tuyệt, đó là Luân Đôn

Và sau đó hãy tải vào tệp dữ liệu csv để kết hợp với khung dữ liệu địa lý

df = pd.read_csv[“datasets/london-borough-profile.csv”, header=0]df.head[]
Dọn dẹp và nối các khung dữ liệu

Tuyệt vời. Vì vậy, bây giờ chúng tôi có hai khung dữ liệu sẵn sàng hoạt động. Hãy lấy một phần dữ liệu mà chúng ta sẽ sử dụng

df = df[[‘borough’,’Happiness_score_2011–14_[out_of_10]’, ‘Anxiety_score_2011–14_[out_of_10]’, ‘Population_density_[per_hectare]_2017’, ‘Mortality_rate_from_causes_considered_preventable_2012/14’]]

Đó là những tên cột thực sự khủng khiếp. Hãy đổi tên chúng thành một cái gì đó đơn giản hơn

data_for_map = df.rename[index=str, columns={“Happiness_score_2011–14_[out_of_10]”: “happiness”,“Anxiety_score_2011–14_[out_of_10]”: “anxiety”,“Population_density_[per_hectare]_2017”: “pop_density_per_hectare”,“Mortality_rate_from_causes_considered_preventable_2012/14”: ‘mortality’}]# check dat dataframedata_for_map.head[]

Tốt hơn nhiều. Bây giờ chúng tôi cần hợp nhất dữ liệu địa lý của mình với bộ dữ liệu London đã được làm sạch của chúng tôi. Chúng tôi sẽ làm điều đó bằng cách sử dụng pd. tham gia[]

# join the geodataframe with the cleaned up csv dataframemerged = map_df.set_index[‘NAME’].join[data_for_map.set_index[‘borough’]]merged.head[]
Bản đồ thời gian

Hãy bắt đầu lập bản đồ. Trước tiên, chúng ta cần thực hiện một số công việc chuẩn bị cho Matplotlib. Chúng ta sẽ bắt đầu bằng cách đặt một biến cho bản đồ, đặt phạm vi và tạo hình cho bản đồ sẽ được vẽ vào

# set a variable that will call whatever column we want to visualise on the mapvariable = ‘pop_density_per_hectare’# set the range for the choroplethvmin, vmax = 120, 220# create figure and axes for Matplotlibfig, ax = plt.subplots[1, figsize=[10, 6]]

Sân khấu đã được thiết lập. thời gian bản đồ

# create mapmerged.plot[column=variable, cmap=’Blues’, linewidth=0.8, ax=ax, edgecolor=’0.8']

Và nó đây rồi. Không hoàn hảo. Một chút cong vênh và có một trục kỳ lạ xung quanh toàn bộ thứ không thực sự có ý nghĩa gì. Nhưng chúng tôi có một hợp xướng. Bây giờ chúng ta hãy làm đẹp để làm cho nó trông tươi mới

Tùy chỉnh bản đồ

Trước hết, trục đó cần phải đi

________số 8_______

Sau đó, hãy thêm tiêu đề vào bản đồ của chúng tôi và một số văn bản ghi nguồn. Bản đồ thường rất đẹp để xem, nhưng nếu bạn không cung cấp ngữ cảnh thì điều đó không có ý nghĩa gì nhiều

# add a titleax.set_title[‘Preventable death rate in London’, fontdict={‘fontsize’: ‘25’, ‘fontweight’ : ‘3’}]# create an annotation for the data sourceax.annotate[‘Source: London Datastore, 2014’,xy=[0.1, .08],  xycoords=’figure fraction’, horizontalalignment=’left’, verticalalignment=’top’, fontsize=12, color=’#555555']

Xinh đẹp. Vẫn còn thiếu một điều. Có lẽ chúng ta nên thêm chú thích hiển thị phạm vi giá trị cho người dùng. Điều này sẽ giúp nó trông không quá squished

map_df.plot[]
0

Bản đồ. Thực hiện

Thứ cuối cùng. chúng tôi cần lưu bản đồ để có thể đăng một tweet với thẻ bắt đầu bằng #dataviz ngọt ngào đó

Matplotlib mang đến cho bạn rất nhiều sự tự do trong cách bạn lưu số liệu. Đoạn mã bên dưới sẽ lưu hình dưới dạng png, nhưng nếu bạn muốn tìm hiểu thêm về nó trong Illustrator, bạn cũng có thể lưu dưới dạng svg. Nếu bạn lưu dưới dạng png, hãy đảm bảo sử dụng dpi từ 200 trở lên. Nếu không, bản đồ và văn bản sẽ bị mờ. Không ai muốn điều đó

map_df.plot[]
1

Và bây giờ, chúng tôi có một bản đồ sẵn sàng xuất bản đang chờ trong thư mục làm việc của chúng tôi. Kinh ngạc

À chính nó đấy. Bạn đã hoàn tất thiết lập với Geopandas [ít nhất là đối với choropleth]. Tiếp theo, tôi sẽ xem cách tạo nhiều bản đồ bằng Geopandas và biến nó thành một bản đồ gif thú vị. Giữ nguyên

Chủ Đề