kikikita commited on
Commit
6f17317
·
1 Parent(s): ef4bec4

Add application file

Browse files
Files changed (1) hide show
  1. app.py +68 -0
app.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import random
4
+ pd.options.mode.chained_assignment = None
5
+
6
+
7
+ @st.cache_data
8
+ def get_data():
9
+ df = pd.read_csv('movies_prepared.csv')
10
+ return df
11
+
12
+
13
+ df = get_data()
14
+ df.dialog = df.dialog.apply(lambda x: eval(x) if isinstance(x, str) else x)
15
+ df.order = df.order.apply(lambda x: eval(x) if isinstance(x, str) else x)
16
+ df.characters = df.characters.apply(
17
+ lambda x: eval(x) if isinstance(x, str) else x)
18
+ df.genres = df.genres.apply(lambda x: eval(x) if isinstance(x, str) else x)
19
+ df.names = df.names.apply(lambda x: eval(x) if isinstance(x, str) else x)
20
+
21
+ labels = [
22
+ 'Positive',
23
+ 'Negative',
24
+ 'Neutral'
25
+ ]
26
+ mapping = {i: k for i, k in enumerate(labels)}
27
+
28
+ st.sidebar.header('Выбор фильма и персонажа')
29
+ movie_title = st.sidebar.selectbox('Название фильма',
30
+ df.movie_title.unique().tolist())
31
+ character = st.sidebar.selectbox('Персонаж',
32
+ [' '] + df[
33
+ df.movie_title == movie_title].names.explode().unique().tolist(),
34
+ disabled=False)
35
+ movie_id_ = df.query('movie_title == @movie_title').movie_id.unique().item()
36
+
37
+
38
+ def genres_stat(movie_id, character=None):
39
+ df_final = df.query('movie_id == @movie_id')
40
+ df_final['emotion'] = df_final.dialog.apply(
41
+ lambda x: [random.randint(0, 2) for _ in x])
42
+ df_final['emotion'] = df_final.emotion.apply(
43
+ lambda x: [mapping[i] for i in x])
44
+ df_final.reset_index(inplace=True, drop=True)
45
+ df_final = df_final[['names', 'emotion']]
46
+ df_final = df_final.explode(['names', 'emotion'])
47
+ df_final = df_final.groupby('names')['emotion'].value_counts(
48
+ normalize=True).to_frame('frequency')
49
+
50
+ if character is not None:
51
+ df_to_return = df_final.loc[character]
52
+ df_to_return.index.names = ['Эмоция']
53
+ return df_to_return.rename(columns={
54
+ 'frequency': f'Соотношение для персонажа {character}'})
55
+ else:
56
+ df_final.index.names = ['Персонаж', 'Эмоция']
57
+ return df_final.rename(
58
+ columns={'frequency': f'Соотношение'}) # т.к. персонажей в фильме может быть много, возвращаем в текстовом формате
59
+
60
+
61
+
62
+ st.header(f'Выбранный фильм: {movie_title}')
63
+ if character == ' ':
64
+ st.subheader('Персонаж не выбран')
65
+ st.write(genres_stat(movie_id_))
66
+ else:
67
+ st.subheader(f'Выбранный персонаж: {character}')
68
+ st.write(genres_stat(movie_id_, character))