dltmdgus commited on
Commit
d08ab74
ยท
verified ยท
1 Parent(s): 6091239

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +132 -132
app.py CHANGED
@@ -1,132 +1,132 @@
1
- import streamlit as st
2
- import pandas as pd
3
- import matplotlib.pyplot as plt
4
- import seaborn as sns
5
- import matplotlib.font_manager as fm
6
- from matplotlib.backends.backend_pdf import PdfPages
7
- from io import BytesIO
8
-
9
- # ํฐํŠธ ์„ค์ •
10
- font_path = r"C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\H2GTRM.TTF"
11
- font_prop = fm.FontProperties(fname=font_path, size=12)
12
- plt.rcParams['font.family'] = font_prop.get_name()
13
- plt.rcParams['axes.unicode_minus'] = False
14
-
15
- # ์‚ฌ์ด๋“œ๋ฐ”์— ๋ชฉ์ฐจ ์ถ”๊ฐ€
16
- st.sidebar.title("๋ชฉ์ฐจ")
17
- page = st.sidebar.radio("ํŽ˜์ด์ง€ ์„ ํƒ", ["๊ฒฐ๊ณผ 1", "๊ฒฐ๊ณผ 2", "๊ฒฐ๊ณผ 3"])
18
-
19
- if page == "๊ฒฐ๊ณผ 1":
20
- st.title("๊ฒฐ๊ณผ 1: ๋ชจ๋“  ๋Œ€์ถœ ๋„์„œ ์ƒ์œ„ 10๊ฐœ")
21
-
22
- # ๋ฐ์ดํ„ฐ ๋กœ๋“œ
23
- file_path = r'C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\1_API ํ˜ธ์ถœ\book_analysis_final.xlsx'
24
- df = pd.read_excel(file_path, sheet_name=2)
25
-
26
- # ์ „์ฒด ๋„์„œ ๋Œ€์ถœ ๊ฑด์ˆ˜ ์ง‘๊ณ„
27
- book_patterns = df.groupby(['๋„์„œ๋ช…'])['๋Œ€์ถœ๊ฑด์ˆ˜'].sum().reset_index()
28
-
29
- # ์ƒ์œ„ 10๊ฐœ ๋„์„œ ์ถ”์ถœ
30
- top_books = book_patterns.nlargest(10, '๋Œ€์ถœ๊ฑด์ˆ˜')
31
-
32
- # ์ƒ์œ„ 10๊ฐœ์˜ ๋„์„œ ์‹œ๊ฐํ™”
33
- st.write("์ƒ์œ„ 10๊ฐœ ๋Œ€์ถœ ๋„์„œ")
34
- fig, ax = plt.subplots(figsize=(12, 8))
35
- sns.barplot(data=top_books, x='๋„์„œ๋ช…', y='๋Œ€์ถœ๊ฑด์ˆ˜', palette='viridis', ax=ax)
36
- ax.set_title('๋ชจ๋“  ๋Œ€์ถœ ๋„์„œ ์ƒ์œ„ 10๊ฐœ')
37
- ax.set_xlabel('๋„์„œ๋ช…')
38
- ax.set_ylabel('๋Œ€์ถœ๊ฑด์ˆ˜')
39
- plt.xticks(rotation=45, ha='right')
40
- st.pyplot(fig)
41
-
42
- elif page == "๊ฒฐ๊ณผ 2":
43
- st.title("๊ฒฐ๊ณผ 2: ์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ์ƒ์œ„ 5๊ฐœ ๋Œ€์ถœ ๋„์„œ")
44
-
45
- # ๋ฐ์ดํ„ฐ ๋กœ๋“œ
46
- file_path = r'C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\1_API ํ˜ธ์ถœ\book_analysis_final.xlsx'
47
- df = pd.read_excel(file_path, sheet_name=2)
48
-
49
- # ์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ๋„์„œ ๋Œ€์ถœ ๊ฑด์ˆ˜ ์ง‘๊ณ„
50
- book_patterns = df.groupby(['๋„์„œ๋ช…', '์—ฐ๋ น', '์„ฑ๋ณ„'])['๋Œ€์ถœ๊ฑด์ˆ˜'].sum().reset_index()
51
-
52
- # ์ƒ์œ„ 5๊ฐœ ๋„์„œ ์ถ”์ถœ ํ•จ์ˆ˜
53
- def get_top_books(data, top_n=5):
54
- return data.groupby(['์—ฐ๋ น', '์„ฑ๋ณ„']).apply(lambda x: x.nlargest(top_n, '๋Œ€์ถœ๊ฑด์ˆ˜')).reset_index(drop=True)
55
-
56
- # ์ƒ์œ„ 5๊ฐœ์˜ ๋„์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
57
- top_books = get_top_books(book_patterns)
58
-
59
- # ์—ฐ๋ น๋Œ€์™€ ์„ฑ๋ณ„ ์„ ํƒ
60
- ages = top_books['์—ฐ๋ น'].unique()
61
- genders = top_books['์„ฑ๋ณ„'].unique()
62
-
63
- selected_age = st.selectbox("์—ฐ๋ น๋Œ€ ์„ ํƒ", options=ages)
64
- selected_gender = st.selectbox("์„ฑ๋ณ„ ์„ ํƒ", options=genders)
65
-
66
- filtered_books = top_books[(top_books['์—ฐ๋ น'] == selected_age) & (top_books['์„ฑ๋ณ„'] == selected_gender)]
67
-
68
- # ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”
69
- if not filtered_books.empty:
70
- st.write(f"์ƒ์œ„ 5 ๋„์„œ (์—ฐ๋ น๋Œ€: {selected_age}, ์„ฑ๋ณ„: {selected_gender})")
71
- fig, ax = plt.subplots(figsize=(10, 6))
72
- sns.barplot(data=filtered_books, x='๋„์„œ๋ช…', y='๋Œ€์ถœ๊ฑด์ˆ˜', palette='viridis', ax=ax)
73
- ax.set_title(f'{selected_age} - {selected_gender}์˜ ์ƒ์œ„ 5 ๋„์„œ')
74
- ax.set_xlabel('๋„์„œ๋ช…')
75
- ax.set_ylabel('๋Œ€์ถœ๊ฑด์ˆ˜')
76
- plt.xticks(rotation=45, ha='right')
77
- st.pyplot(fig)
78
-
79
- elif page == "๊ฒฐ๊ณผ 3":
80
- st.title("๊ฒฐ๊ณผ 3: ์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ์ƒ์œ„ 3๊ฐœ ์žฅ๋ฅด")
81
-
82
- # ๋ฐ์ดํ„ฐ ๋กœ๋“œ
83
- file_path = r'C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\1_API ํ˜ธ์ถœ\book_analysis_final.xlsx'
84
- df = pd.read_excel(file_path, sheet_name=2)
85
-
86
- # ์—ฐ๋ น๋Œ€ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ
87
- df['์—ฐ๋ น๋Œ€'] = df['์—ฐ๋ น'].astype(str)
88
-
89
- # ์žฅ๋ฅด๋ณ„ ๋Œ€์ถœ ๊ฑด์ˆ˜ ์ง‘๊ณ„
90
- genre_age_sex = df.groupby(['์—ฐ๋ น๋Œ€', '์„ฑ๋ณ„', '์ฃผ์ œ๋ถ„๋ฅ˜๋ช…'])['๋Œ€์ถœ๊ฑด์ˆ˜'].sum().unstack().fillna(0)
91
-
92
- # ํžˆํŠธ๋งต ์‹œ๊ฐํ™”
93
- st.write("์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ์žฅ๋ฅด ์„ ํ˜ธ๋„ ํžˆํŠธ๋งต")
94
- fig, ax = plt.subplots(figsize=(12, 8))
95
- sns.heatmap(genre_age_sex, annot=False, cmap='YlGnBu', linewidths=0.5, ax=ax)
96
- ax.set_title('์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ์žฅ๋ฅด ์„ ํ˜ธ๋„')
97
- st.pyplot(fig)
98
-
99
- # ์ƒ์œ„ 3๊ฐœ์˜ ์ฃผ์ œ๋ถ„๋ฅ˜๋ช… ์ถ”์ถœ
100
- top_genres = df.groupby(['์—ฐ๋ น๋Œ€', '์„ฑ๋ณ„', '์ฃผ์ œ๋ถ„๋ฅ˜๋ช…'])['๋Œ€์ถœ๊ฑด์ˆ˜'].sum().reset_index()
101
- top_genres = top_genres.sort_values(by=['์—ฐ๋ น๋Œ€', '์„ฑ๋ณ„', '๋Œ€์ถœ๊ฑด์ˆ˜'], ascending=[True, True, False])
102
- top_3_genres = top_genres.groupby(['์—ฐ๋ น๋Œ€', '์„ฑ๋ณ„']).head(3).reset_index(drop=True)
103
-
104
- # ์—ฐ๋ น๋Œ€์™€ ์„ฑ๋ณ„ ์„ ํƒ
105
- ages = top_3_genres['์—ฐ๋ น๋Œ€'].unique()
106
- genders = top_3_genres['์„ฑ๋ณ„'].unique()
107
-
108
- selected_age = st.selectbox("์—ฐ๋ น๋Œ€ ์„ ํƒ", options=ages)
109
- selected_gender = st.selectbox("์„ฑ๋ณ„ ์„ ํƒ", options=genders)
110
-
111
- filtered_genres = top_3_genres[(top_3_genres['์—ฐ๋ น๋Œ€'] == selected_age) & (top_3_genres['์„ฑ๋ณ„'] == selected_gender)]
112
-
113
- # ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”
114
- if not filtered_genres.empty:
115
- st.write(f"์ƒ์œ„ 3 ์žฅ๋ฅด (์—ฐ๋ น๋Œ€: {selected_age}, ์„ฑ๋ณ„: {selected_gender})")
116
- fig, ax = plt.subplots(figsize=(10, 6))
117
- sns.barplot(data=filtered_genres, x='์ฃผ์ œ๋ถ„๋ฅ˜๋ช…', y='๋Œ€์ถœ๊ฑด์ˆ˜', palette='viridis', ax=ax)
118
- ax.set_title(f'{selected_age} - {selected_gender}์˜ ์ƒ์œ„ 3 ์žฅ๋ฅด')
119
- ax.set_xlabel('์ฃผ์ œ๋ถ„๋ฅ˜๋ช…')
120
- ax.set_ylabel('๋Œ€์ถœ๊ฑด์ˆ˜')
121
- plt.xticks(rotation=45, ha='right')
122
- st.pyplot(fig)
123
-
124
- # ์ƒ์œ„ 3 ์žฅ๋ฅด PDF ๋‹ค์šด๋กœ๋“œ
125
- pdf_path = r'C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\6_๋„์„œ๋Œ€์ถœ ํŒจํ„ด ๋ถ„์„\์ƒ์œ„_3_์žฅ๋ฅด.pdf'
126
- with open(pdf_path, "rb") as f:
127
- st.download_button(
128
- label="์ƒ์œ„ 3 ์žฅ๋ฅด PDF ๋‹ค์šด๋กœ๋“œ",
129
- data=f,
130
- file_name="์ƒ์œ„_3_์žฅ๋ฅด.pdf",
131
- mime="application/pdf"
132
- )
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import matplotlib.pyplot as plt
4
+ import seaborn as sns
5
+ import matplotlib.font_manager as fm
6
+ from matplotlib.backends.backend_pdf import PdfPages
7
+ from io import BytesIO
8
+
9
+ # ํฐํŠธ ์„ค์ •
10
+ font_path = r"C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\H2GTRM.TTF"
11
+ font_prop = fm.FontProperties(fname=font_path, size=12)
12
+ plt.rcParams['font.family'] = font_prop.get_name()
13
+ plt.rcParams['axes.unicode_minus'] = False
14
+
15
+ # ์‚ฌ์ด๋“œ๋ฐ”์— ๋ชฉ์ฐจ ์ถ”๊ฐ€
16
+ st.sidebar.title("๋ชฉ์ฐจ")
17
+ page = st.sidebar.radio("ํŽ˜์ด์ง€ ์„ ํƒ", ["๊ฒฐ๊ณผ 1", "๊ฒฐ๊ณผ 2", "๊ฒฐ๊ณผ 3"])
18
+
19
+ if page == "๊ฒฐ๊ณผ 1":
20
+ st.title("๊ฒฐ๊ณผ 1: ๋ชจ๋“  ๋Œ€์ถœ ๋„์„œ ์ƒ์œ„ 10๊ฐœ")
21
+
22
+ # ๋ฐ์ดํ„ฐ ๋กœ๋“œ
23
+ file_path = r'C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\1_API ํ˜ธ์ถœ\book_analysis_final.xlsx'
24
+ df = pd.read_excel(file_path, sheet_name=2)
25
+
26
+ # ์ „์ฒด ๋„์„œ ๋Œ€์ถœ ๊ฑด์ˆ˜ ์ง‘๊ณ„
27
+ book_patterns = df.groupby(['๋„์„œ๋ช…'])['๋Œ€์ถœ๊ฑด์ˆ˜'].sum().reset_index()
28
+
29
+ # ์ƒ์œ„ 10๊ฐœ ๋„์„œ ์ถ”์ถœ
30
+ top_books = book_patterns.nlargest(10, '๋Œ€์ถœ๊ฑด์ˆ˜')
31
+
32
+ # ์ƒ์œ„ 10๊ฐœ์˜ ๋„์„œ ์‹œ๊ฐํ™”
33
+ st.write("์ƒ์œ„ 10๊ฐœ ๋Œ€์ถœ ๋„์„œ")
34
+ fig, ax = plt.subplots(figsize=(12, 8))
35
+ sns.barplot(data=top_books, x='๋„์„œ๋ช…', y='๋Œ€์ถœ๊ฑด์ˆ˜', palette='viridis', ax=ax)
36
+ ax.set_title('๋ชจ๋“  ๋Œ€์ถœ ๋„์„œ ์ƒ์œ„ 10๊ฐœ')
37
+ ax.set_xlabel('๋„์„œ๋ช…')
38
+ ax.set_ylabel('๋Œ€์ถœ๊ฑด์ˆ˜')
39
+ plt.xticks(rotation=45, ha='right')
40
+ st.pyplot(fig)
41
+
42
+ elif page == "๊ฒฐ๊ณผ 2":
43
+ st.title("๊ฒฐ๊ณผ 2: ์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ์ƒ์œ„ 5๊ฐœ ๋Œ€์ถœ ๋„์„œ")
44
+
45
+ # ๋ฐ์ดํ„ฐ ๋กœ๋“œ
46
+ file_path = r'C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\1_API ํ˜ธ์ถœ\book_analysis_final.xlsx'
47
+ df = pd.read_excel(file_path, sheet_name=2)
48
+
49
+ # ์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ๋„์„œ ๋Œ€์ถœ ๊ฑด์ˆ˜ ์ง‘๊ณ„
50
+ book_patterns = df.groupby(['๋„์„œ๋ช…', '์—ฐ๋ น', '์„ฑ๋ณ„'])['๋Œ€์ถœ๊ฑด์ˆ˜'].sum().reset_index()
51
+
52
+ # ์ƒ์œ„ 5๊ฐœ ๋„์„œ ์ถ”์ถœ ํ•จ์ˆ˜
53
+ def get_top_books(data, top_n=5):
54
+ return data.groupby(['์—ฐ๋ น', '์„ฑ๋ณ„']).apply(lambda x: x.nlargest(top_n, '๋Œ€์ถœ๊ฑด์ˆ˜')).reset_index(drop=True)
55
+
56
+ # ์ƒ์œ„ 5๊ฐœ์˜ ๋„์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ
57
+ top_books = get_top_books(book_patterns)
58
+
59
+ # ์—ฐ๋ น๋Œ€์™€ ์„ฑ๋ณ„ ์„ ํƒ
60
+ ages = top_books['์—ฐ๋ น'].unique()
61
+ genders = top_books['์„ฑ๋ณ„'].unique()
62
+
63
+ selected_age = st.selectbox("์—ฐ๋ น๋Œ€ ์„ ํƒ", options=ages)
64
+ selected_gender = st.selectbox("์„ฑ๋ณ„ ์„ ํƒ", options=genders)
65
+
66
+ filtered_books = top_books[(top_books['์—ฐ๋ น'] == selected_age) & (top_books['์„ฑ๋ณ„'] == selected_gender)]
67
+
68
+ # ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”
69
+ if not filtered_books.empty:
70
+ st.write(f"์ƒ์œ„ 5 ๋„์„œ (์—ฐ๋ น๋Œ€: {selected_age}, ์„ฑ๋ณ„: {selected_gender})")
71
+ fig, ax = plt.subplots(figsize=(10, 6))
72
+ sns.barplot(data=filtered_books, x='๋„์„œ๋ช…', y='๋Œ€์ถœ๊ฑด์ˆ˜', palette='viridis', ax=ax)
73
+ ax.set_title(f'{selected_age} - {selected_gender}์˜ ์ƒ์œ„ 5 ๋„์„œ')
74
+ ax.set_xlabel('๋„์„œ๋ช…')
75
+ ax.set_ylabel('๋Œ€์ถœ๊ฑด์ˆ˜')
76
+ plt.xticks(rotation=45, ha='right')
77
+ st.pyplot(fig)
78
+
79
+ elif page == "๊ฒฐ๊ณผ 3":
80
+ st.title("๊ฒฐ๊ณผ 3: ์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ์ƒ์œ„ 3๊ฐœ ์žฅ๋ฅด")
81
+
82
+ # ๋ฐ์ดํ„ฐ ๋กœ๋“œ
83
+ file_path = r'C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\1_API ํ˜ธ์ถœ\book_analysis_final.xlsx'
84
+ df = pd.read_excel(file_path, sheet_name=2)
85
+
86
+ # ์—ฐ๋ น๋Œ€ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ
87
+ df['์—ฐ๋ น๋Œ€'] = df['์—ฐ๋ น'].astype(str)
88
+
89
+ # ์žฅ๋ฅด๋ณ„ ๋Œ€์ถœ ๊ฑด์ˆ˜ ์ง‘๊ณ„
90
+ genre_age_sex = df.groupby(['์—ฐ๋ น๋Œ€', '์„ฑ๋ณ„', '์ฃผ์ œ๋ถ„๋ฅ˜๋ช…'])['๋Œ€์ถœ๊ฑด์ˆ˜'].sum().unstack().fillna(0)
91
+
92
+ # ํžˆํŠธ๋งต ์‹œ๊ฐํ™”
93
+ st.write("์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ์žฅ๋ฅด ์„ ํ˜ธ๋„ ํžˆํŠธ๋งต")
94
+ fig, ax = plt.subplots(figsize=(12, 8))
95
+ sns.heatmap(genre_age_sex, annot=False, cmap='YlGnBu', linewidths=0.5, ax=ax)
96
+ ax.set_title('์—ฐ๋ น๋Œ€ ๋ฐ ์„ฑ๋ณ„์— ๋”ฐ๋ฅธ ์žฅ๋ฅด ์„ ํ˜ธ๋„')
97
+ st.pyplot(fig)
98
+
99
+ # ์ƒ์œ„ 3๊ฐœ์˜ ์ฃผ์ œ๋ถ„๋ฅ˜๋ช… ์ถ”์ถœ
100
+ top_genres = df.groupby(['์—ฐ๋ น๋Œ€', '์„ฑ๋ณ„', '์ฃผ์ œ๋ถ„๋ฅ˜๋ช…'])['๋Œ€์ถœ๊ฑด์ˆ˜'].sum().reset_index()
101
+ top_genres = top_genres.sort_values(by=['์—ฐ๋ น๋Œ€', '์„ฑ๋ณ„', '๋Œ€์ถœ๊ฑด์ˆ˜'], ascending=[True, True, False])
102
+ top_3_genres = top_genres.groupby(['์—ฐ๋ น๋Œ€', '์„ฑ๋ณ„']).head(3).reset_index(drop=True)
103
+
104
+ # ์—ฐ๋ น๋Œ€์™€ ์„ฑ๋ณ„ ์„ ํƒ
105
+ ages = top_3_genres['์—ฐ๋ น๋Œ€'].unique()
106
+ genders = top_3_genres['์„ฑ๋ณ„'].unique()
107
+
108
+ selected_age = st.selectbox("์—ฐ๋ น๋Œ€ ์„ ํƒ", options=ages)
109
+ selected_gender = st.selectbox("์„ฑ๋ณ„ ์„ ํƒ", options=genders)
110
+
111
+ filtered_genres = top_3_genres[(top_3_genres['์—ฐ๋ น๋Œ€'] == selected_age) & (top_3_genres['์„ฑ๋ณ„'] == selected_gender)]
112
+
113
+ # ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”
114
+ if not filtered_genres.empty:
115
+ st.write(f"์ƒ์œ„ 3 ์žฅ๋ฅด (์—ฐ๋ น๋Œ€: {selected_age}, ์„ฑ๋ณ„: {selected_gender})")
116
+ fig, ax = plt.subplots(figsize=(10, 6))
117
+ sns.barplot(data=filtered_genres, x='์ฃผ์ œ๋ถ„๋ฅ˜๋ช…', y='๋Œ€์ถœ๊ฑด์ˆ˜', palette='viridis', ax=ax)
118
+ ax.set_title(f'{selected_age} - {selected_gender}์˜ ์ƒ์œ„ 3 ์žฅ๋ฅด')
119
+ ax.set_xlabel('์ฃผ์ œ๋ถ„๋ฅ˜๋ช…')
120
+ ax.set_ylabel('๋Œ€์ถœ๊ฑด์ˆ˜')
121
+ plt.xticks(rotation=45, ha='right')
122
+ st.pyplot(fig)
123
+
124
+ # ์ƒ์œ„ 3 ์žฅ๋ฅด PDF ๋‹ค์šด๋กœ๋“œ
125
+ pdf_path = r'C:\Users\user\Desktop\๋„์„œ๊ด€_๊ณต๋ชจ์ „\์ตœ์ข…\6_๋„์„œ๋Œ€์ถœ ํŒจํ„ด ๋ถ„์„\์ƒ์œ„_3_์žฅ๋ฅด.pdf'
126
+ with open(pdf_path, "rb") as f:
127
+ st.download_button(
128
+ label="์ƒ์œ„ 3 ์žฅ๋ฅด PDF ๋‹ค์šด๋กœ๋“œ",
129
+ data=f,
130
+ file_name="์ƒ์œ„_3_์žฅ๋ฅด.pdf",
131
+ mime="application/pdf"
132
+ )