Croplogging1403 / app.py
Esmaeilkiani's picture
Update app.py
38b8a32 verified
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from datasets import load_dataset
ds = load_dataset("Esmaeilkiani/CroploggingSugarcane")
# عنوان برنامه
st.title("داشبورد نمایش داده‌های مزرعه")
# تبدیل ستون‌های عددی به float
data['هفته'] = pd.to_numeric(data['هفته'], errors='coerce')
data['ارتفاع'] = pd.to_numeric(data['ارتفاع'], errors='coerce')
data['رشد'] = pd.to_numeric(data['رشد'], errors='coerce')
# حذف داده‌های نامعتبر
data.dropna(subset=['هفته', 'ارتفاع', 'رشد'], inplace=True)
# ایجاد پنل کناری برای انتخاب مزرعه
with st.sidebar:
st.header("انتخاب مزرعه")
# ایجاد لیست منحصر به فرد از مزارع
farms = data['مزرعه'].unique()
# ایجاد منوی کشویی برای انتخاب مزرعه
selected_farm = st.selectbox("مزرعه مورد نظر را انتخاب کنید", farms)
# ایجاد دکمه جستجو
search_farm = st.text_input("نام مزرعه مورد نظر را بنویسید")
if search_farm:
selected_farm = search_farm
# فیلتر کردن داده‌ها بر اساس مزرعه انتخاب شده
farm_data = data[data['مزرعه'] == selected_farm]
if not farm_data.empty:
# استخراج داده‌های هفته و ارتفاع
weeks = sorted(farm_data['هفته'].unique())
heights = sorted(farm_data['ارتفاع'].unique())
# ایجاد شبکه برای موقعیت‌ها و هفته‌ها
X, Y = np.meshgrid(weeks, heights)
# ایجاد داده‌های ارتفاع
Z = np.zeros_like(X, dtype=float)
for i, week in enumerate(weeks):
for j, height in enumerate(heights):
value = farm_data[(farm_data['هفته'] == week) & (farm_data['ارتفاع'] == height)]['رشد']
if not value.empty:
Z[j, i] = value.values[0]
else:
Z[j, i] = 0 # مقدار پیش‌فرض در صورت نبود داده
# رسم نمودار سه‌بعدی
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, Z, cmap='viridis')
# تنظیم برچسب‌های محورها
ax.set_xlabel('Weeks')
ax.set_ylabel('Height')
ax.set_zlabel('Growth')
ax.set_title('3D Surface Plot of Field Height Over Weeks')
# نمایش نمودار
st.pyplot(fig)
else:
st.write("مزرعه‌ای با این نام پیدا نشد.")