DataScienceEngineering/5-MapsAndProviders
0
1import gradio as gr2import pandas as pd3import plotly.graph_objects as go4from datasets import load_dataset5 6dataset = load_dataset('text', data_files={'train': ['NPI_2023_01_17-05.10.57.PM.csv'], 'test': 'NPI_2023_01_17-05.10.57.PM.csv'})7#1.6GB NPI file with MH therapy taxonomy provider codes (NUCC based) with human friendly replacement labels (e.g. Counselor rather than code)8datasetNYC = load_dataset("gradio/NYC-Airbnb-Open-Data", split="train")9df = datasetNYC.to_pandas()10 11def MatchText(pddf, name):12 pd.set_option("display.max_rows", None)13 data = pddf14 swith=data.loc[data['text'].str.contains(name, case=False, na=False)]15 return swith16 17def getDatasetFind(findString):18 #finder = dataset.filter(lambda example: example['text'].find(findString))19 finder = dataset['train'].filter(lambda example: example['text'].find(findString))20 finder = finder = finder.to_pandas()21 g1=MatchText(finder, findString)22 return g123 24def filter_map(min_price, max_price, boroughs):25 filtered_df = df[(df['neighbourhood_group'].isin(boroughs)) & (df['price'] > min_price) & (df['price'] < max_price)]26 names = filtered_df["name"].tolist()27 prices = filtered_df["price"].tolist()28 text_list = [(names[i], prices[i]) for i in range(0, len(names))]29 30 fig = go.Figure(go.Scattermapbox(31 customdata=text_list,32 lat=filtered_df['latitude'].tolist(),33 lon=filtered_df['longitude'].tolist(),34 mode='markers',35 marker=go.scattermapbox.Marker(36 size=637 ),38 hoverinfo="text",39 hovertemplate='Name: %{customdata[0]}Price: $%{customdata[1]}'40 ))41 42 fig.update_layout(43 mapbox_style="open-street-map",44 hovermode='closest',45 mapbox=dict(46 bearing=0,47 center=go.layout.mapbox.Center(48 lat=40.67,49 lon=-73.9050 ),51 pitch=0,52 zoom=953 ),54 )55 return fig56 57def centerMap(min_price, max_price, boroughs):58 filtered_df = df[(df['neighbourhood_group'].isin(boroughs)) & (df['price'] > min_price) & (df['price'] < max_price)]59 names = filtered_df["name"].tolist()60 prices = filtered_df["price"].tolist()61 text_list = [(names[i], prices[i]) for i in range(0, len(names))]62 63 latitude = 44.938264 longitude = -93.656165 66 fig = go.Figure(go.Scattermapbox(67 customdata=text_list,68 lat=filtered_df['latitude'].tolist(),69 lon=filtered_df['longitude'].tolist(), mode='markers',70 marker=go.scattermapbox.Marker(71 size=672 ),73 hoverinfo="text",74 #hovertemplate='Lat: %{lat} Long:%{lng} City: %{cityNm}'75 ))76 77 fig.update_layout(78 mapbox_style="open-street-map",79 hovermode='closest',80 mapbox=dict(81 bearing=0,82 center=go.layout.mapbox.Center(83 lat=latitude,84 lon=longitude85 ),86 pitch=0,87 zoom=988 ),89 )90 return fig91 92 93with gr.Blocks() as demo:94 with gr.Column():95 96 # Price/Boroughs/Map/Filter for AirBnB97 with gr.Row():98 min_price = gr.Number(value=250, label="Minimum Price")99 max_price = gr.Number(value=1000, label="Maximum Price")100 boroughs = gr.CheckboxGroup(choices=["Queens", "Brooklyn", "Manhattan", "Bronx", "Staten Island"], value=["Queens", "Brooklyn"], label="Select Boroughs:")101 btn = gr.Button(value="Update Filter")102 map = gr.Plot().style()103 104 # Mental Health Provider Finder105 with gr.Row():106 df20 = gr.Textbox(lines=4, default="", label="Find Mental Health Provider e.g. City/State/Name/License:")107 btn2 = gr.Button(value="Find")108 with gr.Row():109 df4 = gr.Dataframe(wrap=True, max_rows=10000, overflow_row_behaviour= "paginate")110 111 # City Map112 with gr.Row():113 df2 = gr.Textbox(lines=1, default="Mound", label="Find City:")114 latitudeUI = gr.Textbox(lines=1, default="44.9382", label="Latitude:")115 longitudeUI = gr.Textbox(lines=1, default="-93.6561", label="Longitude:")116 btn3 = gr.Button(value="Lat-Long")117 118 demo.load(filter_map, [min_price, max_price, boroughs], map)119 120 btn.click(filter_map, [min_price, max_price, boroughs], map)121 btn2.click(getDatasetFind,df20,df4 )122 # Lookup on US once you have city to get lat/long123 # US 55364 Mound Minnesota MN Hennepin 053 44.9382 -93.6561 4124 #latitude = 44.9382125 #longitude = -93.6561126 #btn3.click(centerMap, map)127 128 btn3.click(centerMap, [min_price, max_price, boroughs], map)129 130demo.launch()