ll7098ll commited on
Commit
dcac697
·
verified ·
1 Parent(s): f95acaa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +437 -495
app.py CHANGED
@@ -4,12 +4,13 @@ import google.generativeai as genai
4
  import random
5
  import time
6
  import pandas as pd
7
- import plotly.express as px
 
8
 
9
  # --- Streamlit 설정 ---
10
  st.set_page_config(
11
- page_title="어린이 경제 교실: 주식으로 배우는 한국 경제사",
12
- page_icon="🇰🇷💰",
13
  layout="wide",
14
  initial_sidebar_state="expanded",
15
  )
@@ -18,406 +19,387 @@ st.set_page_config(
18
  st.markdown(
19
  """
20
  <style>
21
- /* Nanum Gothic 폰트 설정 */
22
  @import url('https://fonts.googleapis.com/css2?family=Nanum+Gothic:wght@400;700&display=swap');
23
  body {
24
  font-family: 'Nanum Gothic', sans-serif !important;
25
  }
26
- /* ... (이전 스타일 코드와 동일) ... */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  </style>
28
  """,
29
  unsafe_allow_html=True,
30
  )
31
 
32
- # --- API 키 설정 ---
 
33
  if "GEMINI_API_KEY" not in os.environ:
34
  st.error(
35
  "GEMINI_API_KEY 환경 변수가 설정되지 않았습니다. Hugging Face Secrets 또는 환경 변수에 API 키를 설정해주세요."
36
  )
37
  st.stop()
 
38
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
39
- model = genai.GenerativeModel(model_name="gemini-2.0-flash-exp")
40
 
41
- # --- 세션 상태 초기화 ---
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  if "chat_session" not in st.session_state:
43
  st.session_state["chat_session"] = model.start_chat(history=[])
44
  if "portfolio" not in st.session_state:
45
  st.session_state["portfolio"] = {"cash": 10000000, "stocks": {}}
46
- if "current_era" not in st.session_state:
47
- st.session_state["current_era"] = "1960년대"
48
- if "era_turn_count" not in st.session_state: # 턴 수 관리 변수 추가
49
- st.session_state["era_turn_count"] = 1
50
- if "eras_data" not in st.session_state:
51
- st.session_state["eras_data"] = {
52
- "1960년대": {
53
- "섹터": {
54
- "경공업": {
55
- "대한방직": {
56
- "current_price": random.randint(1000, 3000),
57
- "price_history": [],
58
- "description": "🇰🇷 1960년대 섬유 산업의 선두주자, 대한방직! 옷감과 실을 만들어 우리나라 의류 산업 발전에 큰 역할을 했어요. 튼튼하고 예쁜 옷감을 만들어서 많은 사람들에게 사랑받았답니다. 수출도 많이 해서 우리나라 경제를 일으키는 데도 도움을 줬어요.",
59
- },
60
- "삼화고무": {
61
- "current_price": random.randint(500, 1500),
62
- "price_history": [],
63
- "description": "👟 1960년대 국민 신발 기업, 삼화고무! '기차표' 신발로 유명해요. 튼튼하고 편안한 고무신발을 만들어서 학생들부터 어른들까지 많이 신었어요. 운동화, 작업화 등 다양한 신발을 만들어서 신발 산업을 이끌었답니다.",
64
- },
65
- "태창직물": {
66
- "current_price": random.randint(800, 2500),
67
- "price_history": [],
68
- "description": "🧵 1960년대 섬유 수출을 주도한 태창직물! 고품질의 옷감을 만들어 외국으로 많이 팔았어요. 섬유 수출로 우리나라가 돈을 벌어들이는 데 큰 역할을 했답니다. 새로운 옷감 기술 개발에도 힘썼어요.",
69
- },
70
- },
71
- "식품": {
72
- "동양제과": {
73
- "current_price": random.randint(5000, 15000),
74
- "price_history": [],
75
- "description": "🍪 1960년대 달콤한 제과 기업, 동양제과! 지금의 오리온이에요. '오리온' 초코파이, '껌' 등으로 유명해요. 맛있는 과자와 껌을 만들어서 온 가족이 즐겁게 먹을 수 있게 했어요. 어린이들에게 꿈과 희망을 주는 과자를 만들었답니다.",
76
- },
77
- "신진식품": {
78
- "current_price": random.randint(3000, 8000),
79
- "price_history": [],
80
- "description": "🍜 1960년대 라면의 시작, 신진식품! 우리나라 최초의 라면 '삼양라면'을 만들었어요. 배고픈 사람들에게 싸고 맛있는 라면을 제공해서 큰 인기를 얻었어요. 라면은 이제 우리나라 대표 음식이 되었답니다.",
81
- },
82
- },
83
- "건설": {
84
- "현대건설": {
85
- "current_price": random.randint(10000, 30000),
86
- "price_history": [],
87
- "description": "🏗️ 1960년대 건설 산업의 개척자, 현대건설! 고속도로, 다리, 항만 등 우리나라 주요 시설들을 건설했어요. 불도저로 땅을 고르고 건물을 짓는 등 우리나라 건설 기술을 발전시켰답니다. 해외 건설 시장에도 진출했어요.",
88
- },
89
- "삼부토건": {
90
- "current_price": random.randint(5000, 15000),
91
- "price_history": [],
92
- "description": "🚧 1960년대 SOC 건설의 주역, 삼부토건! 도로, 댐, 지하철 등 사회 기반 시설 건설에 힘썼어요. 국토 개발과 경제 성장에 꼭 필요한 건설 사업들을 많이 했답니다. 안전하고 튼튼한 건축물을 만들기 위해 노력했어요.",
93
- },
94
- },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  },
96
  },
97
- "1970년대": {
98
- "섹터": {
99
- "중화학공업": {
100
- "포스코": {
101
- "current_price": random.randint(30000, 60000),
102
- "price_history": [],
103
- "description": "🏭 1970년대 철강 신화, 포스코! 우리나라 철강 산업을 세계적인 수준으로 끌어올렸어요. 자동차, 배, 건물 등 튼튼한 철강재를 만들어서 우리나라 산업 발전에 없어서는 안 될 존재가 되었답니다. 끊임없는 기술 개발로 세계 최고 철강 회사가 되었어요.",
104
- },
105
- "현대중공업": {
106
- "current_price": random.randint(20000, 50000),
107
- "price_history": [],
108
- "description": "🚢 1970년대 조선 강국을 만든 현대중공업! 아주 큰 배들을 뚝딱뚝딱 만들어냈어요. 기름을 실어 나르는 배, 자동차를 싣는 배 등 다양한 배를 만들어서 우리나라를 세계적인 조선 강국으로 만들었답니다. 바다를 개척하는 데 앞장섰어요.",
109
- },
110
- "LG화학": {
111
- "current_price": random.randint(15000, 40000),
112
- "price_history": [],
113
- "description": "🧪 1970년대 화학 산업의 성장, LG화학! 플라스틱, 섬유, 생활용품 등 다양한 화학 제품을 만들었어요. 우리 생활을 편리하고 풍요롭게 만들어주는 화학 제품들을 개발하고 생산했답니다. 화학 기술 발전에 힘썼어요.",
114
- },
115
- "기아산업": {
116
- "current_price": random.randint(8000, 25000),
117
- "price_history": [],
118
- "description": "🚗 1970년대 자동차 대중화, 기아산업! '브리사' 자동차를 만들어서 많은 사람들이 자동차를 탈 수 있게 했어요. 저렴하고 튼튼한 자동차를 만들어서 자동차 산업 발전에 기여했답니다. 다양한 상용차도 만들었어요.",
119
- },
120
- },
121
- "전자": {
122
- "삼성전자": {
123
- "current_price": random.randint(25000, 70000),
124
- "price_history": [],
125
- "description": "📺 1970년대 전자 산업의 도약, 삼성전자! 텔레비전, 냉장고, 세탁기 등 가전제품을 만들기 시작했어요. 좋은 품질의 가전제품을 만들어서 국민 생활을 편리하게 만들었답니다. 전자 기술 개발에 투자했어요.",
126
- },
127
- "금성사": {
128
- "current_price": random.randint(20000, 60000),
129
- "price_history": [],
130
- "description": "🥇 1970년대 가전제품의 대명사, 금성사! 지금의 LG전자예요. 텔레비전, 라디오, 냉장고, 세탁기 등 다양한 가전제품을 만들어서 'Made in Korea' 제품을 알렸어요. 새로운 전자 제품 개발에 힘썼답니다.",
131
- },
132
- },
133
- "에너지": {
134
- "극동정유": {
135
- "current_price": random.randint(10000, 30000),
136
- "price_history": [],
137
- "description": "🛢️ 1970년대 에너지 위기 극복, 극동정유! 정유 산업을 발전시켜서 우리나라에 석유를 안정적으로 공급하는 데 힘썼어요. 오일 쇼크로 어려웠던 시기에 에너지 안보를 위해 노력했답니다. 에너지 산업 발전에 기여했어요.",
138
- },
139
- },
140
  },
141
  },
142
- "1980년대": {
143
- "섹터": {
144
- "자동차": {
145
- "현대자동차": {
146
- "current_price": random.randint(80000, 200000),
147
- "price_history": [],
148
- "description": "🚗 1980년대 자동차 산업 발전, 현대자동차! '쏘나타', '그랜저' 등 인기 차종을 만들었어요. 기술 개발과 품질 향상에 힘써서 세계적인 자동차 회사로 성장했답니다. 자동차 수출을 통해 우리나라 경제 성장에 크게 기여했어요.",
149
- },
150
- "기아자동차": {
151
- "current_price": random.randint(50000, 150000),
152
- "price_history": [],
153
- "description": "🚙 1980년대 개성 있는 자동차, 기아자동차! '프라이드', '콩코드' 등 젊은 층에게 인기 있는 자동차를 만들었어요. 디자인과 기술력을 발전시켜서 현대자동차와 함께 자동차 산업을 이끌었답니다. 다양한 마케팅으로 사랑받았어요.",
154
- },
155
- "대우자동차": {
156
- "current_price": random.randint(40000, 120000),
157
- "price_history": [],
158
- "description": "🚕 1980년대 도전적인 자동차, 대우자동차! '르망', '에스페로' 등 혁신적인 디자인의 자동차를 만들었어요. 기술 개발에 적극적으로 투자해서 자동차 산업 발전에 기여했답니다. 글로벌 시장 진출을 시도했어요.",
159
- },
160
- },
161
- "전자": {
162
- "삼성전자": {
163
- "current_price": random.randint(150000, 300000),
164
- "price_history": [],
165
- "description": "📱 1980년대 반도체 산업 육성, 삼성전자! 반도체 기술 개발에 집중 투자하여 세계적인 반도체 회사가 되었어요. 컴퓨터, 휴대폰 등 IT 제품에 필수적인 반도체를 만들어서 정보화 시대를 이끌었답니다. 기술 독립에 기여했어요.",
166
- },
167
- "LG전자": {
168
- "current_price": random.randint(120000, 250000),
169
- "price_history": [],
170
- "description": "💻 1980년대 컴퓨�� 산업 발전, LG전자! 개인용 컴퓨터 '금성 PC'를 만들어서 컴퓨터 대중화에 기여했어요. 가전제품뿐 아니라 컴퓨터, 정보통신 기기 등 다양한 전자 제품을 만들었답니다. 기술 혁신을 주도했어요.",
171
- },
172
- "대우전자": {
173
- "current_price": random.randint(80000, 180000),
174
- "price_history": [],
175
- "description": "🎧 1980년대 음향기기 및 VCR, 대우전자! 오디오, 비디오 등 다양한 가전제품을 만들었어요. 특히 VCR(비디오카세트 레코더)를 생산하여 비디오 문화 확산에 기여했답니다. 젊은 층에게 인기 있는 전자 제품을 만들었어요.",
176
- },
177
- },
178
- "건설": {
179
- "해외건설": { # 대표적인 특정 기업 대신 해외건설 섹터로 묶음
180
- "current_price": random.randint(60000, 150000),
181
- "price_history": [],
182
- "description": "🌍 1980년대 해외 건설 붐, 해외건설! 중동 건설 시장을 중심으로 해외 건설 사업이 크게 늘어났어요. 우리나라 건설 기술력을 세계에 알리고, 외화를 벌어들이는 데 큰 역할을 했답니다. '한강의 기적'을 해외로 확장했어요.",
183
- },
184
- },
185
  },
186
  },
187
- "1990년대": {
188
- "섹터": {
189
- "IT": {
190
- "삼성전자": {
191
- "current_price": random.randint(300000, 600000),
192
- "price_history": [],
193
- "description": "💾 1990년대 메모리 반도체 세계 1위, 삼성전자! DRAM, 플래시 메모리 등 메모리 반도체 시장을 석권했어요. IT 산업의 핵심 부품인 반도체를 만들어서 세계 IT 시장을 이끌었답니다. 기술 초격차를 달성했어요.",
194
- },
195
- "LG전자": {
196
- "current_price": random.randint(250000, 500000),
197
- "price_history": [],
198
- "description": "🖥️ 1990년대 LCD 기술 선도, LG전자! LCD(액정표시장치) 기술 개발을 주도하여 디스플레이 산업을 발전시켰어요. 얇고 가벼운 LCD TV, 모니터를 만들어서 디스플레이 시장을 혁신했답니다. 화면 기술을 선도했어요.",
199
- },
200
- "다음커뮤니케이션": {
201
- "current_price": random.randint(100000, 300000),
202
- "price_history": [],
203
- "description": "📧 1990년대 인터넷 서비스 시작, 다음! '다음' 포털 사이트를 열어서 이메일, 카페, 검색 등 다양한 인터넷 서비스를 제공했어요. 인터넷 대중화를 이끌고, 정보 검색과 소통 방식을 변화시켰답니다. 인터넷 세상을 열었어요.",
204
- },
205
- "새롬기술": { # 벤처 기업 대표 사례
206
- "current_price": random.randint(80000, 200000),
207
- "price_history": [],
208
- "description": "📞 1990년대 벤처 붐, 새롬기술! '다이얼패드' 무료 인터넷 전화 서비스를 제공하여 벤처 기업 성공 신화를 썼어요. 기술 혁신과 과감한 투자로 벤처 기업 열풍을 이끌었답니다. 새로운 가능성을 보여줬어요.",
209
- },
210
- },
211
- "통신": {
212
- "한국통신": {
213
- "current_price": random.randint(200000, 400000),
214
- "price_history": [],
215
- "description": "🌐 1990년대 통신망 확충, 한국통신! 지금의 KT예요. 전화, 초고속 인터넷 등 통신망을 전국으로 확대했어요. 정보통신 인프라를 구축하고, IT 강국 Korea의 기반을 마련했답니다. 통신 시대를 열었어요.",
216
- },
217
- "SK텔레콤": {
218
- "current_price": random.randint(180000, 350000),
219
- "price_history": [],
220
- "description": "📱 1990년대 이동통신 서비스 시작, SK텔레콤! 휴대폰 '아날로그 삐삐' 서비스를 시작으로 이동통신 시대를 열었어요. 언제 어디서든 통신하는 시대를 만들고, 생활 방식을 변화시켰답니다. 무선 통신 시대를 열었어요.",
221
- },
222
- "LG텔레콤": {
223
- "current_price": random.randint(150000, 300000),
224
- "price_history": [],
225
- "description": "📶 1990년대 PCS 이동통신, LG텔레콤! PCS(개인휴대통신) 서비스를 시작하여 이동통신 시장 경쟁을 촉진했어요. 다양한 요금제와 서비스를 제공하여 소비자 선택권을 넓혔답니다. 통신 시장 경쟁을 이끌었어요.",
226
- },
227
- },
228
- "금융": {
229
- "국민은행": {
230
- "current_price": random.randint(150000, 300000),
231
- "price_history": [],
232
- "description": "🏦 1990년대 금융 시장 개방, 국민은행! 고객 중심 경영을 강화하고 다양한 금융 상품을 개발했어요. 금융 선진화에 앞장서고, 국민들의 자산 관리를 도왔답니다. 금융 시장 변화를 이끌었어요.",
233
- },
234
- "신한은행": {
235
- "current_price": random.randint(130000, 250000),
236
- "price_history": [],
237
- "description": "💳 1990년대 신용카드 대중화, 신한은행! 신용카드 사업을 확대하고 다양한 카드 상품을 출시했어요. 소비 생활을 편리하게 만들고, 신용 사회 기반을 마련했답니다. 카드 시장 성장을 이끌었어요.",
238
- },
239
- },
240
  },
241
  },
242
- "2000년대": {
243
- "섹터": {
244
- "IT": {
245
- "삼성전자": {
246
- "current_price": random.randint(600000, 900000),
247
- "price_history": [],
248
- "description": "📱 2000년대 휴대폰 세계 1위, 삼성전자! '애니콜' 휴대폰을 통해 세계 휴대폰 시장을 석권했어요. 혁신적인 디자인과 기술력을 바탕으로 휴대폰 트렌드를 이끌었답니다. 모바일 시대를 주도했어요.",
249
- },
250
- "LG전자": {
251
- "current_price": random.randint(500000, 800000),
252
- "price_history": [],
253
- "description": "📺 2000년대 PDP TV, LCD TV 경쟁, LG전자! PDP TV, LCD TV 등 차세대 TV 기술 개발 경쟁을 주도했어요. 고화질, 대화면 TV를 만들어서 TV 시장을 혁신했답니다. 디지털 TV 시대를 열었어요.",
254
- },
255
- "NHN": { # 네이버 운영사
256
- "current_price": random.randint(400000, 700000),
257
- "price_history": [],
258
- "description": " 검색 포털 1위, 네이버! '네이버' 검색 서비스를 통해 검색 포털 시장을 장악했어요. 지식iN, 블로그, 카페 등 다양한 서비스를 제공하여 인터넷 문화를 풍요롭게 만들었답니다. 국민 포털로 성장했어요.",
259
- },
260
- "다음": {
261
- "current_price": random.randint(300000, 600000),
262
- "price_history": [],
263
- "description": "📈 2000년대 검색 포털 경쟁, 다음! 네이버와 함께 검색 포털 시장을 이끌었어요. 다양한 검색 기능과 커뮤니티 서비스를 제공하여 인터넷 이용자들에게 사랑받았답니다. 검색 시장 경쟁을 주도했어요.",
264
- },
265
- },
266
- "게임": {
267
- "넥슨": {
268
- "current_price": random.randint(350000, 650000),
269
- "price_history": [],
270
- "description": "🎮 2000년대 온라인 게임 시장 개척, 넥슨! '바람의나라', '메이플스토리' 등 인기 온라인 게임을 개발했어요. 온라인 게임 시장을 개척하고, 게임 산업을 성장시키는 데 기여했답니다. 온라인 게임 시대를 열었어요.",
271
- },
272
- "엔씨소프트": {
273
- "current_price": random.randint(300000, 600000),
274
- "price_history": [],
275
- "description": "⚔️ 2000년대 MMORPG 전성시대, 엔씨소프트! '리니지', '리니지2' 등 대규모 MMORPG(다중접속역할수행게임)를 개발하여 MMORPG 전성시대를 열었어요. 게임 산업을 고부가가치 산업으로 발전시켰답니다. MMORPG 신화를 만들었어요.",
276
- },
277
- "웹젠": {
278
- "current_price": random.randint(250000, 550000),
279
- "price_history": [],
280
- "description": "🕹️ 2000년대 PC 온라인 게임, 웹젠! '뮤 온라인' 등 PC 온라인 게임을 개발하여 인기를 얻었어요. 온라인 게임의 대중화에 기여하고, 게임 문화를 확산시키는 데 일조했답니다. 온라인 게임의 재미를 알렸어요.",
281
- },
282
- },
283
- "엔터테인먼트": {
284
- "SM엔터테인먼트": {
285
- "current_price": random.randint(200000, 500000),
286
- "price_history": [],
287
- "description": "🎤 2000년대 아이돌 그룹, SM엔터테인먼트! '보아', '동방신기', '소녀시대' 등 인기 아이돌 그룹을 배출했어요. 아이돌 문화를 확산시키고, K-POP 열풍의 기반을 마련했답니다. 아이돌 시대를 열었어요.",
288
- },
289
- "YG엔터테인먼트": {
290
- "current_price": random.randint(180000, 450000),
291
- "price_history": [],
292
- "description": "힙합, YG엔터테인먼트! '빅뱅', '2NE1' 등 힙합 아이돌 그룹을 성공적으로 데뷔시켰어요. 힙합 음악을 대중화시키고, K-POP의 다양성을 높이는 데 기여했답니다. 힙합 K-POP을 만들었어요.",
293
- },
294
- "JYP엔터테인먼트": {
295
- "current_price": random.randint(150000, 400000),
296
- "price_history": [],
297
- "description": "🎵 2000년대 댄스 음악, JYP엔터테인먼트! '비', '원더걸스', '2PM' 등 댄스 아이돌 그룹을 육성했어요. 대중적인 댄스 음악을 만들고, K-POP의 대중화에 기여했답니다. 댄스 K-POP을 이끌었어요.",
298
- },
299
- },
300
  },
301
  },
302
- "2010년대": {
303
- "섹터": {
304
- "IT 플랫폼": {
305
- "네이버": {
306
- "current_price": random.randint(700000, 1200000),
307
- "price_history": [],
308
- "description": "📱 2010년대 모바일 플랫폼, 네이버! 모바일 메신저 '라인', 웹툰, 쇼핑, 뉴스 등 다양한 모바일 서비스를 제공했어요. 모바일 시대를 맞아 플랫폼 기업으로 변신하고 성장했답니다. 모바일 플랫폼을 확장했어요.",
309
- },
310
- "카카오": {
311
- "current_price": random.randint(600000, 1100000),
312
- "price_history": [],
313
- "description": "💬 2010년대 모바일 메신저 1위, 카카오! '카카오톡' 메신저를 통해 국민 메신저 앱으로 자리매김했어요. 카카오택시, 카카오페이 등 다양한 생활 서비스를 연계하여 플랫폼 생태계를 구축했답니다. 모바일 생활 플랫폼을 만들었어요.",
314
- },
315
- "쿠팡": { # 플랫폼 기업, 아직 흑자 전환 X
316
- "current_price": random.randint(300000, 700000), # 가격 변동폭 크게
317
- "price_history": [],
318
- "description": "🚀 2010년대 이커머스 혁신, 쿠팡! 로켓 배송 서비스를 통해 이커머스 시장을 혁신했어요. 빠르고 편리한 배송 서비스로 온라인 쇼핑 시장을 성장시켰답니다. 물류 혁신을 이끌었어요.",
319
- },
320
- "배달의민족": { # 플랫폼, 매각 후 상장 X
321
- "current_price": random.randint(250000, 600000), # 가격 변동폭 크게
322
- "price_history": [],
323
- "description": "🛵 2010년대 배달 앱 1위, 배달의민족! 배달 앱 서비스를 통해 음식 배달 문화를 변화시켰어요. 스마트폰으로 간편하게 음식을 주문하는 시대를 열고, 외식 산업에도 큰 영향을 줬답니다. 배달 앱 시대를 열었어요.",
324
- },
325
- },
326
- "엔터테인먼트": {
327
- "하이브": { # BTS 소속사, 2020년대 사명 변경
328
- "current_price": random.randint(500000, 1000000),
329
- "price_history": [],
330
- "description": "🎤 2010년대 K-POP 세계화, 하이브! '방탄소년단(BTS)'을 통해 K-POP을 세계적인 음악 장르로 만들었어요. 새로운 팬덤 문화를 만들고, K-POP의 위상을 높이는 데 크게 기여했답니다. K-POP 역사를 새로 썼어요.",
331
- },
332
- "YG엔터테인먼트": {
333
- "current_price": random.randint(300000, 700000),
334
- "price_history": [],
335
- "description": "🎵 2010년대 음원 강자, YG엔터테인먼트! '싸이', '블랙핑크' 등 음원 차트 강자들을 배출했어요. 중독성 있는 음악과 개성 있는 스타일로 K-POP의 다양성을 더했답니다. 음악 스타일을 확장했어요.",
336
- },
337
- "JYP엔터테인먼트": {
338
- "current_price": random.randint(250000, 600000),
339
- "price_history": [],
340
- "description": "댄스 & 걸그룹 명가, JYP엔터테인먼트! '트와이스', 'ITZY' 등 인기 걸그룹을 성공적으로 데뷔시켰어요. 대중적인 댄스 음악과 퍼포먼스로 K-POP 팬들을 사로잡았답니다. 걸그룹 K-POP을 이끌었어요.",
341
- },
342
- "CJ ENM": { # 방송, 영화, 음악, 공연 등 종합 엔터테인먼트
343
- "current_price": random.randint(200000, 500000),
344
- "price_history": [],
345
- "description": "🎬 2010년대 콘텐츠 제작, CJ ENM! '슈퍼스타K', '응답하라' 시리즈, 영화 '기생충' 등 다양한 인기 콘텐츠를 제작했어요. 방송, 영화, 음악, 공연 등 다양한 분야에서 문화 콘텐츠 산업을 이끌고 있답니다. K-콘텐츠를 만들었어요.",
346
- },
347
- },
348
- "바이오": {
349
- "삼성바이오로직스": { # 2011년 설립, 바이오 의약품 생산 전문
350
- "current_price": random.randint(400000, 800000), # 높은 가격, 변동성 크게
351
- "price_history": [],
352
- "description": "💉 2010년대 바이오 의약품 생산, 삼성바이오로직스! 바���오 의약품 생산 시설을 구축하고, 글로벌 제약 회사들의 바이오 의약품을 위탁 생산해요. 바이오 의약품 산업을 성장시키고, 의약품 국산화에 기여하고 있답니다. 바이오 산업의 미래를 만들어요.",
353
- },
354
- "셀트리온": { # 1999년 설립, 바이오시밀러 개발
355
- "current_price": random.randint(350000, 700000), # 높은 가격, 변동성 크게
356
- "price_history": [],
357
- "description": "🧪 2010년대 바이오시밀러 개발, 셀트리온! 바이오시밀러(바이오 의약품 복제약)를 개발하여 의약품 가격을 낮추고 환자들의 치료 기회를 확대했어요. 바이오 의약품 시장을 확대하고, 바이오 산업 경쟁력을 강화했답니다. 바이오 의약품 대중화를 이끌어요.",
358
- },
359
- },
360
  },
361
  },
362
- "2020년대": {
363
- "섹터": {
364
- "플랫폼": { # 2020년대는 플랫폼, 디지털 전환, 친환경, 바이오헬스, 메타버스, AI 등 다양
365
- "카카오": { # 플랫폼 확장, 디지털 금융, 모빌리티 등
366
- "current_price": random.randint(500000, 1000000),
367
- "price_history": [],
368
- "description": "📱 2020년대 플랫폼 서비스 확장, 카카오! 카카오뱅크, 카카오페이, 카카오모빌리티 등 금융, 모빌리티, 콘텐츠 등 다양한 분야로 플랫폼 서비스를 확장하고 있어요. 디지털 경제 시대를 맞아 플랫폼 기업으로 더욱 성장하고 있답니다. 생활 플랫폼을 지향해요.",
369
- },
370
- "네이버": { # 플랫폼 확장, 웹툰, 클라우드, AI 등
371
- "current_price": random.randint(600000, 1100000),
372
- "price_history": [],
373
- "description": " AI, 클라우드 기술 투자, 네이버! AI, 클라우드, 웹툰 등 미래 기술 분야에 투자하고, 글로벌 시장으로 서비스를 확장하고 있어요. 기술 플랫폼 기업으로 변신을 시도하고, 미래 성장 동력을 확보하고 있답니다. 기술 플랫폼으로 진화해요.",
374
- },
375
- "쿠팡": { # 이커머스, 흑자 전환 시도, 물류 투자 지속
376
- "current_price": random.randint(400000, 900000), # 변동성 유지
377
- "price_history": [],
378
- "description": "🚀 2020년대 이커머스 흑자 도전, 쿠팡! 로켓 배송, 쿠팡이츠 등 서비스를 강화하고, 흑자 전환을 위해 노력하고 있어요. 물류 인프라 투자와 서비스 확대로 이커머스 시장 경쟁력을 높여가고 있답니다. 지속 가능한 성장을 추구해요.",
379
- },
380
- },
381
- "친환경 에너지": { # ESG 경영, 친환경 에너지 중요성 증가
382
- "LG에너지솔루션": { # LG화학에서 분사, 전기차 배터리 1위
383
- "current_price": random.randint(600000, 1200000), # 높은 가격, 변동성 크게
384
- "price_history": [],
385
- "description": "🔋 2020년대 전기차 배터리 1위, LG에너지솔루션! 전기차 배터리 시장을 선도하고, 차세대 배터리 기술 개발에 투자하고 있어요. 친환경 에너지 시대를 맞아 핵심 기업으로 성장하고 있답니다. 미�� 에너지 솔루션을 제공해요.",
386
- },
387
- "SK이노베이션": { # 정유, 화학 -> 배터리, 친환경 에너지 전환
388
- "current_price": random.randint(400000, 900000), # 변동성 크게
389
- "price_history": [],
390
- "description": "⚡ 2020년대 친환경 에너지 전환, SK이노베이션! 정유, 화학 기업에서 전기차 배터리, 친환경 에너지 기업으로 변신하고 있어요. ESG 경영을 강화하고, 지속 가능한 성장을 추구하고 있답니다. 친환경 에너지로 미래를 열어요.",
391
- },
392
- "현대제철": { # 철강, 친환경 철강 기술 개발
393
- "current_price": random.randint(300000, 700000), # 변동성 다소 크게
394
- "price_history": [],
395
- "description": "🌱 2020년대 친환경 철강, 현대제철! 친환경 철강 제조 기술 개발에 투자하고, 탄소 배출 감축을 위해 노력하고 있어요. ESG 경영을 실천하고, 지속 가능한 철강 생산을 추구하고 있답니다. 친환경 철강 시대를 만들어요.",
396
- },
397
- },
398
- "바이오헬스": { # 고령화 시대, 바이오헬스 산업 성장
399
- "삼성바이오로직스": { # 바이오 의약품 위탁 생산 (CMO)
400
- "current_price": random.randint(800000, 1500000), # 높은 가격, 높은 변동성
401
- "price_history": [],
402
- "description": "💉 2020년대 바이오 의약품 CMO 1위, 삼성바이오로직스! 글로벌 제약 회사들의 바이오 의약품 생산을 대행하며 CMO 시장을 선도하고 있어요. 바이오 의약품 생산 능력을 확대하고, 글로벌 바이오 허브로 도약하고 있답니다. 바이오 의약품 생산을 책임져요.",
403
- },
404
- "셀트리온": { # 바이오시밀러 넘어 신약 개발 도전
405
- "current_price": random.randint(700000, 1400000), # 높은 가격, 높은 변동성
406
- "price_history": [],
407
- "description": " 신약 개발 도전, 셀트리온! 바이오시밀러 개발 성공을 발판 삼아 신약 개발에 도전하고 있어요. 혁신적인 신약 개발을 통해 글로벌 제약 회사로 성장하고, 인류 건강에 기여하는 것을 목표로 하고 있답니다. 바이오 신약으로 도약해요.",
408
- },
409
- "SK바이오사이언스": { # SK케미칼에서 분사, 백신 개발, 코로나19 백신 개발
410
- "current_price": random.randint(500000, 1000000), # 높은 가격, 변동성 크게
411
- "price_history": [],
412
- "description": " 백신 개발, SK바이오사이언스! 백신 개발 기술력을 바탕으로 코로나19 백신을 개발하여 팬데믹 극복에 기여했어요. 백신 R&D 투자를 확대하고, 글로벌 백신 기업으로 성장하고 있답니다. 백신으로 건강한 미래를 만들어요.",
413
- },
414
- },
415
  },
416
  },
417
  }
 
 
 
 
 
418
 
419
- if "stocks" not in st.session_state:
420
- st.session_state["stocks"] = st.session_state["eras_data"][st.session_state["current_era"]]["섹터"]
421
  if "news_analysis_results" not in st.session_state:
422
  st.session_state["news_analysis_results"] = {}
423
  if "messages" not in st.session_state:
@@ -430,7 +412,9 @@ if "news_date" not in st.session_state:
430
  st.session_state["news_date"] = None
431
  if "news_meanings" not in st.session_state:
432
  st.session_state["news_meanings"] = {}
433
- if "ai_news_analysis_output" not in st.session_state:
 
 
434
  st.session_state["ai_news_analysis_output"] = {}
435
  if "day_count" not in st.session_state:
436
  st.session_state["day_count"] = 1
@@ -444,11 +428,10 @@ if 'sell_confirm' not in st.session_state:
444
 
445
  # --- 뉴스 생성 함수 ---
446
  def generate_news():
447
- current_era = st.session_state["current_era"]
448
  day_count = st.session_state["day_count"]
449
  prompt = f"""
450
  지시:
451
- 초등학생 6학년 수준에 맞춰서, {current_era}대의 한국 경제 및 사회 관련 뉴스 기사 5개를 생성해주세요.
452
  각 기사는 12~15문장 정도로 자세하게 작성하고, 특정 회사 이름이나 주식 종목을 직접적으로 언급하지 마세요.
453
  학생들이 뉴스를 읽고 어떤 회사가 유망할지 또는 쇠락할지 스스로 추론할 수 있도록 일반적인 경제 상황이나 산업 동향에 대한 뉴스를 만들어주세요.
454
  긍정적 뉴스, 부정적 뉴스, 중립적 뉴스 다양하게 생성하세요.(긍정, 부정, 중립 이라는 말은 표시하지 마세요.)
@@ -620,16 +603,11 @@ def sell_stock(stock_name, quantity):
620
 
621
  stock_price = 0
622
  stock_sector = ""
623
- for era_data in st.session_state["eras_data"].values(): # 모든 시대 데이터에서 찾기
624
- if "섹터" in era_data:
625
- for sector, stocks in era_data["섹터"].items():
626
- if stock_name in stocks:
627
- stock_price = stocks[stock_name]["current_price"]
628
- stock_sector = sector # 섹터 정보는 현재는 정확히 사용되지 않음. 필요시 era_data, sector 정보도 반환하도록 수정 가능
629
- break
630
- if stock_price != 0: # 찾았으면 종료
631
- break
632
-
633
 
634
  if stock_price == 0:
635
  st.session_state["messages"].append(
@@ -660,7 +638,7 @@ def update_stock_prices():
660
  if not st.session_state["daily_news"]:
661
  return
662
 
663
- sector_impacts = {sector: 0 for era_data in st.session_state["eras_data"].values() if "섹터" in era_data for sector in era_data["섹터"]} # 모든 섹터 초기화
664
 
665
  for i, news_article in enumerate(st.session_state["daily_news"]):
666
  news_meaning = st.session_state["news_meanings"].get(str(i + 1))
@@ -680,27 +658,20 @@ def update_stock_prices():
680
  if sector in sector_impacts:
681
  sector_impacts[sector] += news_sentiment * 0.05
682
 
683
- # --- 시대별 경제 상황 반영 (예시: 1960년대, 70년대 성장기 가정, 더 정교하게 조정 필요) ---
684
- era_economic_factor = 0.01
685
- market_trend_factor = 0.0
686
- if st.session_state["current_era"] == "1960년대":
687
- market_trend_factor = era_economic_factor
688
- elif st.session_state["current_era"] == "1970년대":
689
- market_trend_factor = era_economic_factor # 70년대도 성장 유지 (조정 필요)
690
-
691
-
692
- for era in st.session_state["eras_data"]:
693
- if "섹터" in st.session_state["eras_data"][era]:
694
- for sector in st.session_state["eras_data"][era]["섹터"]:
695
- sector_impact = sector_impacts.get(sector, 0) # 섹터 영향 가져오기 (없으면 0)
696
- for stock_name in st.session_state["eras_data"][era]["섹터"][sector]:
697
- change_rate = random.uniform(-0.02, 0.02) + sector_impact + market_trend_factor
698
- change_rate = max(-0.3, min(0.3, change_rate))
699
- st.session_state["eras_data"][era]["섹터"][sector][stock_name]["current_price"] *= (1 + change_rate)
700
- st.session_state["eras_data"][era]["섹터"][sector][stock_name]["current_price"] = max(1, int(st.session_state["eras_data"][era]["섹터"][sector][stock_name]["current_price"]))
701
- st.session_state["eras_data"][era]["섹터"][sector][stock_name]["price_history"].append(st.session_state["eras_data"][era]["섹터"][sector][stock_name]["current_price"])
702
-
703
- st.session_state["stocks"] = st.session_state["eras_data"][st.session_state["current_era"]]["섹터"] # 현재 시대 주식 정보 업데이트
704
  st.session_state["messages"].append({"type": "info", "text": "주가가 변동되었습니다."})
705
  st.toast("주가가 변동되었습니다.", icon="📈")
706
  st.info("주가가 변동되었습니다.")
@@ -717,16 +688,11 @@ def display_portfolio():
717
  purchase_price = stock_info["purchase_price"]
718
  current_price = 0
719
  stock_sector = ""
720
- for era_data in st.session_state["eras_data"].values(): # 모든 시대 데이터에서 현재 주가 찾기
721
- if "섹터" in era_data:
722
- for sector, stocks in era_data["섹터"].items():
723
- if stock_name in stocks:
724
- current_price = stocks[stock_name]["current_price"]
725
- stock_sector = sector
726
- break
727
- if current_price != 0:
728
- break
729
-
730
  if current_price != 0:
731
  stock_value = current_price * quantity
732
  total_value += stock_value
@@ -744,11 +710,10 @@ def display_portfolio():
744
 
745
  def display_stock_prices():
746
  stocks_data = []
747
- current_stocks = st.session_state["stocks"] # 현재 시대 주식만 표시
748
- for sector, sector_stocks in current_stocks.items():
749
  for stock_name, stock_info in sector_stocks.items():
750
  price_history = stock_info["price_history"]
751
- daily_change_rate_str = " - "
752
  if len(price_history) >= 2:
753
  previous_day_price = price_history[-2]
754
  current_price = price_history[-1]
@@ -760,13 +725,13 @@ def display_stock_prices():
760
  "종목": stock_name,
761
  "섹터": sector,
762
  "현재 주가": f"{stock_info['current_price']:,} 원",
763
- "전일 대비": daily_change_rate_str,
764
  "price_history": stock_info["price_history"],
765
  "description": stock_info["description"],
766
  }
767
  )
768
  stocks_df = pd.DataFrame(stocks_data)
769
- st.dataframe(stocks_df[["섹터", "종목", "현재 주가", "전일 대비"]], hide_index=True)
770
 
771
  selected_stock_all_info = st.selectbox(
772
  "종목 선택 (기업 정보 및 주가 그래프)", stocks_df["종목"].tolist()
@@ -775,14 +740,12 @@ def display_stock_prices():
775
  selected_stock_sector = stocks_df[
776
  stocks_df["종목"] == selected_stock_all_info
777
  ]["섹터"].iloc[0]
778
-
779
- selected_era = st.session_state["current_era"] # 현재 시대 사용
780
  col1_info, col2_graph = st.columns([1, 2])
781
 
782
  with col1_info:
783
  st.subheader("기업 정보")
784
  st.info(
785
- f"**{selected_stock_all_info} ({selected_stock_sector}, {selected_era})**\n\n{st.session_state['eras_data'][selected_era]['섹터'][selected_stock_sector][selected_stock_all_info]['description']}"
786
  )
787
 
788
  with col2_graph:
@@ -792,18 +755,22 @@ def display_stock_prices():
792
  "날짜": range(
793
  1,
794
  len(
795
- st.session_state["eras_data"][selected_era]["섹터"][selected_stock_sector][selected_stock_all_info]["price_history"]
 
 
796
  )
797
  + 1,
798
  ),
799
- "주가": st.session_state["eras_data"][selected_era]["섹터"][selected_stock_sector][selected_stock_all_info]["price_history"],
 
 
800
  }
801
  )
802
  fig = px.line(
803
  price_history_df,
804
  x="날짜",
805
  y="주가",
806
- title=f"{selected_stock_all_info} ({selected_stock_sector}, {selected_era}) 주가 변동",
807
  )
808
  st.plotly_chart(fig)
809
  else:
@@ -823,15 +790,11 @@ def display_portfolio_table():
823
  purchase_price = stock_info["purchase_price"]
824
  current_price = 0
825
  stock_sector = ""
826
- for era_data in st.session_state["eras_data"].values(): # 모든 시대 데이터에서 현재 주가 찾기
827
- if "섹터" in era_data:
828
- for sector, stocks in era_data["섹터"].items():
829
- if stock_name in stocks:
830
- current_price = stocks[stock_name]["current_price"]
831
- stock_sector = sector
832
- break
833
- if current_price != 0:
834
- break
835
 
836
  if current_price == 0:
837
  continue
@@ -896,8 +859,8 @@ def display_stock_glossary():
896
  "하락": "주가가 내리는 것.",
897
  "변동": "주가가 오르락내리락 움직이는 것.",
898
  "투자": "돈을 넣어 이익을 얻으려고 하는 모든 활동.",
899
- "섹터": "비슷한 사업을 하는 회사들을 묶어 놓은 그룹 (예: 경공업 섹터, 중화학공업 섹터)",
900
- "전일 대비 등락률": "오늘 주가가 어제보다 얼마나 변했는지 퍼센트로 나타낸 것. +는 상승, -는 하락.",
901
  }
902
  with st.sidebar.expander("📚 주식 용어 사전", expanded=False):
903
  for term, definition in glossary.items():
@@ -910,14 +873,14 @@ def main():
910
  col_news, col_main_ui = st.columns([1, 2])
911
 
912
  with col_news:
913
- st.header(f"📰 {st.session_state['current_era']} 뉴스")
914
  if st.button("뉴스 생성", use_container_width=True, key="news_gen_button"):
915
- with st.spinner(f"{st.session_state['current_era']} 뉴스 생성 중..."):
916
  current_daily_news = generate_news()
917
  st.session_state["daily_news"] = current_daily_news
918
 
919
  if st.session_state["daily_news"]:
920
- st.subheader(f"{st.session_state['current_era']} 뉴스")
921
  for i, news in enumerate(st.session_state["daily_news"]):
922
  with st.expander(f"뉴스 {i+1}", expanded=False):
923
  st.write(news)
@@ -925,17 +888,17 @@ def main():
925
  if st.session_state["previous_daily_news"] and st.session_state[
926
  "news_meanings"
927
  ]:
928
- st.subheader(f"지난 뉴스 해설 ({st.session_state['current_era']})")
929
  st.info("AI가 분석한 어제 뉴스 해설입니다.")
930
- with st.expander(f"지난 뉴스 해설 보기 ({st.session_state['current_era']})", expanded=False):
931
  if st.session_state["news_meanings"]:
932
  for i, meaning_data in st.session_state["news_meanings"].items():
933
  st.markdown(f"**뉴스 {i}**:")
934
- st.markdown(f"**AI 해설:** {meaning_data['explanation']}")
935
  if meaning_data['sectors']:
936
- st.markdown(f"**관련 섹터:** {', '.join(meaning_data['sectors'])}")
937
  else:
938
- st.markdown("**관련 섹터:** 없음")
939
  else:
940
  st.info("어제 뉴스에 대한 해설이 없습니다.")
941
 
@@ -944,31 +907,30 @@ def main():
944
 
945
  with col_main_ui:
946
  menu = st.tabs(
947
- ['현재 주가', '내 포트폴리오', '주식 매수', '주식 매도', '지난 뉴스 해설']
948
  )
949
 
950
  with menu[0]:
951
- st.subheader(f"📈 {st.session_state['current_era']} 현재 주가 및 기업 정보")
952
- st.markdown(f"{st.session_state['current_era']} 주식 시장의 현재 가격과 기업 정보를 확인하세요.")
953
  display_stock_prices()
954
 
955
  with menu[1]:
956
- st.subheader(f"📊 내 포트폴리오 ({st.session_state['current_era']})")
957
- st.markdown(f"현재 보유 중인 주식과 자산을 확인하세요 ({st.session_state['current_era']}).")
958
  display_portfolio_table()
959
 
960
  with menu[2]:
961
- st.subheader(f"💰 주식 매수 ({st.session_state['current_era']})")
962
  st.markdown("AI 예측과 뉴스 분석을 바탕으로 주식을 매수해보세요.")
963
- current_stocks = st.session_state["stocks"]
964
- sector_names = list(current_stocks.keys())
965
  selected_sector_buy = st.selectbox("매수 섹터 선택:", sector_names)
966
  stock_names_in_sector = list(
967
- current_stocks[selected_sector_buy].keys()
968
  )
969
  selected_stock_buy = st.selectbox("매수 종목 선택:", stock_names_in_sector)
970
 
971
- stock_price_buy = current_stocks[selected_sector_buy][
972
  selected_stock_buy
973
  ]["current_price"]
974
  st.info(f"**{selected_stock_buy}** 현재 주가: {stock_price_buy:,.0f}원")
@@ -992,20 +954,16 @@ def main():
992
  st.info("매수를 취소했습니다.")
993
 
994
  with menu[3]:
995
- st.subheader(f"📉 주식 매도 ({st.session_state['current_era']})")
996
  st.markdown("보유 중인 주식을 판매하고 수익을 실현해보세요.")
997
  if st.session_state["portfolio"]["stocks"]:
998
  stock_names_sell = list(st.session_state["portfolio"]["stocks"].keys())
999
  selected_stock_sell = st.selectbox("매도 종목 선택:", stock_names_sell)
1000
  stock_price_sell = 0
1001
- for era_data in st.session_state["eras_data"].values(): # 모든 시대 데이터에서 현재 주가 찾기
1002
- if "섹터" in era_data:
1003
- for sector, stocks in era_data["섹터"].items():
1004
- if selected_stock_sell in stocks:
1005
- stock_price_sell = stocks[selected_stock_sell]["current_price"]
1006
- break
1007
- if stock_price_sell != 0:
1008
- break
1009
 
1010
  st.info(f"**{selected_stock_sell}** 현재 주가: {stock_price_sell:,.0f}원")
1011
  max_sell_quantity = st.session_state["portfolio"]["stocks"][
@@ -1038,7 +996,7 @@ def main():
1038
  if st.session_state["previous_daily_news"] and st.session_state[
1039
  "news_meanings"
1040
  ]:
1041
- st.subheader(f"지난 뉴스 해설 ({st.session_state['current_era']})")
1042
  st.info("AI가 분석한 어제 뉴스 해설입니다.")
1043
  for i in range(len(st.session_state["previous_daily_news"])):
1044
  with st.expander(f"뉴스 {i+1}", expanded=False):
@@ -1062,20 +1020,20 @@ def main():
1062
  )
1063
 
1064
  with st.sidebar:
1065
- st.markdown("# 💰 어린이 경제 교실")
1066
- st.markdown(f"### {st.session_state['current_era']} ({st.session_state['day_count']}/2 턴)") # 현재 턴 수 표시
1067
  st.markdown("---")
1068
- st.markdown(f"주식으로 배우{st.session_state['current_era']} 한국 경제사 🇰🇷")
1069
- st.markdown("📰 뉴스 읽고 경제 흐름 예측하기!")
1070
  cash, total_value, profit_rate = display_portfolio()
1071
  st.metric(label="💰 현금 잔고", value=f"{cash:,.0f} 원")
1072
  st.metric(label="📊 총 평가 금액", value=f"{total_value:,.0f} 원")
1073
  st.metric(label="🚀 총 수익률", value=f"{profit_rate:.2f}%")
1074
  st.markdown("---")
1075
 
1076
- if st.button("1년 ", use_container_width=True, key="day_pass_button"): # 하루 지나기 -> 1년 후
1077
  if st.session_state["daily_news"]:
1078
- with st.spinner(f"{st.session_state['current_era']} 주가 변동 및 이전 뉴스 분석..."):
1079
  st.session_state["previous_daily_news"] = st.session_state["daily_news"]
1080
  meanings = explain_daily_news_meanings(
1081
  st.session_state["previous_daily_news"]
@@ -1084,23 +1042,9 @@ def main():
1084
  st.session_state["news_meanings"] = meanings
1085
  update_stock_prices()
1086
  st.session_state["daily_news"] = generate_news()
1087
- st.session_state["day_count"] += 1 # day_count 증가
1088
- st.session_state["era_turn_count"] += 1 # 턴 수 증가
1089
-
1090
- if st.session_state["era_turn_count"] > 2: # 2턴 지나면 다음 년대로
1091
- st.session_state["era_turn_count"] = 1 # 턴 수 초기화
1092
- current_year = int(st.session_state["current_era"][:-3]) # "1960년대" -> 1960
1093
- next_era_year = current_year + 10
1094
- if next_era_year <= 2020: # 2020년대까지 시대 설정
1095
- st.session_state["current_era"] = f"{next_era_year}년대"
1096
- st.session_state["stocks"] = st.session_state["eras_data"][st.session_state["current_era"]]["섹터"] # 새로운 시대 주식 데이터 로드
1097
- st.info(f"🎉 {st.session_state['current_era']} 시작! 새로운 시대의 경제를 탐험해보세요.") # 시대 변경 알림
1098
- else:
1099
- st.info("🎉 모의 투자 종료! 2020년대까지의 한국 경제사를 모두 탐험했습니다.")
1100
- st.stop() # or reset to 1960s
1101
-
1102
  st.rerun()
1103
- st.info(f"지난 뉴스 해설 탭에서 AI가 분석한 {st.session_state['current_era']} 뉴스 해설을 확인해보세요.")
1104
  else:
1105
  st.warning("오늘의 뉴스를 먼저 생성해주세요.")
1106
  st.markdown("***")
@@ -1112,7 +1056,7 @@ def main():
1112
  """
1113
  **1단계: 뉴스 생성하기**
1114
  - 왼쪽 '오늘의 뉴스' 영역에서 '뉴스 생성' 버튼을 클릭하세요.
1115
- - AI가 해당대의 경제 뉴스를 5개 만들어줍니다.
1116
 
1117
  **2단계: 뉴스 읽고 예측하기**
1118
  - '오늘의 뉴스' 아래 뉴스들을 꼼꼼히 읽어보세요.
@@ -1121,14 +1065,14 @@ def main():
1121
 
1122
  **3단계: 주가 및 기업 정보 확인하기**
1123
  - 메뉴에서 '📈 현재 주가' 탭을 선택하세요.
1124
- - 현재 시대의 주식과 기업 정보를 볼 수 있습니다.
1125
- - 투자 회사골라보세요.
1126
 
1127
  **4단계: 주식 매수하기**
1128
  - 메뉴에서 '💰 주식 매수' 탭을 선택하세요.
1129
  - '매수 종목 선택' 메뉴에서 원하는 회사를 고르세요.
1130
  - '매수 수량'을 입력하고 '주식 매수' 버튼을 클릭하면, 주식을 살 수 있습니다.
1131
- - **팁:** 뉴스 예측을 바탕으로 유망한 회사를 골라 투자해보세요!
1132
 
1133
  **5단계: 포트폴리오 확인하기**
1134
  - 메뉴에서 '📊 내 포트폴리오' 탭을 선택하세요.
@@ -1141,16 +1085,14 @@ def main():
1141
  - '매도 수량'을 입력하고 '주식 매도' 버튼을 클릭하면, 주식을 팔고 현금을 얻을 수 있습니다.
1142
  - **팁:** 주가가 올랐을 때 팔아서 이익을 남겨보세요!
1143
 
1144
- **7단계: 1년 & 이전 뉴스 의미 해설 보기**
1145
- - 사이드바 메뉴의 '1년 ' 버튼을 클릭하세요.
1146
- - 주가가 변동되고, 1년이 지나갑니다.
1147
- - 각 년대별 2��씩 투자를 경험하게 됩니다.
1148
- - '지난 뉴스 해설' 탭에서 AI가 분석한 뉴스 해설을 있습니다.
1149
- - AI가 이전 뉴스 (작년 뉴스)의 핵심 의미를 초등학생 눈높이에 맞춰 쉽게 설명해줍니다.
1150
 
1151
  **계속해서 배우고 성장하기! 🌱**
1152
  - 모의 주식 거래 앱을 꾸준히 사용하면서, 뉴스-주가 관계를 배우고 투자 감각을 키워보세요.
1153
- - 시대별 경제 흐름에 따라 주식 시장이 어떻게 변하는지 관찰해보세요.
1154
  - 처음에는 어렵더라도, 계속 연습하면 주식 투자가 더 재미있고 쉬워질 거예요! 😉
1155
  """
1156
  )
 
4
  import random
5
  import time
6
  import pandas as pd
7
+ from datetime import date
8
+ import plotly.express as px # 그래프 라이브러리 추가
9
 
10
  # --- Streamlit 설정 ---
11
  st.set_page_config(
12
+ page_title="초등학생 모의 주식 거래",
13
+ page_icon="💰",
14
  layout="wide",
15
  initial_sidebar_state="expanded",
16
  )
 
19
  st.markdown(
20
  """
21
  <style>
22
+ /* 전체 폰트 변경 (Nanum Gothic, Google Fonts CDN 사용) */
23
  @import url('https://fonts.googleapis.com/css2?family=Nanum+Gothic:wght@400;700&display=swap');
24
  body {
25
  font-family: 'Nanum Gothic', sans-serif !important;
26
  }
27
+
28
+ /* 탭 메뉴 스타일 */
29
+ .stTabs [data-baseweb="tab-list"] button[aria-selected="true"] {
30
+ background-color: #007bff !important;
31
+ color: white !important;
32
+ font-weight: bold;
33
+ }
34
+ .stTabs [data-baseweb="tab-list"] button {
35
+ background-color: #f0f2f6;
36
+ color: #333;
37
+ border-radius: 8px 8px 0 0;
38
+ padding: 0.75em 1em;
39
+ margin-bottom: -1px; /* border overlap */
40
+ }
41
+
42
+ /* 사이드바 스타일 */
43
+ [data-testid="stSidebar"] {
44
+ width: 350px !important;
45
+ background-color: #f8f9fa; /* Light gray sidebar background */
46
+ padding: 20px;
47
+ }
48
+ [data-testid="stSidebar"] h1, [data-testid="stSidebar"] h3 {
49
+ color: #212529; /* Dark gray sidebar headings */
50
+ }
51
+ [data-testid="stSidebar"] hr {
52
+ border-top: 1px solid #e0e0e0; /* Lighter sidebar hr */
53
+ }
54
+
55
+ /* Metric 스타일 */
56
+ .streamlit-metric-label {
57
+ font-size: 16px;
58
+ color: #4a4a4a;
59
+ }
60
+ .streamlit-metric-value {
61
+ font-size: 28px;
62
+ font-weight: bold;
63
+ }
64
+
65
+ /* 버튼 스타일 */
66
+ div.stButton > button {
67
+ background-color: #007bff;
68
+ color: white;
69
+ padding: 12px 24px;
70
+ font-size: 16px;
71
+ border-radius: 8px;
72
+ border: none;
73
+ box-shadow: 2px 2px 5px rgba(0,0,0,0.1); /* Soft shadow */
74
+ transition: background-color 0.3s ease;
75
+ }
76
+ div.stButton > button:hover {
77
+ background-color: #0056b3;
78
+ box-shadow: 2px 2px 7px rgba(0,0,0,0.15); /* Slightly stronger shadow on hover */
79
+ }
80
+
81
+ /* 보조 버튼 스타일 */
82
+ div.stButton > button.secondary-button {
83
+ background-color: #6c757d;
84
+ color: white;
85
+ padding: 10px 20px;
86
+ font-size: 14px;
87
+ border-radius: 6px;
88
+ border: none;
89
+ transition: background-color 0.3s ease;
90
+ }
91
+ div.stButton > button.secondary-button:hover {
92
+ background-color: #5a6268;
93
+ }
94
+
95
+ /* Expander 스타일 */
96
+ .streamlit-expanderHeader {
97
+ font-weight: bold;
98
+ color: #212529;
99
+ border-bottom: 1px solid #e0e0e0;
100
+ padding-bottom: 8px;
101
+ margin-bottom: 15px;
102
+ }
103
+
104
+ /* Dataframe 스타일 */
105
+ .dataframe {
106
+ border: 1px solid #e0e0e0;
107
+ border-radius: 8px;
108
+ padding: 12px;
109
+ box-shadow: 2px 2px 5px rgba(0,0,0,0.05); /* Very subtle shadow */
110
+ }
111
+
112
+ /* Info, Success, Error, Warning Box 스타일 (더 부드러운 스타일) */
113
+ div.stInfo, div.stSuccess, div.stError, div.stWarning {
114
+ border-radius: 8px;
115
+ padding: 15px;
116
+ margin-bottom: 15px;
117
+ box-shadow: 2px 2px 5px rgba(0,0,0,0.05);
118
+ }
119
+ div.stInfo {
120
+ background-color: #e7f3ff;
121
+ border-left: 5px solid #007bff;
122
+ }
123
+ div.stSuccess {
124
+ background-color: #e6f7ec;
125
+ border-left: 5px solid #28a745;
126
+ }
127
+ div.stError {
128
+ background-color: #fdeded;
129
+ border-left: 5px solid #dc3545;
130
+ }
131
+ div.stWarning {
132
+ background-color: #fffbe6;
133
+ border-left: 5px solid #ffc107;
134
+ }
135
+
136
+ /* Toast message 스타일 */
137
+ div.streamlit-toast-container {
138
+ z-index: 10000; /* Toast를 항상 맨 위에 표시 */
139
+ }
140
+ div[data-testid="stToast"] {
141
+ border-radius: 8px;
142
+ padding: 15px;
143
+ box-shadow: 2px 2px 5px rgba(0,0,0,0.1);
144
+ }
145
+
146
  </style>
147
  """,
148
  unsafe_allow_html=True,
149
  )
150
 
151
+
152
+ # --- API 키 설정 (Hugging Face Secrets에서 관리 권장) ---
153
  if "GEMINI_API_KEY" not in os.environ:
154
  st.error(
155
  "GEMINI_API_KEY 환경 변수가 설정되지 않았습니다. Hugging Face Secrets 또는 환경 변수에 API 키를 설정해주세요."
156
  )
157
  st.stop()
158
+
159
  genai.configure(api_key=os.environ["GEMINI_API_KEY"])
 
160
 
161
+ # --- Gemini 모델 설정 ---
162
+ generation_config = {
163
+ "temperature": 0.7,
164
+ "top_p": 0.95,
165
+ "top_k": 64,
166
+ "max_output_tokens": 25000,
167
+ "response_mime_type": "text/plain",
168
+ }
169
+ model = genai.GenerativeModel(
170
+ model_name="gemini-2.0-flash-exp", # 또는 "gemini-pro"
171
+ generation_config=generation_config,
172
+ )
173
+
174
+ # --- 세션 상태 초기화 (Streamlit 앱 상태 관리) ---
175
  if "chat_session" not in st.session_state:
176
  st.session_state["chat_session"] = model.start_chat(history=[])
177
  if "portfolio" not in st.session_state:
178
  st.session_state["portfolio"] = {"cash": 10000000, "stocks": {}}
179
+ if "stocks" not in st.session_state:
180
+ st.session_state["stocks"] = { # 섹터별 종목 재구성 및 설명 확장
181
+ "기술(Tech)": {
182
+ "삼성전자": {
183
+ "current_price": random.randint(50000, 80000),
184
+ "price_history": [],
185
+ "description": "대한민국을 대표하는 전자 제품 회사, 삼성전자! 텔레비전, 스마트폰, 냉장고, 세탁기, 컴퓨터 칩 등 우리 생활에 필요한 다양한 제품들을 만들고 있어요. 특히 갤럭시 스마트폰은 전 세계에서 아주 인기가 많고, 텔레비전은 최고 화질로 유명해요. 반도체 기술도 세계 최고 수준이라서, 컴퓨터나 스마트폰의 두뇌 역할을 하는 칩을 만들어 다른 회사들에게도 팔고 있답니다. 우리나라 경제 발전에 아주 큰 역할을 하는 회사예요.",
186
+ },
187
+ "SK하이닉스": {
188
+ "current_price": random.randint(80000, 120000),
189
+ "price_history": [],
190
+ "description": "컴퓨터와 스마트폰의 기억력을 책임지는 SK하이닉스! 우리가 사용하는 컴퓨터나 스마트폰이 사진, 영상, 게임 같은 정보를 저장하고 빠르게 불러올 수 있는 건 SK하이닉스 덕분이에요. 이 회사는 ‘DRAM’과 ‘NAND 플래시’라는 아주 중요한 반도체를 만드는데, 이 반도체들은 컴퓨터, 스마트폰뿐만 아니라 인공지능, 빅데이터, 자율주행차 같은 미래 기술에도 꼭 필요하답니다. 세계적으로 손꼽히는 반도체 기술력을 가진 회사예요.",
191
+ },
192
+ "LG디스플레이": {
193
+ "current_price": random.randint(20000, 40000),
194
+ "price_history": [],
195
+ "description": "화면을 더욱 선명하게, LG디스플레이! 우리가 매일 보는 텔레비전, 스마트폰, 노트북 화면을 만드는 회사예요. LG디스플레이는 특히 ‘OLED’라는 특별한 기술로 화면을 만드는데, OLED는 색깔이 진짜처럼 선명하고, 얇고 가벼워서 미래 디스플레이 기술로 주목받고 있어요. 영화관처럼 생생한 화질의 텔레비전, 얇고 예쁜 스마트폰 화면, 자동차 계기판과 투명 디스플레이까지, LG디스플레이 기술은 우리 생활 곳곳에 사용되고 있답니다.",
196
+ },
197
+ },
198
+ "자동차(Auto)": {
199
+ "현대자동차": {
200
+ "current_price": random.randint(150000, 250000),
201
+ "price_history": [],
202
+ "description": "대한민국 대표 자동차 회사, 현대자동차! 우리가 타고 다니는 자동차를 만드는 회사 중 가장 유명해요. 쏘나타, 아반떼, 팰리세이드, 아이오닉 등 멋진 이름의 자동차들을 디자인하고 만들어서 우리나라뿐 아니라 전 세계에 팔고 있어요. 최근에는 전기자동차와 수소자동차 같은 친환경 자동차를 개발해서 미래 자동차 시장을 이끌고 있답니다. 자동차를 좋아하는 친구라면 누구나 한 번쯤 들어봤을 이름일 거예요.",
203
+ },
204
+ "기아": {
205
+ "current_price": random.randint(70000, 100000),
206
+ "price_history": [],
207
+ "description": "개성 넘치는 디자인, 기아자동차! 현대자동차와 함께 우리나라 자동차 산업을 이끌고 있어요. K3, K5, 쏘렌토, 스포티지, EV6, EV9 등 이름만 들어도 멋진 자동차들을 만들고 있어요. 기아자동차는 특히 디자인이 예쁘기로 유명하고, 젊은 친구들에게 인기가 많아요. 최근에는 전기차 EV6와 EV9이 세계적으로 디자인 상을 많이 받아서 더욱 유명해졌답니다. 나만의 개성을 표현하고 싶은 친구들에게 딱 맞는 자동차 회사예요.",
208
+ },
209
+ "현대모비스": {
210
+ "current_price": random.randint(200000, 250000),
211
+ "price_history": [],
212
+ "description": "자동차를 튼튼하게, 안전하게, 현대모비스! 자동차 회사는 아니지만, 자동차를 만드는 데 꼭 필요한 부품들을 전문적으로 만드는 회사예요. 자동차의 심장인 엔진 부품부터, 안전을 지켜주는 브레이크, 에어백, 운전을 편리하게 해주는 첨단 장치까지, 자동차 30000여 개 부품을 만들어요. 현대자동차, 기아뿐 아니라 전 세계 자동차 회사에 부품을 공급하는 아주 중요한 회사랍니다. 겉으로 잘 보이지 않지만, 자동차의 안전과 성능을 책임지는 숨은 영웅 같은 회사예요.",
213
+ },
214
+ },
215
+ "에너지(Energy)": {
216
+ "LG에너지솔루션": {
217
+ "current_price": random.randint(300000, 500000),
218
+ "price_history": [],
219
+ "description": "미래 에너지를 만드는 LG에너지솔루션! 우리가 타고 다니는 전기자동차에 꼭 필요한 배터리를 만드는 회사 중 세계 1등이에요. 전기차 배터리뿐 아니라, 스마트폰, 노트북, 에너지 저장 장치(ESS) 등 다양한 곳에 사용되는 배터리를 만들어요. 태양광, 풍력 같은 친환경 에너지를 더욱 효율적으로 사용할 수 있도록 돕는 기술을 개발하고 있답니다. 지구를 깨끗하게 만드는 데 아주 중요한 역할을 하는 회사예요.",
220
+ },
221
+ "SK이노베이션": {
222
+ "current_price": random.randint(100000, 150000),
223
+ "price_history": [],
224
+ "description": "에너지와 화학의 힘, SK이노베이션! 우리가 사용하는 휘발유, 경유 같은 기름을 만들고, 플라스틱, 옷, 타이어 같은 다양한 제품의 원료가 되는 화학 제품도 만들어요. 최근에는 전기차 배터리 사업을 키워서 미래 에너지 시대를 준비하고 있답니다. 오래전부터 우리나라 에너지 산업을 이끌어온 회사이고, 지금은 친환경 에너지 회사로 변신하고 있어요.",
225
+ },
226
+ "두산에너빌리티": {
227
+ "current_price": random.randint(15000, 25000),
228
+ "price_history": [],
229
+ "description": "힘찬 에너지를 만드는 두산에너빌리티! 우리가 사용하는 전기를 만드는 발전소를 짓고, 발전소에 필요한 기계를 만드는 회사예요. 화력 발전소, 원자력 발전소, 수력 발전소, 풍력 발전소 등 다양한 발전소를 건설하고, 바닷물을 깨끗한 물로 바꾸는 해수담수화 설비도 만들어요. 최근에는 친환경 에너지 기술을 개발해서 지구를 위한 깨끗한 에너지를 만드는 데 힘쓰고 있답니다. 우리나라 전력 공급에 아주 중요한 역할을 하는 회사예요.",
230
+ },
231
+ },
232
+ "인터넷(Internet)": {
233
+ "네이버": {
234
+ "current_price": random.randint(200000, 300000),
235
+ "price_history": [],
236
+ "description": "궁금한 건 뭐든지 물어봐, 네이버! 우리나라에서 가장 유명한 인터넷 검색 엔진 '네이버'를 만드는 회사예요. 검색뿐 아니라 뉴스, 쇼핑, 블로그, 카페, 웹툰, 지도, 번역 등 다양한 인터넷 서비스를 제공하고 있어요. 우리가 매일 사용하는 카카오톡처럼, 라인(LINE)이라는 메신저 앱을 만들어서 해외에서도 인기가 많답니다. 우리나라 인터넷 세상을 만들어가는 대표적인 회사예요.",
237
+ },
238
+ "카카오": {
239
+ "current_price": random.randint(40000, 60000),
240
+ "price_history": [],
241
+ "description": "세상을 연결하는 즐거움, 카카오! 국민 메신저 '카카오톡'을 만든 회사예요. 카카오톡뿐 아니라 카카오택시, 카카오페이, 카카오게임, 카카오웹툰, 카카오뱅크, 카카오맵 등 우리 생활을 편리하고 즐겁게 만들어주는 다양한 서비스를 만들고 있어요. 귀여운 카카오프렌즈 캐릭터도 아주 인기가 많죠? 우리나라 사람들의 하루를 카카오 서비스로 시작해서 카카오 서비스로 끝난다고 할 정도로, 우리 생활에 아주 깊숙이 들어와 있는 회사예요.",
242
+ },
243
+ "카카오뱅크": {
244
+ "current_price": random.randint(20000, 30000),
245
+ "price_history": [],
246
+ "description": "내 손안의 은행, 카카오뱅크! 카카오톡을 만든 카카오에서 만든 특별한 은행이에요. 은행에 직접 가지 않아도 스마트폰 앱으로 계좌를 만들고, 돈을 보내고, 대출도 받을 수 있어요. 복잡한 서류 없이 간편하게 이용할 수 있고, 24시간 언제든지 은행 업무를 볼 수 있다는 장점이 있어요. 은행을 딱딱하고 어렵게 생각하지 않고, 쉽고 재미있게 이용할 수 있도록 도와주는 은행이에요.",
247
+ },
248
+ },
249
+ "소비재(Consumer Goods)": {
250
+ "CJ제일제당": {
251
+ "current_price": random.randint(300000, 400000),
252
+ "price_history": [],
253
+ "description": "맛있는 식탁을 책임지는 CJ제일제당! 우리가 먹는 맛있는 음식들을 만드는 회사예요. 햇반, 비비고, 고메, 백설, 다시다 등 유명한 식품 브랜드를 많이 가지고 있어요. 김치, 만두, 햇반 같은 간편 식품부터, 밀가루, 설탕, 식용유 같은 요리 재료까지, 우리의 식탁을 풍요롭게 만들어주는 다양한 식품들을 만들어요. 영화관에서 먹는 팝콘, 뚜레쥬르 빵, 투썸플레이스 케이크도 CJ제일제당에서 만들어요.",
254
+ },
255
+ "아모레퍼시픽": {
256
+ "current_price": random.randint(130000, 170000),
257
+ "price_history": [],
258
+ "description": "예뻐지는 마법, 아모레퍼시픽! 우리나라 대표 화장품 회사예요. 설화수, 라네즈, 마몽드, 이니스프리, 에뛰드하우스 등 다양한 화장품 브랜드를 만들어서, 아름다움을 꿈꾸는 사람들을 도와주고 있어요. 화장품뿐 아니라 샴푸, 치약, 바디워시 같은 생활용품도 만들고, 녹차, 건강기능식품 사업도 하고 있답니다. 우리나라 여성들의 아름다움을 책임지는 회사라고 할 수 있어요.",
259
+ },
260
+ "LG생활건강": {
261
+ "current_price": random.randint(600000, 800000),
262
+ "price_history": [],
263
+ "description": "깨끗하고 아름다운 생활, LG생활건강! 우리 생활에 필요한 다양한 제품들을 만드는 회사예요. 샴푸, 린스, 비누, 치약, 세제 같은 생활용품부터, 오휘, 숨37°, 빌리프, 더페이스샵 같은 화장품 브랜드까지, 우리 생활을 더욱 깨끗하고 아름답게 만들어주는 제품들을 만들어요. 코카콜라, 스프라이트, 환타 같은 음료수도 LG생활건��에서 판매하고 있답니다. 우리 생활 곳곳에서 만날 수 있는 친근한 회사예요.",
264
+ },
265
+ },
266
+ "금융(Finance)": {
267
+ "KB금융": {
268
+ "current_price": random.randint(50000, 60000),
269
+ "price_history": [],
270
+ "description": "든든한 금융 파트너, KB금융! 우리나라 대표 금융 회사 중 하나예요. KB국민은행, KB증권, KB손해보험, KB국민카드 등 다양한 금융 회사를 가지고 있어서, 은행, 증권, 보험, 카드 등 다양한 금융 서비스를 제공하고 있어요. 우리나라 사람들이 가장 많이 이용하는 은행 중 하나인 KB국민은행을 운영하고 있고, 집을 살 때 돈을 빌려주는 주택담보대출도 많이 해주는 회사예요. 우리나라 경제를 튼튼하게 만드는 데 중요한 역할을 하고 있어요.",
271
+ },
272
+ "신한지주": {
273
+ "current_price": random.randint(30000, 40000),
274
+ "price_history": [],
275
+ "description": "금융을 새롭게, 신한지주! KB금융과 함께 우리나라 대표 금융 회사로 손꼽혀요. 신한은행, 신한카드, 신한금융투자, 신한생명 등 다양한 금융 회사를 가지고 있어서, 은행, 카드, 증권, 보험 등 모든 금융 서비스를 제공하고 있어요. 특히 젊은 고객들을 위한 다양한 금융 상품과 서비스를 개발하고 있고, 해외 시장에도 적극적으로 진출하고 있답니다. 빠르게 변화하는 금융 시장을 이끌어가는 회사예요.",
276
+ },
277
+ "하나금융지주": {
278
+ "current_price": random.randint(40000, 50000),
279
+ "price_history": [],
280
+ "description": "금융으로 더 나은 미래, 하나금융지주! 우리나라 대표 금융 회사 중 하나예요. 하나은행, 하나증권, 하나카드, 하나생명 등 금융 회사를 가지고 있어서, 은행, 증권, 카드, 보험 등 금융 서비스를 제공하고 있어요. 외국 돈을 사고파는 외환 거래를 오랫동안 해왔고, 해외 투자와 관련된 금융 서비스도 잘 제공하는 회사예요. 글로벌 금융 시장에서 활약하는 회사라고 할 수 있어요.",
281
+ },
282
+ },
283
+ "건설(Construction)": {
284
+ "삼성물산": {
285
+ "current_price": random.randint(100000, 150000),
286
+ "price_history": [],
287
+ "description": "세계를 건설하는 힘, 삼성물산! 삼성 그룹의 뿌리이자, 건설, 상사, 패션, 리조트 등 다양한 사업을 하는 회사예요. 우리나라 랜드마크 건물인 부르즈 할리파, 페트로나스 트윈 타워 건설에 참여했고, 인천국제공항, 싱가포르 지하철 같은 큰 프로젝트들을 많이 했어요. 건설뿐 아니라 옷을 만들고 팔기도 하고 (빈폴, 갤럭시), 에버랜드, 호텔신라 같은 리조트도 운영하는 다재다능한 회사예요.",
288
+ },
289
+ "HD현대": {
290
+ "current_price": random.randint(40000, 60000),
291
+ "price_history": [],
292
+ "description": "바다를 개척하는 HD현대! 배를 만들고, 건설 기계를 만드는 회사예요. 울산에 있는 큰 조선소에서 아주 큰 배들을 만들고, 굴착기, 지게차 같은 건설 현장에서 볼 수 있는 노란색 기계들도 만들어요. 최근에는 로봇, 인공지능 기술을 개발해서 건설 현장을 더욱 스마트하게 만드는 기술을 개발하고 있답니다. 우리나라 조선 산업과 건설 기계 산업을 이끌어가는 회사예요.",
293
+ },
294
+ "GS건설": {
295
+ "current_price": random.randint(30000, 50000),
296
+ "price_history": [],
297
+ "description": "행복을 짓는 GS건설! 우리가 사는 아파트 '자이'를 만드는 회사예요. 자이 아파트는 살기 좋은 아파트로 유명하고, 우리나라 아파트 브랜드 중에서 인기가 많아요. 아파트뿐 아니라 다리, 도로, 터널 같은 사회 기반 시설도 건설하고, 해외에서도 다양한 건설 프로젝트를 하고 있답니다. 우리나라 주거 문화를 만들어가는 대표적인 건설 회사예요.",
298
+ },
299
+ },
300
+ "유통(Retail)": {
301
+ "롯데쇼핑": {
302
+ "current_price": random.randint(150000, 250000),
303
+ "price_history": [],
304
+ "description": "쇼핑의 즐거움, 롯데쇼핑! 우리나라 대표 유통 회사예요. 롯데백화점, 롯데마트, 롯데슈퍼, 롯데아울렛, 롯데ON 등 다양한 쇼핑 공간을 운영하고 있어요. 옷, 화장품, 식품, 가전제품 등 없는 게 없는 백화점부터, 저렴하고 신선한 식재료를 살 수 있는 마트까지, 우리의 쇼핑 생활을 책임지고 있어요. 영화관 롯데시네마, 테마파크 롯데월드도 롯데쇼핑에서 운영해요.",
305
+ },
306
+ "이마트": {
307
+ "current_price": random.randint(100000, 150000),
308
+ "price_history": [],
309
+ "description": "생활 필수품은 모두 다, 이마트! 우리나라 대표 대형 할인 마트예요. 집에서 사용하는 거의 모든 물건을 살 수 있다고 생각하면 돼요. 신선한 채소, 과일, 고기 같은 식품부터, 세제, 샴푸, 휴지 같은 생활용품, 옷, 장난감, 가전제품까지 정말 다양한 상품을 팔고 있어요. 이마트 자체 브랜드인 '노브랜드', '피코크' 제품들도 인기가 많고, 온라인 쇼핑몰 'SSG닷컴'도 운영하고 있답니다. 우리나라 사람들의 장보기 문화를 대표하는 곳이에요.",
310
+ },
311
+ },
312
+ "통신(Telecom)": {
313
+ "KT": {
314
+ "current_price": random.randint(30000, 40000),
315
+ "price_history": [],
316
+ "description": "빠르고 편리한 통신, KT! 우리나라 대표 통신 회사예요. 집에서 사용하는 인터넷, 스마트폰으로 사용하는 이동통신, 텔레비전 방송(IPTV), 기업들이 사용하는 IT 솔루션 등 다양한 통신 서비스를 제공하고 있어요. 오래전부터 우리나라 통신 산업을 이끌어왔고, 지금도 5G, 인공지능 같은 새로운 기술을 개발해서 더욱 편리한 통신 세상을 만들고 있답니다. 우리나라 정보 통신 발전에 큰 역할을 하는 회사예요.",
317
+ },
318
+ "SK텔레콤": {
319
+ "current_price": random.randint(50000, 70000),
320
+ "price_history": [],
321
+ "description": "무선 통신의 강자, SK텔레콤! 우리나라 대표 통신 회사이고, 특히 이동통신 서비스에서 1등이에요. 스마트폰으로 데이터를 빠르게 사용할 수 있도록 5G, LTE 같은 무선 통신 기술을 개발하고, 인공지능, 메타버스 같은 미래 기술에도 투자하고 있어요. 우리가 스마트폰으로 영상 통화를 하고, 게임을 하고, 유튜브를 볼 수 있는 건 SK텔레콤 덕분이라고 할 수 있어요. 우리나라 무선 통신 기술을 이끌어가는 회사예요.",
322
  },
323
  },
324
+ "제약/바이오(Pharma/Bio)": {
325
+ "삼성바이오로직스": {
326
+ "current_price": random.randint(700000, 900000),
327
+ "price_history": [],
328
+ "description": "생명을 소중하게, 삼성바이오로직스! 약은 약인데, 그냥 약이 아니라 아주 특별한 ‘바이오 의약품’을 만드는 회사예요. 우리 몸속 세포를 이용해서 만드는 바이오 의약품은 병을 치료하는 힘이 아주 세다고 해요. 삼성바이오로직스는 다른 제약 회사들을 위해 바이오 의약품을 대신 만들어주는 일을 전문으로 하고 있어요. 공장을 아주 크게 지어서, 최첨단 설비로 최고 품질의 바이오 의약품을 만들고 있답니다. 아픈 사람들을 위한 희망을 만드는 회사라고 할 수 있어요.",
329
+ },
330
+ "셀트리온": {
331
+ "current_price": random.randint(180000, 250000),
332
+ "price_history": [],
333
+ "description": "바이오 의약품으로 질병과 싸우는 셀트리온! 삼성바이오로직스처럼 바이오 의약품을 만드는 회사인데, 셀트리온은 직접 새로운 바이오 의약품을 개발하고, 만들어서 전 세계에 팔고 있어요. 관절염, , 자가면역질환 같은 무서운 병들을 치료하는 바이오 의약품을 만들고 있고, 저렴한 가격으로 바이오 의약품을 만들어서 더 많은 사람들이 치료받을 수 있도록 노력하고 있답니다. 바이오 의약품 분야에서 우리나라를 대표하는 회사예요.",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
334
  },
335
  },
336
+ "화학(Chemical)": {
337
+ "LG화학": {
338
+ "current_price": random.randint(600000, 800000),
339
+ "price_history": [],
340
+ "description": "생활 속 화학, LG화학! 우리가 매일 사용하는 플라스틱, 옷, 신발, 건전지, 자동차 배터리, 화장품 원료까지 정말 다양한 화학 제품을 만드는 회사예요. 눈에 보이지 않지만 우리 생활 곳곳에 LG화학 제품들이 사용되고 있답니다. 최근에는 친환경 플라스틱, 전기차 배터리 소재 같은 미래 기술 개발에도 힘쓰고 있어요. 우리나라 화학 산업을 이끌어가는 대표적인 회사예요.",
341
+ },
342
+ "금호석유화학": {
343
+ "current_price": random.randint(120000, 180000),
344
+ "price_history": [],
345
+ "description": "산업의 기초 소재, 금호석유화학! 자동차 타이어, 건축 자재, 포장재, 장갑, 운동화 밑창 등 다양한 제품의 원료가 되는 합성고무를 만드는 회사예요. 합성고무는 천연고무보다 더 튼튼하고, 다양한 기능을 가질 수 있어서 산업 현장에서 아주 많이 사용된답니다. 우리나라 합성고무 산업을 처음 시작했고, 지금도 세계적인 기술력을 가지고 있어요. 산업 발전에 꼭 필요한 숨은 영웅 같은 회사예요.",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
346
  },
347
  },
348
+ "철강(Steel)": {
349
+ "POSCO홀딩스": {
350
+ "current_price": random.randint(300000, 400000),
351
+ "price_history": [],
352
+ "description": "철강으로 나라를 튼튼하게, POSCO홀딩스! 우리나라 대표 철강 회사이고, 세계적으로도 아주 큰 철강 회사예요. 자동차, , 건물, 다리, 기차, 가전제품 등 우리 생활 곳곳에 사용되는 철강 제품을 만들어요. 철강은 튼튼하고 튼튼해서 오랫동안 사용할 수 있고, 재활용도 잘 돼서 친환경적인 소재이기도 해요. 우리나라 산업 발전에 없어서는 안 될 중요한 회사예요.",
353
+ },
354
+ "현대제철": {
355
+ "current_price": random.randint(50000, 70000),
356
+ "price_history": [],
357
+ "description": "자동차와 건설의 뼈대, 현대제철! 현대자동차 그룹의 철강 회사이고, 자동차와 건설에 사용되는 철강 제품을 전문적으로 만들어요. 자동차 차체를 튼튼하게 만드는 철판, 건물을 짓는 뼈대 역할을 하는 철근, 배를 만드는 데 사용하는 후판 등 다양한 철강 제품을 만들어요. 최근에는 친환경 철강 제조 기술을 개발해서 더욱 깨끗한 환경을 만드는 데 노력하고 있답니다. 현대자동차 그룹의 성장에 큰 힘이 되는 회사예요.",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
  },
359
  },
360
+ "운송(Transportation)": {
361
+ "대한항공": {
362
+ "current_price": random.randint(20000, 30000),
363
+ "price_history": [],
364
+ "description": "하늘을 나는 꿈, 대한항공! 우리나라 대표 항공사이고, 가장 많은 비행기를 가지고 있어요. 우리나라에서 다른 나라로 여행을 가거나, 다른 나라에서 우리나라로 여행을 올 때 대한항공 비행기를 많이 이용해요. 사람뿐 아니라 소중한 물건들을 안전하고 빠르게 전 세계로 운송하는 일도 하고 있답니다. 비행기 조종사, 승무원을 꿈꾸는 친구들이라면 누구나 가고 싶어 하는 회사일 거예요.",
365
+ },
366
+ "HMM": {
367
+ "current_price": random.randint(20000, 30000),
368
+ "price_history": [],
369
+ "description": "바다를 누비는 HMM! 우리나라 대표 해운 회사이고, 아주 큰 배들을 많이 가지고 있어요. 우리가 사용하는 물건들은 대부분 배를 통해서 다른 나라에서 우리나라로, 우리나라에서 다른 나라로 이동한답니다. HMM은 컨테이너선이라는 큰 배로 물건들을 실어 나르는 일을 전문으로 하고 있어요. 우리나라와 전 세계를 연결하는 중요한 역할을 하는 회사예요.",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  },
371
  },
372
+ "엔터테인먼트(Entertainment)": {
373
+ "CJ ENM": {
374
+ "current_price": random.randint(80000, 120000),
375
+ "price_history": [],
376
+ "description": "즐거움을 디자인하는 CJ ENM! 텔레비전 방송, 영화, 음악, 공연 등 다양한 엔터테인먼트 사업을 하는 회사예요. tvN, Mnet, OCN 같은 유명한 텔레비전 채널을 운영하고 있고, '기생충', '부산행', '겨울왕국 2' 같은 유명한 영화들을 만들거나 투자했어요. 마마, KCON 같은 큰 음악 행사도 만들고, 뮤지컬, 연극 공연도 제작하는 등 우리 생활에 즐거움을 주는 다양한 문화 콘텐츠를 만들고 있어요.",
377
+ },
378
+ "하이브": {
379
+ "current_price": random.randint(200000, 300000),
380
+ "price_history": [],
381
+ "description": "음악으로 세상을 감동시키는 하이브! 전 세계적으로 엄청난 인기를 누리고 있는 방탄소년단(BTS)을 키운 회사예요. BTS뿐 아니라 투모로우바이투게더(TXT), 세븐틴, 르세라핌, 뉴진스 등 인기 아이돌 그룹들이 많이 소속되어 있어요. 음반 제작, 매니지먼트, 공연뿐 아니라 게임, 웹툰, 교육 사업까지 확장해서 다양한 분야에서 즐거움을 주고 있답니다. 우리나라 대중문화를 세계에 알리는 데 큰 역할을 하는 회사예요.",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
382
  },
383
  },
384
+ "식품(Food)": {
385
+ "오리온": {
386
+ "current_price": random.randint(120000, 180000),
387
+ "price_history": [],
388
+ "description": "맛있는 과자, 오리온! 우리나라 대표 과자 회사이고, 초코파이, 오!감자, 포카칩, 꼬북칩, 고래밥 등 맛있고 재미있는 과자들을 많이 만들어요. 어린이부터 어른까지 누구나 좋아하는 과자들을 만들어서, 우리나라뿐 아니라 중국, 러시아, 베트남 등 해외에서도 인기가 많답니다. 과자를 좋아하는 친구라면 오리온 과자를 한 번쯤 먹어봤을 거예요.",
389
+ },
390
+ "농심": {
391
+ "current_price": random.randint(300000, 400000),
392
+ "price_history": [],
393
+ "description": "국민 라면, 농심! 우리나라 대표 라면 회사이고, 신라면, 안성탕면, 짜파게티, 너구리, 새우깡 등 오랜 시간 동안 사랑받는 라면과 스낵들을 많이 만들어요. 매콤한 신라면, 구수한 안성탕면, 달콤 짭짤한 짜파게티, 얼큰한 너구리, 고소한 새우깡 등 다양한 맛과 종류의 라면과 스낵을 만들어서, 우리나라 사람들의 입맛을 즐겁게 해주고 있어요. 라면을 좋아하는 친구라면 농심 라면을 꼭 먹어봤을 거예요.",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
394
  },
395
  },
396
  }
397
+ for sector in st.session_state["stocks"]: # 초기 price_history 채우기 (섹터별로 순회)
398
+ for stock_name in st.session_state["stocks"][sector]:
399
+ st.session_state["stocks"][sector][stock_name]["price_history"].append(
400
+ st.session_state["stocks"][sector][stock_name]["current_price"]
401
+ )
402
 
 
 
403
  if "news_analysis_results" not in st.session_state:
404
  st.session_state["news_analysis_results"] = {}
405
  if "messages" not in st.session_state:
 
412
  st.session_state["news_date"] = None
413
  if "news_meanings" not in st.session_state:
414
  st.session_state["news_meanings"] = {}
415
+ if (
416
+ "ai_news_analysis_output" not in st.session_state
417
+ ):
418
  st.session_state["ai_news_analysis_output"] = {}
419
  if "day_count" not in st.session_state:
420
  st.session_state["day_count"] = 1
 
428
 
429
  # --- 뉴스 생성 함수 ---
430
  def generate_news():
 
431
  day_count = st.session_state["day_count"]
432
  prompt = f"""
433
  지시:
434
+ 초등학생 6학년 수준에 맞춰서, 주식장과 경제 관련 뉴스 기사 5개를 생성해주세요.
435
  각 기사는 12~15문장 정도로 자세하게 작성하고, 특정 회사 이름이나 주식 종목을 직접적으로 언급하지 마세요.
436
  학생들이 뉴스를 읽고 어떤 회사가 유망할지 또는 쇠락할지 스스로 추론할 수 있도록 일반적인 경제 상황이나 산업 동향에 대한 뉴스를 만들어주세요.
437
  긍정적 뉴스, 부정적 뉴스, 중립적 뉴스 다양하게 생성하세요.(긍정, 부정, 중립 이라는 말은 표시하지 마세요.)
 
603
 
604
  stock_price = 0
605
  stock_sector = ""
606
+ for sector, stocks in st.session_state["stocks"].items():
607
+ if stock_name in stocks:
608
+ stock_price = stocks[stock_name]["current_price"]
609
+ stock_sector = sector
610
+ break
 
 
 
 
 
611
 
612
  if stock_price == 0:
613
  st.session_state["messages"].append(
 
638
  if not st.session_state["daily_news"]:
639
  return
640
 
641
+ sector_impacts = {sector: 0 for sector in st.session_state["stocks"]}
642
 
643
  for i, news_article in enumerate(st.session_state["daily_news"]):
644
  news_meaning = st.session_state["news_meanings"].get(str(i + 1))
 
658
  if sector in sector_impacts:
659
  sector_impacts[sector] += news_sentiment * 0.05
660
 
661
+ for sector in st.session_state["stocks"]:
662
+ sector_impact = sector_impacts[sector]
663
+ for stock_name in st.session_state["stocks"][sector]:
664
+ change_rate = random.uniform(-0.02, 0.02) + sector_impact
665
+ change_rate = max(-0.3, min(0.3, change_rate))
666
+ st.session_state["stocks"][sector][stock_name]["current_price"] *= (
667
+ 1 + change_rate
668
+ )
669
+ st.session_state["stocks"][sector][stock_name]["current_price"] = max(
670
+ 1, int(st.session_state["stocks"][sector][stock_name]["current_price"])
671
+ )
672
+ st.session_state["stocks"][sector][stock_name]["price_history"].append(
673
+ st.session_state["stocks"][sector][stock_name]["current_price"]
674
+ )
 
 
 
 
 
 
 
675
  st.session_state["messages"].append({"type": "info", "text": "주가가 변동되었습니다."})
676
  st.toast("주가가 변동되었습니다.", icon="📈")
677
  st.info("주가가 변동되었습니다.")
 
688
  purchase_price = stock_info["purchase_price"]
689
  current_price = 0
690
  stock_sector = ""
691
+ for sector, stocks in st.session_state["stocks"].items():
692
+ if stock_name in stocks:
693
+ current_price = stocks[stock_name]["current_price"]
694
+ stock_sector = sector
695
+ break
 
 
 
 
 
696
  if current_price != 0:
697
  stock_value = current_price * quantity
698
  total_value += stock_value
 
710
 
711
  def display_stock_prices():
712
  stocks_data = []
713
+ for sector, sector_stocks in st.session_state["stocks"].items():
 
714
  for stock_name, stock_info in sector_stocks.items():
715
  price_history = stock_info["price_history"]
716
+ daily_change_rate_str = " - " # 기본값
717
  if len(price_history) >= 2:
718
  previous_day_price = price_history[-2]
719
  current_price = price_history[-1]
 
725
  "종목": stock_name,
726
  "섹터": sector,
727
  "현재 주가": f"{stock_info['current_price']:,} 원",
728
+ "전일 대비": daily_change_rate_str, # 전일 대비 등락률 추가
729
  "price_history": stock_info["price_history"],
730
  "description": stock_info["description"],
731
  }
732
  )
