Last active
May 17, 2023 07:31
-
-
Save dfeldman/55d597dc9af5e388d5a0143e2a0a03fd to your computer and use it in GitHub Desktop.
cities_without_airports
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Code by chatgpt | |
# Cities database: | |
# https://simplemaps.com/static/data/world-cities/basic/simplemaps_worldcities_basicv1.76.zip | |
# (Needs to be unzipped -- copy worldcities.csv to the same directory) | |
# Airports database: | |
# https://davidmegginson.github.io/ourairports-data/airports.csv | |
import pandas as pd | |
import numpy as np | |
from sklearn.neighbors import BallTree | |
pd.set_option('display.max_rows', None) # add this line to display all rows | |
SOME_THRESHOLD=100 | |
def load_data(file): | |
df = pd.read_csv(file) | |
return df | |
def find_furthest_metros(metro_data, airport_data): | |
airport_data = airport_data[airport_data['scheduled_service'] == 'yes'] | |
metro_data = metro_data[metro_data['population'] > 100000] | |
# Convert latitude and longitude to radians for BallTree | |
metro_coords = np.radians(metro_data[['lat', 'lng']]) | |
airport_coords = np.radians(airport_data[['latitude_deg', 'longitude_deg']]) | |
# Construct a BallTree for efficient spatial look-ups | |
tree = BallTree(airport_coords) | |
# Query the BallTree for the distance to the nearest airport for each metro area | |
distances, indices = tree.query(metro_coords, k=1) | |
# Convert distances (which are in radians) to kilometers | |
earth_radius = 6371 # approximate radius of earth in km | |
distances_in_km = distances * earth_radius | |
# Add distances to metro_data DataFrame | |
metro_data['distance_to_nearest_airport'] = distances_in_km | |
# Filter metro_data for those cities furthest from an airport | |
furthest_metros = metro_data[metro_data['distance_to_nearest_airport'] > SOME_THRESHOLD] | |
return furthest_metros[['city_ascii', 'country', 'population', 'distance_to_nearest_airport']] | |
def main(): | |
metro_data = load_data('worldcities.csv') | |
airport_data = load_data('airports.csv') | |
furthest_metros = find_furthest_metros(metro_data, airport_data) | |
# Sort by 'distance_to_nearest_airport' in descending order before printing | |
furthest_metros_sorted = furthest_metros.sort_values(by='distance_to_nearest_airport', ascending=False) | |
print(furthest_metros_sorted.to_string(index=False)) # print without index column | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment