๋ฐ์—”์œผ๋กœ ์„ฑ์žฅ์ค‘ ๐ŸŒฑ

Python/[๊ธฐ์ดˆ ๊ฐ•์˜ ์ •๋ฆฌ]

python ๊ธฐ์ดˆ 5

์จ๋ฐ 2023. 2. 26. 10:27

โœ๐Ÿป ๋ฐฐ์šด์ 

 

ssh ํ‚ค๋ฅผ ํ†ตํ•œ ์›๊ฒฉ ์ ‘์†์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , mariaDB ์— sql, ํŒŒ์ด์ฌ์—์„œ์˜ sql ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๊ณ  ๊ทธ๋ฅผ ์‘์šฉํ•˜์—ฌ ํ•œ๊ตญ ์ฃผ์‹ ์ •๋ณด์™€ ๋„ค์ด๋ฒ„ ์ฃผ์‹ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ฉ์น˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

 

 


 

 

 

๋“ค์–ด๊ฐ€๋ฉฐ

 

m2 ํ™˜๊ฒฝ ์„ธํŒ… ๊ธฐ์ค€์œผ๋กœ ๊ธ€์„ ์ž‘์„ฑํ•˜์˜€์œผ๋‹ˆ ์œ ์˜ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

ssh ๋กœ PC ์— ์šฐ๋ถ„ํˆฌ ์—ฐ๊ฒฐํ•˜๊ธฐ

 

 

๋งฅ์€ ssh ๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ, ssh ์˜ ๊ธฐ์ดˆ ์„ธํŒ…๋งŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ๋˜์–ด์ค„ ์šฐ๋ถ„ํˆฌ์— ssh ์„ค์ •๋„ ๋งˆ์น˜๋ฉด, ๊ฐ„๋‹จํ•œ ์ž…๋ ฅ์œผ๋กœ ์šฐ๋ถ„ํˆฌ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

ssh [user_name]@[ubuntu_ip]

 

 

๋งฅ๋ถ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•˜๋ฉด, ๋งฅ๋ถ์—์„œ๋„ ์šฐ๋ถ„ํˆฌ ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

MariaDB ์„ธํŒ…

 

 

์šฐ๋ถ„ํˆฌ ์„œ๋ฒ„์—์„œ mariaDB ๋ฅผ ๋‹ค๋ฃฐ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ถ„ํˆฌ์— mariaDB ๋ฅผ ์„ค์ •ํ•˜๊ธฐ๋กœ ํ•œ๋‹ค.  

 

 

sudo apt install mariadb-server

sudo mysql_secure_installation

 

 

์ดˆ๊ธฐ ์„ธํŒ…์„ ์™„๋ฃŒํ•˜๊ณ , mariadb ์„œ๋ฒ„๊ฐ€ ์ž˜ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

sudo service mariadb status

 

 

์ฒซ ์„ค์น˜์ธ ๊ฒฝ์šฐ, ์ž๋™์œผ๋กœ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ๋˜์–ด ์žˆ๊ฒŒ ๋œ๋‹ค.

 

๋งŒ์•ฝ, ์šฐ๋ถ„ํˆฌ ์‹œ์Šคํ…œ์„ ์ข…๋ฃŒํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด

 

 

sudo shutdown -h now

 

 

๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์‹œ์Šคํ…œ ์ ‘์†์„ ๋Š๊ณ  ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋‚˜์ค‘์— DB ์ ‘์†์„ ๋‹ค์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด,

 

 

mysql -u root -p

 

 

๋ฅผ ์ž…๋ ฅํ•˜๋ฉด mariadb ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

CREATE USER 'user_name'@'%' IDENTIFIED BY 'pass_word';
GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'%';

 

 

์ ‘์†ํ•œ ํ›„, mariadb ์˜ ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ๊ณ„์ •์— ๋ชจ๋“  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ค€๋‹ค.

 

 

sudo systemctl enable mariadb

 

 

์ด๋ ‡๊ฒŒ ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ์ผฐ์„ ๋•Œ ์ž๋™์œผ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ช…๋ น์–ด๋„ ์žˆ๋‹ค.

 

 

 

 

pymysql

 

 

ํŒŒ์ด์ฌ์—๋Š” ํŒŒ์ด์ฌ์œผ๋กœ๋„ mysql ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก, pymysql ์ด๋ผ๋Š” ๋ชจ๋“ˆ์ด ์žˆ๋‹ค.

 

import pymysql # ์—†์œผ๋ฉด pip install pymysql

 

์ด ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฐ๋ถ„ํˆฌ์— ์„ค์ •ํ•œ DB ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

 

