Tìm kiếm thành phố trong mơ của bạn (Phiên bản Châu Âu)

Amsterdam, Hà Lan)

Như mọi người, vào một lúc nào đó, tôi bắt đầu nghĩ về những thành phố mà tôi sẽ thích sống. Trong trường hợp của tôi, những suy nghĩ đó xuất hiện trong đầu tôi sau khi tôi học xong ngành Kỹ thuật Máy tính ở Alicante (một thành phố xinh đẹp và đầy nắng ở phía đông nam của Tây Ban Nha). Nhờ có nhiều khả năng trao đổi và thực tập mà Đại học Alicante đã cho tôi, tôi đã có được một số ý tưởng về những điều quan trọng cần suy nghĩ khi bạn dự định chuyển đến một thành phố mới.

Trong dự án này, chúng tôi sẽ chỉ tính đến các quốc gia trong khu vực Schengen. Khu vực này là một liên minh kinh tế và chính trị độc đáo giữa các quốc gia châu Âu, cùng nhau bao trùm phần lớn lục địa. Nó được tạo ra vào năm 1985 và kể từ đó Nó đã xóa bỏ biên giới giữa các quốc gia thuộc về, tạo điều kiện sống, làm việc và đi du lịch nước ngoài ở châu Âu.

Thu thập dữ liệu

Phân loại một thành phố có thể rất phức tạp và buộc chúng tôi phải lấy nhiều dữ liệu từ các nguồn khác nhau:

  • Để tìm các thành phố trong khu vực Schengen, API GeoDB Thành phố do Creative Commons cung cấp cho chúng tôi một cách rất đơn giản để hạn chế kết quả theo quốc gia và dân số, lấy tên, quốc gia, tọa độ và tổng dân số.
answer = get (Quảng cáo https://wft-geo-db.p.rapidapi.com/v1/geo/cities?
                Quốc gia = IS% 2CLU% 2CBG% 2CCZ
                & minPopulation = 300000
                & loại = THÀNH PHỐ ",
 tiêu đề = {
 Phần mềm X-RapidAPI-Key
 }
)
  • Từ API của API, chúng tôi sẽ trích xuất 100 địa điểm hàng đầu cho mỗi thành phố. Là đầu vào, chúng tôi cần gửi ID khách hàng và Bí mật khách hàng được tạo bởi Foursquare và tọa độ của từng thành phố, bán kính và giới hạn.
