import streamlit as st import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import plotly.graph_objects as go from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression # Page Configuration st.set_page_config(page_title="Agriculture and Crop Monitoring", layout="wide") # Prediction Function def predict_growth(crop_data, weeks_to_predict=8): X = crop_data[['هفته', 'رشد']].dropna().values y = crop_data['رشد'].dropna().values model = LinearRegression() model.fit(X, y) future_weeks = [[week, crop_data[crop_data['هفته'] == week]['رشد'].mean()] for week in range(1, weeks_to_predict + 1)] future_weeks_df = pd.DataFrame(future_weeks, columns=['هفته', 'رشد']) predictions = model.predict(future_weeks_df) future_weeks_df['Prediction Growth'] = predictions return future_weeks_df # Sidebar st.sidebar.title("Menu") menu = st.sidebar.selectbox("Choose an option", ["Show Charts", "Predict Crop Growth using Machine Learning", "Chat Bot"]) # Chat Bot if menu == "Chat Bot": st.sidebar.markdown(""" """, unsafe_allow_html=True) # Show Charts elif menu == "Show Charts": st.title("Charts and Graphs of Sugarcane Farm Growth and Height") if 'crop_data' not in st.session_state: uploaded_file = st.file_uploader("Upload growth and height data file", type="csv") if uploaded_file: st.session_state.crop_data = pd.read_csv(uploaded_file) st.write("Growth and height data uploaded.") else: crop_data = st.session_state.crop_data farms = crop_data['مزرعه'].unique() selected_farm = st.selectbox("Select Farm", farms) farm_data = crop_data[crop_data['مزرعه'] == selected_farm] st.subheader("Growth and Height of Plant Over Different Weeks") fig, ax = plt.subplots(1, 2, figsize=(14, 6)) sns.lineplot(x="هفته", y="رشد", data=farm_data, ax=ax[0], color="b") ax[0].set_title("Plant Growth") ax[0].set_xlabel("Week") ax[0].set_ylabel("Growth") sns.lineplot(x="هفته", y="ارتفاع", data=farm_data, ax=ax[1], color="g") ax[1].set_title("Plant Height") ax[1].set_xlabel("Week") ax[1].set_ylabel("Height") st.pyplot(fig) st.subheader("3D Plant Height Chart") fig = go.Figure(data=[go.Surface(z=farm_data.pivot(index='هفته', columns='مزرعه', values='ارتفاع').values)]) fig.update_layout( title='3D Plant Height Chart', autosize=True, scene=dict( zaxis_title='Height', xaxis_title='Week', yaxis_title='Farm' ), margin=dict(l=65, r=50, b=65, t=90) ) st.plotly_chart(fig) # Predict Crop Growth using Machine Learning elif menu == "Predict Crop Growth using Machine Learning": st.title("Predict Crop Growth using Machine Learning") if 'crop_data' not in st.session_state: uploaded_file = st.file_uploader("Upload growth and height data file", type="csv") if uploaded_file: st.session_state.crop_data = pd.read_csv(uploaded_file) st.write("Growth and height data uploaded.") else: crop_data = st.session_state.crop_data farms = crop_data['مزرعه'].unique() selected_farm = st.selectbox("Select Farm", farms) farm_data = crop_data[crop_data['مزرعه'] == selected_farm] predicted_growth = predict_growth(farm_data) st.subheader("Predicted Growth for Week 8") st.write(predicted_growth) st.subheader("Predicted Growth Chart") fig, ax = plt.subplots(figsize=(10, 6)) sns.lineplot(x=predicted_growth['هفته'], y=predicted_growth['Prediction Growth'], ax=ax, color="m") ax.set_title("Predicted Growth") ax.set_xlabel("Week") ax.set_ylabel("Predicted Growth") st.pyplot(fig)