%23%20%2F%2F%2F%20script%0A%23%20requires-python%20%3D%20%22%3E%3D3.13%22%0A%23%20dependencies%20%3D%20%5B%0A%23%20%20%20%20%20%22marimo%3D%3D0.24.0%22%2C%0A%23%20%20%20%20%20%22pandas%3D%3D3.0.3%22%2C%0A%23%20%20%20%20%20%22plotly%3D%3D6.9.0%22%2C%0A%23%20%5D%0A%23%20%2F%2F%2F%0A%0Aimport%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22%2C%20auto_download%3D%5B%22html%22%5D)%0A%0A%0A%40app.cell%0Adef%20imports()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20plotly.graph_objects%20as%20go%0A%0A%0A%20%20%20%20return%20go%2C%20pd%0A%0A%0A%40app.cell%0Adef%20load_data(pd)%3A%0A%20%20%20%20%23%20Source%3A%20https%3A%2F%2Fmarimo.io%2Fambassadors%20(18%20current%20ambassadors).%0A%20%20%20%20AMBASSADOR_ROSTER%20%3D%20%5B%0A%20%20%20%20%20%20%20%20(%22Christian%20Byabushi%22%2C%20%22Kigali%2C%20Rwanda%22%2C%20%22Machine%20learning%20%26%20cybersecurity%22)%2C%0A%20%20%20%20%20%20%20%20(%22Cole%20Jerum%22%2C%20%22Rochester%2C%20NY%20%2F%20Menlo%20Park%2C%20CA%22%2C%20%22Physics%2C%20gamma%20%26%20quantum%20imaging%22)%2C%0A%20%20%20%20%20%20%20%20(%22J.%20Alex%22%2C%20%22Charleston%2C%20SC%22%2C%20%22CS%20%26%20cybersecurity%22)%2C%0A%20%20%20%20%20%20%20%20(%22John%20Momberg%22%2C%20%22Iowa%20City%2C%20IA%22%2C%20%22Astronomy%2C%20stellar%20evolution%22)%2C%0A%20%20%20%20%20%20%20%20(%22Kishan%20N%22%2C%20%22Davangere%2C%20Karnataka%2C%20India%22%2C%20%22Cybersecurity%20%26%20AI%2FML%22)%2C%0A%20%20%20%20%20%20%20%20(%22Piyush%20Chaudhari%22%2C%20%22Gainesville%2C%20FL%22%2C%20%22Clinical%20informatics%22)%2C%0A%20%20%20%20%20%20%20%20(%22Pragyan%20Tiwari%22%2C%20%22Indore%2C%20Madhya%20Pradesh%2C%20India%22%2C%20%22Machine%20learning%20%26%20statistics%22)%2C%0A%20%20%20%20%20%20%20%20(%22Sasank%20Desaraju%22%2C%20%22Gainesville%2C%20FL%22%2C%20%22Clinical%20AI%20systems%22)%2C%0A%20%20%20%20%20%20%20%20(%22Austen%20Wallis%22%2C%20%22Cambridge%2C%20UK%22%2C%20%22Computational%20astrophysics%22)%2C%0A%20%20%20%20%20%20%20%20(%22Cameron%20Lloyd%22%2C%20%22Cambridge%2C%20UK%22%2C%20%22Bioinformatics%22)%2C%0A%20%20%20%20%20%20%20%20(%22Cemrehan%20Cavdar%22%2C%20%22Ankara%2C%20Turkiye%22%2C%20%22GIS%20and%20Python%22)%2C%0A%20%20%20%20%20%20%20%20(%22Clarence%20Mah%22%2C%20%22San%20Diego%2C%20CA%22%2C%20%22Bioinformatics%2C%20open-source%20science%22)%2C%0A%20%20%20%20%20%20%20%20(%22Gal%20Winer%22%2C%20%22Herzliya%2C%20Israel%22%2C%20%22Quantum%20computing%20%26%20optics%22)%2C%0A%20%20%20%20%20%20%20%20(%22Parul%20Pandey%22%2C%20%22New%20Delhi%2C%20India%22%2C%20%22Data%20science%20education%22)%2C%0A%20%20%20%20%20%20%20%20(%22Pat%20Walters%22%2C%20%22Bay%20Area%2C%20CA%22%2C%20%22Cheminformatics%22)%2C%0A%20%20%20%20%20%20%20%20(%22Richard%20Sieg%22%2C%20%22Cologne%2C%20Germany%22%2C%20%22Machine%20learning%20%26%20NLP%20teaching%22)%2C%0A%20%20%20%20%20%20%20%20(%22Simone%20Conradi%22%2C%20%22Cuneo%2C%20Italy%22%2C%20%22CS%20%26%20physics%20education%22)%2C%0A%20%20%20%20%20%20%20%20(%22Taylor%20Butler%22%2C%20%22Carlsbad%2C%20CA%22%2C%20%22Statistics%20%26%20research%20methods%22)%2C%0A%20%20%20%20%5D%0A%0A%20%20%20%20ambassadors%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20AMBASSADOR_ROSTER%2C%20columns%3D%5B%22Name%22%2C%20%22Location%22%2C%20%22Field%20%2F%20Niche%22%5D%0A%20%20%20%20)%0A%20%20%20%20return%20(ambassadors%2C)%0A%0A%0A%40app.cell%0Adef%20geocode(ambassadors%2C%20pd)%3A%0A%20%20%20%20CITY_COORDS%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22Kigali%2C%20Rwanda%22%3A%20(%22Kigali%2C%20Rwanda%22%2C%20-1.9441%2C%2030.0619)%2C%0A%20%20%20%20%20%20%20%20%22Rochester%2C%20NY%20%2F%20Menlo%20Park%2C%20CA%22%3A%20(%22Rochester%2C%20NY%22%2C%2043.1566%2C%20-77.6088)%2C%0A%20%20%20%20%20%20%20%20%22Charleston%2C%20SC%22%3A%20(%22Charleston%2C%20SC%22%2C%2032.7765%2C%20-79.9311)%2C%0A%20%20%20%20%20%20%20%20%22Iowa%20City%2C%20IA%22%3A%20(%22Iowa%20City%2C%20IA%22%2C%2041.6611%2C%20-91.5302)%2C%0A%20%20%20%20%20%20%20%20%22Davangere%2C%20Karnataka%2C%20India%22%3A%20(%22Davangere%2C%20India%22%2C%2014.4644%2C%2075.9218)%2C%0A%20%20%20%20%20%20%20%20%22Gainesville%2C%20FL%22%3A%20(%22Gainesville%2C%20FL%22%2C%2029.6516%2C%20-82.3248)%2C%0A%20%20%20%20%20%20%20%20%22Indore%2C%20Madhya%20Pradesh%2C%20India%22%3A%20(%22Indore%2C%20India%22%2C%2022.7196%2C%2075.8577)%2C%0A%20%20%20%20%20%20%20%20%22Cambridge%2C%20UK%22%3A%20(%22Cambridge%2C%20UK%22%2C%2052.2053%2C%200.1218)%2C%0A%20%20%20%20%20%20%20%20%22Ankara%2C%20Turkiye%22%3A%20(%22Ankara%2C%20Turkiye%22%2C%2039.9334%2C%2032.8597)%2C%0A%20%20%20%20%20%20%20%20%22San%20Diego%2C%20CA%22%3A%20(%22San%20Diego%2C%20CA%22%2C%2032.7157%2C%20-117.1611)%2C%0A%20%20%20%20%20%20%20%20%22Herzliya%2C%20Israel%22%3A%20(%22Herzliya%2C%20Israel%22%2C%2032.1663%2C%2034.8436)%2C%0A%20%20%20%20%20%20%20%20%22New%20Delhi%2C%20India%22%3A%20(%22New%20Delhi%2C%20India%22%2C%2028.6139%2C%2077.2090)%2C%0A%20%20%20%20%20%20%20%20%22Bay%20Area%2C%20CA%22%3A%20(%22Bay%20Area%2C%20CA%22%2C%2037.7749%2C%20-122.4194)%2C%0A%20%20%20%20%20%20%20%20%22Cologne%2C%20Germany%22%3A%20(%22Cologne%2C%20Germany%22%2C%2050.9375%2C%206.9603)%2C%0A%20%20%20%20%20%20%20%20%22Cuneo%2C%20Italy%22%3A%20(%22Cuneo%2C%20Italy%22%2C%2044.3841%2C%207.5426)%2C%0A%20%20%20%20%20%20%20%20%22Carlsbad%2C%20CA%22%3A%20(%22Carlsbad%2C%20CA%22%2C%2033.1581%2C%20-117.3506)%2C%0A%20%20%20%20%7D%0A%0A%20%20%20%20located%20%3D%20ambassadors.copy()%0A%20%20%20%20located%5B%5B%22City%22%2C%20%22lat%22%2C%20%22lon%22%5D%5D%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20located%5B%22Location%22%5D.map(CITY_COORDS).tolist()%2C%0A%20%20%20%20%20%20%20%20index%3Dlocated.index%2C%0A%20%20%20%20)%0A%0A%20%20%20%20%23%20Guard%3A%20a%20new%20roster%20entry%20with%20no%20CITY_COORDS%20key%20would%20silently%20vanish.%0A%20%20%20%20unmapped%20%3D%20located%5Blocated%5B%22lat%22%5D.isna()%5D%5B%22Location%22%5D.unique().tolist()%0A%20%20%20%20located%20%3D%20located.dropna(subset%3D%5B%22lat%22%5D)%0A%20%20%20%20return%20(located%2C)%0A%0A%0A%40app.cell%0Adef%20pins(located)%3A%0A%20%20%20%20pins%20%3D%20(%0A%20%20%20%20%20%20%20%20located.assign(%0A%20%20%20%20%20%20%20%20%20%20%20%20_block%3Dlambda%20d%3A%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%3Cb%3E%22%20%2B%20d%5B%22Name%22%5D%20%2B%20%22%3C%2Fb%3E%3Cbr%3E%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2B%20d%5B%22City%22%5D%20%2B%20%22%3Cbr%3E%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2B%20%22%3Ci%3E%22%20%2B%20d%5B%22Field%20%2F%20Niche%22%5D.fillna(%22Ambassador%22)%20%2B%20%22%3C%2Fi%3E%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.groupby(%5B%22City%22%2C%20%22lat%22%2C%20%22lon%22%5D%2C%20as_index%3DFalse)%0A%20%20%20%20%20%20%20%20.agg(n%3D(%22Name%22%2C%20%22size%22)%2C%20hover%3D(%22_block%22%2C%20%22%3Cbr%3E%3Cbr%3E%22.join))%0A%20%20%20%20%20%20%20%20.sort_values(%22City%22)%0A%20%20%20%20%20%20%20%20.reset_index(drop%3DTrue)%0A%20%20%20%20)%0A%20%20%20%20return%20(pins%2C)%0A%0A%0A%40app.cell%0Adef%20ambassador_map_cell(go%2C%20pins)%3A%0A%20%20%20%20ambassador_map%20%3D%20go.Figure(%0A%20%20%20%20%20%20%20%20go.Scattergeo(%0A%20%20%20%20%20%20%20%20%20%20%20%20lat%3Dpins%5B%22lat%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20lon%3Dpins%5B%22lon%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mode%3D%22text%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3D%22%F0%9F%93%8D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20textfont%3Ddict(size%3D22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20textposition%3D%22top%20center%22%2C%20%20%23%20pin%20tip%20lands%20on%20the%20city%0A%20%20%20%20%20%20%20%20%20%20%20%20hovertext%3Dpins%5B%22hover%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hoverinfo%3D%22text%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hoverlabel%3Ddict(bgcolor%3D%22white%22%2C%20bordercolor%3D%22%23d1495b%22%2C%20align%3D%22left%22)%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%0A%20%20%20%20ambassador_map.update_geos(%0A%20%20%20%20%20%20%20%20projection_type%3D%22natural%20earth%22%2C%0A%20%20%20%20%20%20%20%20showcountries%3DTrue%2C%0A%20%20%20%20%20%20%20%20countrycolor%3D%22%23c9ccd1%22%2C%0A%20%20%20%20%20%20%20%20showland%3DTrue%2C%0A%20%20%20%20%20%20%20%20landcolor%3D%22%23f4f2ee%22%2C%0A%20%20%20%20%20%20%20%20showocean%3DTrue%2C%0A%20%20%20%20%20%20%20%20oceancolor%3D%22%23e8eef4%22%2C%0A%20%20%20%20%20%20%20%20coastlinecolor%3D%22%23b8bcc2%22%2C%0A%20%20%20%20%20%20%20%20lataxis_range%3D%5B-58%2C%2084%5D%2C%0A%20%20%20%20)%0A%0A%20%20%20%20ambassador_map.update_layout(%0A%20%20%20%20%20%20%20%20margin%3Ddict(l%3D0%2C%20r%3D0%2C%20t%3D0%2C%20b%3D0)%2C%0A%20%20%20%20%20%20%20%20height%3D520%2C%0A%20%20%20%20%20%20%20%20paper_bgcolor%3D%22white%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20ambassador_map%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
9242c713edbcb9869d2187bc65861302