File size: 2,446 Bytes
8f460b5
1840ab8
d481617
0897c41
d481617
b65fa3f
 
 
d481617
b65fa3f
 
1840ab8
f4ba322
b65fa3f
f4ba322
b65fa3f
 
 
 
 
f4ba322
 
 
 
 
 
 
 
b65fa3f
 
0897c41
 
 
b65fa3f
 
 
 
d481617
b65fa3f
 
 
 
 
d481617
b65fa3f
 
1840ab8
b65fa3f
 
f4ba322
b65fa3f
 
 
 
 
17e052c
b65fa3f
 
f4ba322
b65fa3f
 
 
 
 
 
 
f4ba322
 
 
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
import streamlit as st
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

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

# CSV path (Make sure this file is uploaded in Streamlit cloud if deployed)
csv_path = "crime_data.csv"

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

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

    # Preprocess
    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 string numbers to integers (if needed)
    for col in ['2018', '2019', '2020', '2021']:
        data[col] = pd.to_numeric(data[col], errors='coerce').fillna(0).astype(int)

    # Sidebar for user 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 starting year for prediction", 2022, 2026, 2022)

    # Perform prediction for selected state
    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)

    future_years = list(range(start_year, 2028))
    predictions = model.predict(pd.DataFrame({'Year': future_years}))

    # Prepare result DataFrame
    result_df = pd.DataFrame({
        'Year': future_years,
        'Predicted Crime Cases': [max(0, int(pred)) for pred in predictions]
    })

    st.subheader(f"📈 Predicted Crime Rate in {selected_state} ({start_year}–2027)")
    st.dataframe(result_df)

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

except FileNotFoundError:
    st.error(f"❌ File not found at path: {csv_path}. Please check the path.")