import streamlit as st import pandas as pd import plotly.express as px import plotly.graph_objects as go import numpy as np from datetime import datetime # Set page config st.set_page_config(page_title="مدیریت داده‌های مزارع", layout="wide") # Add custom CSS for RTL support and table styling st.markdown( """ """, unsafe_allow_html=True ) # Load CSV file @st.cache_data def load_data(): try: data = pd.read_csv('پایگاه داده.csv') return data except FileNotFoundError: return pd.DataFrame({ 'ردیف': [], 'کد نماینده': [], 'کانال': [], 'ادار': [], 'تولید': [], 'مساحت': [], 'مساحت زیرمجموعه': [], 'واریته': [], 'سن': [], 'ایام هفته': [], 'هفته': [] }) # Initialize session state if 'data' not in st.session_state: st.session_state.data = load_data() # Sidebar - Day and Week selection st.sidebar.header("انتخاب روز و هفته") days = ["شنبه", "یکشنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنجشنبه"] selected_day = st.sidebar.selectbox("روز هفته", days) selected_week = st.sidebar.selectbox("هفته", range(1, 23)) # Create tabs tab1, tab2 = st.tabs(["ورود داده", "مشاهده و تحلیل داده‌ها"]) with tab1: st.header(f"ورود داده‌ها - هفته {selected_week} - {selected_day}") # Filter data for selected day and week filtered_data = st.session_state.data[ (st.session_state.data['ایام هفته'] == selected_day) & (st.session_state.data['هفته'] == selected_week) ] if not st.session_state.data.empty else pd.DataFrame() # Create form for data entry with st.form("data_entry_form"): # Convert DataFrame to HTML table with input fields table_html = """ """ for idx, row in filtered_data.iterrows(): table_html += f""" """ table_html += "
ردیف کد نماینده کانال ادار تولید مساحت واریته سن ایستگاه 1 ایستگاه 2 ایستگاه 3 ایستگاه 4 ایستگاه 5
{row['ردیف']} {row['کد نماینده']} {row['کانال']} {row['ادار']} {row['تولید']} {row['مساحت']} {row['واریته']} {row['سن']}
" st.markdown(table_html, unsafe_allow_html=True) submitted = st.form_submit_button("ثبت اطلاعات") with tab2: if not st.session_state.data.empty: st.header("تحلیل داده‌ها") col1, col2 = st.columns(2) with col1: # Growth trend analysis st.subheader("روند رشد") fig_growth = px.line( st.session_state.data, x='هفته', y='ارتفاع هفته جاری', color='کانال', title='روند رشد بر اساس هفته' ) st.plotly_chart(fig_growth) with col2: # 3D surface plot st.subheader("نمودار سطح سه‌بعدی رشد") fig_3d = go.Figure(data=[go.Surface( z=st.session_state.data.pivot_table( values='ارتفاع هفته جاری', index='هفته', columns='کانال' ).values, colorscale='Viridis' )]) fig_3d.update_layout( scene=dict( xaxis_title='هفته', yaxis_title='کانال', zaxis_title='ارتفاع' ), title='نمودار سه‌بعدی رشد' ) st.plotly_chart(fig_3d) # Statistics st.subheader("آمار و تحلیل") col3, col4, col5 = st.columns(3) with col3: st.metric( "بیشترین رشد", f"{st.session_state.data['رشد هفته جاری'].max():.2f}" ) with col4: st.metric( "کمترین رشد", f"{st.session_state.data['رشد هفته جاری'].min():.2f}" ) with col5: st.metric( "میانگین رشد", f"{st.session_state.data['رشد هفته جاری'].mean():.2f}" ) # Detailed data table st.subheader("جدول داده‌های کامل") st.dataframe(st.session_state.data) # Download button for updated data if st.button("دانلود فایل CSV"): csv = st.session_state.data.to_csv(index=False).encode('utf-8-sig') st.download_button( label="دانلود", data=csv, file_name="پایگاه داده.csv", mime="text/csv" )