for문 질문드립니다.

조회수 597회

일주일째 이리저리 해보는데, 도저히 결과가 나오지 않아서 문의드립니다.

아래 처럼 주가데이터를 엑셀자료로 한번에 받으려하는데, for문 통해서 종목을 여러번 치지않고, 리스트만 입력해서 여러가지 데이터가 한번에 나왔으면 하는데, 어떻게 해야 쉽게 추출될까요??

**일정기간 종목별 수정종가 데이터만 추출해서, 엑셀로 다운로드하려합니다.. 종목마다 코드 입력하기보다, 한꺼번에 나오면 좋겠네요 ㅠㅠ

start = datetime.datetime(2017, 1, 1)
end = datetime.datetime(2020, 1, 27)


msft = web.DataReader("MSFT", "yahoo", start, end)
amzn = web.DataReader("AMZN", "yahoo", start, end)
googl = web.DataReader("GOOGL", "yahoo", start, end)
fb = web.DataReader("fb", "yahoo", start, end)
tencent = web.DataReader("0700.HK", "yahoo", start, end)
sdy = web.DataReader("SDY", "yahoo", start, end)
vnq = web.DataReader("VNQ", "yahoo", start, end)
sret = web.DataReader("SRET", "yahoo", start, end)
csi300 = web.DataReader("192090.KS", "yahoo", start, end)
vn30 = web.DataReader("245710.KS", "yahoo", start, end)

---

msft.rename(columns={"Adj Close":"msft_close"}, inplace = True)
amzn.rename(columns={"Adj Close":"amzn_close"}, inplace = True)
googl.rename(columns={"Adj Close":"googl_close"}, inplace = True)
fb.rename(columns={"Adj Close":"fb_close"}, inplace = True)
tencent.rename(columns={"Adj Close":"tencent_close"}, inplace = True)
sdy.rename(columns={"Adj Close":"sdy_close"}, inplace = True)
vnq.rename(columns={"Adj Close":"vnq_close"}, inplace = True)
sret.rename(columns={"Adj Close":"sret_close"}, inplace = True)
csi300.rename(columns={"Adj Close":"csi300_close"}, inplace = True)
vn30.rename(columns={"Adj Close":"vn30_close"}, inplace = True)

--

stock_price = pd.concat([msft['msft_close'], amzn['amzn_close'], 
                         googl['googl_close'], fb['fb_close'],
                         tencent['tencent_close'], sdy['sdy_close'], 
                         vnq['vnq_close'], sret['sret_close'], 
                         csi300['csi300_close'], vn30['vn30_close']
                         ], axis = 1)

1 답변

  • 반복되는 코드 가운데서, "반복되지 않는 것은 무엇인가"를 파악한 다음, 그것들을 추출해 취합하여 적당한 객체 정의를 만듭니다. (여기서는 종목코드와 종목명 2개의 속성이 사용되고 있음) 그리고 그 객체들의 배열을 1번 순회하면, 나머지는 코드가 반복해 줍니다.

    말이 어렵지 막상 보시면 별거 아닙니다.

    stock_items = [
        {
            'name': 'msft',
            'code': 'MSFT'
        },
        {
            'name': 'tencent',
            'code': '0700.HK'
        },
        # 이하 생략
    ]
    
    for item in stock_items:
        foo = web.DataReader(item.code, 'yahoo', start, end)
        bar = item.name + '_close'
        foo.rename(columns = {'Adj Close': bar}, inplace = True)
        stock_price = pd.concat(foo[bar], axis = 1)
    
    • 말해주신대로하면 아래의 오류가 발생합니다..--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in 12 13 for item in stock_items: ---> 14 foo = web.DataReader(item.code, 'yahoo', start, end) 15 bar = item.name + '_close' 16 foo.rename(columns = {'Adj Close': bar}, inplace = True) AttributeError: 'dict' object has no attribute 'code' Hyun Soo Choi 2020.1.30 23:16

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)