ozbasaran commited on
Commit
19c5235
·
verified ·
1 Parent(s): 895c3e3

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +182 -0
app.py ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import random
2
+ import pandas as pd
3
+ from datetime import datetime, timedelta
4
+ import streamlit as st
5
+ import pydeck as pdk
6
+
7
+
8
+
9
+ # Tekirdağ ili çevresinde rastgele koordinatlar üretir.
10
+ def random_coord_tekirdag():
11
+ lat = random.uniform(40.95, 41.05)
12
+ lon = random.uniform(27.35, 27.6)
13
+ return lat, lon
14
+
15
+
16
+
17
+ # Verilen koordinatları 4 ondalık basamağa yuvarlar.
18
+ def round_coord(coord):
19
+ return round(coord[0], 4), round(coord[1], 4)
20
+
21
+
22
+
23
+ # Görev verisi
24
+ num_gorev = 5
25
+ gorev_df = pd.DataFrame({
26
+ "Seç" : [True for _ in range(num_gorev)],
27
+ "ID" : range(1, num_gorev + 1),
28
+ "Görev" : ["Görev "+str(i) for i in range(1, num_gorev + 1)],
29
+ "Tür" : [random.choice(["A", "B", "C"]) for _ in range(num_gorev)],
30
+ "Konum" : [round_coord(random_coord_tekirdag()) for _ in range(num_gorev)],
31
+ "Son Zaman" : [(datetime.now() + timedelta(hours=random.randint(1, 48))).strftime("%Y-%m-%d %H:%M") for _ in range(num_gorev)],
32
+ "Öncelik" : [random.choice(["Normal", "Yüksek", "Acil"]) for _ in range(num_gorev)],
33
+ "Ekipler" : [",".join(map(str, random.sample(range(1, 6), random.randint(2, 5)))) for _ in range(num_gorev)]
34
+ })
35
+
36
+
37
+
38
+ # Ekip verisi
39
+ num_ekip = 5
40
+ ekip_df = pd.DataFrame({
41
+ "ID" : range(1, num_ekip + 1),
42
+ "Konum" : [round_coord(random_coord_tekirdag()) for _ in range(num_ekip)],
43
+ "Görevler" : [[random.choice(gorev_df['ID']) for _ in range(random.randint(1, 3))] for _ in range(num_ekip)]
44
+ })
45
+
46
+
47
+
48
+ # streamlit session'undaki gorev_data'yı günceller.
49
+ def update_gorev_data():
50
+ gorev_disp = st.session_state.gorev_disp
51
+ gorev_data = st.session_state.gorev_data
52
+ # "edited_rows" streamlit özelliğidir.
53
+ for row, edited in gorev_disp["edited_rows"].items():
54
+ for column, new_value in edited.items():
55
+ gorev_data.loc[row, column] = new_value
56
+
57
+
58
+
59
+ # streamlit session'undaki "gorev_df" ve "ekip_df"
60
+ # dataframe'lerini tanımlar.
61
+ def init_dataframes():
62
+ if "gorev_data" not in st.session_state:
63
+ st.session_state.gorev_data = gorev_df
64
+ if "ekip_data" not in st.session_state:
65
+ st.session_state.ekip_data = ekip_df
66
+
67
+
68
+
69
+ # streamlit session'undaki seçilen görevler ve ekipler için ID,
70
+ # latitude ve longitude bilgisi bulunduran iki dataframe döndürür.
71
+ def create_map_df():
72
+ gData = st.session_state.gorev_data
73
+ map_df_gorev = gData[gData["Seç"]==True].copy()
74
+ map_df_gorev["lat"] = map_df_gorev["Konum"].apply(lambda x: x[0])
75
+ map_df_gorev["lon"] = map_df_gorev["Konum"].apply(lambda x: x[1])
76
+
77
+ map_df_ekip = st.session_state.ekip_data.copy()
78
+ map_df_ekip["lat"] = map_df_ekip["Konum"].apply(lambda x: x[0])
79
+ map_df_ekip["lon"] = map_df_ekip["Konum"].apply(lambda x: x[1])
80
+
81
+ return map_df_gorev[["ID","lat","lon"]], map_df_ekip[["ID","lat","lon"]]
82
+
83
+
84
+
85
+
86
+
87
+ # initialize dataframes
88
+ init_dataframes()
89
+ map_df_gorev, map_df_ekip = create_map_df()
90
+
91
+
92
+
93
+ # set the layout
94
+ st.set_page_config(layout="wide")
95
+
96
+
97
+
98
+ # Görevler tablosu
99
+ st.subheader("📆 Görevler")
100
+
101
+
102
+
103
+ # Data editor
104
+ gorev_disp = st.data_editor(
105
+ st.session_state.gorev_data,
106
+ column_config = {
107
+ "Seç" : st.column_config.CheckboxColumn("Seç"),
108
+ "Öncelik" : st.column_config.SelectboxColumn("Öncelik", options=["Normal", "Yüksek", "Acil"])
109
+ },
110
+ disabled = ["ID", "Görev", "Tür", "Konum", "Son Zaman"],
111
+ hide_index = True,
112
+ use_container_width = True,
113
+ on_change = update_gorev_data,
114
+ key = "gorev_disp"
115
+ )
116
+
117
+
118
+
119
+ # separator
120
+ st.markdown("---")
121
+
122
+
123
+ # second part of the app
124
+ col1, col2, col3 = st.columns([4, 4, 2])
125
+
126
+
127
+
128
+ # "Ekipler" tablosu
129
+ with col1:
130
+ st.subheader("👨‍🚀 Ekipler")
131
+ st.dataframe(st.session_state.ekip_data, hide_index=True, use_container_width=True)
132
+
133
+
134
+
135
+ # Harita
136
+ with col2:
137
+ st.subheader("🗺️ Harita")
138
+
139
+ layers = [
140
+ pdk.Layer(
141
+ "ScatterplotLayer",
142
+ data = map_df_ekip,
143
+ get_position = "[lon, lat]",
144
+ get_radius = 500,
145
+ get_fill_color = [0, 0, 255, 160],
146
+ pickable = True
147
+ )
148
+ ]
149
+
150
+ if not map_df_gorev.empty:
151
+ layers.append(
152
+ pdk.Layer(
153
+ "ScatterplotLayer",
154
+ data = map_df_gorev,
155
+ get_position = "[lon, lat]",
156
+ get_radius = 500,
157
+ get_fill_color = [255, 0, 0, 160],
158
+ pickable = True
159
+ )
160
+ )
161
+
162
+ st.pydeck_chart(
163
+ pdk.Deck(
164
+ map_style="mapbox://styles/mapbox/streets-v12",
165
+ initial_view_state=pdk.ViewState(
166
+ latitude = 41.0,
167
+ longitude = 27.5,
168
+ zoom = 10,
169
+ pitch = 0,
170
+ ),
171
+ layers = layers,
172
+ tooltip = {"text": "{ID}"}
173
+ )
174
+ )
175
+
176
+
177
+
178
+ # optimizasyon bölmesi
179
+ with col3:
180
+ st.subheader("🤖 Optimizasyon")
181
+ if st.button("✨ Magic!"):
182
+ st.success("Optimizasyon çalıştırıldı. Görevler atandı (sözde). 🎯")