đáp ứng = nhận ("https: // api.f xông.com / v2 / ven / express?
                & client_id = clientId
                & client_secret = clientSecret
                & ll = vĩ độ, kinh độ
                & bán kính = 15000
                & giới hạn = 100 "

Phân tích

Khi thông tin về các thành phố đã được truy xuất từ ​​GeoDB, chúng tôi sẽ sử dụng cấu trúc khung dữ liệu để lưu trữ dữ liệu:

Như khung dữ liệu chỉ ra, có 115 thành phố lớn hơn 300 nghìn dân trong khu vực Schengen.

Công cụ trực quan Folium sẽ cho phép chúng tôi hiển thị bản đồ với tất cả các thành phố:

map_europe = folium.Map (location = [lat_eu, long_eu], zoom_start = 3)
# thêm điểm đánh dấu vào bản đồ
cho lat, lng, thành phố, dân số trong zip (Thành phố [‘vĩ độ], Thành phố [‘ kinh độ], Thành phố [‘city_name Huyền], Thành phố [‘ dân cư]
    nhãn = ‘{} \ n {} định dạng (thành phố, dân số)
    nhãn = folium.Popup (nhãn, parse_html = True)
    folium.CircleMarker (
        [lat, lng],
        bán kính = 5,
        cửa sổ bật lên = nhãn,
        màu = màu xanh da trời,
        điền = Đúng,
        fill_color = xông # 3186cc,
        fill_opacity = 0,7,
        parse_html = Sai) .add_to (map_europe)
 
map_europe

Bây giờ chúng tôi có tất cả thông tin cơ bản về mỗi thành phố và chúng tôi có chúng trên bản đồ, chúng tôi sẽ tiếp tục bằng cách thu thập tất cả dữ liệu từ địa điểm của chúng.

Để làm được điều đó, cần có một tài khoản trong Nhà phát triển của AliExpress. Sau khi tạo nó, Foursquare sẽ tạo ID khách hàng và Bí mật khách hàng để chúng tôi có thể trích xuất bất kỳ dữ liệu nào chúng tôi muốn. Tất nhiên, có một số giới hạn với phiên bản dùng thử, nhưng điều này là đủ cho nhu cầu của chúng tôi.

Bước tiếp theo, sẽ là lấy 100 địa điểm hàng đầu cho mỗi thành phố. Chúng tôi sẽ cần chạy một vòng qua mỗi thành phố yêu cầu dữ liệu này tới API FourSapes.

Sau khi thực hiện vòng lặp trước và lưu trữ tất cả dữ liệu, bảng có kích thước 11367 hàng và trông như thế này:

Chúng tôi đã có thể trích xuất dữ liệu thú vị từ bảng, với một vài dòng mã, chúng tôi có thể thấy 5 loại địa điểm hàng đầu ở châu Âu:

venues_df = europe_venues [‘Địa điểm Thể loại]. value_counts () [: 10] t
venues_df.plot (loại = hoành thánh)

Để sử dụng sau, chúng ta sẽ cần định dạng bảng trước dưới dạng một mã hóa nóng. Để donith bị lạc, chúng ta nên thêm tên của thành phố:

# một mã hóa nóng
europe_onehot = pd.get_dummies (europe_venues [[‘Địa điểm danh mục]], tiền tố = tiền phạt, tiền tố
# thêm cột thành phố trở lại dataframe
europe_onehot [‘Thành phố] [europe_venues [Thành phố]
europe_onehot.head ()

Đối với mục tiêu của chúng tôi, chúng tôi sẽ cần tìm ra 10 loại địa điểm phổ biến nhất cho mỗi thành phố. Vì vậy, chúng tôi sẽ nhóm tất cả các loại địa điểm cho mỗi thành phố và trích xuất số tiền cho mỗi thành phố. Sau khi xử lý dữ liệu này và thêm nó vào khung dữ liệu, nó sẽ trông như thế này:

Bây giờ chúng ta có tất cả dữ liệu có cấu trúc và tổ chức, chúng ta cần tìm sự tương đồng giữa các thành phố. Vì chúng tôi muốn phân loại các biến rời rạc, thuật toán tốt nhất chúng tôi có thể sử dụng cho mục đích này là phân cụm k-mean.

Trong trường hợp của chúng tôi, chúng tôi đã thử nghiệm nhiều lần với số lượng cụm (k) khác nhau và giá trị tốt nhất chúng tôi có thể sử dụng cho điều này là 7 cụm.

Trước khi tạo cụm, chúng ta cần bình thường hóa dữ liệu dân số, điều này sẽ rất dễ dàng với thư viện sklearn:

từ quá trình nhập trước sklearn
min_max_scaler = tiền xử lý.MinMaxScaler ()
pop_scaled = min_max_scaler.fit_transform (CityTable [[‘dân cư]])
df_population_n normalized = pd.DataFrame (pop_scaled)
#add tên của thành phố vào bảng được chuẩn hóa
df_population_n normalized [‘city_name Kiểu] = CityTable [[‘ city_name hung]]

Khi chúng ta đã bình thường hóa dân số, chúng ta cần lấy kết quả chuẩn hóa cho một bảng mã hóa nóng, tham gia cả hai và xóa thành phố cột:

europe_grouped = europe_onehot.groupby ('Thành phố'). mean (). reset_index ()
europe_grouped = europe_grouped.join (df_population_n normalized.set_index (‘city_name,), on =
europe_grouped_clustering = europe_grouped.drop (‘Thành phố, 1)

Cuối cùng, như chúng ta đã nói trước đây, số cụm chúng ta sẽ sử dụng là 7. Với tham số này và khung dữ liệu europe_grouped_clustering ở trên, chúng ta phải phù hợp với thuật toán:

# đặt số cụm
kcl cluster = 7
# chạy k-nghĩa là phân cụm
kmeans = KMeans (n_cl cluster = kcl cluster, Random_state = 0) .fit (europe_grouped_clustering)

Nó sẽ trả về một mảng của tất cả các thành phố với nhãn cụm được gán mà chúng ta cần tham gia với phần còn lại của dữ liệu của mỗi thành phố.

city_venues.insert (0, ‘Cụm Nhãn, kmeans.labels_)

Để hiển thị kết quả, chúng tôi có thể tạo bản đồ như chúng tôi đã làm trước đây, nhưng phân biệt từng cụm theo màu:

Ngoài ra, trong bảng sau chúng ta có thể thấy trung bình dân số và địa điểm phổ biến nhất cho mỗi cụm:

Các kết quả

Khi chúng tôi đã hoàn thành tất cả các phân tích và nhận được kết quả, chúng tôi có thể trích xuất thông tin rất thú vị về các thành phố trên khắp châu Âu:

  • Nếu chúng ta muốn chuyển đến một thành phố mới, có một thực tế rất quan trọng cần tính đến, đó là dân số. Ngay cả khi danh mục địa điểm của nó rất quan trọng, cuối cùng dân số là thứ có thể định nghĩa một thành phố lớn và đó là lý do tại sao chúng ta có thể tìm thấy các thành phố lớn nhất (Madrid, Rome, Berlin và Paris) trong cùng một cụm.
  • Ngay cả khi dân số là rất quan trọng, có những thành phố lớn được xác định rõ hơn bởi danh mục địa điểm của nó so với dân số. Thành phố Barcelona chẳng hạn là một trong những thành phố lớn nhất trên khắp châu Âu, tuy nhiên, chúng ta có thể thấy rằng thành phố này được xác định bởi địa điểm của nó hơn là dân số. Một ví dụ khác chúng ta có thể thấy về điều này, là Lisbon.
  • Một trong những điều thú vị nhất, đó là thực tế rằng London chỉ có một mình trong cụm riêng của mình. Do hành vi kỳ lạ này, chúng tôi đã thử nghiệm với số lượng cụm khác nhau và trong hầu hết các trường hợp, London hoàn toàn đơn độc. Vì vậy, thành phố này không chỉ khác với các thành phố còn lại từ châu Âu, mà còn từ Vương quốc Anh. Không khí của London dường như là độc nhất. Nhưng tại sao? Có lẽ vì nhiều nhà hát và bảo tàng của nó? Tôi chưa bao giờ đến London, nhưng từ kết quả được trích xuất, tôi sẽ đi sớm cho chắc chắn.
  • Không đi ra khỏi Vương quốc Anh, chúng ta có thể thấy rằng hầu hết các thành phố của nó nằm trong một cụm, điều này có nghĩa là các thành phố của người Anh có phong cách độc đáo của họ, trong đó các địa điểm phổ biến nhất thường là quán rượu hoặc quán bar. Chúng ta có thể thấy điều tương tự xảy ra ở Tây Ban Nha, nơi một cụm chứa tất cả các thành phố ngoại trừ Madrid, Valencia, Barcelona và không có thành phố nào khác từ phần còn lại của châu Âu, điều này có thể là do các nhà hàng, tapas, bãi biển và bảo tàng thực sự tốt , Tôi là người Tây Ban Nha).