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() |