733
  stocks_df = pd.DataFrame(stocks_data)
734
+ st.dataframe(stocks_df[["섹터", "종목", "현재 주가", "전일 대비"]], hide_index=True) # "전일 대비" 컬럼 추가
735
 
736
  selected_stock_all_info = st.selectbox(
737
  "종목 선택 (기업 정보 및 주가 그래프)", stocks_df["종목"].tolist()
 
740
  selected_stock_sector = stocks_df[
741
  stocks_df["종목"] == selected_stock_all_info
742
  ]["섹터"].iloc[0]
 
 
743
  col1_info, col2_graph = st.columns([1, 2])
744
 
745
  with col1_info:
746
  st.subheader("기업 정보")
747
  st.info(
748
+ f"**{selected_stock_all_info} ({selected_stock_sector})**\n\n{st.session_state['stocks'][selected_stock_sector][selected_stock_all_info]['description']}"
749
  )
750
 
751
  with col2_graph:
 
755
  "날짜": range(
756
  1,
757
  len(
758
+ st.session_state["stocks"][selected_stock_sector][
759
+ selected_stock_all_info
760
+ ]["price_history"]
761
  )
762
  + 1,
763
  ),
764
+ "주가": st.session_state["stocks"][selected_stock_sector][
765
+ selected_stock_all_info
766
+ ]["price_history"],
767
  }
