Commit
8130080
ยท
verified ยท
1 Parent(s): 4a575de

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -38
app.py CHANGED
@@ -11,6 +11,10 @@ import yfinance as yf
11
  import numpy as np
12
  import re # ํ•œ๊ธ€, ์ˆซ์ž, ๊ธฐํ˜ธ๋ฅผ ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•œ ์ •๊ทœ ํ‘œํ˜„์‹์— ์‚ฌ์šฉ
13
  import gradio as gr
 
 
 
 
14
 
15
  # 1. ๋‚˜๋ˆ”๊ณ ๋”• ํฐํŠธ ์„ค์น˜ ๋ฐ ์ ์šฉ
16
  def install_nanum_font():
@@ -36,31 +40,31 @@ font_prop = fm.FontProperties(fname=font_path)
36
  plt.rcParams['font.family'] = font_prop.get_name()
37
  plt.rcParams['axes.unicode_minus'] = False # ๋งˆ์ด๋„ˆ์Šค ๋ถ€ํ˜ธ ๊นจ์ง ๋ฐฉ์ง€
38
 
39
- # ์‹œ๊ฐ€์ด์•ก ๊ธฐ์ค€์œผ๋กœ ์ข…๋ชฉ ๊ฒ€์ƒ‰
40
- def get_top_market_cap_stock(market):
41
- if market == "์ฝ”์Šค๋‹ฅ":
42
- # ์ฝ”์Šค๋‹ฅ ์‹œ์žฅ ์ข…๋ชฉ ๊ฒ€์ƒ‰
43
- tickers = yf.Tickers('^KQ11') # ์ฝ”์Šค๋‹ฅ ์ƒ์œ„ ์ข…๋ชฉ๋“ค์„ ์–ป์–ด์˜ค๊ธฐ ์œ„ํ•œ ์ง€ํ‘œ
44
- elif market == "์ฝ”์Šคํ”ผ":
45
- tickers = yf.Tickers('^KS11') # ์ฝ”์Šคํ”ผ ์ƒ์œ„ ์ข…๋ชฉ๋“ค
46
- else:
47
- tickers = yf.Tickers('^IXIC') # ๋‚˜์Šค๋‹ฅ ์ƒ์œ„ ์ข…๋ชฉ๋“ค
48
-
49
- stock_list = tickers.tickers
50
- top_stock = None
51
- top_market_cap = 0
52
-
53
- for stock in stock_list:
54
- try:
55
- stock_info = stock.info
56
- market_cap = stock_info.get('marketCap', 0)
57
- if market_cap > top_market_cap:
58
- top_market_cap = market_cap
59
- top_stock = stock_info.get('symbol', None)
60
- except:
61
- continue
62
-
63
- return top_stock
64
 
65
  # Perplexity AI API ์„ค์ •
66
  API_KEY = "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" # ์—ฌ๊ธฐ์— Perplexity AI API ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.
@@ -106,26 +110,37 @@ def update_news(input_value, selected_date):
106
  return "๋‚ ์งœ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”."
107
  else:
108
  # ์ข…๋ชฉ๋ช…์„ ๊ฐ€์ ธ์™€์„œ Perplexity๋กœ ๊ฒ€์ƒ‰
109
- ticker = name_to_ticker.get(input_value, input_value)
110
  company_name = input_value if ticker == input_value else list(name_to_ticker.keys())[list(name_to_ticker.values()).index(ticker)]
111
  return handle_click(company_name, selected_date)
112
 
113
- # ์ข…๋ชฉ๋ช…๊ณผ ํ‹ฐ์ปค๋ฅผ ๋™์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜
114
- def get_dynamic_ticker(input_value):
115
- if input_value == "๋‚˜์Šค๋‹ฅ ์‹œ์ด 1์œ„":
116
- return get_top_market_cap_stock("๋‚˜์Šค๋‹ฅ")
117
- elif input_value == "์ฝ”์Šคํ”ผ ์‹œ์ด 1์œ„":
118
- return get_top_market_cap_stock("์ฝ”์Šคํ”ผ")
119
- elif input_value == "์ฝ”์Šค๋‹ฅ ์‹œ์ด 1์œ„":
120
- return get_top_market_cap_stock("์ฝ”์Šค๋‹ฅ")
121
- else:
122
- return name_to_ticker.get(input_value, input_value)
 
 
 
 
 
 
 
 
 
 
 
