Skip to content

Instantly share code, notes, and snippets.

@dfeldman
Last active May 17, 2023 07:31
Show Gist options
  • Save dfeldman/55d597dc9af5e388d5a0143e2a0a03fd to your computer and use it in GitHub Desktop.
Save dfeldman/55d597dc9af5e388d5a0143e2a0a03fd to your computer and use it in GitHub Desktop.
cities_without_airports
# 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