768
  )
769
  fig = px.line(
770
  price_history_df,
771
  x="날짜",
772
  y="주가",
773
+ title=f"{selected_stock_all_info} ({selected_stock_sector}) 주가 변동",
774
  )
775
  st.plotly_chart(fig)
776
  else:
 
790
  purchase_price = stock_info["purchase_price"]
791
  current_price = 0
792
  stock_sector = ""
793
+ for sector, stocks in st.session_state["stocks"].items():
794
+ if stock_name in stocks:
795
+ current_price = stocks[stock_name]["current_price"]
796
+ stock_sector = sector
797
+ break
 
 
 
 
798
 
799
  if current_price == 0:
800
  continue
 
859
  "하락": "주가가 내리는 것.",
860
  "변동": "주가가 오르락내리락 움직이는 것.",
861
  "투자": "돈을 넣어 이익을 얻으려고 하는 모든 활동.",
862
+ "섹터": "비슷한 사업을 하는 회사들을 묶어 놓은 그룹 (예: 기술 섹터, 자동차 섹터)",
863
+ "전일 대비 등락률": "오늘 주가가 어제보다 얼마나 변했는지 퍼센트로 나타낸 것. +는 상승, -는 하락.", # 용어 추가
864
  }
865
  with st.sidebar.expander("📚 주식 용어 사전", expanded=False):
