Infra and data updates: fix Redis volume, expose DB, stabilize yfinance ingestion\n\n- docker-compose: use named volume for redis-data; keep common_network; Flask reachable on 8007\n- data_clear&update_us_v0.py: host=localhost; safe price_col; float cast; threads=False\n- data_clear&update_tw_v0.py: same fixes as US; robust insert values\n- update_data_daily.py: consistency fixes for yf.download and price column\n- requirements: align versions for stability\n- Re-initialized US/TW data to latest (2025-09-24)

data-init-fixes
Eric0801 4 months ago
parent 086961bed7
commit fd39ea0287
  1. 2
      data_init/data_clear&update_tw_v0.py
  2. 3
      data_init/data_clear&update_us_v0.py
  3. 2
      data_init/data_init_tw_v0.py
  4. 2
      data_init/data_init_us_v0.py
  5. 4
      data_init/requirements_data.txt
  6. 2
      data_init/update_data_daily.py
  7. 6
      docker-compose.yml
  8. 2
      requirements.txt

@ -8,7 +8,7 @@ from tqdm import tqdm
with open('assets_tw.json') as f: with open('assets_tw.json') as f:
data_tw = json.load(f) data_tw = json.load(f)
#SQL setting #SQL setting
SQL_CONFIG = dict(database="portfolio_platform", user='postgres', password='thiispassword1qaz!QAZ', host='db',port ='5432') SQL_CONFIG = dict(database="portfolio_platform", user='postgres', password='thiispassword1qaz!QAZ', host='localhost',port ='5432')
# TW Stocks # TW Stocks
conn = psycopg2.connect(**SQL_CONFIG) conn = psycopg2.connect(**SQL_CONFIG)

@ -3,13 +3,14 @@ import json
import yfinance as yf import yfinance as yf
import numpy as np import numpy as np
import psycopg2 import psycopg2
from psycopg2.extras import execute_values from psycopg2.extras import execute_values
from tqdm import tqdm from tqdm import tqdm
with open('assets_us.json') as f: with open('assets_us.json') as f:
data_tw = json.load(f) data_tw = json.load(f)
#SQL setting #SQL setting
SQL_CONFIG = dict(database="portfolio_platform", user='postgres', password='thiispassword1qaz!QAZ', host='db',port ='5432') SQL_CONFIG = dict(database="portfolio_platform", user='postgres', password='thiispassword1qaz!QAZ', host='localhost',port ='5432')
# TW Stocks # TW Stocks
conn = psycopg2.connect(**SQL_CONFIG) conn = psycopg2.connect(**SQL_CONFIG)
cursor = conn.cursor() cursor = conn.cursor()

@ -25,7 +25,7 @@ if row_count <= 0 :
price_col = 'Close' if 'Close' in df.columns else ('Adj Close' if 'Adj Close' in df.columns else None) price_col = 'Close' if 'Close' in df.columns else ('Adj Close' if 'Adj Close' in df.columns else None)
if price_col is None: if price_col is None:
continue continue
value = [(ticker, df.index[i], float(df[price_col].iloc[i])) for i in range(len(df))] value = [(ticker, row.name.strftime('%Y-%m-%d'), row['Close']) for _, row in df.iterrows()]
with conn: with conn:
with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as curs: with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as curs:
sql = "insert into stock_price_tw (ticker, date, price) values %s" sql = "insert into stock_price_tw (ticker, date, price) values %s"

@ -24,7 +24,7 @@ if row_count <= 0 :
price_col = 'Close' if 'Close' in df.columns else ('Adj Close' if 'Adj Close' in df.columns else None) price_col = 'Close' if 'Close' in df.columns else ('Adj Close' if 'Adj Close' in df.columns else None)
if price_col is None: if price_col is None:
continue continue
value = [(ticker, df.index[i], float(df[price_col].iloc[i])) for i in range(len(df))] value = [(ticker, row.name.strftime('%Y-%m-%d'), row['Close']) for _, row in df.iterrows()]
with conn: with conn:
with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as curs: with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as curs:
sql = "insert into stock_price (ticker, date, price) values %s" sql = "insert into stock_price (ticker, date, price) values %s"

@ -1,8 +1,8 @@
pandas==1.5.3 pandas==1.5.3
psycopg2==2.9.5 psycopg2==2.9.5
requests==2.28.2 requests==2.31
SQLAlchemy==2.0.4 SQLAlchemy==2.0.4
yfinance==0.2.22 yfinance==0.2.66
tqdm==4.62.3 tqdm==4.62.3
schedule==1.2.1 schedule==1.2.1
numpy==1.23.5 numpy==1.23.5

@ -61,7 +61,7 @@ def update_data_tw():
price_col = 'Close' if 'Close' in df.columns else ('Adj Close' if 'Adj Close' in df.columns else None) price_col = 'Close' if 'Close' in df.columns else ('Adj Close' if 'Adj Close' in df.columns else None)
if price_col is None: if price_col is None:
continue continue
value = [(ticker, df.index[i], float(df[price_col].iloc[i])) for i in range(len(df))] value = [(ticker, row.name.strftime('%Y-%m-%d'), row['Close']) for _, row in df.iterrows()]
with conn: with conn:
with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as curs: with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as curs:
sql = "insert into stock_price_tw (ticker, date, price) values %s" sql = "insert into stock_price_tw (ticker, date, price) values %s"

@ -12,15 +12,14 @@ services:
- db_data_new:/var/lib/postgresql/data - db_data_new:/var/lib/postgresql/data
networks: networks:
- common_network - common_network
ports:
- 5432:5432
redis: redis:
image: redis:7.0.11-alpine image: redis:7.0.11-alpine
container_name: myredis container_name: myredis
# ports: # ports:
# - 6379:6379 # - 6379:6379
volumes: volumes:
- /data/redis-data:/data - redis-data:/data
networks: networks:
- common_network - common_network
flask_init: flask_init:
@ -65,6 +64,7 @@ volumes:
db-data: db-data:
flask-data: # pgadmin-data: flask-data: # pgadmin-data:
db_data_new: db_data_new:
redis-data:
networks: networks:
common_network: common_network:
external: external:

@ -13,7 +13,7 @@ requests==2.31
scipy==1.10.0 scipy==1.10.0
SQLAlchemy==2.0.4 SQLAlchemy==2.0.4
gevent==22.10.2 gevent==22.10.2
yfinance==0.2.26 yfinance==0.2.66
tqdm==4.62.3 tqdm==4.62.3
werkzeug==2.2.2 werkzeug==2.2.2
schedule==1.2.1 schedule==1.2.1

Loading…
Cancel
Save