OAselection / app.py
fruitpicker01's picture
Update app.py
b1fcb2c verified
import gradio as gr
import pandas as pd
df = pd.read_excel('для Gradio финал.xlsx')
df['Регион'] = df['Регион'].fillna('').astype(str)
def format_output(data):
result = []
count = 1
for _, row in data.iterrows():
project_info = f"""
**Объект-аналог №{count}**
**Проект**: {row['Наименование инвестиционного проекта']}
**Идентификатор**: {row['Идентификатор инвестиционного проекта']}
**Объект**: {row['Наименование одного объекта, где реализуется типовое технологическое решение']}
**Регион**: {row['Регион']}
"""
result.append(project_info)
count += 1
return "\n".join(result)
def filter_data(project_type, object_type, voltage, region):
try:
if not (project_type and object_type and voltage and region):
return "Вы не указали все необходимые параметры для подбора объекта-аналога"
filtered_data = df[
(df['Тип проекта'] == project_type) &
(df['Объект'] == object_type) &
(df['Высшее напряжение'] == int(voltage))
]
regional_data = filtered_data[filtered_data['Регион'] == region]
if regional_data.empty:
message = "**Объект-аналог в том же регионе отсутствует, ищу по всей стране.**\n"
national_data = filtered_data.drop_duplicates(subset=['Наименование инвестиционного проекта', 'Идентификатор инвестиционного проекта', 'Наименование одного объекта, где реализуется типовое технологическое решение', 'Регион'])
if national_data.empty:
return message + "Объект-аналог в рамках текущей ИПР Россети ФСК не найден."
else:
return message + format_output(national_data)
else:
return format_output(regional_data)
except Exception as e:
return f"Ошибка: {str(e)}"
with gr.Blocks() as demo:
gr.Markdown("# Подбор объектов-аналогов для прогнозирования недостающих технических характеристик")
gr.Markdown("## Введите параметры для поиска:")
with gr.Row():
with gr.Column():
gr.Markdown("### Исходные данные")
project_type = gr.Radio(choices=['Строительство', 'Реконструкция'], label="Тип проекта")
object_type = gr.Radio(choices=['ПС', 'ВЛ', 'КЛ'], label="Объект")
voltage = gr.Radio(choices=['6', '10', '35', '110', '220', '330', '400', '500', '750', '1150'], label="Напряжение, кВ")
region = gr.Dropdown(choices=sorted(df['Регион'].unique()), label="Регион")
submit_btn = gr.Button("Поиск")
with gr.Column():
gr.Markdown("### Результаты подбора объектов-аналогов")
output = gr.Markdown()
submit_btn.click(filter_data, inputs=[project_type, object_type, voltage, region], outputs=output)
demo.launch()