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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -46
app.py CHANGED
@@ -4,14 +4,13 @@ import subprocess
4
  subprocess.run(["pip", "install", "--upgrade", "pip"])
5
  subprocess.run(["pip", "install", "--upgrade", "openai", "yfinance", "gradio", "matplotlib", "Pillow"])
6
 
7
- # gradio ์„ค์น˜ ํ›„ ์ž„ํฌํŠธ
8
  import os
9
  import matplotlib.font_manager as fm
10
  import matplotlib.pyplot as plt
11
  import yfinance as yf
12
  import numpy as np
13
  import re # ํ•œ๊ธ€, ์ˆซ์ž, ๊ธฐํ˜ธ๋ฅผ ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•œ ์ •๊ทœ ํ‘œํ˜„์‹์— ์‚ฌ์šฉ
14
- import gradio as gr # ์ด ๋ถ€๋ถ„์ด ์ถ”๊ฐ€๋จ
15
 
16
  # 1. ๋‚˜๋ˆ”๊ณ ๋”• ํฐํŠธ ์„ค์น˜ ๋ฐ ์ ์šฉ
17
  def install_nanum_font():
@@ -37,31 +36,31 @@ font_prop = fm.FontProperties(fname=font_path)
37
  plt.rcParams['font.family'] = font_prop.get_name()
38
  plt.rcParams['axes.unicode_minus'] = False # ๋งˆ์ด๋„ˆ์Šค ๋ถ€ํ˜ธ ๊นจ์ง ๋ฐฉ์ง€
39
 
40
- # 2. yfinance๋กœ ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ (์‚ผ์„ฑ์ „์ž ์˜ˆ์‹œ)
41
- ticker = '005930.KS' # ์‚ผ์„ฑ์ „์ž ํ‹ฐ์ปค
42
- stock = yf.Ticker(ticker)
43
- stock_data = stock.history(period="max")
44
-
45
- # ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ ํ™•์ธ
46
- print(stock_data.head()) # ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ์ผ๋ถ€ ํ™•์ธ
47
-
48
- # 3. ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” (pandas ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ numpy ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฒ˜๋ฆฌ)
49
- plt.figure(figsize=(10, 6))
50
-
51
- # ์ธ๋ฑ์Šค์™€ ์ข…๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ numpy ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
52
- dates = stock_data.index.to_numpy()
53
- closing_prices = stock_data['Close'].to_numpy()
54
-
55
- # ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”
56
- plt.plot(dates, closing_prices, label='์‚ผ์„ฑ์ „์ž ์ข…๊ฐ€')
57
-
58
- # ๊ทธ๋ž˜ํ”„ ์ œ๋ชฉ, ์ถ• ๋ผ๋ฒจ์„ ํ•œ๊ธ€๋กœ ์„ค์ •
59
- plt.title('์‚ผ์„ฑ์ „์ž ์ฃผ๊ฐ€ ์ถ”์ด', fontproperties=font_prop)
60
- plt.xlabel('๋‚ ์งœ', fontproperties=font_prop)
61
- plt.ylabel('์ข…๊ฐ€', fontproperties=font_prop)
62
- plt.legend(prop=font_prop)
63
-
64
- # B ์ฝ”๋“œ
65
 
66
  # Perplexity AI API ์„ค์ •
67
  API_KEY = "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" # ์—ฌ๊ธฐ์— Perplexity AI API ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.
@@ -111,30 +110,22 @@ def update_news(input_value, selected_date):
111
  company_name = input_value if ticker == input_value else list(name_to_ticker.keys())[list(name_to_ticker.values()).index(ticker)]
112
  return handle_click(company_name, selected_date)
113
 
114
- # ์ข…๋ชฉ๋ช…๊ณผ ํ‹ฐ์ปค๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ ํ™•์žฅ ๋ฐ ์กฐ๊ฑด๋ณ„ ์ข…๋ชฉ ๋งคํ•‘
115
- name_to_ticker = {
116
- "์‚ผ์„ฑ์ „์ž": "005930.KS",
117
- "SK๋ฐ”์ด์˜คํŒœ": "326030.KS",
118
- "Apple": "AAPL",
119
- "Nvidia": "NVDA",
120
- "Vertex": "VRTX",
121
- "ํ˜„๋Œ€์ฐจ": "005380.KS",
122
- "์นด์นด์˜ค": "035720.KS",
123
- "LGํ™”ํ•™": "051910.KS",
124
- "์…€ํŠธ๋ฆฌ์˜จ": "068270.KS",
125
- "๋„ค์ด๋ฒ„": "035420.KS",
126
- "๋‚˜์Šค๋‹ฅ ์‹œ์ด 1์œ„": "AAPL", # Apple
127
- "๋‚˜์Šค๋‹ฅ ๋ฐ”์ด์˜คํ… ์‹œ์ด 1์œ„": "VRTX", # Vertex Pharmaceuticals
128
- "๋‚˜์Šค๋‹ฅ ์ œ์•ฝ์ฃผ ์‹œ์ด 1์œ„": "VRTX", # Vertex Pharmaceuticals
129
- "์ฝ”์Šคํ”ผ ์‹œ์ด 1์œ„": "005930.KS", # ์‚ผ์„ฑ์ „์ž
130
- "์ฝ”์Šค๋‹ฅ ์‹œ์ด 1์œ„": "035420.KS", # ๋„ค์ด๋ฒ„
131
- }
132
 
133
  # ์ฃผ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์กฐ๊ฑด์— ๋งž๋Š” ๋‚ ์งœ์™€ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
134
  def display_stock_with_highlight(input_value, change_type, percent_change):
135
  try:
136
  # ์ž…๋ ฅ๊ฐ’์„ ํ‹ฐ์ปค๋กœ ๋ณ€ํ™˜
137
- ticker = name_to_ticker.get(input_value, input_value)
138
  stock = yf.Ticker(ticker)
139
  stock_data = stock.history(period="5y") # ์ตœ๊ทผ 5๋…„ ๋ฐ์ดํ„ฐ๋กœ ์ œํ•œ
140
 
 
4
  subprocess.run(["pip", "install", "--upgrade", "pip"])
5
  subprocess.run(["pip", "install", "--upgrade", "openai", "yfinance", "gradio", "matplotlib", "Pillow"])
6
 
 
7
  import os
8
  import matplotlib.font_manager as fm
9
  import matplotlib.pyplot as plt
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
  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 ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.
 
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