from collections import Counter import pandas as pd import numpy as np from scipy.spatial import cKDTree df_amenities = pd.read_csv("df_indonesia.csv").rename( columns={"latitude":"lat", "longitude":"lon"} ) df_banks = pd.read_csv("df_bank_indonesia.csv").rename( columns={"latitude":"lat", "longitude":"lon"} ) df_amenities["fsq_category_labels"] = df_amenities["fsq_category_labels"].apply( lambda x: eval(x) ) bank_coords = df_banks[['lat','lon']].values tree_banks = cKDTree(bank_coords) amenity_coords = df_amenities[['lat','lon']].values tree_amenities = cKDTree(amenity_coords) # DATASET_COLUMNS = [ # 'Dining and Drinking', 'Community and Government', 'Retail', # 'Business and Professional Services', 'Landmarks and Outdoors', # 'Arts and Entertainment', 'Health and Medicine', # 'Travel and Transportation', 'Sports and Recreation', # 'Event' # ] DATASET_COLUMNS = [ "Community and Government > Education" "Landmarks and Outdoors > Structure" "Arts and Entertainment > Art Gallery" "Arts and Entertainment > Movie Theater" "Retail > Department Store" "Business and Professional Services > Office" "Travel and Transportation > Road" "Dining and Drinking > Restaurant" "Community and Government > Residential Building" "Dining and Drinking > Breakfast Spot" "Business and Professional Services" "Arts and Entertainment > Amusement Park" "Travel and Transportation > Lodging" "Arts and Entertainment" "Dining and Drinking > Food Truck" "Dining and Drinking > Bar" "Retail > Sporting Goods Retail" "Retail > Computers and Electronics Retail" "Arts and Entertainment > Arcade" "Dining and Drinking > Cafe, Coffee, and Tea House" "Travel and Transportation > Transport Hub" "Health and Medicine > Physician" "Community and Government > Government Building" "Business and Professional Services > Convention Center" "Arts and Entertainment > Performing Arts Venue" "Landmarks and Outdoors > Field" "Business and Professional Services > Financial Service" "Landmarks and Outdoors > Park" "Sports and Recreation > Water Sports" "Landmarks and Outdoors > Other Great Outdoors" "Event > Convention" "Retail > Shopping Mall" "Business and Professional Services > Distribution Center" "Business and Professional Services > Automotive Service" "Health and Medicine > Hospital" "Dining and Drinking > Snack Place" "Business and Professional Services > Event Space" "Dining and Drinking > Food Court" "Travel and Transportation > Bike Rental" "Travel and Transportation > Parking" "Business and Professional Services > Radio Station" "Health and Medicine > Dentist" "Landmarks and Outdoors > Beach" "Retail > Flea Market" "Retail > Fashion Retail" "Retail > Food and Beverage Retail" "Retail > Office Supply Store" "Community and Government > Spiritual Center" "Health and Medicine > Medical Center" "Dining and Drinking > Bakery" "Dining and Drinking > Cafeteria" "Retail > Convenience Store" "Arts and Entertainment > Public Art" "Retail > Newsstand" "Retail > Furniture and Home Store" "Business and Professional Services > Auditorium" "Landmarks and Outdoors > Garden" "Community and Government > Library" "Community and Government > Organization" "Business and Professional Services > Health and Beauty Service" "Dining and Drinking > Food Stand" "Retail > Pharmacy" "Retail > Record Store" "Arts and Entertainment > Night Club" "Landmarks and Outdoors > Farm" "Community and Government > Social Club" "Sports and Recreation > Gym and Studio" "Sports and Recreation > Racquet Sports" "Retail > Costume Store" "Sports and Recreation > Soccer" "Event > Entertainment Event" "Retail > Market" "Sports and Recreation" "Community and Government > Town Hall" "Arts and Entertainment > Water Park" "Landmarks and Outdoors" "Business and Professional Services > Shoe Repair Service" "Retail > Automotive Retail" "Dining and Drinking > Dessert Shop" "Retail > Music Store" "Business and Professional Services > Factory" "Community and Government > Assisted Living" "Travel and Transportation > Transportation Service" "Health and Medicine > Medical Lab" "Retail" "Travel and Transportation > Rest Area" "Landmarks and Outdoors > Hiking Trail" "Sports and Recreation > Martial Arts Dojo" "Business and Professional Services > Laundry Service" "Retail > Pet Supplies Store" "Business and Professional Services > Design Studio" "Community and Government > Housing Development" "Business and Professional Services > Construction" "Business and Professional Services > Real Estate Service" "Landmarks and Outdoors > Historic and Protected Site" "Business and Professional Services > Photography Service" "Landmarks and Outdoors > Plaza" "Business and Professional Services > Child Care Service" "Event > Other Event" "Arts and Entertainment > Comedy Club" "Arts and Entertainment > Strip Club" "Arts and Entertainment > Casino" "Business and Professional Services > Legal Service" "Retail > Miscellaneous Store" "Travel and Transportation" "Retail > Boutique" "Sports and Recreation > Race Track" "Event > Marketplace" "Sports and Recreation > Baseball" "Retail > Arts and Crafts Store" "Travel and Transportation > Moving Target" "Community and Government > Cemetery" "Business and Professional Services > Wholesaler" "Business and Professional Services > Advertising Agency" "Arts and Entertainment > Stadium" "Arts and Entertainment > Country Dance Club" "Landmarks and Outdoors > Bridge" "Health and Medicine > Alternative Medicine Clinic" "Arts and Entertainment > Zoo" "Business and Professional Services > Food and Beverage Service" "Business and Professional Services > Storage Facility" "Business and Professional Services > Recycling Facility" "Business and Professional Services > Funeral Home" "Arts and Entertainment > Bowling Alley" "Retail > Hardware Store" "Retail > Stationery Store" "Retail > Bookstore" "Retail > Smoke Shop" "Sports and Recreation > Running and Track" "Retail > Vape Store" "Landmarks and Outdoors > Campground" "Retail > Gift Store" "Landmarks and Outdoors > Palace" "Business and Professional Services > Recording Studio" "Landmarks and Outdoors > States and Municipalities" "Community and Government > Community Center" "Travel and Transportation > Fuel Station" "Retail > Cosmetics Store" "Retail > Hobby Store" "Travel and Transportation > Travel Lounge" "Community and Government > Polling Place" "Retail > Baby Store" "Business and Professional Services > Telecommunication Service" "Health and Medicine > Healthcare Clinic" "Dining and Drinking > Donut Shop" "Travel and Transportation > Tourist Information and Service" "Dining and Drinking > Juice Bar" "Retail > Antique Store" "Retail > Toy Store" "Business and Professional Services > Event Service" "Landmarks and Outdoors > Monument" "Sports and Recreation > Snow Sports" "Travel and Transportation > Travel Agency" "Landmarks and Outdoors > Stable" "Arts and Entertainment > Museum" "Business and Professional Services > Home Improvement Service" "Retail > Flower Store" "Business and Professional Services > Technology Business" "Travel and Transportation > Electric Vehicle Charging Station" "Business and Professional Services > Business Center" "Landmarks and Outdoors > Lake" "Business and Professional Services > Film Studio" "Dining and Drinking > Vineyard" "Dining and Drinking > Distillery" "Business and Professional Services > Warehouse" "Business and Professional Services > Pet Service" "Dining and Drinking > Brewery" "Retail > Eyecare Store" "Health and Medicine" "Business and Professional Services > Tailor" "Retail > Board Store" "Sports and Recreation > Golf" "Business and Professional Services > Audiovisual Service" "Business and Professional Services > Manufacturer" "Retail > Shopping Plaza" "Business and Professional Services > Publisher" "Retail > Print Store" "Sports and Recreation > Gymnastics" "Landmarks and Outdoors > Mountain" "Retail > Perfume Store" "Arts and Entertainment > Gaming Cafe" "Travel and Transportation > Boat or Ferry" "Community and Government > Cultural Center" "Business and Professional Services > Employment Agency" "Arts and Entertainment > Psychic and Astrologer" "Retail > Big Box Store" "Arts and Entertainment > Pool Hall" "Community and Government > Animal Shelter" "Landmarks and Outdoors > Surf Spot" "Landmarks and Outdoors > Castle" "Arts and Entertainment > Internet Cafe" "Health and Medicine > Emergency Service" "Sports and Recreation > Volleyball Court" "Business and Professional Services > Security and Safety" "Sports and Recreation > Basketball" "Business and Professional Services > Shipping, Freight, and Material Transportation Service" "Health and Medicine > Veterinarian" "Health and Medicine > Acupuncture Clinic" "Dining and Drinking > Creperie" "Retail > Outlet Store" "Dining and Drinking > Bagel Shop" "Landmarks and Outdoors > Scenic Lookout" "Dining and Drinking > Winery" "Retail > Garden Center" "Business and Professional Services > Import and Export Service" "Sports and Recreation > Skating" "Health and Medicine > Physical Therapy Clinic" "Landmarks and Outdoors > Botanical Garden" "Travel and Transportation > Train" "Retail > Warehouse or Wholesale Store" "Retail > Luggage Store" "Business and Professional Services > TV Station" "Retail > Pop-Up Store" "Business and Professional Services > Entertainment Service" "Landmarks and Outdoors > Sculpture Garden" "Landmarks and Outdoors > Harbor or Marina" "Health and Medicine > Home Health Care Service" "Retail > Adult Store" "Health and Medicine > Chiropractor" "Health and Medicine > Mental Health Service" "Business and Professional Services > Art Studio" "Business and Professional Services > Metals Supplier" "Landmarks and Outdoors > Island" "Travel and Transportation > RV Park" "Landmarks and Outdoors > Lighthouse" "Retail > Construction Supplies Store" "Business and Professional Services > Plastics Supplier" "Retail > Video Store" "Event > Conference" "Retail > Tobacco Store" "Business and Professional Services > Agriculture and Forestry Service" "Landmarks and Outdoors > River" "Business and Professional Services > Chemicals and Gasses Manufacturer" "Business and Professional Services > Repair Service" "Business and Professional Services > Rubber Supplier" "Landmarks and Outdoors > Roof Deck" "Retail > Vintage and Thrift Store" "Sports and Recreation > Fishing Area" "Sports and Recreation > Sports Club" "Business and Professional Services > Business Service" "Business and Professional Services > Media Agency" "Landmarks and Outdoors > Hot Spring" "Landmarks and Outdoors > Well" "Business and Professional Services > Insurance Agency" "Community and Government > Summer Camp" "Landmarks and Outdoors > Bay" "Business and Professional Services > Industrial Equipment Supplier" "Retail > Comic Book Store" "Travel and Transportation > Toll Booth" "Dining and Drinking" "Arts and Entertainment > Fair" "Retail > Souvenir Store" "Sports and Recreation > Paintball Field" "Retail > Drugstore" "Arts and Entertainment > Exhibit" "Retail > Supplement Store" "Retail > Outdoor Supply Store" "Arts and Entertainment > Escape Room" "Health and Medicine > Optometrist" "Business and Professional Services > Engineer" "Sports and Recreation > Indoor Play Area" "Retail > Leather Goods Store" "Community and Government > Public Bathroom" "Business and Professional Services > Electrical Equipment Supplier" "Travel and Transportation > Baggage Locker" "Arts and Entertainment > Go Kart Track" "Arts and Entertainment > Circus" "Sports and Recreation > Hockey" "Landmarks and Outdoors > Forest" "Business and Professional Services > Computer Repair Service" "Business and Professional Services > Waste Management Service" "Travel and Transportation > Platform" "Retail > Textiles Store" "Business and Professional Services > Scientific Equipment Supplier" "Landmarks and Outdoors > Pedestrian Plaza" "Community and Government > Utility Company" "Community and Government > Public and Social Service" "Business and Professional Services > Petroleum Supplier" "Business and Professional Services > Wedding Hall" "Landmarks and Outdoors > Nature Preserve" "Business and Professional Services > Ballroom" "Community and Government > Prison" "Sports and Recreation > Recreation Center" "Sports and Recreation > Gun Range" "Dining and Drinking > Smoothie Shop" "Dining and Drinking > Night Market" "Retail > Discount Store" "Business and Professional Services > Welding Service" "Travel and Transportation > Pier" "Landmarks and Outdoors > Bathing Area" "Business and Professional Services > Print, TV, Radio and Outdoor Advertising Service" "Business and Professional Services > Online Advertising Service" "Arts and Entertainment > Aquarium" "Arts and Entertainment > Roller Rink" "Community and Government > Trailer Park" "Business and Professional Services > Paper Supplier" "Retail > Framing Store" "Landmarks and Outdoors > Tunnel" "Health and Medicine > Urgent Care Center" "Community and Government > Rehabilitation Center" "Landmarks and Outdoors > Fountain" "Arts and Entertainment > Planetarium" "Sports and Recreation > Cricket Ground" "Landmarks and Outdoors > Volcano" "Business and Professional Services > Research Laboratory" "Business and Professional Services > Equipment Rental Service" "Community and Government" "Retail > Medical Supply Store" "Landmarks and Outdoors > Bike Trail" "Business and Professional Services > Outdoor Event Space" "Sports and Recreation > Rugby" "Business and Professional Services > Laboratory" "Business and Professional Services > Water Treatment Service" "Business and Professional Services > Entertainment Agency" "Retail > Pawn Shop" "Arts and Entertainment > Salsa Club" "Landmarks and Outdoors > Tree" "Travel and Transportation > Toll Plaza" "Travel and Transportation > Port" "Landmarks and Outdoors > Rock Climbing Spot" "Business and Professional Services > Creative Service" "Business and Professional Services > Research Station" "Business and Professional Services > Refrigeration and Ice Supplier" "Business and Professional Services > Rental Service" "Travel and Transportation > Border Crossing" "Business and Professional Services > Industrial Estate" "Business and Professional Services > Tutoring Service" "Business and Professional Services > Laundromat" "Arts and Entertainment > Mini Golf Course" "Retail > Packaging Supply Store" "Business and Professional Services > Translation Service" "Retail > Duty-free Store" "Community and Government > Observatory" "Retail > Knitting Store" "Travel and Transportation > Cruise" "Business and Professional Services > Management Consultant" "Retail > Betting Shop" "Retail > Outlet Mall" "Retail > Auction House" "Travel and Transportation > Cable Car" "Business and Professional Services > Power Plant" "Landmarks and Outdoors > Dive Spot" "Health and Medicine > Maternity Clinic" "Health and Medicine > Women's Health Clinic" "Health and Medicine > Nutritionist" "Retail > Mobility Store" "Business and Professional Services > Renewable Energy Service" "Landmarks and Outdoors > Hill" "Health and Medicine > Hospice" "Business and Professional Services > Machine Shop" "Landmarks and Outdoors > Memorial Site" "Landmarks and Outdoors > Cave" "Travel and Transportation > Truck Stop" "Business and Professional Services > Logging Service" "Landmarks and Outdoors > Waterfront" "Sports and Recreation > Skydiving Center" "Arts and Entertainment > Disc Golf" "Business and Professional Services > Promotional Item Service" "Business and Professional Services > Lottery Retailer" ] def compute_features(candidate_point, radius=0.005): lat, lon = candidate_point # Banks bank_idxs = tree_banks.query_ball_point([lat, lon], r=radius) print("[BANK]", bank_idxs) n_banks = len(bank_idxs) if n_banks > 0: neighbors = df_banks.iloc[bank_idxs] mean_dist_banks = np.mean(np.sqrt((neighbors['lat']-lat)**2 + (neighbors['lon']-lon)**2)) min_dist_bank = np.min(np.sqrt((neighbors['lat']-lat)**2 + (neighbors['lon']-lon)**2)) else: mean_dist_banks = radius min_dist_bank = radius # Amenities amenity_idxs = tree_amenities.query_ball_point([lat, lon], r=radius) amenities = df_amenities.iloc[amenity_idxs] total_amenities = len(amenities) # Flatten all category IDs # for cats in amenities['fsq_category_labels']: all_category_ids = [">".join(cats[0].split(">")[:2]).strip() for cats in amenities['fsq_category_labels'] if len(cats)>0] category_diversity = len(set(all_category_ids)) features = { 'num_banks_in_radius': n_banks, # 'mean_dist_banks': mean_dist_banks, # 'min_dist_bank': min_dist_bank, 'total_amenities': total_amenities, 'category_diversity': category_diversity } # Count occurrences per category print("[CATEGORIES]", all_category_ids) count_per_category = Counter(all_category_ids) for feat in DATASET_COLUMNS: print("[FEAT]",feat) # for cat, cnt in count_per_category.items(): features[f'num_{feat}'] = count_per_category.get(feat, 0) # # Count occurrences of first category # first_categories = [cats[0] for cats in amenities['fsq_category_ids'] if len(cats)>0] # count_first_category = Counter(first_categories) # for cat, cnt in count_first_category.items(): # features[f'num_first_{cat}'] = cnt return features