-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
64 lines (53 loc) · 2.08 KB
/
app.py
File metadata and controls
64 lines (53 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from db import Database
import matplotlib.pyplot as plt
import streamlit as st
if __name__ == "__main__":
# init Database
try:
db = Database()
except FileNotFoundError as inst:
st.write("File could not be found. Make sure the file has been named properly and please try again.")
st.write(inst)
#Page Layout
st.title("Movie Metadata Database")
st.sidebar.header('Filters')
#Load Full Data
df = db.query_db(limit=0)
#Sidebar Filters
genre_input = st.sidebar.text_input("Genres (space-separated):")
min_rating = st.sidebar.slider("Min Rating:", 0.0, 10.0, 0.0, 0.1)
max_rating = st.sidebar.slider("Max Rating:", 0.0, 10.0, 10.0, 0.1)
if len(genre_input) > 0:
genres = str(genre_input).title().split()
else:
genres = []
#Filter SQL Query
params = []
if len(genres) > 0 or min_rating > 0.0 or max_rating < 10.0:
params = {'genres': genres, 'min_rating': min_rating, 'max_rating': max_rating}
df = db.filter_query(opt_params=params)
#Display Data
st.header("Movie Data")
st.dataframe(df)
#Stats
st.header("Stats")
if st.button("Compute Stats"):
if len(genres) > 0 or min_rating > 0.0 or max_rating < 10.0:
opt_params = {'genres': genres, 'min_rating': min_rating, 'max_rating': max_rating}
st.dataframe(db.genre_stats_query(opt_params=opt_params))
else:
st.dataframe(db.genre_stats_query())
#Plot
st.header("Genre Plot")
if st.button("Generate Plot"):
fig, ax = plt.subplots()
if len(genres) > 0 or min_rating > 0.0 or max_rating < 10.0:
opt_params = {'genres': genres, 'min_rating': min_rating, 'max_rating': max_rating}
db.genre_stats_query(opt_params=opt_params).plot(kind='bar', x='genre', y='count', ax=ax)
else:
db.genre_stats_query().plot(kind='bar', x='genre', y='count', ax=ax)
ax.set_title("Genre Counts")
ax.set_xlabel("Genre")
ax.set_ylabel("Count")
plt.tight_layout()
st.pyplot(fig)