Spaces:
Sleeping
Sleeping
import os | |
import streamlit as st | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
import seaborn as sns | |
import matplotlib.font_manager as fm | |
from matplotlib import rc | |
# μ¬μ΄λλ°μ λͺ©μ°¨ μΆκ° | |
st.sidebar.title("λͺ©μ°¨") | |
page = st.sidebar.radio("νμ΄μ§ μ ν", ["μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 5κ° λμΆ λμ", "μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 3κ° μ₯λ₯΄"]) | |
def load_data(file_path): | |
try: | |
if os.path.isfile(file_path): | |
df = pd.read_excel(file_path, sheet_name=None) | |
return pd.concat(df.values()) | |
else: | |
st.error(f"νμΌμ μ°Ύμ μ μμ΅λλ€: {file_path}") | |
return pd.DataFrame() | |
except Exception as e: | |
st.error(f"λ°μ΄ν°λ₯Ό λ‘λνλ λμ μ€λ₯κ° λ°μνμ΅λλ€: {e}") | |
return pd.DataFrame() | |
if page == "μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 5κ° λμΆ λμ": | |
st.title("μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 5κ° λμΆ λμ") | |
# λ°μ΄ν° λ‘λ | |
df = load_data('μμ_5_λμ.xlsx') | |
if df.empty: | |
st.stop() | |
# μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ λμ λμΆ κ±΄μ μ§κ³ | |
book_patterns = df.groupby(['λμλͺ ', 'μ°λ Ή', 'μ±λ³'])['λμΆκ±΄μ'].sum().reset_index() | |
# μμ 5κ° λμ μΆμΆ ν¨μ | |
def get_top_books(data, top_n=5): | |
return data.groupby(['μ°λ Ή', 'μ±λ³']) \ | |
.apply(lambda x: x.nlargest(top_n, 'λμΆκ±΄μ')) \ | |
.reset_index(drop=True) | |
# μμ 5κ°μ λμ λ°μ΄ν° μΆμΆ | |
top_books = get_top_books(book_patterns) | |
# μ°λ Ήλμ μ±λ³ μ ν | |
ages = top_books['μ°λ Ή'].unique() | |
genders = top_books['μ±λ³'].unique() | |
selected_age = st.selectbox("μ°λ Ήλ μ ν", options=ages) | |
selected_gender = st.selectbox("μ±λ³ μ ν", options=genders) | |
filtered_books = top_books[(top_books['μ°λ Ή'] == selected_age) & (top_books['μ±λ³'] == selected_gender)] | |
# λ§λ κ·Έλν μκ°ν | |
if not filtered_books.empty: | |
font_path = 'NanumGothic-Regular.ttf' | |
fontprop = fm.FontProperties(fname=font_path) | |
plt.rc('font', family=fontprop.get_name()) | |
plt.rcParams['font.family'] = fontprop.get_name() | |
st.write(f"μμ 5 λμ (μ°λ Ήλ: {selected_age}, μ±λ³: {selected_gender})") | |
fig, ax = plt.subplots(figsize=(10, 6)) | |
sns.barplot(data=filtered_books, x='λμλͺ ', y='λμΆκ±΄μ', palette='viridis', ax=ax) | |
ax.set_title(f'{selected_age} - {selected_gender}μ μμ 5 λμ', fontproperties=fontprop) | |
ax.set_xlabel('λμλͺ ', fontproperties=fontprop) | |
ax.set_ylabel('λμΆκ±΄μ', fontproperties=fontprop) | |
plt.xticks(rotation=45, ha='right', fontproperties=fontprop) | |
st.pyplot(fig) | |
else: | |
st.write("μ νν 쑰건μ λ§λ λ°μ΄ν°κ° μμ΅λλ€.") | |
elif page == "μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 3κ° μ₯λ₯΄": | |
st.title("μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 3κ° μ₯λ₯΄") | |
# λ°μ΄ν° λ‘λ | |
df = load_data('μμ_3_μ₯λ₯΄.xlsx') | |
if df.empty: | |
st.stop() | |
# μ°λ Ήλ λ¬Έμμ΄ μ²λ¦¬ | |
df['μ°λ Ήλ'] = df['μ°λ Ήλ'].astype(str) | |
# μ°λ Ήλ λ° μ±λ³ μ ν | |
ages = df['μ°λ Ήλ'].unique() | |
genders = df['μ±λ³'].unique() | |
selected_age = st.selectbox("μ°λ Ήλ μ ν", options=ages) | |
selected_gender = st.selectbox("μ±λ³ μ ν", options=genders) | |
# νν°λ§λ λ°μ΄ν° μΆμΆ | |
filtered_df = df[(df['μ°λ Ήλ'] == selected_age) & (df['μ±λ³'] == selected_gender)] | |
# μ£Όμ λΆλ₯λͺ λͺ©λ‘ μΆλ ₯ | |
genre_list = filtered_df['μ£Όμ λΆλ₯λͺ '].unique() | |
st.write(f"{selected_age} - {selected_gender}μ λ°λ₯Έ μ£Όμ λΆλ₯λͺ :") | |
st.write(genre_list) | |
# μ΄λ―Έμ§ νμΌ κ²½λ‘ | |
image_path = 'heat_map_page-0001.jpg' | |
# μ΄λ―Έμ§ μ λ‘λ λ° νμ | |
if os.path.isfile(image_path): | |
st.image(image_path, caption="ννΈλ§΅", use_column_width=True) | |
else: | |
st.write("μ΄λ―Έμ§ νμΌμ μ°Ύμ μ μμ΅λλ€.") |