File size: 2,831 Bytes
8f460b5
1840ab8
d481617
0897c41
d481617
17e052c
f4ba322
 
d481617
17e052c
353254e
1840ab8
f4ba322
17e052c
f4ba322
1840ab8
f4ba322
 
1840ab8
17e052c
f4ba322
 
 
 
 
 
 
 
1840ab8
17e052c
0897c41
 
 
17e052c
0897c41
 
17e052c
d481617
17e052c
0897c41
 
 
 
d481617
0897c41
 
1840ab8
17e052c
 
0897c41
 
 
 
 
f4ba322
17e052c
 
 
 
 
 
0897c41
f4ba322
17e052c
 
 
 
 
 
 
f4ba322
 
 
17e052c
 
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import streamlit as st
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# Page configuration
st.set_page_config(page_title="Crime Rate Prediction", layout="wide")
st.title("📊 Crime Rate Prediction Based on Past Data")

# CSV path (ensure the file is accessible or uploaded in cloud deployment)
csv_path = "https://huggingface.co/spaces/MLDeveloper/crime_rate_predicition/resolve/main/RS_Session_255_AS_116.1%20(2).csv"

try:
    # Load dataset
    df = pd.read_csv(csv_path)

    st.subheader("📄 Raw Dataset")
    st.dataframe(df)

    # Preprocessing
    data = df[[
        'State/UT',
        'Number of Cases Registered - 2018-19',
        'Number of Cases Registered - 2019-20',
        'Number of Cases Registered - 2020-21',
        'Number of Cases Registered - 2021-22 (up to 31.10.2021)'
    ]].copy()
    data.columns = ['State/UT', '2018', '2019', '2020', '2021']

    # Convert to numeric
    for col in ['2018', '2019', '2020', '2021']:
        data[col] = pd.to_numeric(data[col], errors='coerce').fillna(0).astype(int)

    # Sidebar input
    st.sidebar.header("🔍 Predict Future Crime")
    selected_state = st.sidebar.selectbox("Select a State/UT", data['State/UT'].unique())
    start_year = st.sidebar.slider("Select a year to predict", 2022, 2027, 2022)

    # Filter and train model
    selected_row = data[data['State/UT'] == selected_state].iloc[0]
    years = [2018, 2019, 2020, 2021]
    X_train = pd.DataFrame({'Year': years})
    y_train = selected_row[['2018', '2019', '2020', '2021']].values

    model = LinearRegression()
    model.fit(X_train, y_train)

    # Predict future crime rates
    future_years = list(range(2022, 2028))
    predictions = model.predict(pd.DataFrame({'Year': future_years}))
    result_df = pd.DataFrame({
        'Year': future_years,
        'Predicted Crime Cases': [max(0, int(pred)) for pred in predictions]
    })

    # Display single year result
    selected_year_prediction = result_df[result_df['Year'] == start_year]['Predicted Crime Cases'].values[0]
    st.success(f"📌 **Predicted Crime Rate in {selected_state} for the year {start_year}: {selected_year_prediction} cases**")

    # Show full table
    st.subheader(f"📈 Predicted Crime Rate in {selected_state} (2022–2027)")
    st.dataframe(result_df)

    # Line chart
    fig, ax = plt.subplots()
    ax.plot(result_df['Year'], result_df['Predicted Crime Cases'], marker='o', linestyle='--', color='teal')
    ax.set_xlabel("Year")
    ax.set_ylabel("Predicted Crime Cases")
    ax.set_title(f"Crime Trend Prediction for {selected_state}")
    st.pyplot(fig)

except FileNotFoundError:
    st.error(f"❌ File not found at path: {csv_path}. Please check the path.")
except Exception as e:
    st.error(f"⚠️ An error occurred: {e}")