try:
    con = pymysql.conect(host='ip์ฃผ์†Œ', user='mariadb ๊ณ„์ • ์ด๋ฆ„', 
    password='mariadb ๋น„๋ฒˆ', 
    charset='utf8', db='db ์ด๋ฆ„')
   	
    cur = con.cursor()
    
except Exception as e:
	print("error -> ", e)

 

db ๊ณ„์ •์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ด๋‘๊ณ , ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น db ์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

(์ž์ฃผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, dbconnect.py ์˜ connection ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด ๋‘์ž.)

 

 

 

cur.execute("""CREATE TABLE 'test' (
    `InvoiceNo` VARCHAR(30), 
    `StockCode` VARCHAR(30),
    `Description` VARCHAR(255)
)""")

 

๊ทธ ํ›„, cur ์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ sql ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

(๊ทธ๋ƒฅ mariadb ์—์„œ ๋ฐ”๋กœ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•ด๋„ ๋œ๋‹ค.)

 

 

sql = "INSERT INTO new_table VALUES(%s, %s, %s, %s, %s, %s, %s, %s)"

with open("./data/dataset3.csv", "r", encoding='utf-8') as f:
    for idx, line in tqdm(enumerate(f)):
        if idx != 0:
            cur.execute(sql, [x.replace('"', "") for x in line.split(";")])

 

์ƒˆ๋กœ์šด ํ…Œ์ด๋ธ”์— ์–ด๋–ค ํ˜•์‹์œผ๋กœ ๋„ฃ์„ ๊ฒƒ์ธ์ง€ ์„ค์ •ํ•˜๊ณ , cur ์—๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

con.commit()

 

์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด db ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š์œผ๋‹ˆ, ๋งˆ์ง€๋ง‰ ๊ณผ์ •์— ๊ผญ ์‹คํ–‰ํ•ด์ฃผ์ž.

 

 

cur.fetchall()

 

 

์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊บผ๋‚ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

ํ•œ๊ตญ ์ฃผ์‹ ์ •๋ณด ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์™€์„œ DB์— ์ €์žฅํ•˜๊ธฐ

 

 

ํ•œ๊ตญ ์ฃผ์‹ ์ •๋ณด ๋ฐ์ดํ„ฐ ์‹œ์Šคํ…œ ํ™ˆํŽ˜์ด์ง€์—์„œ ์ฃผ์‹ ์ „์ข…๋ชฉ์˜ ๊ธฐ๋ณธ ์ •๋ณด ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€ ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ‚จ ํ›„, ์กฐํšŒ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค. 

 

 

 

๋„คํŠธ์›Œํฌ ํŽ˜์ด์ง€์— getJsonData.cmd ๊ฐ€ ๋ณด์ธ๋‹ค.

 

request url ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , method ๋ฐฉ์‹์ด post ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๊ทธ๋ฆฌ๊ณ  payload ์— ๋“ค์–ด๊ฐ€๋ฉด ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

krx_url = "http://data.krx.co.kr/comm/bldAttendant/getJsonData.cmd"

payload = {"bld"  : "dbms/MDC/STAT/standard/MDCSTAT01901",
            "locale"  : "ko_KR",
            "mktId"  : "ALL",
            "share"  : "1",
            "csvxls_isNo"  : "false",}

r = requests.post(krx_url, data=payload)

rt = r.json()

 

 

rt ๋ฅผ ํ™•์ธํ•˜๋ฉด ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ dictionary ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

CREATE TABLE KRX(
    ISU_CD VARCHAR(200),
    ISU_SRT_CD VARCHAR(200),
    ISU_NM VARCHAR(200),
    ISU_ABBRV VARCHAR(200), ISU_ENG_NM VARCHAR(200),
    LIST_DD VARCHAR(200),
    MKT_TP_NM VARCHAR(200), SECUGRP_NM VARCHAR(200), SECT_TP_NM VARCHAR(200), KIND_STKCERT_TP_NM VARCHAR(200), PARVAL VARCHAR(200),
    LIST_SHRS VARCHAR(200),
    PRIMARY KEY(ISU_SRT_CD)
);

 

mariadb ์— KRX ๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

 

sql = "INSERT INTO KRX VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"

