File size: 3,296 Bytes
ddef594
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
77
78
79
80
81
82
83
84
from flask import Flask, render_template, request, jsonify
import pandas as pd
import joblib

app = Flask(__name__)

# Load your trained model
model = joblib.load('crop_price_model (1).pkl')

# Load the geospatial data
geo_data = pd.read_csv('geodata.csv')  # Update with your actual CSV file path
states = geo_data['State'].unique().tolist()

# Sample crop list for demonstration; replace with actual crop data if needed
crops = ['Apple', 'Banana', 'Bhindi', 'Bitter Gourd', 'Brinjal', 'Cabbage', 'Capsicum',
         'Carrot', 'Cauliflower', 'Cluster Beans', 'Colacasia', 'Cucumbar', 'Dry Fodder',
         'French Beans', 'Grapes', 'Green Chilli', 'Green Fodder', 'Guava', 'Leafy Vegetable',
         'Lemon', 'Maize', 'Mango', 'Methi(Leaves)', 'Mousambi', 'Onion', 'Pear',
         'Pomegranate', 'Potato', 'Pumpkin', 'Raddish', 'Sponge Gourd', 'Sweet Potato',
         'Tinda', 'Tomato', 'Wheat', 'blackgram', 'chickpea', 'coconut', 'coffee',
         'cotton', 'jute', 'kidneybeans', 'lentil', 'mothbeans', 'mungbean',
         'muskmelon', 'orange', 'papaya', 'pigeonbeans', 'rice', 'watermelon']

# Create a LabelEncoder for the 'crop' column
crop_mapping = {
    'Apple': 0, 'Banana': 1, 'Bhindi': 2, 'Bitter Gourd': 3, 'Brinjal': 4,
    'Cabbage': 5, 'Capsicum': 6, 'Carrot': 7, 'Cauliflower': 8,
    'Cluster Beans': 9, 'Colacasia': 10, 'Cucumbar': 11,
    'Dry Fodder': 12, 'French Beans': 13, 'Grapes': 14,
    'Green Chilli': 15, 'Green Fodder': 16, 'Guava': 17,
    'Leafy Vegetable': 18, 'Lemon': 19, 'Maize': 20,
    'Mango': 21, 'Methi(Leaves)': 22, 'Mousambi': 23,
    'Onion': 24, 'Pear': 25, 'Pomegranate': 26, 'Potato': 27,
    'Pumpkin': 28, 'Raddish': 29, 'Sponge Gourd': 30,
    'Sweet Potato': 31, 'Tinda': 32, 'Tomato': 33, 'Wheat': 34,
    'blackgram': 35, 'chickpea': 36, 'coconut': 37, 'coffee': 38,
    'cotton': 39, 'jute': 40, 'kidneybeans': 41, 'lentil': 42,
    'mothbeans': 43, 'mungbean': 44, 'muskmelon': 45, 'orange': 46,
    'papaya': 47, 'pigeonbeans': 48, 'rice': 49, 'watermelon': 50
}


@app.route('/')
def index():
    return render_template('index.html', states=states, crops=crops)


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


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

    # Convert date to year
    year = pd.to_datetime(date).year

    # Encode the crop using the mapping
    crop_encoded = crop_mapping[crop]

    # Prepare input for model prediction
    input_data = pd.DataFrame({
        'year': [year],
        'crop': [crop_encoded],  # Use the encoded crop
        'production': [production]
    })

    # Use the model to make predictions
    predicted_price = model.predict(input_data)[0]  # Get the predicted price

    return jsonify({'predicted_price': predicted_price})


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