Stat_2025 / app.py
fruitpicker01's picture
Create app.py
ca81ddd verified
raw
history blame
3.39 kB
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()