Update app.py
Browse files
app.py
CHANGED
@@ -6,11 +6,16 @@ from prophet import Prophet
|
|
6 |
import io
|
7 |
from PIL import Image
|
8 |
|
9 |
-
#
|
10 |
URL_DASHA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Dasha_2025/main/messages.csv"
|
11 |
-
URL_LERA
|
12 |
URL_SVETA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Sveta_2025/main/messages.csv"
|
13 |
|
|
|
|
|
|
|
|
|
|
|
14 |
def read_and_process_data(url, user_name):
|
15 |
"""
|
16 |
Считывает CSV, отбирает нужные столбцы,
|
@@ -141,18 +146,47 @@ def make_average_forecast(total_by_date, end_date_str="2025-03-15"):
|
|
141 |
def process_data():
|
142 |
print("\n=== Начинаем process_data (Seaborn + Prophet + средний) ===")
|
143 |
|
144 |
-
#
|
145 |
dasha_count, dasha_daily = read_and_process_data(URL_DASHA, "Даша")
|
146 |
lera_count, lera_daily = read_and_process_data(URL_LERA, "Лера")
|
147 |
sveta_count, sveta_daily = read_and_process_data(URL_SVETA, "Света")
|
148 |
|
149 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
print(f"Суммарное количество (Д+Л+С): {total_count}")
|
151 |
|
152 |
-
#
|
153 |
-
|
154 |
-
|
155 |
-
|
|
|
156 |
total_percent = round((total_count / 702) * 100) if 702 else 0
|
157 |
|
158 |
def get_progress_bar(label, abs_val, pct):
|
@@ -168,14 +202,14 @@ def process_data():
|
|
168 |
</div>
|
169 |
"""
|
170 |
bars_html = (
|
171 |
-
get_progress_bar("Даша",
|
172 |
-
get_progress_bar("Лера",
|
173 |
-
get_progress_bar("Света",
|
174 |
get_progress_bar("Всего", total_count, total_percent)
|
175 |
)
|
176 |
|
177 |
-
#
|
178 |
-
daily_all = pd.concat([
|
179 |
daily_all = daily_all.dropna(subset=["date"])
|
180 |
daily_all = daily_all.sort_values(["user", "date"])
|
181 |
daily_all["cumulative"] = daily_all.groupby("user")["count"].cumsum()
|
|
|
6 |
import io
|
7 |
from PIL import Image
|
8 |
|
9 |
+
# Первые наборы CSV-файлов
|
10 |
URL_DASHA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Dasha_2025/main/messages.csv"
|
11 |
+
URL_LERA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Lera_2025/main/messages.csv"
|
12 |
URL_SVETA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Sveta_2025/main/messages.csv"
|
13 |
|
14 |
+
# Вторые наборы CSV-файлов
|
15 |
+
URL_DASHA_2 = "https://raw.githubusercontent.com/fruitpicker01/Storage_2_Dasha_2025/main/messages.csv"
|
16 |
+
URL_LERA_2 = "https://raw.githubusercontent.com/fruitpicker01/Storage_2_Lera_2025/main/messages.csv"
|
17 |
+
URL_SVETA_2 = "https://raw.githubusercontent.com/fruitpicker01/Storage_2_Sveta_2025/main/messages.csv"
|
18 |
+
|
19 |
def read_and_process_data(url, user_name):
|
20 |
"""
|
21 |
Считывает CSV, отбирает нужные столбцы,
|
|
|
146 |
def process_data():
|
147 |
print("\n=== Начинаем process_data (Seaborn + Prophet + средний) ===")
|
148 |
|
149 |
+
# Чтение основного файла
|
150 |
dasha_count, dasha_daily = read_and_process_data(URL_DASHA, "Даша")
|
151 |
lera_count, lera_daily = read_and_process_data(URL_LERA, "Лера")
|
152 |
sveta_count, sveta_daily = read_and_process_data(URL_SVETA, "Света")
|
153 |
|
154 |
+
# Чтение второго набора данных (с обработкой ошибок)
|
155 |
+
try:
|
156 |
+
dasha_count2, dasha_daily2 = read_and_process_data(URL_DASHA_2, "Даша (2)")
|
157 |
+
except Exception as e:
|
158 |
+
print(f"[Даша (2)] Ошибка при чтении дополнительного CSV: {e}")
|
159 |
+
dasha_count2, dasha_daily2 = 0, pd.DataFrame(columns=["date", "count", "user"])
|
160 |
+
|
161 |
+
try:
|
162 |
+
lera_count2, lera_daily2 = read_and_process_data(URL_LERA_2, "Лера (2)")
|
163 |
+
except Exception as e:
|
164 |
+
print(f"[Лера (2)] Ошибка при чтении дополнительного CSV: {e}")
|
165 |
+
lera_count2, lera_daily2 = 0, pd.DataFrame(columns=["date", "count", "user"])
|
166 |
+
|
167 |
+
try:
|
168 |
+
sveta_count2, sveta_daily2 = read_and_process_data(URL_SVETA_2, "Света (2)")
|
169 |
+
except Exception as e:
|
170 |
+
print(f"[Света (2)] Ошибка при чтении дополнительного CSV: {e}")
|
171 |
+
sveta_count2, sveta_daily2 = 0, pd.DataFrame(columns=["date", "count", "user"])
|
172 |
+
|
173 |
+
# Объединяем основные и дополнительные данные по каждому пользователю
|
174 |
+
dasha_count_total = dasha_count + dasha_count2
|
175 |
+
lera_count_total = lera_count + lera_count2
|
176 |
+
sveta_count_total = sveta_count + sveta_count2
|
177 |
+
|
178 |
+
dasha_daily_total = pd.concat([dasha_daily, dasha_daily2], ignore_index=True)
|
179 |
+
lera_daily_total = pd.concat([lera_daily, lera_daily2], ignore_index=True)
|
180 |
+
sveta_daily_total = pd.concat([sveta_daily, sveta_daily2], ignore_index=True)
|
181 |
+
|
182 |
+
total_count = dasha_count_total + lera_count_total + sveta_count_total
|
183 |
print(f"Суммарное количество (Д+Л+С): {total_count}")
|
184 |
|
185 |
+
# Остальной код (прогресс-бары, объединение DataFrame, графики)
|
186 |
+
# замените исходные переменные на объединённые *_total
|
187 |
+
dasha_percent = round((dasha_count_total / 234) * 100) if 234 else 0
|
188 |
+
lera_percent = round((lera_count_total / 234) * 100) if 234 else 0
|
189 |
+
sveta_percent = round((sveta_count_total / 234) * 100) if 234 else 0
|
190 |
total_percent = round((total_count / 702) * 100) if 702 else 0
|
191 |
|
192 |
def get_progress_bar(label, abs_val, pct):
|
|
|
202 |
</div>
|
203 |
"""
|
204 |
bars_html = (
|
205 |
+
get_progress_bar("Даша", dasha_count_total, dasha_percent) +
|
206 |
+
get_progress_bar("Лера", lera_count_total, lera_percent) +
|
207 |
+
get_progress_bar("Света", sveta_count_total, sveta_percent) +
|
208 |
get_progress_bar("Всего", total_count, total_percent)
|
209 |
)
|
210 |
|
211 |
+
# Объединение ежедневных данных для построения графика
|
212 |
+
daily_all = pd.concat([dasha_daily_total, lera_daily_total, sveta_daily_total], ignore_index=True)
|
213 |
daily_all = daily_all.dropna(subset=["date"])
|
214 |
daily_all = daily_all.sort_values(["user", "date"])
|
215 |
daily_all["cumulative"] = daily_all.groupby("user")["count"].cumsum()
|