AI/Prophet

[Prophet] Prophet 적용 #1 - 데이터 구하기

zamezzz 2018. 8. 14. 10:00

 [Ai] Prophet 적용 #1 - 데이터 구하기



Prophet에 대해서 해당 git blog를 보며 튜토리얼을 진행했습니다.


이제 그 과정을 마쳤으니 우리 주변에 있는 실제 시계열 데이터를 활용해보려고 합니다.


우리 주변에서 가장 흥미 있는 시계열 데이터이고, 그 추세가 매일 급변하는 데이터인


주식 데이터를 활용해보고자 합니다. 그럼 먼저 주식 데이터를 구해야 하는데요.




간단한 파이썬 코드를 통해 쉽게 구할 수 있습니다.


파이썬 웹 크롤링에 많이 사용되는 BeautifulSoup 라이브러리를 사용했습니다.

https://www.crummy.com/software/BeautifulSoup/bs4/doc/


그리고 아래 다음 금융 페이지가 데이터를 크롤링 할 대상 페이지 입니다.

http://finance.daum.net/item/quote_yyyymmdd_sub.daum?page=1&code=005930&modify=1


코드명 005930. 바로 삼성전자입니다.


이제 방법과 대상이 정해졌으니 실제 코드를 통해 데이터를 구해보겠습니다.


 BeautifulSoup을 활용한 웹 데이터 크롤링


getStockPrice라는 함수를 선언하고 이를 활용하면 쉽게 데이터를 확보할 수 있어요.


아래 코드를 보시면 몇 페이지까지 데이터를 크롤링할 지 입력을 받고, 해당 페이지의


iDate len을 구하여 해당 date만큼의 데이터를 크롤링하여 csv로 저장합니다.


import urllib

from bs4 import BeautifulSoup

import pandas as pd


def getStockPrice(code, page):

    pageContents = []    

    for i in range(1, page+1):

        pageAddress = "http://finance.daum.net/item/quote_yyyymmdd_sub.daum?page="+str(i)+"&code="+str(code)+"&modify=1" 

        pageUrl = urllib.request.urlopen(pageAddress)

        Soup = BeautifulSoup(pageUrl, "lxml")

        Profile = Soup.findAll('td', attrs={'class':'num'})

        pageDate = Soup.findAll('td', attrs={'class':'datetime2'})

        

        for j in range(len(pageDate)):

            rowContents = []

            rowDate = pageDate[j].text.strip()

            rowOpen = Profile[7*j].text.strip().replace(",", "")

            rowHigh = Profile[7*j+1].text.strip().replace(",", "")

            rowLow = Profile[7*j+2].text.strip().replace(",", "")

            rowClose = Profile[7*j+3].text.strip().replace(",", "")

            rowChange = Profile[7*j+4].text.strip().replace(",", "")

            rowReturn = Profile[7*j+5].text.strip().replace("%", "")

            rowVolume = Profile[7*j+6].text.strip().replace(",", "")


            rowContents.append(rowDate)

            rowContents.append(rowOpen)

            rowContents.append(rowHigh)

            rowContents.append(rowLow)

            rowContents.append(rowClose)

            rowContents.append(rowChange)

            rowContents.append(rowReturn)

            rowContents.append(rowVolume)



            pageContents.append(rowContents)


    my_df = pd.DataFrame(pageContents)

    my_df.to_csv(code+'.csv')

            


getStockPrice('005930', 1)



위 파이썬 코드를 실행 하면 005930(삼성전자) 최근 1페이지의 데이터가 크롤링되어


005930.csv라는 파일로 저장이 됩니다.



 데이터 크롤링 결과


데이터 크롤링 결과는 다음과 같습니다. 


위 다음금융 페이지와 같은 양식으로 csv파일로 생성이되는데요.


여기서 가장 필요한 부분은 4번째 열인 '종가' 입니다.


날짜와 종가를 이용하여 다음 포스팅에서는 한번 시계열 예측을 해보도록하겠습니다!






예측결과가 잘 맞을지 안 맞을지 궁금하면서도 두렵네요.


얼른 한 번 확인을 해봐야 할 것 같습니다. 


재밌는 결과가 있었으면 좋겠네요. 그럼 오늘의 포스팅은 마치겠습니다. 감사합니다.

반응형