Spaces:
Sleeping
Sleeping
File size: 9,125 Bytes
1075a41 a3a8670 e6bdc5a 37f36df f8b04dc 0b37ad6 f8b04dc 0b37ad6 f8b04dc 0b37ad6 f8b04dc 0b37ad6 f8b04dc 0b37ad6 0e47109 0b37ad6 0e47109 0b37ad6 37f36df 0b37ad6 f8b04dc 37f36df f8b04dc 37f36df f8b04dc 37f36df 5cf160f f8b04dc 5cf160f fc53fed 5cf160f f8b04dc 5cf160f f8b04dc 0b37ad6 f8b04dc 5cf160f f8b04dc 5cf160f f8b04dc 0b37ad6 f8b04dc 0b37ad6 f8b04dc 0b37ad6 f8b04dc 0b37ad6 f8b04dc 0b37ad6 f8b04dc 0b37ad6 f8b04dc 0b37ad6 f8b04dc 5cf160f f8b04dc 0e47109 37f36df 5cf160f f8b04dc 5cf160f f8b04dc 5cf160f f8b04dc 5cf160f f8b04dc 37f36df f8b04dc 51e3217 f8b04dc 0b37ad6 |
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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
import streamlit as st
import pandas as pd
from datetime import datetime
import plotly.express as px
# Set page config
st.set_page_config(page_title="مدیریت دادههای مزارع", layout="wide")
# Add custom CSS for RTL support
st.markdown(
"""
<style>
@import url('https://fonts.googleapis.com/css2?family=Vazirmatn:wght@400;700&display=swap');
.main {
direction: rtl;
font-family: 'Vazirmatn', sans-serif;
}
.stSelectbox, .stMultiSelect, .stDateInput {
direction: rtl;
}
div[data-testid="stDataFrame"] {
direction: rtl;
}
.stTextInput > div > div > input {
direction: rtl;
text-align: right;
}
button, .stMarkdown {
direction: rtl;
text-align: right;
}
</style>
""", unsafe_allow_html=True
)
# Load CSV data
@st.cache_data
def load_data():
try:
df = pd.read_csv('پایگاه داده.csv')
return df
except FileNotFoundError:
st.error("فایل CSV یافت نشد. لطفا اطمینان حاصل کنید که فایل 'پایگاه داده.csv' در مسیر برنامه قرار دارد.")
return pd.DataFrame()
# Initialize session state
if 'data' not in st.session_state:
st.session_state.data = load_data()
def validate_input(value, field_type):
"""Validate input values"""
if field_type == 'numeric':
try:
val = float(value)
if val < 0:
return False, "مقدار نمیتواند منفی باشد"
return True, val
except:
return False, "لطفا یک عدد معتبر وارد کنید"
return True, value
def calculate_growth(current_height, previous_height):
"""Calculate growth between weeks"""
if current_height and previous_height:
return current_height - previous_height
return 0
# Sidebar filters
st.sidebar.header("فیلترها")
# Week and day selection
days = ["شنبه", "یکشنبه", "دوشنبه", "سهشنبه", "چهارشنبه", "پنجشنبه"]
weeks = list(range(1, 23))
selected_day = st.sidebar.selectbox("روز هفته", days)
selected_week = st.sidebar.selectbox("هفته", weeks)
# Main content
st.title("سیستم مدیریت دادههای مزارع")
# Create tabs for different sections
tab1, tab2, tab3 = st.tabs(["ورود داده", "مشاهده دادهها", "نمودارها"])
with tab1:
with st.form("data_entry"):
col1, col2, col3 = st.columns(3)
with col1:
farm = st.text_input("مزرعه")
channel = st.text_input("کانال")
department = st.text_input("اداره")
age = st.number_input("سن", min_value=0)
variety = st.text_input("واریته")
area = st.number_input("مساحت", min_value=0.0)
sub_area = st.number_input("مساحت زیرمجموعه", min_value=0.0)
group = st.text_input("گروه")
with col2:
station1 = st.number_input("ایستگاه 1", min_value=0.0)
station2 = st.number_input("ایستگاه 2", min_value=0.0)
station3 = st.number_input("ایستگاه 3", min_value=0.0)
station4 = st.number_input("ایستگاه 4", min_value=0.0)
station5 = st.number_input("ایستگاه 5", min_value=0.0)
with col3:
current_height = st.number_input("ارتفاع هفته جاری", min_value=0.0)
previous_height = st.number_input("ارتفاع هفته گذشته", min_value=0.0)
nitrogen = st.number_input("نیتروژن فعلی", min_value=0.0)
nitrogen_std_current = st.number_input("نیتروژن استاندارد فعلی", min_value=0.0)
nitrogen_prev = st.number_input("نیتروژن قبلی", min_value=0.0)
nitrogen_std_prev = st.number_input("نیتروژن استاندارد قبلی", min_value=0.0)
moisture = st.number_input("رطوبت غلاف فعلی", min_value=0.0)
moisture_std_current = st.number_input("رطوبت استاندارد فعلی", min_value=0.0)
moisture_prev = st.number_input("رطوبت غلاف قبلی", min_value=0.0)
moisture_std_prev = st.number_input("رطوبت استاندارد قبلی", min_value=0.0)
well1 = st.number_input("چاهک 1", min_value=0.0)
well1_date = st.date_input("تاریخ قرائت 1")
well2 = st.number_input("چاهک 2", min_value=0.0)
well2_date = st.date_input("تاریخ قرائت 2")
submitted = st.form_submit_button("ثبت اطلاعات")
if submitted:
# Calculate growth rate
growth_rate = calculate_growth(current_height, previous_height)
# Create new data entry
new_data = {
'مزرعه': farm,
'کانال': channel,
'اداره': department,
'سن': age,
'واریته': variety,
'مساحت': area,
'مساحت زیرمجموعه': sub_area,
'گروه': group,
'ایستگاه 1': station1,
'ایستگاه 2': station2,
'ایستگاه 3': station3,
'ایستگاه 4': station4,
'ایستگاه 5': station5,
'ارتفاع هفته جاری': current_height,
'ارتفاع هفته گذشته': previous_height,
'رشد هفته جاری': growth_rate,
'نیتروژن فعلی': nitrogen,
'نیتروژن استاندارد فعلی': nitrogen_std_current,
'نیتروژن قبلی': nitrogen_prev,
'نیتروژن استاندارد قبلی': nitrogen_std_prev,
'رطوبت غلاف فعلی': moisture,
'رطوبت استاندارد فعلی': moisture_std_current,
'رطوبت غلاف قبلی': moisture_prev,
'رطوبت استاندارد قبلی': moisture_std_prev,
'چاهک 1': well1,
'تاریخ قرائت 1': well1_date.strftime('%Y-%m-%d'),
'چاهک 2': well2,
'تاریخ قرائت 2': well2_date.strftime('%Y-%m-%d'),
}
# Update session state
st.session_state.data = pd.concat([
st.session_state.data,
pd.DataFrame([new_data])
], ignore_index=True)
st.success("اطلاعات با موفقیت ثبت شد")
st.session_state.data.to_csv('پایگاه داده.csv', index=False)
with tab2:
if not st.session_state.data.empty:
# Add filters
col1, col2 = st.columns(2)
with col1:
if 'اداره' in st.session_state.data.columns:
dept_filter = st.multiselect(
'فیلتر بر اساس اداره',
options=st.session_state.data['اداره'].unique()
)
with col2:
if 'واریته' in st.session_state.data.columns:
variety_filter = st.multiselect(
'فیلتر بر اساس واریته',
options=st.session_state.data['واریته'].unique()
)
# Apply filters
filtered_data = st.session_state.data.copy()
if dept_filter:
filtered_data = filtered_data[filtered_data['اداره'].isin(dept_filter)]
if variety_filter:
filtered_data = filtered_data[filtered_data['واریته'].isin(variety_filter)]
# Display filtered data
st.dataframe(filtered_data)
# Download button
csv = filtered_data.to_csv(index=False).encode('utf-8-sig')
st.download_button(
label="دانلود دادهها",
data=csv,
file_name="پایگاه داده.csv",
mime="text/csv"
)
with tab3:
if not st.session_state.data.empty:
# Growth trend chart
st.subheader("نمودار رشد")
fig1 = px.line(
st.session_state.data,
x='ایام هفته',
y='ارتفاع هفته جاری',
color='مزرعه',
title='روند رشد بر اساس هفته'
)
st.plotly_chart(fig1)
# Station measurements comparison
st.subheader("مقایسه ایستگاهها")
station_data = st.session_state.data[['ایستگاه 1', 'ایستگاه 2', 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5']]
fig2 = px.box(station_data, title='مقایسه اندازهگیریهای ایستگاهها')
st.plotly_chart(fig2)
# Add error handling
st.error("در صورت بروز خطا، لطفا صفحه را رفرش کنید")
|