Làm thế nào để bạn tạo một địa chỉ trong python?

Bộ dữ liệu hiếm khi hoàn chỉnh và thường yêu cầu tiền xử lý. Hãy tưởng tượng một số bộ dữ liệu chỉ có một cột địa chỉ mà không có các cột kinh độ và vĩ độ để biểu thị dữ liệu của bạn theo địa lý. Trong trường hợp đó, bạn cần chuyển đổi dữ liệu của mình sang định dạng địa lý. Quá trình chuyển đổi địa chỉ thành thông tin địa lý — Vĩ độ và Kinh độ — để lập bản đồ vị trí của chúng được gọi là Mã hóa địa lý

G eocoding là quá trình tính toán chuyển đổi mô tả địa chỉ vật lý thành một vị trí trên bề mặt Trái đất (biểu diễn không gian theo tọa độ số) — Wikipedia

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách thực hiện mã hóa địa lý trong Python với sự trợ giúp của Thư viện Geopy và Geopandas. Hãy để chúng tôi cài đặt các thư viện này với Pip nếu bạn đã thiết lập môi trường Anaconda

pip install geopandas
pip install geopy

Nếu bạn không muốn cài đặt các thư viện và tương tác trực tiếp với sổ ghi chép Jupyter đi kèm của hướng dẫn này, có liên kết Github với MyBinder ở cuối bài viết này. Đây là một môi trường được đóng gói cho phép bạn thử nghiệm hướng dẫn này trực tiếp trên web mà không cần cài đặt. Tập dữ liệu cũng được bao gồm trong môi trường này nên không cần tải xuống tập dữ liệu cho hướng dẫn này

Mã hóa địa lý một địa chỉ

Để định vị địa lý một địa chỉ, bạn có thể sử dụng thư viện Geopy python. Geopy có các dịch vụ Mã hóa địa lý khác nhau mà bạn có thể chọn, bao gồm Google Maps, ArcGIS, AzureMaps, Bing, v.v. Một số trong số chúng yêu cầu khóa API, trong khi một số khác thì không cần

địa lý

Như ví dụ đầu tiên của chúng tôi, chúng tôi sử dụng dịch vụ Mã hóa địa lý Nominatim, được xây dựng dựa trên dữ liệu OpenStreetMap. Hãy để chúng tôi Mã hóa địa lý một địa chỉ duy nhất, tháp Eiffel ở Paris

locator = Nominatim(user_agent=”myGeocoder”)
location = locator.geocode(“Champ de Mars, Paris, France”)

Chúng tôi tạo locator chứa dịch vụ Mã hóa địa lý, Nominatim. Sau đó, chúng tôi chuyển bộ định vị mà chúng tôi đã tạo để mã hóa địa lý cho bất kỳ địa chỉ nào, trong ví dụ này là địa chỉ tháp Eifel

print(“Latitude = {}, Longitude = {}”.format(location.latitude, location.longitude))

Bây giờ, chúng ta có thể in tọa độ của vị trí mà chúng ta đã tạo

Latitude = 48.85614465, Longitude = 2.29782039332223

Hãy thử một số địa chỉ khác nhau của riêng bạn. Trong phần tiếp theo, chúng tôi sẽ giới thiệu cách mã hóa địa lý nhiều địa chỉ từ Pandas Dataframe

Địa chỉ mã hóa địa lý từ Pandas

Hãy để chúng tôi đọc tập dữ liệu cho hướng dẫn này. Chúng tôi sử dụng một ví dụ về tập dữ liệu Địa chỉ cửa hàng cho hướng dẫn này. Tệp CSV có sẵn trong liên kết này

địa chỉ. csv

Dropbox là một dịch vụ miễn phí cho phép bạn mang ảnh, tài liệu và video của mình đến bất cứ đâu và chia sẻ chúng một cách dễ dàng. Không bao giờ gửi email…

www. dropbox. com

Tải xuống tệp CSV và đọc nó trong Pandas

df = pd.read_csv(“addresses.csv”)
df.head()

Bảng sau đây cung cấp năm hàng đầu tiên của bảng DataFrame. Như bạn có thể thấy, không có cột kinh độ và vĩ độ để ánh xạ dữ liệu

Khung dữ liệu

Chúng tôi nối các cột địa chỉ thành một cột phù hợp để mã hóa địa lý. Ví dụ, địa chỉ đầu tiên là

Karlaplan 13,115 20,STOCKHOLM,Stockholms län, Sweden

Chúng ta có thể nối các cột địa chỉ trong gấu trúc như thế này để tạo cột địa chỉ cho mã hóa địa lý

Khi chúng tôi tạo cột địa chỉ, chúng tôi có thể bắt đầu mã hóa địa lý như đoạn mã bên dưới

  • #1 — Trước tiên, chúng tôi trì hoãn Mã hóa địa lý 1 giây giữa mỗi địa chỉ. Điều này thuận tiện khi bạn Mã hóa địa lý một số lượng lớn địa chỉ vật lý vì nhà cung cấp dịch vụ Mã hóa địa lý có thể từ chối quyền truy cập vào dịch vụ
  • #2 — Tạo cột df['location'] bằng cách áp dụng geocode mà chúng tôi đã tạo
  • #3 — Thứ ba, chúng ta có thể tạo vĩ độ, kinh độ và cao độ dưới dạng một cột tuple
  • #4 — Cuối cùng, chúng tôi chia các cột vĩ độ, kinh độ và cao độ thành ba cột riêng biệt

Đoạn mã trên tạo ra một Khung dữ liệu với các cột kinh độ và vĩ độ mà bạn có thể ánh xạ bằng bất kỳ công cụ trực quan hóa Địa lý nào bạn chọn. Chúng ta hãy xem một vài hàng đầu tiên của DataFrame, nhưng trước tiên, chúng ta sẽ xóa các cột không mong muốn

df = df.drop([‘Address1’, ‘Address3’, ‘Address4’, ‘Address5’,’Telefon’, ‘ADDRESS’, ‘location’, ‘point’], axis=1)df.head()

làm sạch bảng với vĩ độ và kinh độ

Tôi sẽ sử dụng Folium để vạch ra các điểm mà chúng tôi đã tạo nhưng vui lòng sử dụng bất kỳ công cụ Địa hình hóa nào khác mà bạn chọn. Đầu tiên, chúng tôi hiển thị các vị trí dưới dạng bản đồ vòng tròn với Folium

Bản đồ được tạo bên dưới hiển thị các địa chỉ được mã hóa địa lý dưới dạng các vòng tròn

Bản đồ

Hoặc nếu bạn thích nền tối với cụm điểm tổng hợp, bạn có thể làm như sau

Dưới đây là bản đồ nền tối với bản đồ Clustered point trong Folium

bản đồ cụm

Sự kết luận

Mã hóa địa lý là một nhiệm vụ quan trọng trong nhiều nhiệm vụ vị trí yêu cầu hệ tọa độ. Trong bài viết này, chúng ta đã thấy cách thực hiện mã hóa địa lý trong Python. Có rất nhiều dịch vụ khác cung cấp dịch vụ mã hóa địa lý miễn phí hoặc trả phí mà bạn có thể thử nghiệm trong GeoPy. Tôi thấy các dịch vụ mã hóa địa lý của Google Maps mạnh hơn các dịch vụ Openstreetmap mà chúng tôi đã sử dụng trong hướng dẫn này, nhưng nó yêu cầu khóa API

Để tương tác và thử nghiệm với hướng dẫn này mà không cần cài đặt, tôi đã tạo một Binder. Truy cập kho lưu trữ GitHub này và nhấp vào khởi chạy chất kết dính