866
  for term, definition in glossary.items():
 
873
  col_news, col_main_ui = st.columns([1, 2])
874
 
875
  with col_news:
876
+ st.header(f"📰 Day {st.session_state['day_count']} 뉴스")
877
  if st.button("뉴스 생성", use_container_width=True, key="news_gen_button"):
878
+ with st.spinner(f"Day {st.session_state['day_count']} 뉴스 생성 중..."):
879
  current_daily_news = generate_news()
880
  st.session_state["daily_news"] = current_daily_news
881
 
882
  if st.session_state["daily_news"]:
883
+ st.subheader(f"Day {st.session_state['day_count']} 뉴스")
884
  for i, news in enumerate(st.session_state["daily_news"]):
885
  with st.expander(f"뉴스 {i+1}", expanded=False):
886
  st.write(news)
 
888
  if st.session_state["previous_daily_news"] and st.session_state[
889
  "news_meanings"
890
  ]:
891
+ st.subheader(f"Day {st.session_state['day_count'] - 1} 뉴스 해설")
892
  st.info("AI가 분석한 어제 뉴스 해설입니다.")
893
+ with st.expander(f"Day {st.session_state['day_count'] - 1} 뉴스 해설 보기", expanded=False):
894
  if st.session_state["news_meanings"]:
895
  for i, meaning_data in st.session_state["news_meanings"].items():
896
  st.markdown(f"**뉴스 {i}**:")
897
+ st.markdown(f"**AI 해설:** {meaning_data['explanation']}") # Markdown 으로 변경
898
  if meaning_data['sectors']:
899
+ st.markdown(f"**관련 섹터:** {', '.join(meaning_data['sectors'])}") # Markdown 으로 변경
900
  else:
901
+ st.markdown("**관련 섹터:** 없음") # Markdown 으로 변경
902
  else:
903
  st.info("어제 뉴스에 대한 해설이 없습니다.")
904
 
 
907
 
908
  with col_main_ui:
909
  menu = st.tabs(
910
+ ['현재 주가', '내 포트폴리오', '주식 매수', '주식 매도', '어제 뉴스 해설']
911
  )
912
 
913
  with menu[0]:
914
+ st.subheader("📈 현재 주가 및 기업 정보")
915
+ st.markdown("주식 시장의 현재 가격과 기업 정보를 확인하세요.")
916
  display_stock_prices()
917
 
918
  with menu[1]:
919
+ st.subheader("📊 내 포트폴리오")
920
+ st.markdown("현재 보유 중인 주식과 자산을 확인하세요.")
921
  display_portfolio_table()
922
 
