Coder Social home page Coder Social logo

quant_py's People

Contributors

hyunyulhenry avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

quant_py's Issues

p.372 riskfolio의 plot_bar 에러

w = port.optimization(model=model, rm=rm, obj=obj, rf=rf, l=l, hist=hist)

가중치 계산 코드까지는 실행되어서 결과가 데이터프레임으로 잘 저장이 되지만

rp.plot_bar(w=w)

코드를 실행하면

AttributeError: 'DataFrame' object has no attribute 'append'
오류가 발생합니다.

riskfolio-lib 의 3.3.0 버전과 최신버전인 4.4.0 모두 같은 에러가 발생하였고

해당 오류에 대해 검색해보았을땐
pandas 2.0 버전 부터 append 기능이 사라졌기 때문이라고 알게되어
pandas 1.3.1 버전으로 다운그레이드하여 실행해보았지만
이렇게 하니 yfinance와 버전이 맞지 않는것 같아 yf.download가 실행되지 않았습니다.

어떻게 해결 할 수 있을까요??

global 주가 다운받기 에서 try: except: 코드 부분 질문입니다.

책 페이지 282 에서
try: except: 부분 이해가 안가서 질문드립니다.

이페이 코드 실행하면
error_list 안에 다운로드 성공한 ticker 들이 있고, 다운로드 실패한 ticker 들은 안보입니다.

코드는 맞는것 같은데 이해가 안갑니다.
부탁드립니다^^

질문입니다[수정주가 크롤링]

책과 유튜브 영상을 매우 잘보고 있습니다. 감사합니다.
책 p242에 나오는
engine = create_engine(~~~)
query = """
select * from kor_ticker
where 기준일 = (select max(기준일) from kor_ticker)
and 종목구분 = '보통주';
"""
ticker_list = pd.read_sql(query, con=engine)
engine.dispose()

해당 코드 실행시
'Connection' object has no attribute 'exec_driver_sql' 메세지가 나오는데 구글링을 해봐도 모르겠어서 문의 드립니다

10.5.1 재무제표 다운로드 질문

248쪽 파이썬 코드에서 i가 돌아가면서 url이 바뀌고 pd.read_html()로 계속 크롤링을 하는데 마지막 줄에 list comprehension으로 쓴 반복문에서 time.sleep()을 쓰지 않아도 되나요?

파이썬 sql 연결 과정

import pymysql

con = pymysql.connect(
user= 'root',
passwd= '1234',
host= '127.0.0.1',
db= 'shop',
charset= 'utf8'
)
이 부분에서
RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods 이런 오류가 발생합니다.
cryptography를 설치해야 한다고 해서 프롬프트에서 설치하였는데,
프롬프트에선 cryptography가 이미 설치되었다고 뜨는데 vscode에서는 계속 위 에러가 발생합니다.
혹시 이 문제와 관련하여 해결방안이 있을까요?
감사합니다.

P227질문드립니다. 간단한건데 왜ㅠㅠ

mktId : 'STK',
... trdDd : 20230714,
... money : '1',
... csvxls_isNo : 'false',
... name : 'fileDown',
... url : 'dbms/MDC/STAT/standard/MDCSTAT03901'
... }
Traceback (most recent call last):
File "", line 2, in
NameError: name 'mktId' is not defined

고유 번호 다운로드 문의

고유 번호 다운로드 문의 드려요
특정 시점 부터 안되는 게 많네요 ㅠㅠ

하기와 같이 실행했는데, import Error 가 발생하네요...
코딩상 문제인지 패키지 문제인지 몰라 문의드립니다.

ImportError: Unable to find a usable engine; tried using: 'sqlalchemy'.
A suitable version of sqlalchemy is required for sql I/O support.
Trying to import the above resulted in these errors:

  • Pandas requires version '1.4.16' or newer of 'sqlalchemy' (version '1.4.7' currently installed).

import keyring
import requests as rq
from io import BytesIO
import zipfile

codezip_url = f'''https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=?????????'''
codezip_data = rq.get(codezip_url)

codezip_file = zipfile.ZipFile(BytesIO(codezip_data.content))

import xmltodict
import json
import pandas as pd

code_data = codezip_file.read('CORPCODE.xml').decode('utf-8')
data_odict = xmltodict.parse(code_data)
data_dict = json.loads(json.dumps(data_odict))
data = data_dict.get('result').get('list')
corp_list = pd.DataFrame(data)

import pymysql
from sqlalchemy import create_engine

corp_list = corp_list[~corp_list.stock_code.isin(
[None])].reset_index(drop=True)

engine = create_engine('mysql+pymysql://root:[email protected]:3306/stock_db')
con = pymysql.connect(user='root',
passwd='???????',
host='127.0.0.1',
db='stock_db',
charset='utf8')
mycursor = con.cursor()

corp_list.to_sql(name='dart_code', con=engine, index=True, if_exists='replace')

engine.dispose()
con.close()

p224~p228 결과문의드립니다.

