Esmaeilkianii commited on
Commit
5cf160f
·
verified ·
1 Parent(s): 37f36df

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +98 -135
app.py CHANGED
@@ -2,152 +2,115 @@ import streamlit as st
2
  import pandas as pd
3
  from datetime import datetime
4
  import plotly.express as px
 
 
5
 
6
- # Set page config
7
- st.set_page_config(page_title="مدیریت داده‌های مزارع", layout="wide", direction="rtl")
8
 
9
- # Add custom CSS for RTL support
10
- st.markdown(
11
- """
12
- <style>
13
- .stSelectbox, .stMultiSelect {
14
- direction: rtl;
15
- }
16
- div[data-testid="stDataFrame"] {
17
- direction: rtl;
18
- }
19
- </style>
20
- """, unsafe_allow_html=True
21
- )
22
 
23
  # Initialize session state
24
  if 'data' not in st.session_state:
25
- # Create sample DataFrame or load from CSV
26
- st.session_state.data = pd.DataFrame({
27
- 'مزرعه': [], 'کانال': [], 'اداره': [], 'سن': [],
28
- 'واریته': [], 'مساحت': [], 'مساحت زیرمجموعه': [],
29
- 'گروه': [], 'ایام هفته': []
30
- })
31
 
32
- def validate_input(value, field_type):
33
- """Validate input values based on field type"""
34
- if field_type == 'numeric':
35
- try:
36
- val = float(value)
37
- if val < 0:
38
- return False, "مقدار نمی‌تواند منفی باشد"
39
- return True, val
40
- except:
41
- return False, "لطفا یک عدد معتبر وارد کنید"
42
- return True, value
43
 
44
- def calculate_growth(current_height, previous_height):
45
- """Calculate growth rate"""
46
- if current_height and previous_height:
47
- return current_height - previous_height
48
- return 0
49
 
50
- # Sidebar filters
51
- st.sidebar.header("فیلترها")
52
-
53
- # Week and day selection
54
- days = ["شنبه", "یکشنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنجشنبه"]
55
- weeks = list(range(1, 23))
56
-
57
- selected_day = st.sidebar.selectbox("روز هفته", days)
58
- selected_week = st.sidebar.selectbox("هفته", weeks)
59
-
60
- # Main content
61
- st.title("سیستم مدیریت داده‌های مزارع")
62
-
63
- # Data entry form
64
- with st.form("data_entry"):
65
- col1, col2, col3 = st.columns(3)
66
-
67
- with col1:
68
- station1 = st.number_input("ایستگاه 1", min_value=0.0)
69
- station2 = st.number_input("ایستگاه 2", min_value=0.0)
70
- station3 = st.number_input("ایستگاه 3", min_value=0.0)
71
-
72
- with col2:
73
- station4 = st.number_input("ایستگاه 4", min_value=0.0)
74
- station5 = st.number_input("ایستگاه 5", min_value=0.0)
75
- current_height = st.number_input("ارتفاع هفته جاری", min_value=0.0)
76
 