923
  with menu[2]:
924
+ st.subheader("💰 주식 매수")
925
  st.markdown("AI 예측과 뉴스 분석을 바탕으로 주식을 매수해보세요.")
926
+ sector_names = list(st.session_state["stocks"].keys())
 
927
  selected_sector_buy = st.selectbox("매수 섹터 선택:", sector_names)
928
  stock_names_in_sector = list(
929
+ st.session_state["stocks"][selected_sector_buy].keys()
930
  )
931
  selected_stock_buy = st.selectbox("매수 종목 선택:", stock_names_in_sector)
932
 
933
+ stock_price_buy = st.session_state["stocks"][selected_sector_buy][
934
  selected_stock_buy
935
  ]["current_price"]
936
  st.info(f"**{selected_stock_buy}** 현재 주가: {stock_price_buy:,.0f}원")
 
954
  st.info("매수를 취소했습니다.")
955
 
956
  with menu[3]:
957
+ st.subheader("📉 주식 매도")
958
  st.markdown("보유 중인 주식을 판매하고 수익을 실현해보세요.")
959
  if st.session_state["portfolio"]["stocks"]:
960
  stock_names_sell = list(st.session_state["portfolio"]["stocks"].keys())
961
  selected_stock_sell = st.selectbox("매도 종목 선택:", stock_names_sell)
