File size: 3,201 Bytes
d8bfaf2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from flask import Flask, request, render_template, jsonify
import joblib
import pandas as pd

app = Flask(__name__)

# Load the trained LightGBM model
lgb_model = joblib.load('lgb_model_cropseason.pkl')

url='https://drive.google.com/file/d/1_vd4HISZB2h2--CiXKezeWDXHHo2fY23/view?usp=sharing'
data = pd.read_csv('https://drive.usercontent.google.com/download?id={}&export=download&authuser=0&confirm=t'.format(url.split('/')[-2]))

# Extract unique values for states, districts, crops, and seasons
unique_states = data['State'].unique()
unique_crops = data['Crop'].unique()

# Descriptions for each cropping season
season_descriptions = {
    'Kharif': 'Kharif season occurs from June to October, associated with the monsoon. Crops are usually sown at the start of the rainy season.',
    'Rabi': 'Rabi season spans from October to March, during the winter cropping season, with crops like wheat and barley.',
    'Summer': 'Summer season is from April to June, suitable for crops that need warmer temperatures.',
    'Winter': 'Winter cropping season occurs from November to February, including cold-weather crops.',
    'Whole Year': 'Crops can be grown throughout the year, without seasonal limitations.',
    'Autumn': 'Autumn season, from September to November, accommodates crops suited to a post-monsoon environment.'
}

@app.route('/')
def home():
    return render_template('index.html', states=unique_states, crops=unique_crops, seasons=season_descriptions.keys())

@app.route('/filter_districts', methods=['POST'])
def filter_districts():
    state = request.form.get('state')
    filtered_districts = data[data['State'] == state]['District'].unique()
    return jsonify({'districts': list(filtered_districts)})

@app.route('/predict', methods=['POST'])
def predict():
    state = request.form.get('state')
    district = request.form.get('district')
    crop_year = int(request.form.get('crop_year'))
    crop = request.form.get('crop')
    area = float(request.form.get('area'))

    input_data = pd.DataFrame({
        'State': [state],
        'District': [district],
        'Crop_Year': [crop_year],
        'Crop': [crop],
        'Area': [area]
    })

    input_data['State'] = input_data['State'].astype('category')
    input_data['District'] = input_data['District'].astype('category')
    input_data['Crop'] = input_data['Crop'].astype('category')

    predicted_season = lgb_model.predict(input_data)[0]

    # Debug: print the predicted season to console
    print(f"Predicted Season: {predicted_season}")

    # Ensure the predicted season is treated as a string for matching
    predicted_season_str = str(predicted_season)  # Ensure it's a stri

    # Check if the predicted season is in the descriptions
    if predicted_season in season_descriptions:
        season_description = season_descriptions[predicted_season]
    else:
        season_description = 'No description available'

    return render_template('index.html', states=unique_states, crops=unique_crops, seasons=season_descriptions.keys(),
                           predicted_season=predicted_season, season_description=season_description)

if __name__ == '__main__':
    app.run(port=7860,host='0.0.0.0')