Esmaeilkiani commited on
Commit
e8219cc
·
verified ·
1 Parent(s): ddd1a18

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +101 -106
app.py CHANGED
@@ -1,111 +1,106 @@
1
  import streamlit as st
2
  import pandas as pd
3
- import geopandas as gpd
4
- import ee
5
- import geemap
6
- import folium
7
- from streamlit_folium import folium_static
8
  import matplotlib.pyplot as plt
9
- import numpy as np
10
- from datetime import datetime, timedelta
11
-
12
- # Initialize Earth Engine
13
- service_account = 'esmaeil-kiani1387-gmail-com@ee-esmaeilkiani13877.iam.gserviceaccount.com'
14
- credentials = ee.ServiceAccountCredentials(service_account, 'ee-esmaeilkiani13877-9a054809a4bb.json')
15
- ee.Initialize(credentials)
16
-
17
- # Load farm data
18
- @st.cache_data
19
- def load_data():
20
- df = pd.read_csv('tableConvert.com_wftamx (1).csv')
21
- return df
22
-
23
- # Calculate vegetation indices
24
- def calculate_indices(image):
25
- ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI')
26
- evi2 = image.expression(
27
- '2.5 * ((NIR - RED) / (NIR + 2.4 * RED + 1))',
28
- {'NIR': image.select('B8'), 'RED': image.select('B4')}
29
- ).rename('EVI2')
30
- lai = image.expression(
31
- '3.618 * EVI - 0.118',
32
- {'EVI': image.select('EVI2')}
33
- ).rename('LAI')
34
- return image.addBands([ndvi, evi2, lai])
35
-
36
- # Get Sentinel-2 imagery
37
- def get_sentinel_imagery(geometry, start_date, end_date):
38
- return (ee.ImageCollection('COPERNICUS/S2_SR')
39
- .filterBounds(geometry)
40
- .filterDate(start_date, end_date)
41
- .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
42
- .map(calculate_indices)
43
- .median())
44
-
45
- # Main app
46
- def main():
47
- st.title('Sugarcane Farm Analysis')
48
-
49
- # Load data
50
- df = load_data()
51
-
52
- # Sidebar
53
- st.sidebar.title('Farm Selection')
54
- selected_farm = st.sidebar.selectbox('Select a farm', df['name'])
55
-
56
- # Main content
57
- col1, col2 = st.columns([1, 2])
58
-
59
  with col1:
60
- st.subheader('Farm Information')
61
- farm_data = df[df['name'] == selected_farm].iloc[0]
62
- st.write(f"Age: {farm_data['age']}")
63
- st.write(f"Variety: {farm_data['variety']}")
64
-
 
65
  with col2:
66
- st.subheader('Farm Location')
67
- m = folium.Map(location=[farm_data['latitude'], farm_data['longitude']], zoom_start=12)
68
- folium.Marker(
69
- [farm_data['latitude'], farm_data['longitude']],
70
- popup=farm_data['name']
71
- ).add_to(m)
72
- folium_static(m)
73
-
74
- # Vegetation indices analysis
75
- st.subheader('Vegetation Indices Analysis')
76
-
77
- # Date range selection
78
- today = datetime.now()
79
- start_date = st.date_input('Start date', today - timedelta(days=30))
80
- end_date = st.date_input('End date', today)
81
-
82
- if start_date and end_date:
83
- geometry = ee.Geometry.Point([farm_data['longitude'], farm_data['latitude']])
84
- image = get_sentinel_imagery(geometry, start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d'))
85
-
86
- # Display NDVI map
87
- ndvi_map = geemap.Map(center=[farm_data['latitude'], farm_data['longitude']], zoom=14)
88
- ndvi_map.add_layer(image.select('NDVI'), {'min': 0, 'max': 1, 'palette': ['red', 'yellow', 'green']}, 'NDVI')
89
- ndvi_map.add_child(folium.LayerControl())
90
- folium_static(ndvi_map)
91
-
92
- # Plot time series of indices
93
- indices = ['NDVI', 'EVI2', 'LAI']
94
- fig, ax = plt.subplots(figsize=(10, 6))
95
-
96
- for index in indices:
97
- values = image.select(index).reduceRegion(
98
- reducer=ee.Reducer.mean(),
99
- geometry=geometry,
100
- scale=10
101
- ).getInfo()[index]
102
- ax.plot([start_date, end_date], [values, values], label=index)
103
-
104
- ax.set_xlabel('Date')
105
- ax.set_ylabel('Index Value')
106
- ax.legend()
107
- st.pyplot(fig)
108
-
109
- if __name__ == '__main__':
110
- main()
111
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  import pandas as pd
 
 
 
 
 
3
  import matplotlib.pyplot as plt
4
+ import seaborn as sns
5
+ from datetime import datetime
6
+
7
+ # تنظیمات اولیه صفحه
8
+ st.set_page_config(page_title="تحلیل رشد مزارع نیشکر", layout="wide")
9
+ st.title("برنامه تحلیل و گزارش‌گیری مزارع نیشکر")
10
+
11
+ # بارگذاری یا ایجاد دیتافریم اولیه
12
+ if 'data.csv' in st.session_state:
13
+ data = pd.read_csv('data.csv')
14
+ else:
15
+ # ستون‌های مشابه فایل اکسل شما
16
+ columns = [
17
+ 'شناسه مزرعه', 'تاریخ', 'رشد هفته جاری', 'رشد هفته گذشته', 'ارتفاع هفته جاری مزرعه',
18
+ 'ارتفاع هفته گذشته مزرعه', 'نیتروژن فعلی', 'نیتروژن استاندارد فعلی', 'رطوبت غلاف فعلی',
19
+ 'رطوبت استاندارد فعلی', 'واریته', 'سن', 'مساحت داشت', 'ایستگاه 1', 'ایستگاه 2',
20
+ 'ایستگاه 3', 'ایستگاه 4', 'ایستگاه 5', 'چاهک 1', 'تاریخ قرائت چاهک 1'
21
+ ]
22
+ data = pd.DataFrame(columns=columns)
23
+ st.session_state['data.csv'] = data
24
+
25
+ # بخش ورود داده‌ها
26
+ st.header("ورود داده‌های جدید")
27
+ with st.form(key='data_form'):
28
+ col1, col2, col3 = st.columns(3)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  with col1:
30
+ farm_id = st.text_input("شناسه مزرعه (مثلاً 01-22R4CP69)")
31
+ date = st.date_input("تاریخ")
32
+ growth_current = st.number_input("رشد هفته جاری (سانتی‌متر)", min_value=0.0, step=0.1)
33
+ growth_previous = st.number_input("رشد هفته گذشته (سانتی‌متر)", min_value=0.0, step=0.1)
34
+ height_current = st.number_input("ارتفاع هفته جاری (سانتی‌متر)", min_value=0.0, step=0.1)
35
+ height_previous = st.number_input("ارتفاع هفته گذشته (سانتی‌متر)", min_value=0.0, step=0.1)
36
  with col2:
37
+ nitrogen_current = st.number_input("نیتروژن فعلی", min_value=0.0, step=0.01)
38
+ nitrogen_std_current = st.number_input("نیتروژن استاندارد فعلی", min_value=0.0, step=0.01)
39
+ moisture_current = st.number_input("رطوبت غلاف فعلی (%)", min_value=0.0, max_value=100.0, step=0.1)
40
+ moisture_std_current = st.number_input("رطوبت استاندارد فعلی (%)", min_value=0.0, max_value=100.0, step=0.1)
41
+ variety = st.selectbox("واریته", ['CP69', 'CP48', 'CP57', 'CP73', 'IR01-412'])
42
+ with col3:
43
+ age = st.text_input("سن (مثلاً R1, P)")
44
+ area = st.number_input("مساحت داشت (هکتار)", min_value=0.0, step=0.1)
45
+ station1 = st.number_input("ایستگاه 1 (ارتفاع)", min_value=0.0, step=0.1)
46
+ station2 = st.number_input("ایستگاه 2 (ارتفاع)", min_value=0.0, step=0.1)
47
+ station3 = st.number_input("ایستگاه 3 (ارتفاع)", min_value=0.0, step=0.1)
48
+ station4 = st.number_input("ایستگاه 4 (ارتفاع)", min_value=0.0, step=0.1)
49
+ station5 = st.number_input("ایستگاه 5 (ارتفاع)", min_value=0.0, step=0.1)
50
+ well1 = st.number_input("چاهک 1 (عمق)", min_value=0.0, step=0.1)
51
+ well1_date = st.date_input("تاریخ قرائت چاهک 1")
52
+
53
+ submit_button = st.form_submit_button(label="افزودن داده")
54
+ if submit_button:
55
+ new_data = pd.DataFrame({
56
+ 'شناسه مزرعه': [farm_id], 'تاریخ': [date], 'رشد هفته جاری': [growth_current],
57
+ 'رشد هفته گذشته': [growth_previous], 'ارتفاع هفته جاری مزرعه': [height_current],
58
+ 'ارتفاع هفته گذشته مزرعه': [height_previous], 'نیتروژن فعلی': [nitrogen_current],
59
+ 'نیتروژن استاندارد فعلی': [nitrogen_std_current], 'رطوبت غلاف فعلی': [moisture_current],
60
+ 'رطوبت استاندارد فعلی': [moisture_std_current], 'واریته': [variety], 'سن': [age],
61
+ 'مساحت داشت': [area], 'ایستگاه 1': [station1], 'ایستگاه 2': [station2],
62
+ 'ایستگاه 3': [station3], 'ایستگاه 4': [station4], 'ایستگاه 5': [station5],
63
+ 'چاهک 1': [well1], 'تاریخ قرائت چاهک 1': [well1_date]
64
+ })
65
+ data = pd.concat([data, new_data], ignore_index=True)
66
+ data.to_csv('data.csv', index=False)
67
+ st.session_state['data.csv'] = data
68
+ st.success("داده با موفقیت اضافه شد!")
69
+
70
+ # نمایش داده‌ها
71
+ st.header("داده‌های مزارع نیشکر")
72
+ st.dataframe(data)
73
+
74
+ # تحلیل و نمودارها
75
+ st.header("تحلیل داده‌ها")
76
+ if not data.empty:
77
+ # نمودار رشد هفتگی بر اساس تاریخ
78
+ plt.figure(figsize=(10, 6))
79
+ sns.lineplot(x='تاریخ', y='رشد هفته جاری', hue='واریته', data=data)
80
+ plt.title('رشد هفتگی مزارع نیشکر بر اساس واریته')
81
+ plt.xlabel('تاریخ')
82
+ plt.ylabel('رشد هفته جاری (سانتی‌متر)')
83
+ plt.xticks(rotation=45)
84
+ st.pyplot(plt)
85
+
86
+ # نمودار مقایسه نیتروژن فعلی و استاندارد
87
+ plt.figure(figsize=(10, 6))
88
+ sns.scatterplot(x='نیتروژن فعلی', y='نیتروژن استاندارد فعلی', hue='واریته', size='رشد هفته جاری', data=data)
89
+ plt.title('مقایسه نیتروژن فعلی و استاندارد')
90
+ plt.xlabel('نیتروژن فعلی')
91
+ plt.ylabel('نیتروژن استاندارد فعلی')
92
+ st.pyplot(plt)
93
+
94
+ # نمودار رطوبت فعلی بر اساس واریته
95
+ plt.figure(figsize=(10, 6))
96
+ sns.boxplot(x='واریته', y='رطوبت غلاف فعلی', data=data)
97
+ plt.title('توزیع رطوبت غلاف فعلی بر اساس واریته')
98
+ plt.xlabel('واریته')
99
+ plt.ylabel('رطوبت غلاف فعلی (%)')
100
+ st.pyplot(plt)
101
+ else:
102
+ st.write("داده‌ای برای تحلیل وجود ندارد. لطفاً داده‌های جدید وارد کنید.")
103
+
104
+ # اجرای برنامه
105
+ if __name__ == "__main__":
106
+ st.write("برنامه در حال اجرا است...")