962
  stock_price_sell = 0
963
+ for sector, stocks in st.session_state["stocks"].items():
964
+ if selected_stock_sell in stocks:
965
+ stock_price_sell = stocks[selected_stock_sell]["current_price"]
966
+ break
 
 
 
 
967
 
968
  st.info(f"**{selected_stock_sell}** 현재 주가: {stock_price_sell:,.0f}원")
969
  max_sell_quantity = st.session_state["portfolio"]["stocks"][
 
996
  if st.session_state["previous_daily_news"] and st.session_state[
997
  "news_meanings"
998
  ]:
999
+ st.subheader(f"Day {st.session_state['day_count'] - 1} 뉴스 해설")
1000
  st.info("AI가 분석한 어제 뉴스 해설입니다.")
1001
  for i in range(len(st.session_state["previous_daily_news"])):
1002
  with st.expander(f"뉴스 {i+1}", expanded=False):
 
1020
  )
1021
 
1022
  with st.sidebar:
1023
+ st.markdown("# 💰 초등학생을 위한 모의 주식 거래")
1024
+ st.markdown(f"### Day {st.session_state['day_count']}")
1025
  st.markdown("---")
1026
+ st.markdown("쉽고 재미있주식 투자 📈")
1027
+ st.markdown("📰 신문 기사를 읽고 미래를 예측해보세요!")
1028
  cash, total_value, profit_rate = display_portfolio()
