서론
나는 2020.02.20부터 주식을 시작하기 시작했다. 시작한 이유는 아주 단순하다. 저 날이 훈련소 입소일이었고, 매우 간단한 귀납적(?)인 사고로부터 "지금까지 올랐으니 추후에도 오를 거야!"라는 생각으로 전재산을 미국 주식에 투자 후 유유히 떠났다. COVID 19 패닉으로 가격이 폭락했고, 고점에 물린 김에 가치 투자 및 장기 투자자가 되었다. 다양한 주식 용어를 공부하면서 매일 뉴스들을 살펴보면서 미연준의 금리, 투자한 회사들의 현금 흐름 등에 관한 기사를 많이 읽었다. 하지만, 내 직업이 금융 애널리스트나 펀드 매니저가 아니기에 시간 투자가 한정적이었다. 그래서 금융 기사 속에서 나오는 키워드들을 정리한 후, 시각적으로 보여주는 프로그램을 만들면 좋겠다는 생각이 들었다. 재테크에 쏟는 시간도 아낄 수 있으며, Kaggle처럼 정제된 데이터가 아닌 Raw Data를 사용하는 측면에서 데이터 및 관련 기술들을 다루는 능력이 향상될 거라 생각하여 시작하게 되었다.
개발 환경 - Google Colab
구글에서 제공하는 Colab(코랩)이라는 개발 환경을 사용한다. 인터넷과 구글 계정만 있다면, 따로 개발 환경을 위한 세팅을 하지 않고도 언제든 파이썬을 사용할 수 있게 해 주어 매우 편리하다! (KoNLPy 설치할 때 진가를 발휘한다.) 따로 개발 환경을 위한 세팅을 하지 않고도 언제든 파이썬을 사용할 수 있게 해 준다.
Google Colaboratory
colab.research.google.com
위 URL 또는 구글에서 Colab을 검색해서 접속이 가능하다.

로그인 후 좌측 상단에서 파일→새노트를 클릭하여 파이썬 개발 환경을 시작할 수 있다!

이때, 위 그림과 같이 Colab에서 코드를 작성하는 부분의 단위를 '셀'이라고 한다. 셀에 코드를 입력하여 Shift + Enter키를 눌러서 코드를 실행할 수 있다.
웹 스크래핑 준비 - Selenium, Matplotlib, Newspaper3k
Local에서 Selenium을 사용하기 위해서는 Chromedriver.exe 실행 파일을 통해 스크래핑을 실행하게 된다. 하지만 Colab에서는 따로 실행파일을 다운로드할 필요 없이 코드를 통해 Selenium을 실행할 수 있다.
# install Selenium | |
!pip install selenium | |
# install chromedriver | |
!apt-get update | |
# to update ubuntu to correctly run apt install | |
!apt install chromium-chromedriver | |
chrome_options = webdriver.ChromeOptions() | |
#내부 창을 띄울 수 없으므로 설정 | |
chrome_options.add_argument('--headless') | |
chrome_options.add_argument('--no-sandbox') | |
chrome_options.add_argument('--disable-dev-shm-usage') | |
wd = webdriver.Chrome('chromedriver',chrome_options=chrome_options) | |
# Scrapping | |
url = 'www.naver.com' | |
wd.get(url) |
Colab에서 몇 가지 차트를 그려볼 텐데, Colab에서 차트를 그릴 때 차트에서 한글이 깨지지 않도록 하기 위해서는 우선 아래의 코드를 실행해주어야 한다. 아래의 코드는 Colab에서 한글을 사용하기 위해 세팅하는 용도일 뿐, 코드를 이해하지 않아도 상관없다.
!pip install matplotlib | |
import matplotlib as mpl | |
import matplotlib.pyplot as plt | |
# For Korean | |
%config InlineBackend.figure_format = 'retina' | |
!apt -qq -y install fonts-nanum | |
import matplotlib.font_manager as fm | |
fontpath = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf' | |
font = fm.FontProperties(fname=fontpath, size=9) | |
plt.rc('font', family='NanumBarunGothic') | |
mpl.font_manager._rebuild() |
한국어 텍스트를 처리할 때는 주로 형태소 분석기를 사용해서 자연어 처리를 한다. 이를 사용해서 문장에서 형태소 단위 또는 명사 단위를 뽑아낼 수 있는데, 이를 문장을 문장보다 작은 단위인 토큰 단위로 뽑아냈다고 하여 '토큰화'라고 부른다. 명사 토큰화 작업을 해주기 위해, 형태소 분석 패키지인 KoNLPy를 설치한다. Local에서 KoNLPy를 설치하기 위해서는 JDK 및 JPype1 설치가 필요했지만 Google Colab은 그 과정이 없기에 아주 편리하다. (JDK 설치를 해본 사람은 알겠지만 환경 변수 설정 등이 매우 번거롭다.) 추가로 그밖에 필요한 패키지들을 설치한다.
!pip install newspaper3k | |
!pip install requests | |
!pip install pandas |
금융 기사 스크래핑
금융 기사는 파이낸셜 뉴스의 국제 경제 카테고리에서 가져온다.

html 구조를 보면 <li>태그 내에 <a href>에 url이 있는 것을 알 수 있으므로 각 <li> 태그를 순회하면서 url을 뽑아낸다. 기사는 이틀에 15~20개씩 업로드되므로 15개의 url을 가져온다. get_urllist() 함수는 뉴스 url 리스트를 반환하는 함수이다.
def get_urllist(): | |
financial_url = 'https://www.fnnews.com/section/001002002' | |
#Open Page | |
wd.get(financial_url) | |
time.sleep(PAUSE_TIME) | |
urllist = [] | |
for i in range(1, 16): | |
# li 태그의 css로 접근 | |
css = wd.find_element_by_css_selector(f'#secNo1 > li:nth-child({i})') | |
# a tag 내의 | |
a_tag = css.find_element_by_tag_name("a") | |
# url을 가져온다 | |
href_text = a_tag.get_attribute('href') | |
urllist.append(href_text) | |
return urllist |
위에서 get_urllist()를 통해 urllist가 생성된다. 다음은 newspaper3k를 통해서 만들어진 함수로 url 리스트를 알려주면 이를 통해 뉴스의 제목과 내용을 열로 가지는 데이터프레임을 생성하는 함수이다.
def make_data(urllist): | |
title_list = [] | |
text_list = [] | |
for url in urllist: | |
article = Article(url, language='ko') | |
article.download() | |
article.parse() | |
title_list.append(article.title) | |
text_list.append(article.text) | |
# Create DataFrame | |
df = pd.DataFrame({'title': title_list}) | |
df['news'] = text_list | |
return df |
결과)

위와 같은 코드로 우리는 다음과 같은 데이터프레임을 얻을 수 있다. 다음 글에서는 얻은 데이터프레임을 바탕으로 명사 토큰화와 불용언 처리를 통해 뉴스에 어떤 단어가 분포되어 있는지 알아보자!
'ML & DL (Machine Learning&Deep Learning) > DE & DS' 카테고리의 다른 글
[DE & DS] 시계열 데이터 분석을 위한 판다스 사용법 (0) | 2021.09.05 |
---|
댓글