Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import pandas as pd
|
3 |
+
|
4 |
+
# Ссылки на CSV-файлы
|
5 |
+
URL_DASHA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Dasha_2025/main/messages.csv"
|
6 |
+
URL_LERA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Lera_2025/main/messages.csv"
|
7 |
+
URL_SVETA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Sveta_2025/main/messages.csv"
|
8 |
+
|
9 |
+
def process_data():
|
10 |
+
# Читаем CSV для Даши
|
11 |
+
dasha_df = pd.read_csv(URL_DASHA, na_values=["Не выбрано"])
|
12 |
+
# Читаем CSV для Леры
|
13 |
+
lera_df = pd.read_csv(URL_LERA, na_values=["Не выбрано"])
|
14 |
+
# Читаем CSV для Светы
|
15 |
+
sveta_df = pd.read_csv(URL_SVETA, na_values=["Не выбрано"])
|
16 |
+
|
17 |
+
# Функция для подсчёта уникальных строк по нужным столбцам,
|
18 |
+
# приравнивая "Не выбрано" к NaN (na_values уже сделал это).
|
19 |
+
def count_unique(df):
|
20 |
+
# Оставляем только интересующие столбцы
|
21 |
+
selected_cols = ["gender", "generation", "industry", "opf"]
|
22 |
+
# Убеждаемся, что если какой-то столбец отсутствует, пропускаем его или обрабатываем осторожно
|
23 |
+
df_filtered = df[selected_cols].copy()
|
24 |
+
# Дропаем дубликаты
|
25 |
+
df_filtered.drop_duplicates(inplace=True)
|
26 |
+
# Возвращаем количество уникальных строк
|
27 |
+
return len(df_filtered)
|
28 |
+
|
29 |
+
# Подсчитываем по каждому репозиторию
|
30 |
+
dasha_count = count_unique(dasha_df)
|
31 |
+
lera_count = count_unique(lera_df)
|
32 |
+
sveta_count = count_unique(sveta_df)
|
33 |
+
|
34 |
+
# Считаем суммарное количество
|
35 |
+
total_count = dasha_count + lera_count + sveta_count
|
36 |
+
|
37 |
+
# Расчёт процентов
|
38 |
+
# - Итоговый процент от 702 (суммарный)
|
39 |
+
total_percent = (total_count / 702) * 100
|
40 |
+
|
41 |
+
# - Проценты по каждому репозиторию от 117
|
42 |
+
dasha_percent = (dasha_count / 117) * 100
|
43 |
+
lera_percent = (lera_count / 117) * 100
|
44 |
+
sveta_percent = (sveta_count / 117) * 100
|
45 |
+
|
46 |
+
# Формируем итоговую строку вывода (или можно вернуть словарь)
|
47 |
+
result_str = f"""
|
48 |
+
Результаты:
|
49 |
+
• Даша: {dasha_count} уникальных строк (≈ {dasha_percent:.2f}% из 117)
|
50 |
+
• Лера: {lera_count} уникальных строк (≈ {lera_percent:.2f}% из 117)
|
51 |
+
• Света: {sveta_count} уникальных строк (≈ {sveta_percent:.2f}% из 117)
|
52 |
+
|
53 |
+
Суммарно: {total_count} уникальных строк (≈ {total_percent:.2f}% из 702)
|
54 |
+
"""
|
55 |
+
return result_str
|
56 |
+
|
57 |
+
# Создаём интерфейс Gradio
|
58 |
+
with gr.Blocks() as demo:
|
59 |
+
gr.Markdown("<h2>Подсчёт уникальных строк для Даши, Леры и Светы</h2>")
|
60 |
+
btn = gr.Button("Обновить данные и показать результат")
|
61 |
+
output = gr.Textbox(label="Результат")
|
62 |
+
|
63 |
+
btn.click(fn=process_data, outputs=output)
|
64 |
+
|
65 |
+
# Запуск приложения (автоматически в Spaces он обычно дергает demo.launch())
|
66 |
+
if __name__ == "__main__":
|
67 |
+
demo.launch()
|