123
 
124
  # ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์กฐ๊ฑด์— ๋งž๋Š” ๋‚ ์งœ์™€ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
125
  def display_stock_with_highlight(input_value, change_type, percent_change):
126
  try:
127
  # ์ž…๋ ฅ๊ฐ’์„ ํ‹ฐ์ปค๋กœ ๋ณ€ํ™˜
128
- ticker = get_dynamic_ticker(input_value)
129
  stock = yf.Ticker(ticker)
130
  stock_data = stock.history(period="5y") # ์ตœ๊ทผ 5๋…„ ๋ฐ์ดํ„ฐ๋กœ ์ œํ•œ
131
 
@@ -160,7 +175,7 @@ def display_stock_with_highlight(input_value, change_type, percent_change):
160
  plt.title(f'{input_value} ์ฃผ๊ฐ€ ์ถ”์ด', fontproperties=font_prop)
161
  plt.xlabel('๋‚ ์งœ', fontproperties=font_prop)
162
  plt.ylabel('์ข…๊ฐ€', fontproperties=font_prop)
163
- plt.legend()
164
 
165
  buf = io.BytesIO()
166
  plt.savefig(buf, format='png')
 
11
  import numpy as np
12
  import re # ํ•œ๊ธ€, ์ˆซ์ž, ๊ธฐํ˜ธ๋ฅผ ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•œ ์ •๊ทœ ํ‘œํ˜„์‹์— ์‚ฌ์šฉ
13
  import gradio as gr
14
+ import io
15
+ from PIL import Image
16
+ from datetime import datetime, timedelta
17
+ from openai import OpenAI
18
 
19
  # 1. ๋‚˜๋ˆ”๊ณ ๋”• ํฐํŠธ ์„ค์น˜ ๋ฐ ์ ์šฉ
20
  def install_nanum_font():
 
40
  plt.rcParams['font.family'] = font_prop.get_name()
41
  plt.rcParams['axes.unicode_minus'] = False # ๋งˆ์ด๋„ˆ์Šค ๋ถ€ํ˜ธ ๊นจ์ง ๋ฐฉ์ง€
42
 
43
+ # 2. yfinance๋กœ ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ (์‚ผ์„ฑ์ „์ž ์˜ˆ์‹œ)
44
+ ticker = '005930.KS' # ์‚ผ์„ฑ์ „์ž ํ‹ฐ์ปค
45
+ stock = yf.Ticker(ticker)
46
+ stock_data = stock.history(period="max")
47
+
48
+ # ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ํ™•์ธ
49
+ print(stock_data.head()) # ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ์ผ๋ถ€ ํ™•์ธ
50
+
51
+ # 3. ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” (pandas ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ numpy ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌ)
52
+ plt.figure(figsize=(10, 6))
53
+
54
+ # ์ธ๋ฑ์Šค์™€ ์ข…๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ numpy ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
55
+ dates = stock_data.index.to_numpy()
56
+ closing_prices = stock_data['Close'].to_numpy()
57
+
58
+ # ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”
59
+ plt.plot(dates, closing_prices, label='์‚ผ์„ฑ์ „์ž ์ข…๊ฐ€')
60
+
61
+ # ๊ทธ๋ž˜ํ”„ ์ œ๋ชฉ, ์ถ• ๋ผ๋ฒจ์„ ํ•œ๊ธ€๋กœ ์„ค์ •
62
+ plt.title('์‚ผ์„ฑ์ „์ž ์ฃผ๊ฐ€ ์ถ”์ด', fontproperties=font_prop)
63
+ plt.xlabel('๋‚ ์งœ', fontproperties=font_prop)
64
+ plt.ylabel('์ข…๊ฐ€', fontproperties=font_prop)
65
+ plt.legend(prop=font_prop)
66
+
67
+ # B ์ฝ”๋“œ
68
 