for data in rt['OutBlock_1']:
    try:
        cur.execute(sql, list(data.values())
    except:
    	pass

con.commit()

 

 

๊ทธ ํ›„, ํŒŒ์ด์ฌ์„ ํ†ตํ•ด KRX ํ…Œ์ด๋ธ”์— ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

 

 

 

import pandas as pd

krx = pd.read_sql_queary("""SELECT * FROM KRX WHERE MKT_TP_NM IN ('KOSPI', 'KOSDAQ')""", con)

# 1๋ฒˆ ํ–‰๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋‹ค๋ณด๋Š”๋ฐ, ํŠน์ • ์—ด๋งŒ ๋ณด๊ธฐ
krx.loc[1:, ['ISU_D', 'ISU_NM', 'ISU_SRT_CD']]

# 0๋ฒˆ ํ–‰๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋‹ค๋ณด๋Š”๋ฐ, 1,2,3์—ด ๋งŒ ๋ณด๊ธฐ
krx.iloc[0:, [1, 2, 3]]


# ๋ณดํ†ต์ฃผ๋งŒ ๋ณด๊ธฐ
mask = krx['KIND_STKCERT_TP_NM'] == '๋ณดํ†ต์ฃผ'
krx[mask]

# ๋ช‡๊ฐœ์˜ ํ–‰๊ณผ ์—ด๋กœ ์ด๋ฃจ์–ด์ง„์ง€ ํ™•์ธ
krx[mask].shape

# ํ–‰ ๋ณด๊ธฐ
krx[mask].columns

 

 

ํŒŒ์ด์ฌ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜์—ฌ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

 

 

 

 

๊ฒฐ์ธก์น˜ ์ œ๊ฑฐ

 

 

DataFrame ํ˜•์‹์ธ ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ์— Nan ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

๊ทธ ๋•Œ, ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ dropna() ์ด๋‹ค.

 

pd.read_html(r.text)[index].dropna()

 

 

๊ฒฐ์ธก์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, dropna ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Nan ๊ฐ’์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ œ๊ฑฐ๋œ๋‹ค.

 

 

 

 

 

๋„ค์ด๋ฒ„ ์ฃผ์‹ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์™€์„œ ์‚ผ์„ฑ์ „์ž ์ฃผ์‹ ์ •๋ณด DB์— ์ €์žฅํ•˜๊ธฐ

 

 

๋„ค์ด๋ฒ„ ์ฃผ์‹์€ get ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

requtests ์˜ get ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  read_html ๋กœ ๋งŒ๋“ ๋‹ค.

 

 

import requests
import pandas as pd

def get_stock(code, page):
    naver_url = "https://finance.naver.com/item/sise_day.naver?code={}&page={}"
    head = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"}
    r= requests.get(naver_url.format(code,page),headers=head)
    return pd.read_html(r.text)[0].dropna()

 

 

์—ฌ๊ธฐ์„œ head ๋Š” ํ•ญ์ƒ ๊ณ ์ •๊ฐ’์œผ๋กœ, ๊ทธ๋ƒฅ ๋“ค์–ด๊ฐ€๋ฉด ํŒŒ์ด์ฌ์˜ ์ ‘๊ทผ์„ ๋ง‰๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ head ๋ฅผ ๊ธฐ์–ตํ•ด๋‘์–ด์•ผ ํ•œ๋‹ค.

ํฌ๋กฌ์„ ์‚ฌ์šฉํ•ด์•ผํ•  ๋•Œ, head ๋Š” ์ฝ”๋“œ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

 

์ฐธ๊ณ ๋กœ ์œ„ ์ฝ”๋“œ๋Š” ๋”ฐ๋กœ naver.py ๋ผ๋Š” ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด ์ง„ํ–‰ํ–ˆ๋‹ค.

 

 

from naver import get_stock # naver.py ์˜ get_stock ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
import numpy as np

from dbconnect import connection # dbconnect.py ์˜ connection ๋ถˆ๋Ÿฌ์˜ค๊ธฐ


samsung = get_stock("005930", 2) # 2ํŽ˜์ด์ง€ ์‚ผ์ „ ์ฃผ์‹ ๊ฐ€์ ธ์˜ค๊ธฐ

samsung.columns # df ์—ด ๊ฐ’ ํ™•์ธ

samsung.info # df ๋ฐ์ดํ„ฐ ํ™•์ธ

 

 

์‚ผ์„ฑ ์ „์ž์˜ ์ฃผ์‹ ์ •๋ณด ๋ฐ์ดํ„ฐ๋ฅผ dataframe ์œผ๋กœ ๊ฐ€์ ธ์™”๋‹ค.

 

 

# ๋ฐ์ดํ„ฐ๋ฅผ int64 ๋กœ ๋ณ€ํ™˜
samsung[['์ข…๊ฐ€', '์ „์ผ๋น„', '์‹œ๊ฐ€', '๊ณ ๊ฐ€', '์ €๊ฐ€', '๊ฑฐ๋ž˜๋Ÿ‰']] = \
samsung[['์ข…๊ฐ€', '์ „์ผ๋น„', '์‹œ๊ฐ€', '๊ณ ๊ฐ€', '์ €๊ฐ€', '๊ฑฐ๋ž˜๋Ÿ‰']].astype(np.int64)

# ๊ฑฐ๋ž˜ ๊ธˆ์•ก column ์ž๋™์œผ๋กœ ์ƒ์„ฑ(๊ฐ’ ๊ณ„์‚ฐ ํฌํ•จ)
samsung['๊ฑฐ๋ž˜๊ธˆ์•ก'] = samsung['์ข…๊ฐ€'] * samsung['๊ฑฐ๋ž˜๋Ÿ‰']

# ์ข…๋ชฉ column ์ž๋™์œผ๋กœ ์ƒ์„ฑ(๊ฐ’ ํฌํ•จ)
samsung['์ข…๋ชฉ'] = '005930'

# ๊ธฐ์กด samsung ์—์„œ column ์ถ”๊ฐ€ํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋ฐ”๊ฟˆ
samsung = samsung[['์ข…๋ชฉ', '๋‚ ์งœ', '์ข…๊ฐ€', '์ „์ผ๋น„', '์‹œ๊ฐ€', '๊ณ ๊ฐ€', '์ €๊ฐ€', '๊ฑฐ๋ž˜๋Ÿ‰', '๊ฑฐ๋ž˜๊ธˆ์•ก',]]

 

์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“  ๊ฑฐ๋ž˜ ๊ธˆ์•ก๊ณผ ์ข…๋ชฉ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•œ df ๋กœ ๋ฐ”๊พผ๋‹ค.

 

 

create table stock_day( 
    symbol varchar(200), 
    stock_date date, 
    close bigint,
    `before` bigint, 
    open bigint, 
    high bigint, 
    low bigint,
    vol bigint,
    money bigint,
    primary key(symbol,stock_date)
);

 

์ข…๋ชฉ -> symbol, ๋‚ ์งœ -> stock_date, ์ข…๊ฐ€ -> close, ์ „์ผ๋น„ -> before, ์‹œ๊ฐ€ -> open, ๊ณ ๊ฐ€ -> high, ์ €๊ฐ€ -> low, ๊ฑฐ๋ž˜๋Ÿ‰ -> vol, ๊ฑฐ๋ž˜๊ธˆ์•ก -> money ๋กœ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ์ข…๋ชฉ๊ณผ ๋‚ ์งœ๊ฐ€ primary key ๋กœ ์ค‘๋ณต๋œ ๊ฐ’์ด ์—†๋„๋ก ์ €์žฅํ•œ๋‹ค.

(์ฐธ๊ณ ๋กœ, `before` ์— ๋ฅผ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์„œ ์ €๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, before_ ๋กœ ํ‘œํ˜„ํ•ด๋„ ํ•ด๊ฒฐ์ด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.)

 

 

# stock_day ํ…Œ์ด๋ธ” ๊ฐ’ ๋„ฃ๊ธฐ
sql = "INSERT INTO stock_day VALUES (%s , %s , %s , %s , %s , %s , %s , %s , %s)"

# db ์—ฐ๊ฒฐ
cur, con = connection();

# db ์— sql ๋ฌธ์„ ํ†ตํ•ด ๋„ฃ๊ธฐ
for idx, row in samsung.iterrows():
    try:
        cur.execute(sql,list(row.values))
    except:
        pass

con.commit()

 

stock_day ํ…Œ์ด๋ธ”์— ์‚ผ์„ฑ์ „์ž ์ฃผ์‹ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

 

 

 

ํ•œ๊ตญ ์ฃผ์‹ ์ •๋ณด์™€ ๋„ค์ด๋ฒ„ ์ฃผ์‹ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํ…Œ์ด๋ธ” ํ•ฉ์น˜๊ธฐ

 

 

์‚ผ์„ฑ ์ „์ž ์ฃผ์‹ ์ •๋ณด ๊ธฐ๋ฐ˜์œผ๋กœ, ํ•œ๊ตญ ์ฃผ์‹ ์ •๋ณด์™€ ๋„ค์ด๋ฒ„ ์ฃผ์‹ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ํ…Œ์ด๋ธ”์„ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.

 

SELECT *
FROM stock_day AS b
JOIN KRX AS c
ON c.ISU_SRT_CD = b.symbol;

 

 

์ด์ œ, stock_day ์™€ KRX ํ…Œ์ด๋ธ”์„ join ํ•˜๋ฉด, ๋‘ ํ…Œ์ด๋ธ”์˜ ์ข…๋ชฉ ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ฉ์ณ์ง„ ํ…Œ์ด๋ธ”์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

'Python > [๊ธฐ์ดˆ ๊ฐ•์˜ ์ •๋ฆฌ]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

python ๊ธฐ์ดˆ 7  (0) 2023.02.26
python ๊ธฐ์ดˆ 6  (0) 2023.02.26
python ๊ธฐ์ดˆ 4  (1) 2023.02.25
python ๊ธฐ์ดˆ 3  (0) 2023.02.24
Python ๊ธฐ์ดˆ 2  (0) 2023.02.15