test_4 / model_interface /a_15_activity_date_planner.py
swaraj shinde
test_4
3740f44
Raw
History Blame Contribute Delete
3.7 kB
import streamlit as st
import pandas as pd
import joblib
from datetime import datetime, timedelta
from model_interface.hf_model_store import get_artifact_path
from datetime import datetime, timedelta
def activity_date_planner():
st.title("πŸ“… Activity Date Planner")
# ------------------------ FUNCTION: LOAD DATA ------------------------
@st.cache_data
def load_crop_data():
file_path = "15_activity_date_planner/test8.xlsx" # Replace with your actual file path
return pd.read_excel(get_artifact_path(file_path))
# ------------------------ FUNCTION: CALCULATE ACTIVITY COUNTS ------------------------
def calculate_counts(crop_name, planting_date_str, crop_data):
planting_date = datetime.strptime(planting_date_str, "%Y-%m-%d")
results = []
crop_activities = crop_data[crop_data['Crop_Name'] == crop_name]
for _, activity in crop_activities.iterrows():
# First activity date
activity_date = planting_date + timedelta(days=activity['Harvesting_Durations'])
activity_dates = [activity_date.strftime("%Y-%m-%d")]
# Calculate subsequent activity dates
for _ in range(1, int(activity['Repetition_count'])):
if activity['Mean_Activity_difference_days'] > 0:
activity_date += timedelta(days=activity['Mean_Activity_difference_days'])
activity_dates.append(activity_date.strftime("%Y-%m-%d"))
# Before / After planting counts
before_count = sum(datetime.strptime(d, "%Y-%m-%d") < planting_date for d in activity_dates)
after_count = sum(datetime.strptime(d, "%Y-%m-%d") > planting_date for d in activity_dates)
results.append({
'Crop Name': activity['Crop_Name'],
'Activity': activity['Activity'],
'Activities_Before_Planting': before_count,
'Activities_After_Planting': after_count,
'Avg_Activity_Gap_Days': activity['Mean_Activity_difference_days'],
'Total Activity Repetitions': activity['Repetition_count'],
'Days After Planting (First Activity)': activity['Harvesting_Durations'],
'Scheduled Activity Dates': activity_dates
})
return results
# ------------------------ STREAMLIT UI ------------------------
df = load_crop_data()
crop_names = sorted(df['Crop_Name'].unique())
selected_crop = st.selectbox("🌱 Select Crop Name", crop_names)
planting_date = st.date_input("πŸ“… Select Planting Date", min_value=datetime.today())
planting_date_str = planting_date.strftime("%Y-%m-%d")
if st.button("πŸ”„ Generate Schedule"):
result = calculate_counts(selected_crop, planting_date_str, df)
if result:
result_df = pd.DataFrame(result)
# Expand Scheduled Activity Dates into separate columns dynamically
max_reps = result_df['Total Activity Repetitions'].max()
activity_dates_expanded = pd.DataFrame(
result_df['Scheduled Activity Dates'].apply(
lambda x: x + [''] * (max_reps - len(x))
).tolist(),
columns=[f"Scheduled Activity Date {i+1}" for i in range(max_reps)]
)
# Merge expanded dates with main result dataframe
final_df = pd.concat([result_df.drop(columns=['Scheduled Activity Dates']), activity_dates_expanded], axis=1)
st.subheader("πŸ“‹ Activity Schedule")
st.dataframe(final_df)
else:
st.warning("⚠️ No data found for the selected crop.")