Spaces:
Runtime error
Runtime error
import streamlit as st | |
import pandas as pd | |
import random | |
pd.options.mode.chained_assignment = None | |
def get_data(): | |
df = pd.read_csv('movies_prepared.csv') | |
return df | |
df = get_data() | |
df.dialog = df.dialog.apply(lambda x: eval(x) if isinstance(x, str) else x) | |
df.order = df.order.apply(lambda x: eval(x) if isinstance(x, str) else x) | |
df.characters = df.characters.apply( | |
lambda x: eval(x) if isinstance(x, str) else x) | |
df.genres = df.genres.apply(lambda x: eval(x) if isinstance(x, str) else x) | |
df.names = df.names.apply(lambda x: eval(x) if isinstance(x, str) else x) | |
labels = [ | |
'Positive', | |
'Negative', | |
'Neutral' | |
] | |
mapping = {i: k for i, k in enumerate(labels)} | |
st.sidebar.header('Выбор фильма и персонажа') | |
movie_title = st.sidebar.selectbox('Название фильма', | |
df.movie_title.unique().tolist()) | |
character = st.sidebar.selectbox('Персонаж', | |
[' '] + df[ | |
df.movie_title == movie_title].names.explode().unique().tolist(), | |
disabled=False) | |
movie_id_ = df.query('movie_title == @movie_title').movie_id.unique().item() | |
def genres_stat(movie_id, character=None): | |
df_final = df.query('movie_id == @movie_id') | |
df_final['emotion'] = df_final.dialog.apply( | |
lambda x: [random.randint(0, 2) for _ in x]) | |
df_final['emotion'] = df_final.emotion.apply( | |
lambda x: [mapping[i] for i in x]) | |
df_final.reset_index(inplace=True, drop=True) | |
df_final = df_final[['names', 'emotion']] | |
df_final = df_final.explode(['names', 'emotion']) | |
df_final = df_final.groupby('names')['emotion'].value_counts( | |
normalize=True).to_frame('frequency') | |
if character is not None: | |
df_to_return = df_final.loc[character] | |
df_to_return.index.names = ['Эмоция'] | |
return df_to_return.rename(columns={ | |
'frequency': f'Соотношение для персонажа {character}'}) | |
else: | |
df_final.index.names = ['Персонаж', 'Эмоция'] | |
return df_final.rename( | |
columns={'frequency': f'Соотношение'}) # т.к. персонажей в фильме может быть много, возвращаем в текстовом формате | |
st.header(f'Выбранный фильм: {movie_title}') | |
if character == ' ': | |
st.subheader('Персонаж не выбран') | |
st.write(genres_stat(movie_id_)) | |
else: | |
st.subheader(f'Выбранный персонаж: {character}') | |
st.write(genres_stat(movie_id_, character)) | |