늘은 인터넷에서 CSV 파일을 다운로드받아서, 필요한 정보만을 추출해서 정리하는 작업을 해보겠습니다.

 

코딩을 이제 배우기 시작하는 직장인의 입장에서 파이썬 문법 기초부터 차근차근 배워나가는 것도 필요하지만, 당장 실무에 적용할 수 있는 파이썬 라이브러리 위주로 집중 학습하는 것도 좋은 방법이라고 생각합니다.

 

이런 관점에서 지난 번 포스팅(http://pydata.tistory.com/1)에서 사용했던 판다스(pandas) 모듈을 계속 활용합니다. 지난 번에는 판다스(pandas) 모듈의 read_html 함수를 사용하여 html 웹 페이지에 있는 모든 표를 가져오는 방법을 배웠는데요. 이번에는 read_csv 함수를 사용하여 CSV 파일을 읽어들이는 과정을 만나보겠습니다.  

 


 

CSV 파일 다운로드

  

오늘 활용할 데이터는 KOSPI 상장 주식 종목 리스트입니다. 한국증권거래소(KRX) 홈페이지에 들어가면 상장종목현황(http://marketdata.krx.co.kr/mdi#document=040601)을 제공합니다. KOSPI와 KOSDAQ 종목을 구분하고 있고, 다운받을 컬럼 항목을 선택할 수도 있습니다. 파일 형식은 Excel과 CSV를 지원하는데 우리는 CSV 부분을 클릭해서 CSV 파일을 PC에 저장합니다. 이때 파일명을 'kospi_stock_code.csv'로 바꾸고 파이썬(Python) 실행파일이 위치한 폴더에 저장합니다. 

 

 

<KRX 한국거래소 상장종목 현황>

 

 

<'kospi_stock_code.csv' 파일>

 


 

 

파이썬 실행 코드 작성

다운로드한 CSV 파일을 살펴 보면, 위와 같이 표(table) 형식으로 정리된 자료입니다. 파이썬에서 CSV 파일의 데이터에 접근하기 위해서는 파이썬이 인식할 수 있는 자료형으로 변환해주어야 합니다. 판다스(pandas)에서는 데이터프레임(dataframe)이라는 자료형을 주로 사용하기 때문에, read_csv 함수로 CSV 파일을 읽어 오면 데이터프레임(dataframe)으로 저장됩니다. 실행코드는 주석을 제외하고 세 줄이면 충분합니다.

 

# 판다스 모듈 불러오기 (편의 상, pd라는 이름으로 사용)
import pandas as pd

 

# csv 파일을 해석하여 dataframe으로 변환하고, stock_data 변수에 저장
stock_data = pd.read_csv('kospi_stock_code.csv')

 

#종목코드 컬럼만 선택하여 stock_code 변수에 저장
stock_code = stock_data[['종목코드', '기업명']]

 

 

결과(stock_code) 확인하기

 

 

 

 

stock_code 변수에 저장된 데이터프레임(dataframe) 내용을 확인합니다. 제일 왼쪽 컬럼(column)의 숫자는 인덱스(index)라고 부르며, '종목코드'와 '기업명'은 컬럼(columns)명이라고 합니다. 

 

데이터프레임에서 컬럼(열)을 선택할 때는 데이터프레임['컬럼명'] 형식으로 지정하는데, 종목코드만 선택하고 싶을 때는 stock_code['종목코드']라고 입력합니다. 로우(행)을 선택하려면 데이터프레임.iloc[인덱스]라고 입력합니다. stock_code.iloc[1]라고 입력하면 AJ렌터카에 대한 정보만을 선택해서 볼 수 있습니다.    

 

 

 

 

요약하며...

 

코드를 모아서 정리하면 모두 3줄입니다. 다음 포스팅에서는 종목코드를 이용하여 개별 주식 종목에 대한 정보를 가져오는 방법에 대해서 알아보겠습니다. 
일 반복되는 업무, 웹(web)에서 필요한 데이터를 자동으로 가져올 수 있는 방법은 없을까요?

직장인이라면 누구나 매일 반복하는 단순 업무를 쉽게 처리할 수 있는 방법에 대해서 고민해 본 적이 있을 거예요. 예를 들면, 매일 아침 팀장님께 보고드리기 위해 웹사이트 여기저기를 찾아다니며 경제지표(환율, 금리, 주가 등)와 같은 데이터를 수집하고, Ctrl + C와 Ctrl + V를 여러 번 반복해서 엑셀(Excel) 시트(Sheet)에 옮겨본 경험이 있으실 거라 생각합니다. 

오늘 실전 예제는 파이썬 데이터 분석에서 가장 즐겨 사용되는 판다스(pandas) 모듈을 활용하여, 네이버 환율정보를 가져와서 엑셀로 저장하는 것입니다. 환율정보 웹스크래핑(Web scraping)네이버 블로그도 한번 소개한 적이 있는 내용인데요. 이 주제를 먼저 소개하는 이유는 코딩을 접하는 초보 직장인들도 쉽게 따라해보고 바로 실무에 적용할 수 있다는 판단 때문입니다. 

판다스(pandas) 모듈은 직장인들이 사무실에서 자주 사용하는 엑셀(Excel) 프로그램과 같이 2차원 배열의 데이터 형식을 다루는데 최적화되어 있습니다. 즉, 마이크로소프트 엑셀과 파이썬 판다스 모듈은 행과 열로 데이터의 위치와 속성을 표시한다는 점에서 거의 비슷합니다.  

그럼, 환율정보를 웹사이트에서 가져오는 과정을 단계별로 따라가 보겠습니다.


판다스(pandas) 모듈

웹 페이지(html)에 표(talbe) 형식으로 정리된 자료를 웹스크래핑(Web scraping)할 때는, 판다스(pandas) 라이브러리를 먼저 시도하면 좋습니다. 판다스(pandas)의 read_html 함수를 사용하면 html 페이지에 <table> tag로 구성된 부분을 모두 가져와서 표로 만들어진 목록(list)를 만들어 주기 때문입니다. (다만, 자바스크립트로 만들어진 동적 웹페이지에서는 작동하지 않는 경우가 많습니다.) 

 

 

오늘 판다스(pandas) 모듈로 데이터를 수집하려는 네이버 환율조회(https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%99%98%EC%9C%A8%EC%A1%B0%ED%9A%8C) 화면을 살펴보면, 아래와 같이 웹 페이지 중간에 미국 달러 환율 그래프가 있고 하단에 미국, 일본 등 8개 국가 통화에 대한 원화 환율(매매기준율)이 표(table) 형식으로 정리되어 있습니다.  

 

 
Step 1: pandas 라이브러리를 불러와서 pd라는 이름으로 설정합니다. 


import pandas as pd

Step 2: 네이버 환율조회 링크를  url이라는 변수에 지정합니다.  

url ='https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%99%98%EC%9C%A8%EC%A1%B0%ED%9A%8C'

Step 3: pandas.read_html 함수에 url을 인자로 전달하고, 실행한 결과를 tables 변수에 지정합니다. 

tables = pd.read_html(url)


 

테이블(tables) 내용 확인하기

 
판다스(pandas)로 웹에서 가져온 표를 확인하기 위해, tables 변수 내용을 확인합니다. 리스트(list)를 나타내는 [  ] 안에 콤마(,)로 구분된 2개의 표가 있습니다. 

 

 

 


리스트(list)에 몇 개의 요소(표)가 있는지 확인하려면 len 함수를 사용합니다. 2개의 요소(표)가 있는 것을 알 수 있습니다.

 

 

 

 

 

우리가 수집하려고 하는 환율정보는 2번째 표이기 때문에 리스트(list) 인덱싱(indexing)을 사용합니다. tables[1]이라고 입력하면 2번째 표를 나타냅니다. (파이썬에서는 순서를 셀 때 1이 아니라 0부터 시작합니다.)

 




엑셀(Excel) 파일 저장하기

 

환율 조회표를 엑셀 파일로 저장하는 코드를 추가하겠습니다. 편의상 tables[1]에 들어 있는 표(dataframe 타입으로 저장되어 있음)를 df 변수에 지정합니다. 

df = tables[1]

 


판다스(pandas) 모듈의 to_excel 함수를 사용하면, dataframe 타입의 표를 엑셀 파일로 바로 저장할 수 있습니다. 

df.to_excel('exchange rate.xlsx')

 


 

엑셀 파일을 열면 아래와 같이 표 형태로 저장됩니다. 

 

 

 

 

요약하며...

 

코드를 모아서 정리하면 모두 5줄입니다. 간단하게 환율 정보 정리가 가능하지 않나요? 직장인 렙업(level-up)을 위해 사무환경에서 자동화할 수 있는 작업들에 대하여 계속 연구하고 내용을 공유하겠습니다.

+ Recent posts