| import pandas as pd | |
| import streamlit as st | |
| def load_data(): | |
| df_itog = pd.read_csv("ITOG.csv").set_index("Model") | |
| df_oblzn = pd.read_csv("oblzn.csv").set_index("Model") | |
| df_vidvopr = pd.read_csv("vidvopr.csv").set_index("Model") | |
| df_provokac = pd.read_csv("provokac.csv").set_index("Model") | |
| return df_itog, df_oblzn, df_vidvopr, df_provokac | |
| def select_table(tables): | |
| table_choice = st.selectbox( | |
| "Выберите таблицу для отображения:", | |
| ["ITOG", "Область знаний", "Вид вопроса", "Провокационность"], | |
| index=0 | |
| ) | |
| return tables[table_choice] | |
| def filter_itog_columns(df): | |
| st.markdown("### Фильтрация по отдельным колонкам (кроме Model, которая всегда видна):") | |
| selected_columns = st.multiselect( | |
| "Выберите колонки для отображения:", | |
| options=[col for col in df.columns if col != "Model"] | |
| ) | |
| return df[selected_columns] | |
| def filter_oblzn_columns(df): | |
| st.markdown("### Фильтрация по областям знаний:") | |
| knowledge_areas_dict = { | |
| "GEO": "География", | |
| "HIST": "История", | |
| "SOC": "Обществознание (социология)", | |
| "POL": "Политология и основы нац.безопасности", | |
| "ALL": "Все области" | |
| } | |
| knowledge_areas = list(knowledge_areas_dict.values()) | |
| selected_columns = st.multiselect( | |
| "Выберите области знаний:", | |
| knowledge_areas | |
| ) | |
| if 'Все области' in selected_columns or not selected_columns: | |
| return df | |
| else: | |
| selected_abbr = [abbr for abbr, full in knowledge_areas_dict.items() if full in selected_columns] | |
| filtered_columns = [col for col in df.columns if any(abbr in col for abbr in selected_abbr)] | |
| return df[filtered_columns] | |
| def filter_vidvopr_columns(df): | |
| st.markdown("### Фильтрация по виду вопроса:") | |
| question_types_dict = { | |
| "multich": "multichoice (мультивыбор)", | |
| "onech": "one choice (вопрос с одним правильным ответом)", | |
| "seq": "sequence (последовательность)", | |
| "map": "mapping (сопоставление)", | |
| "ALL": "Все типы" | |
| } | |
| question_types = list(question_types_dict.values()) | |
| selected_columns = st.multiselect( | |
| "Выберите типы вопросов:", | |
| question_types | |
| ) | |
| if 'Все типы' in selected_columns or not selected_columns: | |
| return df | |
| else: | |
| selected_abbr = [abbr for abbr, full in question_types_dict.items() if full in selected_columns] | |
| filtered_columns = [col for col in df.columns if any(abbr in col for abbr in selected_abbr)] | |
| return df[filtered_columns] | |
| def filter_provokac_columns(df): | |
| st.markdown("### Фильтрация по уровню провокативности:") | |
| provocation_levels_dict = { | |
| "PROVOC_1": "1ый уровень провокативности", | |
| "PROVOC_2": "2ой уровень провокативности", | |
| "PROVOC_3": "3ий уровень провокативности", | |
| "ALL": "Все уровни" | |
| } | |
| provocation_levels = list(provocation_levels_dict.values()) | |
| selected_columns = st.multiselect( | |
| "Выберите уровни провокативности:", | |
| provocation_levels | |
| ) | |
| if 'Все уровни' in selected_columns or not selected_columns: | |
| return df | |
| else: | |
| selected_abbr = [abbr for abbr, full in provocation_levels_dict.items() if full in selected_columns] | |
| filtered_columns = [col for col in df.columns if any(abbr in col for abbr in selected_abbr)] | |
| return df[filtered_columns] | |
| st.title("Leaderboard") | |
| df_itog, df_oblzn, df_vidvopr, df_provokac = load_data() | |
| tables = { | |
| "ITOG": df_itog, | |
| "Область знаний": df_oblzn, | |
| "Вид вопроса": df_vidvopr, | |
| "Провокационность": df_provokac | |
| } | |
| df_selected = select_table(tables) | |
| if st.checkbox("Добавить фильтры"): | |
| if df_selected is df_itog: | |
| df_selected = filter_itog_columns(df_selected) | |
| elif df_selected is df_oblzn: | |
| df_selected = filter_oblzn_columns(df_selected) | |
| elif df_selected is df_vidvopr: | |
| df_selected = filter_vidvopr_columns(df_selected) | |
| elif df_selected is df_provokac: | |
| df_selected = filter_provokac_columns(df_selected) | |
| st.dataframe(df_selected, use_container_width=True, width=5000) | |
| st.download_button( | |
| "Скачать таблицу в формате CSV", | |
| df_selected.to_csv(index=True).encode('utf-8'), | |
| "filtered_table.csv", | |
| "text/csv" | |
| ) | |
| st.write('---') | |
| st.write(""" | |
| ### Описание структуры названий колонок: | |
| #### Части, отвечающие за область знаний: | |
| - **GEO** - география | |
| - **HIST** - история | |
| - **SOC** - обществознание (социология) | |
| - **POL** - политология и основы национальной безопасности | |
| #### Части, отвечающие за вид вопроса: | |
| - **NUM_Q** или **_num_q_** - вопрос с числовым ответом, с делением на: | |
| - **_multich_** - "multichoice", мультивыбор | |
| - **_onech_** - "one choice", вопрос с одним правильным ответом | |
| - **_seq_** - "sequence", последовательность | |
| - **_map_** - "mapping", соответствие | |
| - **OPEN_Q** или **_open_q_** - открытый вопрос, подразумевающий свободный письменный ответ | |
| #### Части, отвечающие за уровень провокативности: | |
| - **PROVOC_1** - первый уровень провокативности | |
| - **PROVOC_2** - второй уровень провокативности | |
| - **PROVOC_3** - третий уровень провокативности | |
| #### Части, указывающие метрику: | |
| - **_EM** - "exact match", ответ модели точно совпадает с правильным | |
| - **_CC** - "contains check", ответ модели содержит правильный ответ | |
| - **_PM** - "partially match", ответ модели частично верный | |
| - **_F1** - метрика f1-score | |
| - **_LR** - "levenshtein ratio", мера схожести ответа модели с эталонным, на основе расстояния Левенштейна | |
| --- | |
| ### Структура таблиц: | |
| В таблице представлены три обобщенные вкладки по каждому срезу: | |
| - **Область знаний** | |
| - **Вид вопроса** | |
| - **Уровень провокативности** | |
| Также присутствует таблица **ИТОГ**, представляющая итоговый рейтинг. Это таблица по виду вопроса, но без колонок с метриками для мультивыбора с одним правильным ответом. | |
| """) | |
| st.write("### `Ссылки/контакты`") | |
| st.write("[GitHub](https://github.com/ikanam-ai/slava)") | |
| st.write("[Dataset](https://huggingface.co/datasets/RANEPA-ai/SLAVA-OpenData-2800-v1)") | |