Spaces:
Sleeping
Sleeping
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 | |
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("در صورت بروز خطا، لطفا صفحه را رفرش کنید") | |