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("μ΄λ―Έμ§ νμΌμ μ°Ύμ μ μμ΅λλ€.") |