Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| import seaborn as sns | |
| import matplotlib.font_manager as fm | |
| import streamlit as st | |
| # ํฐํธ ํ์ผ ๊ฒฝ๋ก ์ค์ | |
| 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 # ๋ง์ด๋์ค ๊ธฐํธ ๊นจ์ง ๋ฐฉ์ง | |
| # ๋ฐ์ดํฐ ๋ก๋ | |
| file_path = r'book_analysis_final.xlsx' | |
| df = pd.read_excel(file_path, sheet_name=2) | |
| # ์ฐ๋ น๋ ๋ฌธ์์ด ์ฒ๋ฆฌ | |
| df['์ฐ๋ น๋'] = df['์ฐ๋ น'].astype(str) | |
| # ์ฅ๋ฅด๋ณ ๋์ถ ๊ฑด์ ์ง๊ณ | |
| genre_age_sex = df.groupby(['์ฐ๋ น๋', '์ฑ๋ณ', '์ฃผ์ ๋ถ๋ฅ๋ช '])['๋์ถ๊ฑด์'].sum().unstack().fillna(0) | |
| # ์์ 3๊ฐ์ ์ฃผ์ ๋ถ๋ฅ๋ช ์ถ์ถ | |
| top_genres = df.groupby(['์ฐ๋ น๋', '์ฑ๋ณ', '์ฃผ์ ๋ถ๋ฅ๋ช '])['๋์ถ๊ฑด์'].sum().reset_index() | |
| top_genres = top_genres.sort_values(by=['์ฐ๋ น๋', '์ฑ๋ณ', '๋์ถ๊ฑด์'], ascending=[True, True, False]) | |
| # ๊ฐ ์ฐ๋ น๋์ ์ฑ๋ณ๋ณ๋ก ์์ 3๊ฐ์ ์ฃผ์ ๋ถ๋ฅ๋ช ์ ์ถ์ถ | |
| top_3_genres = top_genres.groupby(['์ฐ๋ น๋', '์ฑ๋ณ']).head(3).reset_index(drop=True) | |
| # Streamlit ์ ํ๋ฆฌ์ผ์ด์ ์ค์ | |
| st.title('์ฐ๋ น/์ฑ๋ณ์ ๋ฐ๋ฅธ ์์ ์ฅ๋ฅด') | |
| # ์ ํ ๋ฐ์ค ์์ฑ | |
| selected_age_group = st.selectbox('์ฐ๋ น๋๋ฅผ ์ ํํ์ธ์:', df['์ฐ๋ น๋'].unique()) | |
| selected_gender = st.selectbox('์ฑ๋ณ์ ์ ํํ์ธ์:', df['์ฑ๋ณ'].unique()) | |
| # ์ ํ๋ ์นดํ ๊ณ ๋ฆฌ์ ํด๋นํ๋ ๋ฐ์ดํฐ ํํฐ๋ง | |
| filtered_data = top_3_genres[(top_3_genres['์ฐ๋ น๋'] == selected_age_group) & (top_3_genres['์ฑ๋ณ'] == selected_gender)] | |
| # ์์ 3๊ฐ์ ์ฃผ์ ๋ถ๋ฅ๋ช ์๊ฐํ | |
| if not filtered_data.empty: | |
| st.subheader(f'{selected_age_group} - {selected_gender}์ ์์ 3 ์ฅ๋ฅด') | |
| plt.figure(figsize=(10, 6)) | |
| sns.barplot(data=filtered_data, x='์ฃผ์ ๋ถ๋ฅ๋ช ', y='๋์ถ๊ฑด์', palette='viridis') | |
| plt.title(f'{selected_age_group} - {selected_gender}์ ์์ 3 ์ฅ๋ฅด') | |
| plt.xlabel('์ฃผ์ ๋ถ๋ฅ๋ช ') | |
| plt.ylabel('๋์ถ๊ฑด์') | |
| plt.xticks(rotation=45) | |
| plt.tight_layout() | |
| st.pyplot(plt) | |
| else: | |
| st.write('์ ํ๋ ์ฐ๋ น๋์ ์ฑ๋ณ์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.') | |