import pandas as pd import altair as alt import streamlit as st emotions = ['joy', 'optimism', 'anger', 'sadness'] df = pd.read_csv("dialogs/data/dialogs_marked_33992.csv") df["emotion"] = pd.Categorical(df["emotion"], categories=emotions) speakers_count = len(df["speakers"].unique()) movie_titles = list(df["movie_title"].unique()) st.title("Интерфейс для просмотра распределения эмоций реплик из диалогов фильмов") st.markdown(""" С помощью интерфейса можно посмотреть на распределение эмоций реплик в конкретном фильме или для конкретного персонажа из фильма. В начале необходимо выбрать фильм, после чего выбрать персонажа из этого фильма. Если персонаж не выбран, то отображается распределение эмоций для всех персонажей из выбранного фильма """) st.write(f'Количество фильмов в базе данных: :blue[{len(movie_titles)}], количество персонажей: :blue[{speakers_count}]') selected_movie = st.selectbox( 'Какой фильм вас интересует?', [''] + movie_titles, ) if selected_movie: df_subset = df[df["movie_title"] == selected_movie] speakers = list(df_subset["speakers"].unique()) selected_speaker = st.selectbox( 'Какой персонаж в фильме вас интересует?', [''] + speakers, ) title = f"Распределение эмоций реплик персонажей в фильме: **:blue[{selected_movie}]**" if selected_speaker: title = f"Распределение эмоций реплик персонажа **:blue[{selected_speaker}]** в фильме: **:blue[{selected_movie}]**" df_subset = df_subset[df_subset["speakers"] == selected_speaker] st.markdown(title, unsafe_allow_html=False) data = df_subset["emotion"].value_counts(normalize=True).to_frame().reset_index() c = alt.Chart(data).mark_bar().encode(x="index", y="emotion") c = c.configure_axis(labelFontSize=16, titleFontSize=16, labelAngle=0) st.altair_chart(c, use_container_width=True)