Spaces:
Sleeping
Sleeping
| 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 ------------------------ | |
| 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.") | |