File size: 3,389 Bytes
ca81ddd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import gradio as gr
import pandas as pd

# Ссылки на CSV-файлы
URL_DASHA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Dasha_2025/main/messages.csv"
URL_LERA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Lera_2025/main/messages.csv"
URL_SVETA = "https://raw.githubusercontent.com/fruitpicker01/Storage_Sveta_2025/main/messages.csv"

def process_data():
    # Читаем CSV для Даши
    dasha_df = pd.read_csv(URL_DASHA, na_values=["Не выбрано"])
    # Читаем CSV для Леры
    lera_df = pd.read_csv(URL_LERA, na_values=["Не выбрано"])
    # Читаем CSV для Светы
    sveta_df = pd.read_csv(URL_SVETA, na_values=["Не выбрано"])

    # Функция для подсчёта уникальных строк по нужным столбцам,
    # приравнивая "Не выбрано" к NaN (na_values уже сделал это).
    def count_unique(df):
        # Оставляем только интересующие столбцы
        selected_cols = ["gender", "generation", "industry", "opf"]
        # Убеждаемся, что если какой-то столбец отсутствует, пропускаем его или обрабатываем осторожно
        df_filtered = df[selected_cols].copy()
        # Дропаем дубликаты
        df_filtered.drop_duplicates(inplace=True)
        # Возвращаем количество уникальных строк
        return len(df_filtered)

    # Подсчитываем по каждому репозиторию
    dasha_count = count_unique(dasha_df)
    lera_count = count_unique(lera_df)
    sveta_count = count_unique(sveta_df)

    # Считаем суммарное количество
    total_count = dasha_count + lera_count + sveta_count

    # Расчёт процентов
    # - Итоговый процент от 702 (суммарный)
    total_percent = (total_count / 702) * 100

    # - Проценты по каждому репозиторию от 117
    dasha_percent = (dasha_count / 117) * 100
    lera_percent = (lera_count / 117) * 100
    sveta_percent = (sveta_count / 117) * 100

    # Формируем итоговую строку вывода (или можно вернуть словарь)
    result_str = f"""
    Результаты:
    • Даша: {dasha_count} уникальных строк (≈ {dasha_percent:.2f}% из 117)
    • Лера: {lera_count} уникальных строк (≈ {lera_percent:.2f}% из 117)
    • Света: {sveta_count} уникальных строк (≈ {sveta_percent:.2f}% из 117)

    Суммарно: {total_count} уникальных строк (≈ {total_percent:.2f}% из 702)
    """
    return result_str

# Создаём интерфейс Gradio
with gr.Blocks() as demo:
    gr.Markdown("<h2>Подсчёт уникальных строк для Даши, Леры и Светы</h2>")
    btn = gr.Button("Обновить данные и показать результат")
    output = gr.Textbox(label="Результат")
    
    btn.click(fn=process_data, outputs=output)

# Запуск приложения (автоматически в Spaces он обычно дергает demo.launch())
if __name__ == "__main__":
    demo.launch()