Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| import seaborn as sns | |
| import matplotlib.font_manager as fm | |
| from PIL import Image | |
| # ν°νΈ μ€μ | |
| font_path = r"H2GTRM.TTF" | |
| font_prop = fm.FontProperties(fname=font_path, size=12) | |
| plt.rcParams['font.family'] = font_prop.get_name() | |
| plt.rcParams['axes.unicode_minus'] = False | |
| # μ¬μ΄λλ°μ λͺ©μ°¨ μΆκ° | |
| st.sidebar.title("λͺ©μ°¨") | |
| page = st.sidebar.radio("νμ΄μ§ μ ν", ["λͺ¨λ λμΆ λμ μμ 10κ°", "μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 5κ° λμΆ λμ", "μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 3κ° μ₯λ₯΄"]) | |
| if page == "λͺ¨λ λμΆ λμ μμ 10κ°": | |
| st.title("λͺ¨λ λμΆ λμ μμ 10κ°") | |
| # μ΄λ―Έμ§ νμΌ κ²½λ‘ | |
| image_path = r'top_books_plot_page-0001.jpg' | |
| # μ΄λ―Έμ§ μ λ‘λ λ° νμ | |
| st.image(image_path, caption="λͺ¨λ λμΆ λμ μμ 10κ°", use_column_width=True) | |
| elif page == "μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 5κ° λμΆ λμ": | |
| st.title("μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 5κ° λμΆ λμ") | |
| # λ°μ΄ν° λ‘λ | |
| file_path = r'μμ_5_λμ.xlsx' | |
| df = pd.read_excel(file_path, sheet_name=None) | |
| df = pd.concat(df.values()) # λͺ¨λ μνΈ λ°μ΄ν°λ₯Ό κ²°ν© | |
| # μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ λμ λμΆ κ±΄μ μ§κ³ | |
| 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: | |
| 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 λμ') | |
| ax.set_xlabel('λμλͺ ') | |
| ax.set_ylabel('λμΆκ±΄μ') | |
| plt.xticks(rotation=45, ha='right') | |
| st.pyplot(fig) | |
| elif page == "μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 3κ° μ₯λ₯΄": | |
| st.title("μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μμ 3κ° μ₯λ₯΄") | |
| # λ°μ΄ν° λ‘λ | |
| file_path = r'μμ_3_μ₯λ₯΄.xlsx' | |
| df = pd.read_excel(file_path, sheet_name=None) | |
| df = pd.concat(df.values()) # λͺ¨λ μνΈ λ°μ΄ν°λ₯Ό κ²°ν© | |
| # μ°λ Ήλ λ¬Έμμ΄ μ²λ¦¬ | |
| df['μ°λ Ήλ'] = df['μ°λ Ή'].astype(str) | |
| # μ₯λ₯΄λ³ λμΆ κ±΄μ μ§κ³ | |
| genre_age_sex = df.groupby(['μ°λ Ήλ', 'μ±λ³', 'μ£Όμ λΆλ₯λͺ '])['λμΆκ±΄μ'].sum().unstack().fillna(0) | |
| # ννΈλ§΅ μκ°ν | |
| st.write("μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μ₯λ₯΄ μ νΈλ ννΈλ§΅") | |
| fig, ax = plt.subplots(figsize=(12, 8)) | |
| sns.heatmap(genre_age_sex, annot=False, cmap='YlGnBu', linewidths=0.5, ax=ax) | |
| ax.set_title('μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μ₯λ₯΄ μ νΈλ') | |
| st.pyplot(fig) | |
| # ννΈλ§΅ μ΄λ―Έμ§ νμΌ κ²½λ‘ | |
| heat_map_image_path = r'heat_map_page-0001.jpg' | |
| # μ΄λ―Έμ§ μ λ‘λ λ° νμ | |
| st.image(heat_map_image_path, caption="μ°λ Ήλ λ° μ±λ³μ λ°λ₯Έ μ₯λ₯΄ μ νΈλ ννΈλ§΅", use_column_width=True) | |