77
- with col3:
78
- previous_height = st.number_input("ارتفاع هفته گذشته", min_value=0.0)
79
- nitrogen = st.number_input("نیتروژن فعلی", min_value=0.0)
80
- moisture = st.number_input("رطوبت غلاف فعلی", min_value=0.0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
 
82
- submitted = st.form_submit_button("ثبت اطلاعات")
83
-
84
- if submitted:
85
- # Validate and calculate
86
- growth_rate = calculate_growth(current_height, previous_height)
87
-
88
- # Add to DataFrame
89
- new_data = {
90
- 'ایستگاه 1': station1,
91
- 'ایستگاه 2': station2,
92
- 'ایستگاه 3': station3,
93
- 'ایستگاه 4': station4,
94
- 'ایستگاه 5': station5,
95
- 'ارتفاع هفته جاری': current_height,
96
- 'ارتفاع هفته گذشته': previous_height,
97
- 'رشد': growth_rate,
98
- 'نیتروژن': nitrogen,
99
- 'رطوبت': moisture,
100
- 'هفته': selected_week,
101
- 'روز': selected_day
102
- }
103
 
104
- # Update session state
105
- st.session_state.data = pd.concat([
106
- st.session_state.data,
107
- pd.DataFrame([new_data])
108
- ], ignore_index=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
 
110
- st.success("اطلاعات با موفقیت ثبت شد")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
 
112
- # Display data
113
- if not st.session_state.data.empty:
114
- st.subheader("داده‌های ثبت شده")
115
- st.dataframe(st.session_state.data)
116
-
117
- # Download button
118
- csv = st.session_state.data.to_csv(index=False)
119
- st.download_button(
120
- label="دانلود داده‌ها",
121
- data=csv,
122
- file_name="پایگاه داده.csv",
123
- mime="text/csv"
124
- )
125
-
126
- # Visualizations
127
- if len(st.session_state.data) > 0:
128
- st.subheader("نمودار رشد")
129
- fig = px.line(
130
- st.session_state.data,
131
- x='هفته',
132
- y='ارتفاع هفته جاری',
133
- title='روند رشد بر اساس هفته'
134
- )
135
- st.plotly_chart(fig)
136
 
137
- # Add data filtering
138
- st.sidebar.subheader("فیلتر داده‌ها")
139
- if not st.session_state.data.empty:
140
- filtered_data = st.session_state.data.copy()
141
-
142
- # Add filter widgets
143
- for column in ['اداره', 'واریته', 'گروه']:
144
- if column in filtered_data.columns:
145
- values = ['همه'] + list(filtered_data[column].unique())
146
- selected = st.sidebar.selectbox(f"فیلتر بر اساس {column}", values)
147
-
148
- if selected != 'همه':
149
- filtered_data = filtered_data[filtered_data[column] == selected]
150
-
151
- if not filtered_data.empty:
152
- st.subheader("داده‌های فیلتر شده")
153
- st.dataframe(filtered_data)
 
2
  import pandas as pd
3
  from datetime import datetime
4
  import plotly.express as px
5
+ import plotly.graph_objects as go
6
+ from io import BytesIO
7
 
8
+ # Page configuration
9
+ st.set_page_config(page_title="مدیریت داده‌های مزرعه", layout="wide")
10
 
11
+ # Load data
12
+ @st.cache_data
13
+ def load_data():
14
+ try:
15
+ df = pd.read_csv('پایگاه داده.csv')
16
+ return df
17
+ except Exception as e:
18
+ st.error(f"Error loading data: {str(e)}")
19
+ return pd.DataFrame()
 
 
 
 
20
 
21
  # Initialize session state
22
  if 'data' not in st.session_state:
23
+ st.session_state.data = load_data()
 
 
 
 
 
24
 
25
+ # Main title
26
+ st.title("سیستم مدیریت داده‌های مزرعه")
 
 
 
 
 
 
 
 
 
27
 
28
+ # Create three tabs
29
+ tab1, tab2, tab3 = st.tabs(["اطلاعات پایه", "اطلاعات نیتروژن", "اطلاعات ایستگاه‌ها"])
 
 
 
30
 
31
+ with tab1:
32
+ # Basic Information Form
33
+ st.subheader("ورود اطلاعات پایه")
34
+ with st.form("basic_info_form"):
35
+ col1, col2, col3 = st.columns(3)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
+ with col1:
38
+ farm_id = st.text_input("نماینده")
39
+ channel = st.text_input("کانال")
40
+ department = st.text_input("اداره")
41
+
42
+ with col2:
43
+ production = st.text_input("تولید")
44
+ area = st.number_input("مساحت داشت", 0.0)
45
+ sub_area = st.number_input("مساحت زیرمجموعه", 0.0)
46
+
47
+ with col3:
48
+ variety = st.text_input("واریته")
49
+ age = st.text_input("سن")
50
+ date = st.date_input("تاریخ برداشت")
51
+
52
+ submit_basic = st.form_submit_button("ثبت اطلاعات پایه")
53
+ if submit_basic:
54
+ st.success("اطلاعات پایه با موفقیت ثبت شد")
55
 
56
+ with tab2:
57
+ # Nitrogen Information Form
58
+ st.subheader("ورود اطلاعات نیتروژن")
59
+ with st.form("nitrogen_info_form"):
60
+ col1, col2 = st.columns(2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
+ with col1:
63
+ nitrogen_current = st.number_input("نیتروژن فعلی", 0.0)
64
+ nitrogen_std = st.number_input("نیتروژن استاندارد قبلی", 0.0)
65
+ nitrogen_prev = st.number_input("نیتروژن قبلی", 0.0)
66
+
67
+ with col2:
68
+ nitrogen_std_prev = st.number_input("نیتروژن استاندارد قبلی فعلی", 0.0)
69
+ moisture_current = st.number_input("رطوبت فعلی", 0.0)
70
+ moisture_std = st.number_input("رطوبت استاندارد قبلی", 0.0)
71
+
72
+ submit_nitrogen = st.form_submit_button("ثبت اطلاعات نیتروژن")
73
+ if submit_nitrogen:
74
+ st.success("اطلاعات نیتروژن با موفقیت ثبت شد")
75
+
76
+ with tab3:
77
+ # Station Information Form
78
+ st.subheader("ورود اطلاعات ایستگاه‌ها")
79
+ with st.form("station_info_form"):
80
+ col1, col2, col3 = st.columns(3)
81
 
82
+ with col1:
83
+ station1 = st.number_input("ایستگاه ۱", 0.0)
84
+ station2 = st.number_input("ایستگاه ۲", 0.0)
85
+ station3 = st.number_input("ایستگاه ۳", 0.0)
86
+
87
+ with col2:
88
+ station4 = st.number_input("ایستگاه ۴", 0.0)
89
+ station5 = st.number_input("ایستگاه ۵", 0.0)
90
+ height_current = st.number_input("ارتفاع هفته جاری", 0.0)
91
+
92
+ with col3:
93
+ height_prev = st.number_input("ارتفاع هفته گذشته", 0.0)
94
+ growth_current = st.number_input("رشد هفته جاری", 0.0)
95
+ growth_prev = st.number_input("رشد هفته گذشته", 0.0)
96
+
97
+ submit_station = st.form_submit_button("ثبت اطلاعات ایستگاه‌ها")
98
+ if submit_station:
99
+ st.success("اطلاعات ایستگاه‌ها با موفقیت ثبت شد")
100
 
101
+ # Display data table
102
+ st.header("نمایش داده‌ها")
103
+ st.dataframe(st.session_state.data)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
 
105
+ # Export functionality
106
+ st.header("خروجی داده‌ها")
107
+ if st.button("دانلود داده‌ها"):
108
+ output = BytesIO()
109
+ st.session_state.data.to_excel(output, index=False)
110
+ output.seek(0)
111
+ st.download_button(
112
+ label="دانلود فایل اکسل",
113
+ data=output,
114
+ file_name=f"farm_data_export_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx",
115
+ mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
116
+ )