한국거래소 사이트에서 산업별 현황 데이터를 저장하는 예제를 수행하면 아래와 같은 결과가 나옵니다.
(테이블 제목만 나오고 내용이 출력되지 않습니다.)
잘은 모르겠지만, referer 정책이 바뀌거나 뭔가 제 쪽의 접근을 봇으로 인식한건 아닐까 싶긴한데..
제가 초보라 저자님께 문의드립니다.

결과

9.1.1 절 코드 실행시 selenium.common.exceptions.ElementNotInteractableException 에러 발생

driver.find_element(By.XPATH, value = '//*[@id="snb"]/div[2]/ul/li[2]/div/div/a[2]').click() 코드를 반복해서 실행하다보면
아래와 같은 에러가 빈번하게 나옵니다. 효과적으로 해결할 수 있는 방법이 있을까요?

 driver.find_element(By.XPATH, value = '//*[@id="snb"]/div[2]/ul/li[2]/div/div/a[2]').click()
  File "C:\Users\kimha\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\remote\webelement.py", line 93, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Users\kimha\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\remote\webelement.py", line 403, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\kimha\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute
    self.error_handler.check_response(response)
  File "C:\Users\kimha\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  (Session info: chrome=110.0.5481.178)
Stacktrace:
Backtrace:
        (No symbol) [0x010A37D3]
        (No symbol) [0x01038B81]
        (No symbol) [0x00F3B230]
        (No symbol) [0x00F6E337]
        (No symbol) [0x00F63253]
        (No symbol) [0x00F8B41C]
        (No symbol) [0x00F62B96]
        (No symbol) [0x00F8B774]
        (No symbol) [0x00FA1215]
        (No symbol) [0x00F8B216]
        (No symbol) [0x00F60D97]
        (No symbol) [0x00F6253D]
        GetHandleVerifier [0x0131ABF2+2510930]
        GetHandleVerifier [0x01348EC1+2700065]
        GetHandleVerifier [0x0134C86C+2714828]
        GetHandleVerifier [0x01153480+645344]
        (No symbol) [0x01040FD2]
        (No symbol) [0x01046C68]
        (No symbol) [0x01046D4B]
        (No symbol) [0x01050D6B]
        BaseThreadInitThunk [0x76857D69+25]
        RtlInitializeExceptionChain [0x7732BB9B+107]
        RtlClearBits [0x7732BB1F+191]

p.368 페이지 문의

안녕하세요 만들어주신 교재 너무 잘 보고 있습니다.

14장 포트폴리오 p.368 에 price = pd.read_sql('select * from sample_etf;', con = engine) db에서 저장한 데이터를 불러와 사용하는 것으로 나와있는데
해당 변수인 price 는 사용이 안되고 바로 직전에 dataframe 형태인 prices 변수만 활용이 되더라구요...

혹시 다른 이유가 있는 것인지 궁금합니다.

price로 하려면 어떤 구문을 더 추가해야되는지 궁금합니다.(오류가 발생함)

질문잇습니다

재무재표 크롤링에서 코드가 잘못된 부분이 있어 문의드립니다. 크롤링해오는 사이트의 날짜표시방식이 바뀐거같습니다.

2024-03 ▶ 2024/03 이런식으로 바뀌어서 제대로 크롤링을 해오지 못하는 문제가있네요 아래와같이 바꿔서 했더니 해결했습니다.

def clean_fs(df, ticker, frequency):

df = df[~df.loc[:, ~df.columns.isin(['계정'])].isna().all(axis=1)]
df = df.drop_duplicates(['계정'], keep='first')
df = pd.melt(df, id_vars='계정', var_name='기준일', value_name='값')
df = df[~pd.isnull(df['값'])]
df['계정'] = df['계정'].replace({'계산에 참여한 계정 펼치기': ''}, regex=True)
df['기준일'] = pd.to_datetime(df['기준일'],
                           format='%Y-%m') + pd.tseries.offsets.MonthEnd()
df['종목코드'] = ticker
df['공시구분'] = frequency

return df

변경 format='%Y/%m') + pd.tseries.offsets.MonthEnd()

keyring.get_password 관련 질문드립니다.

import keyring

keyring.set_password('dart_api_key', 'User Name', 'Password')

api_key = keyring.get_password('dart_api_key', 'Henry')
codezip_url = f'''https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key={api_key}'''

안녕하세요
상기처럼
keyring.set_password 한 후에
api_key = keyring.get_password 로 받아오는 데,
그렇게 되면 api_key = 'Password' 값이 되서

codezip_url = f'''https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key={api_key}'''
상기 값이 제대로 안먹는게 아닌가요?
계속 안되어서
{api_key} ==> 'dart_api_key'를 직접 입력해서 실행하니 먹히던데...
제가 잘못 이해하고 있는건지 문의드립니다.
감사합니다.

pymysql, tqdm 패키지 사용에 대하여...

도서와 인터넷 강의를 통하여 잘 학습하다.

Chapter 10 국내 주식 데이터 수집의 import pymysql(234 Page)부터 Spyder를 실행하면
"ModuleNotFoundError: No module named 'pymysql'"를 발생하여
Anaconda Prompt로 pip install pymysql하면 "Requirement already satisfied: pymysql in c:\users\david\appdata\roaming\python\python310\site-packages (1.0.3)"로 되어 있습니다.

