Spaces:
Sleeping
Sleeping
File size: 4,092 Bytes
addfe87 d08ab74 fc584b7 d08ab74 bc34780 d08ab74 6694af2 921748b 6694af2 d4a09ac 2485e4d 9ff09ee d08ab74 40e2ac9 6694af2 d08ab74 bc34780 d08ab74 d23d2fe 768cc19 d08ab74 6694af2 d08ab74 9ff09ee d08ab74 d4a09ac 921748b 6694af2 d08ab74 3d5e60a d08ab74 80ed3a0 bd20aea 80ed3a0 bd20aea 80ed3a0 bd20aea 80ed3a0 9db69bc bd3e270 b6e588c 847df83 bd3e270 921748b 6694af2 5d59349 |
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
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:
# NanumGothic-Regular.ttf ν°νΈ κ²½λ‘ μ€μ
font_path = 'NanumGothic-Regular.ttf'
fontprop = font_manager.FontProperties(fname=font_path)
# Matplotlibμ ν°νΈ μ€μ
plt.rc('font', family=fontprop.get_name())
#plt.rc('font', family='NanumGothicCoding')
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)
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("μ΄λ―Έμ§ νμΌμ μ°Ύμ μ μμ΅λλ€.") |