/
IvanPrus
/
Test
Обзор
Документация
Войти
/
IvanPrus
/
Test
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
new_file
76 строк
4 KB
IvanPrus
feat: создание дашборда KPI на базе Streamlit
29 июл 2026, 16:42
Верифицирован
29 июл 2026, 16:42
a0c531a
Код
Авторство
О чём код?
import streamlit as st import pandas as pd import plotly.express as px import plotly.graph_objects as go from datetime import datetime # Настройка страницы st.set_page_config(page_title="Дашборд KPI", layout="wide") st.title("📊 Дашборд KPI по территориям") # --- ЗАГРУЗКА ДАННЫХ --- uploaded_file = st.sidebar.file_uploader("Загрузите Excel файл", type=["xlsx", "xls"]) if uploaded_file is not None: try: # Чтение Excel файла df = pd.read_excel(uploaded_file) # --- ПРЕОБРАЗОВАНИЕ ДАННЫХ --- # Важно: Убедитесь, что названия столбцов в Excel точно совпадают с этими названиями # Если названия другие, измените их здесь или в Excel # Преобразуем столбец Дата в формат datetime if 'Дата' in df.columns: df['Дата'] = pd.to_datetime(df['Дата'], errors='coerce') # Удаляем строки с некорректными датами df = df.dropna(subset=['Дата']) # Создаем столбцы для фильтрации по времени df['Год'] = df['Дата'].dt.year df['Месяц'] = df['Дата'].dt.month df['Год_Месяц'] = df['Дата'].dt.to_period('M') else: st.error("Не найден столбец 'Дата'. Проверьте названия столбцов в Excel.") st.stop() # Проверка наличия необходимых столбцов required_cols = ['Территория', 'Продажи', 'Новые_клиенты'] missing_cols = [col for col in required_cols if col not in df.columns] if missing_cols: st.error(f"Не найдены следующие столбцы: {', '.join(missing_cols)}. Проверьте названия в Excel.") st.stop() # --- ФИЛЬТРЫ --- st.sidebar.header("Фильтры") # Фильтр по дате min_date = df['Дата'].min() max_date = df['Дата'].max() date_range = st.sidebar.date_input( "Выберите период", value=(min_date, max_date), min_value=min_date, max_value=max_date ) if len(date_range) == 2: start_date, end_date = date_range df_filtered = df[(df['Дата'] >= start_date) & (df['Дата'] <= end_date)] else: df_filtered = df # Фильтр по территории territories = ['Все'] + sorted(df_filtered['Территория'].unique().tolist()) selected_territory = st.sidebar.selectbox("Территория", territories) if selected_territory != 'Все': df_filtered = df_filtered[df_filtered['Территория'] == selected_territory] # Фильтр по менеджеру (если есть столбец 'Менеджер') if 'Менеджер' in df.columns: managers = ['Все'] + sorted(df_filtered['Менеджер'].unique().tolist()) selected_manager = st.sidebar.selectbox("Менеджер", managers) st.info("👈 Пожалуйста, загрузите Excel файл в боковой панели слева.")