아주 기초적인 부분일지 모르겠으나 어떠한 이유인지 찾을 수 없군요.

책 P445. 모델 포트폴리오

모델 포트폴리오의 목표수량을 계산하는 과정에서 아래와 같은 에러가 발생합니다.
line 141, in get_price
price = res.json()['output']['stck_prpr']
KeyError: 'output'

Line 141은 아래와 같으며,

def get_price(ticker):

path = "uapi/domestic-stock/v1/quotations/inquire-price"

url = f"{url_base}/{path}"

headers = {

"Content-Type": "application/json",

"authorization": f"Bearer {access_token}",

"appKey": app_key,

"appSecret": app_secret,

"tr_id": "FHKST01010100"

}

params = {"fid_cond_mrkt_div_code": "J", "fid_input_iscd": ticker}

res = requests.get(url, headers=headers, params=params)

(Line141) # price = res.json()['output']['stck_prpr']

price = int(price)

time.sleep(0.1)

return price

책 P445 한줄 씩 실행하며 검증해 보니. (현재가 확인 실행시) get_price (Line141) 에러가 발생하는데, 해결 방법 부탁드립니다.

현재가 확인

target['현재가'] = target.apply(lambda x: get_price(x.종목코드), axis=1)

파이썬에서 sql 연결하기

import pymysql

con = pymysql.connect(
user='root',
passwd='1234',
host='127.0.0.1',
db='shop',
charset='utf8'
)
파이썬에서 sql db에 접속하는데 위 쿼리를 실행하는데
아래같은 deny 메시지가 뜨네요.

OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

어떻게 해결할 수 있을련지요..

dart 고유 번호 불러오기 관련 질문드립니다.

import keyring

keyring.set_password('xxxxxxxxxxxx','email주소','password')

import keyring
import requests as rq
from io import BytesIO
import zipfile

api_key = keyring.get_password('xxxxxxxxxxxx', 'Kim')
codezip_url = f'''https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key={api_key}'''
codezip_data = rq.get(codezip_url)
print(codezip_data.headers)

상기와 같이 따라하면 하기와 같이 나와 책과 다르게 나오네요
{'Connection': 'keep-alive', 'Set-Cookie': 'WMONID=gnNui8TZXqd; Expires=Wed, 11-Sep-2024 16:41:10 GMT; Path=/', 'Date': 'Tue, 12 Sep 2023 07:41:10 GMT', 'Content-Type': 'application/xml;charset=UTF-8', 'Transfer-Encoding': 'chunked'}

api 주소만 따로 떼서 f stirng으로 넣지않고 바로 넣어 url 불러오면 책과 정상적으로 나오는데...
어디가 잘못된건지 알 수 있을까요?

안녕하세요 교수님. 질문드립니다.

여기에 질문을 올리는 걸 모르고 유튜브에 올려놓았네요.

영상은 잘 보고 있습니다. 좋은 교육 영상 감사드립니다. 교수님 영상을 보고 따라하다가

WICS 기준 섹터정보 크롤링 파트에서 biz_day를 생성하기 위해 다음과 같은 코드를 작성했는데 경로가 잘못되었다는 걸로 계속 나옵니다.
제가 전공자가 아니다보니 생각보다 쉽지 않군요.

url = 'https://www.wiseindex.com/index#/G10'
data = rq.get(url)
data_html = BeautifulSoup(data.content)
parse_day = data_html.select_one(
'#ng-app > div > div > div.col-xs-9.contentsBox > div.ng-scope > div:nth-child(3) > input').text

시간 괜찮으실때 답변 부탁드리겠습니다. 감사합니다.

p255 전 종목 재무제표 크롤링 질문드립니다.

p255 전 종목 재무제표 크롤링 질문드립니다.

해당 파이썬 코드 입력하여 db 저장하면,
종목코드가 20,40,50,70 까지만 저장되고 그 이후는 저장이 안되는데,
어느 부분이 잘못 되었는지 문의드립니다.

여기 깃허브에 올라온 코드 복붙해도 같은 현상이라서... 답변 부탁드려요

해외주식(미국) delisted stock 리스트는 어떻게 알 수 있을까요?

안녕하세요, 좋은 책 잘 보고 있습니다.

책 265페이지에서 Tiingo의 경우 상장폐지된 종목을 커버한다고 되어 있는데, (미국 주식에 한해서여도 상관없습니다) documentation을 봐도 잘 모르겠어서 질문드립니다.

  • 혹시 상장폐지된 종목들의 리스트를 얻을 수 있는 방법이 있나요? 가능하다면 (TICKER, 상장폐지일) 정보를 얻을 수 있으면 좋겠습니다.
  • 티커 변경 이력은 어디서 얻을 수 있을까요? (ex. FB -> META)

감사합니다.

교재 p208 검색창 접근 오류 문제

