File size: 1,453 Bytes
4ed3661
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import gradio as gr
import pandas as pd
import plotly.express as px

def plot_real_estate(state):
    # Read the CSV file
    df = pd.read_csv('https://files.zillowstatic.com/research/public_csvs/zhvi/Zip_zhvi_uc_sfrcondo_tier_0.33_0.67_sm_sa_month.csv')

    # Filter for the given state
    df_state = df[df['State'] == state.upper()]

    # Extract unique ZIP codes for the state
    zip_codes = df_state['RegionName'].unique()

    # Prepare an empty figure for plotting
    fig = px.Figure()

    # Loop through each ZIP code and add a plot line
    for zip_code in zip_codes:
        df_zip = df_state[df_state['RegionName'] == zip_code]

        # Select the columns with dates and transpose the data
        df_zip = df_zip.loc[:, '2000-01-31':].T.reset_index()
        df_zip.columns = ['Date', 'Price']

        # Convert 'Date' to datetime
        df_zip['Date'] = pd.to_datetime(df_zip['Date'])

        # Add a line to the plot for this ZIP code
        fig.add_scatter(x=df_zip['Date'], y=df_zip['Price'], mode='lines', name=str(zip_code))

    # Update plot layout
    fig.update_layout(title=f'Housing Prices in {state}',
                      xaxis_title='Date',
                      yaxis_title='Price')
    return fig

iface = gr.Interface(fn=plot_real_estate,
                     inputs=[gr.components.Textbox(label="State (e.g., NJ for New Jersey)")],
                     outputs=gr.Plot())

iface.launch(share=False, debug=True)