1029
  st.metric(label="💰 현금 잔고", value=f"{cash:,.0f} 원")
1030
  st.metric(label="📊 총 평가 금액", value=f"{total_value:,.0f} 원")
1031
  st.metric(label="🚀 총 수익률", value=f"{profit_rate:.2f}%")
1032
  st.markdown("---")
1033
 
1034
+ if st.button("하루 지나기", use_container_width=True, key="day_pass_button"):
1035
  if st.session_state["daily_news"]:
1036
+ with st.spinner(f"Day {st.session_state['day_count']} 주가 변동 및 이전 뉴스 분석..."):
1037
  st.session_state["previous_daily_news"] = st.session_state["daily_news"]
1038
  meanings = explain_daily_news_meanings(
1039
  st.session_state["previous_daily_news"]
 
1042
  st.session_state["news_meanings"] = meanings
1043
  update_stock_prices()
1044
  st.session_state["daily_news"] = generate_news()
1045
+ st.session_state["day_count"] += 1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1046
  st.rerun()
1047
+ st.info("어제 뉴스 해설 탭에서 AI가 분석한 뉴스 해설을 확인해보세요.")
1048
  else:
1049
  st.warning("오늘의 뉴스를 먼저 생성해주세요.")
1050
  st.markdown("***")
 
1056
  """
1057
  **1단계: 뉴스 생성하기**
1058
  - 왼쪽 '오늘의 뉴스' 영역에서 '뉴스 생성' 버튼을 클릭하세요.
1059
+ - AI가 주식 뉴스를 5개 만들어줍니다.
1060
 
1061
  **2단계: 뉴스 읽고 예측하기**
1062
  - '오늘의 뉴스' 아래 뉴스들을 꼼꼼히 읽어보세요.
 
1065
 
1066
  **3단계: 주가 및 기업 정보 확인하기**
1067
  - 메뉴에서 '📈 현재 주가' 탭을 선택하세요.
1068
+ - 현재 여러분이 가진 주식과 현금 잔고, 총 평가액, 수익률 등을 한눈에 볼 수 있습니다.
1069
+ - 투자 결과가 어떤지, 얼마나 이익/손해봤는지 확인해보세요.
1070
 
1071
  **4단계: 주식 매수하기**
1072
  - 메뉴에서 '💰 주식 매수' 탭을 선택하세요.
1073
  - '매수 종목 선택' 메뉴에서 원하는 회사를 고르세요.
1074
  - '매수 수량'을 입력하고 '주식 매수' 버튼을 클릭하면, 주식을 살 수 있습니다.
1075
+ - **팁:** 여러분의 뉴스 예측을 바탕으로 주식을 골라보세요!
1076
 
1077
  **5단계: 포트폴리오 확인하기**
1078
  - 메뉴에서 '📊 내 포트폴리오' 탭을 선택하세요.
 
1085
  - '매도 수량'을 입력하고 '주식 매도' 버튼을 클릭하면, 주식을 팔고 현금을 얻을 수 있습니다.
1086
  - **팁:** 주가가 올랐을 때 팔아서 이익을 남겨보세요!
1087
 
1088
+ **7단계: 하루 지나기 & 이전 뉴스 의미 해설 보기**
1089
+ - 사이드바 메뉴의 '하루 지나기' 버튼을 클릭하세요.
1090
+ - 주가가 변동되고, 새로운 하루가 시작됩니다.
1091
+ - '어제 뉴스 해설' 탭에서 뉴스의 '뉴스 의미' 해설이 추가된 것을 확인해보세요.
1092
+ - AI가 이전 뉴스 (어제 뉴스)의 핵심 의미를 초등학생 눈높이에 맞춰 쉽게 설명해줍니다.
 
1093
 
1094
  **계속해서 배우고 성장하기! 🌱**
1095
  - 모의 주식 거래 앱을 꾸준히 사용하면서, 뉴스-주가 관계를 배우고 투자 감각을 키워보세요.
 
1096
  - 처음에는 어렵더라도, 계속 연습하면 주식 투자가 더 재미있고 쉬워질 거예요! 😉
1097
  """
1098
  )