Spaces:
Configuration error
Configuration error
Update app.py
Browse files
app.py
CHANGED
|
@@ -244,6 +244,15 @@ def display_metric_card(title, value, icon="📊"):
|
|
| 244 |
</div>
|
| 245 |
""", unsafe_allow_html=True)
|
| 246 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
# تابع برای بارگذاری دادههای مزارع نیشکر
|
| 248 |
def load_farm_data():
|
| 249 |
try:
|
|
@@ -253,6 +262,19 @@ def load_farm_data():
|
|
| 253 |
# بارگذاری فایل پایگاه داده مزارع
|
| 254 |
farm_database = pd.read_csv('پایگاه داده (1).csv')
|
| 255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 256 |
# ادغام دادهها بر اساس ستون مزرعه
|
| 257 |
merged_data = pd.merge(farm_database, farm_coordinates, on='مزرعه', how='inner')
|
| 258 |
|
|
@@ -518,13 +540,35 @@ with tabs[0]:
|
|
| 518 |
display_metric_card("تعداد واریتهها", unique_varieties, "🌿")
|
| 519 |
|
| 520 |
with col3:
|
| 521 |
-
|
| 522 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 523 |
|
| 524 |
with col4:
|
| 525 |
if 'مساحت' in merged_data.columns:
|
| 526 |
-
|
| 527 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 528 |
else:
|
| 529 |
display_metric_card("تعداد کانالها", len(merged_data['کانال'].unique()) if 'کانال' in merged_data.columns else "نامشخص", "🚿")
|
| 530 |
|
|
@@ -2019,7 +2063,7 @@ with tabs[5]:
|
|
| 2019 |
'user_id': list(range(1, 6)),
|
| 2020 |
'username': ['admin', 'user1', 'user2', 'user3', 'user4'],
|
| 2021 |
'name': ['مدیر سیستم', 'کاربر یک', 'کاربر دو', 'کاربر سه', 'کاربر چهار'],
|
| 2022 |
-
'role': ['مدیر', 'کارشناس', '
|
| 2023 |
'last_login': [
|
| 2024 |
(datetime.now() - timedelta(hours=2)).strftime('%Y-%m-%d %H:%M'),
|
| 2025 |
(datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d %H:%M'),
|
|
|
|
| 244 |
</div>
|
| 245 |
""", unsafe_allow_html=True)
|
| 246 |
|
| 247 |
+
# تابع برای تبدیل ستون به مقادیر عددی با مدیریت خطا
|
| 248 |
+
def convert_to_numeric(df, column_name):
|
| 249 |
+
try:
|
| 250 |
+
# تلاش برای تبدیل ستون به عدد و جایگزینی خطاها با NaN
|
| 251 |
+
return pd.to_numeric(df[column_name], errors='coerce')
|
| 252 |
+
except Exception as e:
|
| 253 |
+
st.warning(f"خطا در تبدیل ستون {column_name} به عدد: {e}")
|
| 254 |
+
return pd.Series([np.nan] * len(df))
|
| 255 |
+
|
| 256 |
# تابع برای بارگذاری دادههای مزارع نیشکر
|
| 257 |
def load_farm_data():
|
| 258 |
try:
|
|
|
|
| 262 |
# بارگذاری فایل پایگاه داده مزارع
|
| 263 |
farm_database = pd.read_csv('پایگاه داده (1).csv')
|
| 264 |
|
| 265 |
+
# تبدیل ستونهای عددی به عدد با مدیریت خطا
|
| 266 |
+
if 'سن' in farm_coordinates.columns:
|
| 267 |
+
farm_coordinates['سن'] = convert_to_numeric(farm_coordinates, 'سن')
|
| 268 |
+
|
| 269 |
+
if 'سن' in farm_database.columns:
|
| 270 |
+
farm_database['سن'] = convert_to_numeric(farm_database, 'سن')
|
| 271 |
+
|
| 272 |
+
if 'مساحت' in farm_database.columns:
|
| 273 |
+
farm_database['مساحت'] = convert_to_numeric(farm_database, 'مساحت')
|
| 274 |
+
|
| 275 |
+
if 'مساحت زیرمجموعه' in farm_database.columns:
|
| 276 |
+
farm_database['مساحت زیرمجموعه'] = convert_to_numeric(farm_database, 'مساحت زیرمجموعه')
|
| 277 |
+
|
| 278 |
# ادغام دادهها بر اساس ستون مزرعه
|
| 279 |
merged_data = pd.merge(farm_database, farm_coordinates, on='مزرعه', how='inner')
|
| 280 |
|
|
|
|
| 540 |
display_metric_card("تعداد واریتهها", unique_varieties, "🌿")
|
| 541 |
|
| 542 |
with col3:
|
| 543 |
+
# محاسبه میانگین سن با مدیریت خطا
|
| 544 |
+
try:
|
| 545 |
+
age_column = 'سن_x' if 'سن_x' in merged_data.columns else 'سن'
|
| 546 |
+
# تبدیل به عدد با مدیریت خطا
|
| 547 |
+
age_values = pd.to_numeric(merged_data[age_column], errors='coerce')
|
| 548 |
+
# محاسبه میانگین با نادیده گرفتن مقادیر NaN
|
| 549 |
+
avg_age = age_values.mean()
|
| 550 |
+
if pd.isna(avg_age):
|
| 551 |
+
display_metric_card("میانگین سن", "نامشخص", "📅")
|
| 552 |
+
else:
|
| 553 |
+
display_metric_card("میانگین سن", f"{avg_age:.1f} سال", "📅")
|
| 554 |
+
except Exception as e:
|
| 555 |
+
st.warning(f"خطا در محاسبه میانگین سن: {e}")
|
| 556 |
+
display_metric_card("میانگین سن", "نامشخص", "📅")
|
| 557 |
|
| 558 |
with col4:
|
| 559 |
if 'مساحت' in merged_data.columns:
|
| 560 |
+
try:
|
| 561 |
+
# تبدیل به عدد با مدیریت خطا
|
| 562 |
+
area_values = pd.to_numeric(merged_data['مساحت'], errors='coerce')
|
| 563 |
+
# محاسبه مجموع با نادیده گرفتن مقادیر NaN
|
| 564 |
+
total_area = area_values.sum()
|
| 565 |
+
if pd.isna(total_area):
|
| 566 |
+
display_metric_card("مساحت کل", "نامشخص", "📏")
|
| 567 |
+
else:
|
| 568 |
+
display_metric_card("مساحت کل", f"{total_area:.1f} هکتار", "📏")
|
| 569 |
+
except Exception as e:
|
| 570 |
+
st.warning(f"خطا در محاسبه مساحت کل: {e}")
|
| 571 |
+
display_metric_card("مساحت کل", "نامشخص", "📏")
|
| 572 |
else:
|
| 573 |
display_metric_card("تعداد کانالها", len(merged_data['کانال'].unique()) if 'کانال' in merged_data.columns else "نامشخص", "🚿")
|
| 574 |
|
|
|
|
| 2063 |
'user_id': list(range(1, 6)),
|
| 2064 |
'username': ['admin', 'user1', 'user2', 'user3', 'user4'],
|
| 2065 |
'name': ['مدیر سیستم', 'کاربر یک', 'کاربر دو', 'کاربر سه', 'کاربر چهار'],
|
| 2066 |
+
'role': ['مدیر', 'کارشناس', 'کاربر', 'کاربر'],
|
| 2067 |
'last_login': [
|
| 2068 |
(datetime.now() - timedelta(hours=2)).strftime('%Y-%m-%d %H:%M'),
|
| 2069 |
(datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d %H:%M'),
|