69
  # Perplexity AI API ์„ค์ •
70
  API_KEY = "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" # ์—ฌ๊ธฐ์— Perplexity AI API ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.
 
110
  return "๋‚ ์งœ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”."
111
  else:
112
  # ์ข…๋ชฉ๋ช…์„ ๊ฐ€์ ธ์™€์„œ Perplexity๋กœ ๊ฒ€์ƒ‰
113
+ ticker = name_to_ticker.get(input_value, input_value)
114
  company_name = input_value if ticker == input_value else list(name_to_ticker.keys())[list(name_to_ticker.values()).index(ticker)]
115
  return handle_click(company_name, selected_date)
116
 
117
+ # ์ข…๋ชฉ๋ช…๊ณผ ํ‹ฐ์ปค๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ ํ™•์žฅ ๋ฐ ์กฐ๊ฑด๋ณ„ ์ข…๋ชฉ ๋งคํ•‘
118
+ name_to_ticker = {
119
+ "์‚ผ์„ฑ์ „์ž": "005930.KS",
120
+ "SK๋ฐ”์ด์˜คํŒœ": "326030.KS",
121
+ "Apple": "AAPL",
122
+ "Nvidia": "NVDA",
123
+ "Vertex": "VRTX",
124
+ "ํ˜„๋Œ€์ฐจ": "005380.KS",
125
+ "์นด์นด์˜ค": "035720.KS",
126
+ "LGํ™”ํ•™": "051910.KS",
127
+ "์…€ํŠธ๋ฆฌ์˜จ": "068270.KS",
128
+ "๋„ค์ด๋ฒ„": "035420.KS",
129
+ "์—์ฝ”ํ”„๋กœ๋น„์— ": "247540.KS",
130
+ "์•Œํ…Œ์˜ค์  ": "196170.KQ",
131
+ # ์ตœ์‹  ์‹œ๊ฐ€์ด์•ก ์ƒ์œ„ ์ข…๋ชฉ์„ ๋ฐ˜์˜ํ•˜์—ฌ ์—…๋ฐ์ดํŠธ
132
+ "๋‚˜์Šค๋‹ฅ ์‹œ์ด 1์œ„": "AAPL", # Apple
133
+ "๋‚˜์Šค๋‹ฅ ๋ฐ”์ด์˜คํ… ์‹œ์ด 1์œ„": "VRTX", # Vertex Pharmaceuticals
134
+ "๋‚˜์Šค๋‹ฅ ์ œ์•ฝ์ฃผ ์‹œ์ด 1์œ„": "VRTX", # Vertex Pharmaceuticals
135
+ "์ฝ”์Šคํ”ผ ์‹œ์ด 1์œ„": "005930.KS", # ์‚ผ์„ฑ์ „์ž
136
+ "์ฝ”์Šค๋‹ฅ ์‹œ์ด 1์œ„": "196170.KQ", # ์•Œํ…Œ์˜ค์  
137
+ }
138
 
139
  # ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์กฐ๊ฑด์— ๋งž๋Š” ๋‚ ์งœ์™€ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
140
  def display_stock_with_highlight(input_value, change_type, percent_change):
141
  try:
142
  # ์ž…๋ ฅ๊ฐ’์„ ํ‹ฐ์ปค๋กœ ๋ณ€ํ™˜
143
+ ticker = name_to_ticker.get(input_value, input_value)
144
  stock = yf.Ticker(ticker)
145
  stock_data = stock.history(period="5y") # ์ตœ๊ทผ 5๋…„ ๋ฐ์ดํ„ฐ๋กœ ์ œํ•œ
146
 
 
175
  plt.title(f'{input_value} ์ฃผ๊ฐ€ ์ถ”์ด', fontproperties=font_prop)
176
  plt.xlabel('๋‚ ์งœ', fontproperties=font_prop)
177
  plt.ylabel('์ข…๊ฐ€', fontproperties=font_prop)
178
+ plt.legend(prop=font_prop)
179
 
180
  buf = io.BytesIO()
181
  plt.savefig(buf, format='png')