안녕하세요
2가지 질문 드립니다.

  1. 뒤로가기 실행을 위해 driver.back() 명령문을 실행하면 에러는 나지 않는데 열었던 네이버 '뉴스' 페이지에서 naver home 으로 넘어가지 않습니다. 네어비 홈에서 뉴스로 진입할 때에 같은 페이지가 '뉴스'로 변경 되는 것이 아니고 뉴스 탭이 별도로 생기면서 뒤로가기 버튼이 활성화되지 않아서 인 것 같은데 해결 방법은 무엇인지요

  2. 검생창으로 실행하는 명령
    driver.find_element(By.CLASS_NAME, value = 'input_text').send_keys('퀀트 투자 포트폴리오 만들기') 을 실행하면 다음과 같은 에러가 발생합니다.
    NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".input_text"}
    (Session info: chrome=115.0.5790.171); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception

워낙 초보라서 해당 페이지에 가서 확인해 보아도 이해가 가지 않아 질문 드립니다. 해결 방법을 부탁드립니다.

모멘텀 포트폴리오 구하기 324페이지 질문입니다.

안녕하세요 선생님.
코드를 하나하나 따라하다 보니 궁금증이 많아 자꾸 질문의 글을 드립니다.

324페이지의 모멘텀 포트폴리오 코드를 따라하다 return 결괏값들이 수익률이 너무 괴리가 있어서 보니 다음과 같은 문제에 부딛쳤습니다.

과거 데이터 2022년12월28일 인바이오젠(종가 16320원) 아이오케이(종가 9061원) 시티랩스(9589원) 이었습니다. 그런데, 이 종목들이 전부 감자를 하여 과거 주가 데이터를 받아보니 수정주가로 되어 인바이오(816원) 아이오케이(425원) 시티랩스(592원) 으로 되어 2023년12월29일 주가로 수익률을 계산하니 전부 수익률 상위권 입니다.

현실은 기업이 감자를 할 정도로 나쁜 기업의 수익률이 수정주가로 인해 수익률 상위권으로 나타나면 모멘텀으로 투자를 했을때 의미가 없을거 같습니다. 이렇듯 과거 주가는 수정주가로 인해 감자전 주가를 반영하지 못해 모멘텀 순위가 바르게 나타나지 않을때 어떻게 하면 모멘텀 투자에 부합되는 코딩방법이 있는지 알고 싶습니다.

언제나 건승 하시고, 앞으로도 좋은 책 출간을 바랍니다.

234p sql과 연결 부분 질문입니다.

책 내용대로 따라가고 있는데 해당 부분의 에러가 해결되지 않아 질문드립니다. 어떤 부분이 잘못된걸까요? sql에도 테이블이 잘 나오고 있고, kor_ticker 에도 책과 동일한 테이블이 들어있는데 계속 아래 에러가 뜨는 상황입니다.

image
image
image

안녕하세요 수업을 열심히 따라가고 있는 초보입니다

재무제표 크롤링에서
df['기준일'] = pd.to_datetime(df['기준일'],
format='%Y-%m')
이 부분을 실행하게 되면
ValueError: time data "2020/12" doesn't match format "%Y-%m", at position 0. You might want to try:
- passing format if your strings have a consistent format;
- passing format='ISO8601' if your strings are all ISO8601 but not necessarily in exactly the same format;
- passing format='mixed', and the format will be inferred for each element individually. You might want to use dayfirst alongside this.

다음과 같은 오류가 뜹니다 해결할 수 있는 방법이 있는지 궁금합니다!

판다스 최신버전에서 groupby와 agg() 에러 문의드려요

안녕하세요..

교재 99페이지와 100페이지에 나와있는

df.groupby(['species','sex']).mean() 코드와

df.groupby(['species']).agg(['max','min'])코드가 판다스 최신버전에서는 에러가 나오는데 해결 방법이 있을까요?

아마 판다스 버전 2.0 이하에서는 잘 되는것 같은데 그 이상 버전에서는 에러가 나네요..

p228 sector_stk 만들기

안녕하세요, p228 위에 코딩 (3)을 실행할 시 저는 인코딩 에러가 뜨는데 왜 그럴까요?

sector_stk = pd.read_csv(BytesIO(down_sector_stk.content), encoding = 'euc-kr')
=>
'UnicodeDecodeError: 'euc_kr' codec can't decode byte 0xef in position 10: illegal multibyte sequence'

p.388 yfinance 질문드립니다

import talib
import yfinance as yf

stock_data = yf.download('^GSPC')

다음 코드를 실행하면 결과가 다음과 같이 나옵니다.
[100%**] 1 of 1 completed
1 Failed download:
['^GSPC']: TypeError('super(type, obj): obj must be an instance or subtype of type')

이렇게 나오고 stock_data 에 값이 저장되지 않습니다.
기초적인 것인데 어디서 잘못된건지 모르겠습니다..

책에서는 조금 다른 방법으로 데이터를 받아오길래 다른 방법으로 시도해보았습니다.
import pandas_datareader as web

stock_data = web.DataReader('^GSPC', 'yahoo')

결과:
Traceback (most recent call last):

Input In [25] in <cell line: 3>
stock_data = web.DataReader('^GSPC', 'yahoo')

File ~\anaconda3\lib\site-packages\pandas\util_decorators.py:207 in wrapper
return func(*args, **kwargs)

File ~\anaconda3\lib\site-packages\pandas_datareader\data.py:370 in DataReader
return YahooDailyReader(

File ~\anaconda3\lib\site-packages\pandas_datareader\base.py:253 in read
df = self._read_one_data(self.url, params=self._get_params(self.symbols))

File ~\anaconda3\lib\site-packages\pandas_datareader\yahoo\daily.py:153 in _read_one_data
data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"]

TypeError: string indices must be integers
이처럼 다른방법도 오류가 나네요..

p.347 오타

p.347 부분에서

select * from kor_setor 이후
where 기준일 = (select max(기준일) from kor_ticker) ;

해당 부분에서
from kor_sector 로 변경해야 될 듯합니다.

문법에러 문의 드립니다.

책 p231에
코스피 코스닥 데이터 합치기에서 kor_ticker = pd.merge(krx_sector,
krx_ind,
on=krx_sector.columns.intersection(
krx_ind.columns).tolist(),
how='outer')
kor_ticker.head()를 실행하면 "문법에러"가 나타납니다. 어떻게된 것인지 가르쳐 주십시요

'list' object has no attribute 'shape' 에러입니다

스크린샷 2023-03-30 154428

요렇게 나옵니다. 위험균형 포트폴리오까지는 잘 됐는데 위험 예산포트폴리오만 안됩니다 ㅠ
파이썬 업데이트도 해보고 array로 바꿔서도 해보고
갈아엎고 아예 처음부터 새로운 노트북 만들어서 다시해도 안되네요 ㅠ

교재 오타..

  1. p85, result = pd.merge(left, right, on="key", how="right")
    -. 오류 -> 결과는 how="left" 결과
    -. 수정 -> result = pd.merge(left, right, on="key", how="left")

  2. p86, result = pd.merge(left, right, on="key", how="left")
    -. 오류 -> 결과는 "right" 결과
    -. 수정 -> esult = pd.merge(left, right, on="key", how="right")

질문드립니다..

p.244~245에 나오는 코드 관련 질문입니다.

import pymysql
from sqlalchemy import create_engine
import pandas as pd
from datetime import date
from dateutil.relativedelta import relativedelta
import requests as rq
import time
from tqdm import tqdm
from io import BytesIO

#DB 연결
engine = create_engine('mysql+pymysql://root:[email protected]:3306/stock_db')
con = pymysql.connect(user='root',
passwd='1234',
host='127.0.0.1',
db='stock_db',
charset='utf8')
mycursor = con.cursor()

ticker_list = pd.read_sql("""
select * from kor_ticker
where 기준일 = (select max(기준일) from kor_ticker)
and 종목구분 = '보통주';
""", con=engine)

#DB저장 쿼리

query = """
insert into kor_price(날짜, 시가, 고가, 저가, 종가, 거래량, 종목코드)
values (%s,%s,%s,%s,%s,%s,%s) as new
on duplicate key update
시가 = new.시가, 고가 = new.고가, 저가 = new.저가,
종가 = new.종가, 거래량=new.거래량;
"""

error_list = []

for i in tqdm(range(0, len(ticker_list))):

#티커선택
ticker = ticker_list['종목코드'][i]

#시작일과 종료일
fr = (date.today()+relativedelta(years=-5)).strftime("%Y%m%d")
to = (date.today().strftime("%Y%m%d"))

try:

    #url 생성
    url = f'''https://fchart.stock.naver.com/siseJson.nhn?symbol={ticker}&requestType=1
    &startTime={fr}&endTime={to}&timeframe=day'''
    
    #데이터 다운로드
    data = rq.get(url).content
    data_price = pd.read_csv(BytesIO(data))
    
    #데이터 클렌징
    price = data_price.iloc[:, 0:6]
    price.columns = ['날짜', '시가', '고가', '저가', '종가', '거래랑']
    price = price.dropna()
    price['날짜'] = price['날짜'].str.extract('(\d+)')
    price['날짜'] = pd.to_datetime(price['날짜'])
    price['종목코드'] = ticker
    
    #주가 데이터를 DB에 저장
    args = price.values.tolist()
    mycursor.executemany(query, args)
    con.commit()
    
except:
    print(ticker)
    error_list.append(ticker)

#타입슬립 적용
time.sleep(2)

#DB연결종료
engine.dispose()
con.close()

다음과 같이 작성해서 실행하면 price랑 args 까지는 모두다 데이터가 정상적으로 들어있는데
mycursor.executemany(query, args) 해당 부분에서 데이터가 sql에 저장되지 않습니다.

price
Out[68]:
날짜 시가 고가 저가 종가 거래랑 종목코드
0 2018-07-02 10200.0 10250.0 9900.0 9940.0 146002.0 000020
1 2018-07-03 9940.0 10350.0 9940.0 10000.0 114950.0 000020
2 2018-07-04 9980.0 10450.0 9980.0 10450.0 45931.0 000020
3 2018-07-05 10450.0 10600.0 10150.0 10400.0 32153.0 000020
4 2018-07-06 10450.0 10750.0 10150.0 10450.0 40958.0 000020
... ... ... ... ... ... ...
1229 2023-06-26 10830.0 10970.0 10730.0 10890.0 124535.0 000020
1230 2023-06-27 10970.0 11020.0 10600.0 10820.0 118043.0 000020
1231 2023-06-28 10850.0 10850.0 10460.0 10540.0 135671.0 000020
1232 2023-06-29 10450.0 10530.0 10340.0 10400.0 112113.0 000020
1233 2023-06-30 10400.0 10440.0 10200.0 10390.0 86693.0 000020

[1234 rows x 7 columns]

mycursor.executemany(query, args)
Out[69]: 0

실제로 i=0만 대입해서 콘솔에 입력해보면 price와 args는 데이터가 모두 나오는데
mycursor.executemany(query, args) 를 실행하면 out이 0으로 뜨고 sql에 저장되지 않습니다
어디서 잘못된 걸까요..?

WICS > 에너지 > Components 에서 List 부분 데이터 호출

WICS > 에너지 > Components 에서 List 부분 데이터를 불러 올 수 없습니다.

책 P237-238.
import json
import requests as rq
import pandas as pd

url = f'''https://www.wiseindex.com/Index/GetIndexComponets?ceil_yn=0&dt=20230927&sec_cd=G10'''
data = rq.get(url).json()
data['list'][0]

print(data['list'][0]) 하면, 아무 비어있는 것으로 출력됩니다.

해당 url의 개발자 페이지에서 Network > Preview 혹은 Response를 보면 데이터가 있는데도 말이죠.
해결 방안이 있을까요?

17장 증권사 API 연결과 매매하기 문의드립니다.

428페이지에 아래 코드에서 오류발생하고 있습니다.

접근토큰 발급

res = requests.post(url, headers=headers, data=json.dumps(body))
access_token = res.json()['access_token']
KeyError: 'access_token'

res.json()는 이상없고 res.json()['access_token']에서 오류가 발생하는데 확인 요청드립니다.

bt패키지 오류

안녕하세요! 책 보고 공부 중입니다!
Anaconda Prompt에서 pip install bt를 통해 bt패키지를 받으려 했는데 오류가 나와서요!
ERROR: Failed building wheel for bt
Failed to build bt
ERROR: Could not build wheels for bt, which is required to install pyproject.toml-based projects
이러한 오류가 나왔는데 파이썬 버전 문제일까요?? C:\Users\user> python를 통해서 버전을 확인하면 Pthon 3.10.9로 나옵니다!

퀀트투자 포트폴리오 만들기 질문 입니다.

책과 함께 유투브 동영상을 보면서 지식을 알려주심에 감사 드립니다.
실습을 해 가면서 이해가 되지 않고 또, 코드가 제대로 동작 하지 않아 두가지 질문 드립니다.

1. 230페이지
krx_ind = rq.post(down_url, {'code': otp}, headers=headers) 에서 'code'는 주식의 코드를 의미하는지요?

  1. fnguide에서 전체 재무제표를 가져오기 하면 전체종목이 나오는것이 아닌거 같은데 fnguide 에서 제공안하는 종목들이 많은가요? 많다면 네이버 같은곳에서 재무제표를 가져오면 될거 같은데 fnguide와 차이점은 무엇인지 알고 싶습니다.

10.2.2 개별종목 지표 크롤링 부분 - 선행EPS 컬럼 크롤링 불가

안녕하세요 @hyunyulhenry 님.

10.2.2 개별종목 지표 크롤링 부분에서 선행EPS 컬럼이 존재하지않아 크롤링이 불가능한 이슈가 있습니다.

KRX들어가봤는데 선행EPS컬럼이 어느순간 삭제된 것 같더라구요.
저는 일단 크롤링 후 쿼리 저장부분에서 null값을 박아서 넣어주고있고, 233쪽 컬럼 재정의 부분에서 선행EPS 컬럼을 제거해주고있습니다.

확인해보시고 대응방안 알려주시면 좋을 것 같습니다..

http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201

image

pip install riskfolio-lib==3.3.0 오류... 문의

안녕하세요 대표님 책과 유툽으로 부지런히 공부하고 많이 배우고 있습니다!

14장 포트폴리오 구성 전략을 진행을 해야되는데
pip install riskfolio-lib==3.3.0 해당 부분에서 오류로 시작을 못하고 있습니다.

유튜브에 나와있는 대로 cvxpy 부분이 설치가 안되있어 구글링하여 열심히 해봤지만
결국 .whl 파일을 구해서 나름 진행이 된듯하지만

후에 다시 pip 으로 진행을 해봐도 계속 막히더라구요..
이틀이 넘게 진행을 못하고 있어서

많이 바쁘시겠지만 답답한 마음에 도움을 받고자 문의 드립니다.


C:\Users\Grit_Upward\Desktop\Grit_Upward>pip install riskfolio-lib==3.3.0
Collecting riskfolio-lib==3.3.0
Using cached Riskfolio_Lib-3.3.0-py3-none-any.whl (90 kB)
Requirement already satisfied: scipy>=1.0.1 in c:\anaconda3\lib\site-packages (from riskfolio-lib==3.3.0) (1.7.3)
Collecting arch>=4.15
Using cached arch-5.3.1-cp39-cp39-win32.whl (814 kB)
Requirement already satisfied: numpy>=1.17.0 in c:\anaconda3\lib\site-packages (from riskfolio-lib==3.3.0) (1.21.5)
Requirement already satisfied: statsmodels>=0.10.1 in c:\anaconda3\lib\site-packages (from riskfolio-lib==3.3.0) (0.13.2)
Requirement already satisfied: xlsxwriter>=1.3.7 in c:\anaconda3\lib\site-packages (from riskfolio-lib==3.3.0) (3.0.3)
Requirement already satisfied: scikit-learn>=0.22.0 in c:\anaconda3\lib\site-packages (from riskfolio-lib==3.3.0) (1.0.2)
Requirement already satisfied: matplotlib>=3.3.0 in c:\anaconda3\lib\site-packages (from riskfolio-lib==3.3.0) (3.5.1)
Requirement already satisfied: networkx>=2.5.1 in c:\anaconda3\lib\site-packages (from riskfolio-lib==3.3.0) (2.7.1)
Requirement already satisfied: pandas>=1.0.0 in c:\users\grit_upward\appdata\roaming\python\python39\site-packages (from riskfolio-lib==3.3.0) (1.4.1)
Requirement already satisfied: astropy>=4.3.1 in c:\anaconda3\lib\site-packages (from riskfolio-lib==3.3.0) (5.0.4)
Collecting cvxpy>=1.0.25
Using cached cvxpy-1.3.1-cp39-cp39-win32.whl
Requirement already satisfied: property-cached>=1.6.4 in c:\anaconda3\lib\site-packages (from arch>=4.15->riskfolio-lib==3.3.0) (1.6.4)
Requirement already satisfied: pyerfa>=2.0 in c:\anaconda3\lib\site-packages (from astropy>=4.3.1->riskfolio-lib==3.3.0) (2.0.0)
Requirement already satisfied: PyYAML>=3.13 in c:\anaconda3\lib\site-packages (from astropy>=4.3.1->riskfolio-lib==3.3.0) (6.0)
Requirement already satisfied: packaging>=19.0 in c:\anaconda3\lib\site-packages (from astropy>=4.3.1->riskfolio-lib==3.3.0) (21.3)
Requirement already satisfied: scs>=1.1.6 in c:\anaconda3\lib\site-packages (from cvxpy>=1.0.25->riskfolio-lib==3.3.0) (3.2.2)
Collecting osqp>=0.4.1
Using cached osqp-0.6.2.post8.tar.gz (227 kB)
Installing build dependencies ... error
error: subprocess-exited-with-error

× pip subprocess to install build dependencies did not run successfully.
│ exit code: 1
╰─> [84 lines of output]
Collecting oldest-supported-numpy
Using cached oldest_supported_numpy-2022.11.19-py3-none-any.whl (4.9 kB)
Collecting setuptools>=40.8.0
Using cached setuptools-67.6.1-py3-none-any.whl (1.1 MB)
Collecting wheel
Using cached wheel-0.40.0-py3-none-any.whl (64 kB)
Collecting setuptools_scm>=6.2
Using cached setuptools_scm-7.1.0-py3-none-any.whl (43 kB)
Collecting qdldl
Using cached qdldl-0.1.5.post3.tar.gz (69 kB)
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'done'
Collecting numpy==1.19.3
Using cached numpy-1.19.3-cp39-cp39-win32.whl (11.0 MB)
Collecting packaging>=20.0
Using cached packaging-23.0-py3-none-any.whl (42 kB)
Collecting tomli>=1.0.0
Using cached tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting typing-extensions
Using cached typing_extensions-4.5.0-py3-none-any.whl (27 kB)
Collecting scipy>=0.13.2
Using cached scipy-1.10.1.tar.gz (42.4 MB)
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'done'
Installing backend dependencies: started
Installing backend dependencies: finished with status 'done'
Preparing metadata (pyproject.toml): started
Preparing metadata (pyproject.toml): finished with status 'error'
error: subprocess-exited-with-error

    Preparing metadata (pyproject.toml) did not run successfully.
    exit code: 1
  
    [37 lines of output]
    + meson setup --prefix=C:\anaconda3 C:\Users\Grit_Upward\AppData\Local\Temp\pip-install-c94p7j4m\scipy_ce8926b2efa9402fbba293eb9115979b C:\Users\Grit_Upward\AppData\Local\Temp\pip-install-c94p7j4m\scipy_ce8926b2efa9402fbba293eb9115979b\.mesonpy-olf21y77\build --native-file=C:\Users\Grit_Upward\AppData\Local\Temp\pip-install-c94p7j4m\scipy_ce8926b2efa9402fbba293eb9115979b\.mesonpy-native-file.ini -Ddebug=false -Doptimization=2
    The Meson build system
    Version: 1.0.1
    Source dir: C:\Users\Grit_Upward\AppData\Local\Temp\pip-install-c94p7j4m\scipy_ce8926b2efa9402fbba293eb9115979b
    Build dir: C:\Users\Grit_Upward\AppData\Local\Temp\pip-install-c94p7j4m\scipy_ce8926b2efa9402fbba293eb9115979b\.mesonpy-olf21y77\build
    Build type: native build
    Project name: SciPy
    Project version: 1.10.1
    Activating VS 17.5.3
    C compiler for the host machine: cl (msvc 19.35.32216.1 "Microsoft (R) C/C++ 최적화 컴파일러 버전 19.35.32216.1(x64)")
    C linker for the host machine: link link 14.35.32216.1
    C++ compiler for the host machine: cl (msvc 19.35.32216.1 "Microsoft (R) C/C++ 최적화 컴파일러 버전 19.35.32216.1(x64)")
    C++ linker for the host machine: link link 14.35.32216.1
    Cython compiler for the host machine: cython (cython 0.29.33)
    Host machine cpu family: x86_64
    Host machine cpu: x86_64
    Compiler for C supports arguments -Wno-unused-but-set-variable: NO
    Compiler for C supports arguments -Wno-unused-function: NO
    Compiler for C supports arguments -Wno-conversion: NO
    Compiler for C supports arguments -Wno-misleading-indentation: NO
    Compiler for C supports arguments -Wno-incompatible-pointer-types: NO
    Library m found: NO

    ..\..\meson.build:63:0: ERROR: Unknown compiler(s): [['ifort'], ['gfortran'], ['flang'], ['pgfortran'], ['g95']]
    The following exception(s) were encountered:
    Running `ifort --version` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"
    Running `ifort -V` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"
    Running `gfortran --version` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"
    Running `gfortran -V` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"
    Running `flang --version` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"
    Running `flang -V` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"
    Running `pgfortran --version` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"
    Running `pgfortran -V` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"
    Running `g95 --version` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"
    Running `g95 -V` gave "[WinError 2] 지정된 파일을 찾을 수 없습니다"

    A full log can be found at C:\Users\Grit_Upward\AppData\Local\Temp\pip-install-c94p7j4m\scipy_ce8926b2efa9402fbba293eb9115979b\.mesonpy-olf21y77\build\meson-logs\meson-log.txt
    [end of output]

    note: This error originates from a subprocess, and is likely not a problem with pip.
  error: metadata-generation-failed

  Encountered error while generating package metadata.

  See above for output.

  note: This is an issue with the package mentioned above, not pip.
  hint: See above for details.
  [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× pip subprocess to install build dependencies did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.


위 내용이 오류 전문입니다. 너그러운 양해 부탁드립니다.

P351 13.7 섹터중립포토폴리오 Z-RANK 관련 실행 불가 관련 문의드립니다

안녕하세요
책 사서 보면서 공부중인데요
P 351 에 하기 코드가 안 먹네요
유투브 동영상 보면 이상없이 실행되시던데...
저는 하니까 z-score가 data_bind 칼럼에 안들어가져서
dataframe이 빈 데이터가 되더라고요

print(data_bind.groupby('SEC_NM_KOR', dropna=False)['return'].apply(stats.zscore, nan_policy='omit'))
상기처럼 실행하면
리스트 형식으로 들어가 있는게 보이는데,

print(data_bind['z-score'])
해당 항목으로 하면 NaN이 됩니다.
인덱스 설정을 해줘야 하는건지...
고민하다가 해결방법을 몰라 문의드립니다.

data_bind.loc[data_bind['SEC_NM_KOR'].isnull(), 'SEC_NM_KOR'] = '기타'
data_bind['z-score'] = data_bind.groupby('SEC_NM_KOR', dropna=False)['return'].apply(stats.zscore, nan_policy='omit')

1: print(data_bind.groupby('SEC_NM_KOR', dropna=False)['return'].apply(stats.zscore, nan_policy='omit'))
print(data_bind['z-score'])

1: 결과
SEC_NM_KOR
IT [0.1436575842145283, -0.5022560341142324, 0.05...
건강관리 [0.4589118861712773, 1.4471044349054212, -0.43...
경기관련소비재 [-0.6546025396542542, -0.7265392401358445, -0....
금융 [-0.5998644806935471, 0.3806968904761906, -0.6...
.....

2: 결과
Name: return, dtype: object
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
....

최근 영업일 크롤링

질문을 작성하는 오늘은 3월 16일이고 최근 영업일은 3월 15일입니다. 그런데 네이버 증권 증시자금동향에서 크롤링하는 최근 영업일은 3월 13일입니다. 왜 가장 최근인 영업일을 크롤링하지 않고 이틀 전 날짜를 크롤링하나요?

그리고 재무제표를 크롤링한 결과에서 삼성전자의 자본을 보면 실제 사이트에서 본 금액과 달리 마지막 자릿수에서 반올림되어있던데 이건 왜 그런 건가요? 당기순이익, 매출액, 영업활동으로인한현금흐름은 그렇지 않은 것을 보면 큰 수는 반올림이 되는 것 같아요.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.