티스토리 뷰

우선 더 많은 기능과 자세한 설명을 위해서는 개발자 Document을 살펴보기 바란다. 오늘 작업한 내용

  • investpy라이브러리를 활용하여 investing.com 데이터 접근
  • 원하는 정보를 pandas를 활용한 DataFrame 형식으로 합산
  • 해장 Data를 CSV파일로 저장

작업시 발생한 이슈

  • 인터넷이 연결되지 않을때 라이브러리 설치하는 방법
  • 코드 실행시 오류발생하면 끝까지 코드진행이 안될 경우 예외처리하는 방법

사용할 라이브러리

import investpy
import pandas
from datetime import datetime
  1. Investpy = investing.com 에서 data를 불러오기 위해 사용할 라이브러리
  2. pandas = DataFrame 형식을 지원하고, 가공하는데 필요한 라이브러리
  3. datetiem = 파일저장할때, 현재 시간을 불러오기 위한 라이브러리

Step 1. Investpy 다운로드 및 설치 (window, anaconda)

https://pypi.org/project/investpy/

 

investpy

Financial Data Extraction from Investing.com with Python

pypi.org

일단 이곳에서 다운로드 한다.

 

이슈 첫번째, 오프라인상황에서 수동으로 라이브러리를 설치하고 싶을때

  • 우선 tar.gz 파일을 다운로드 합니다. 
  • 다운로드한 파일의 압출을 풀면 아래와 같은 파일이 들어있다. 

setup.py파일이 있는지 확인

  • 이후 명령 prompt를 열어서 위에 표시된 'setup.py'파일이 있는 경로로 들어가서
  • 아래와 같이 명령어를 입력한다.

본인의 경우 Anaconda prompt를 사용하였다.

  • Enter를 누르면 아래와 같이 설치가 된다.

  • 이후 pip list를 console에 입력하면 아래와 같이 잘 설치가 된 것을 확인할 수 있다.

Step 2. Investpy를 활용하여 원하는 데이터 불러오기

  • 우선 더 많은 기능과 자세한 설명을 위해서는 개발자 Document을 살펴보기 바란다. 

https://investpy.readthedocs.io/index.html

 

Welcome to investpy’s documentation! — investpy 1.0 documentation

© Copyright 2020, Alvaro Bartolome del Canto Revision ca9b3d5a.

investpy.readthedocs.io

  • 우선, 현재 접근가능한 국가 리스트를 확인한다.
import investpy
import pandas
from datetime import datetime

countriesAvailable = investpy.get_certificate_countries()
print(countriesAvailable)
#결과값
['france', 'germany', 'italy', 'netherlands', 'sweden']
  • 지금은 위에 나와있는 5개 국가의 정보에만 접근할 수 있다.
  • 독일('germany') 주식에 대해 알아보겠다.
currentCountry = countriesAvailable[1]
stocks = investpy.get_stocks(currentCountry)
print(stocks)
print(type(stocks))

#결과값
In[2] : runcell(0, 'C:/Users/v20501338/untitled1.py')
      country                name  ... currency symbol
0     germany                BASF  ...      EUR  BASFn
1     germany               Bayer  ...      EUR  BAYGn
2     germany             Allianz  ...      EUR   ALVG
3     germany              Adidas  ...      EUR  ADSGn
4     germany           Lufthansa  ...      EUR   LHAG
      ...                 ...  ...      ...    ...
1123  germany         Delticom AG  ...      EUR  DEXGn
1124  germany  artec technologies  ...      EUR   A6TG
1125  germany           Berentzen  ...      EUR    BEZ
1126  germany  Helma Eigenheimbau  ...      EUR   H5EG
1127  germany  Einbecker Brauhaus  ...      EUR   HAKG

<class 'pandas.core.frame.DataFrame'>
  • currentCountry변수에 현재 접근가능한 나라중 1번 index를 가진 'germany'를 할당해준다
  • 그리고 investpy.get_stocks() 메서드를 사용하여, stocks라는 변수에 독일 주식 전체의 자료를 가져온다
  • 해당자료는 pandas.DataFrame의 DataFrame 형식이다.
  • 이제 여기있는 자료중에 일부에 대한 최근 가격 데이터를 불러와 보겠다.
#비어있는 DataFrame 생성
df = pandas.DataFrame()

for i in range(0, 10):
	# 주식의 이름 할당
    currentStock = stocks.symbol[i]
    
    # 현재 선택된 주식의 최근 가격자료 할당
    priceInfo = investpy.get_stock_recent_data(stock= currentStock, country= currentCountry)
    
    # 비어있는 DataFrame에 최근가격자료 붙이기
    frames = [df, priceInfo]
    df = pandas.concat(frames)

print(df)

#결과값
In[3]: runcell(0, 'C:/Users/v20501338/untitled1.py')
              Open    High     Low   Close   Volume Currency
Date                                                        
2020-10-26  51.600  52.400  51.090  51.200  2395720      EUR
2020-10-27  51.260  51.300  50.270  50.330  2882560      EUR
2020-10-28  48.870  49.205  46.130  46.945  6617611      EUR
2020-10-29  46.555  47.545  45.915  46.625  4073192      EUR
2020-10-30  46.000  47.195  45.955  47.070  3628932      EUR
           ...     ...     ...     ...      ...      ...
2020-11-20  39.150  39.880  39.040  39.880  3774226      EUR
2020-11-23  40.070  40.085  39.130  39.275        0      EUR
2020-11-24  39.375  40.265  39.245  40.125        0      EUR
2020-11-25  40.330  40.505  40.050  40.410        0      EUR
2020-11-26  40.520  40.685  40.475  40.570        0      EUR

[240 rows x 6 columns]
    
  • 여기까지는 아무 문제 없지만, 회사중에는 가격 자료를 불러올 수 없는 경우가 발생한다.
  • 아래와 같은 오류가 발생하면 코드가 끝까지 수행되지 않고 중간에 멈춰 버리기 때문에,
In[4]: runcell(0, 'C:/Users/v20501338/untitled1.py')
Traceback (most recent call last):

  File "C:\Users\v20501338\untitled1.py", line 25, in <module>
    priceInfo = investpy.get_stock_recent_data(stock= currentStock, country= currentCountry)

  File "C:\ProgramData\Anaconda3\lib\site-packages\investpy-1.0-py3.8.egg\investpy\stocks.py", line 305, in get_stock_recent_data
    raise IndexError("ERR#0007: stock information unavailable or not found.")

IndexError: ERR#0007: stock information unavailable or not found.
  • 아래와 같이 예외 처리를 해주어야 한다. (try ~except 구문)
#비어있는 DataFrame 생성
df = pandas.DataFrame()

for i in range(0, 10):
    try:
    	# 주식의 이름 할당
        currentStock = stocks.symbol[i]
        
        # 현재 선택된 주식의 최근 가격자료 할당
        priceInfo = investpy.get_stock_recent_data(stock= currentStock, country= currentCountry)
        
        # 비어있는 DataFrame에 최근가격자료 붙이기
        frames = [df, priceInfo]
        df = pandas.concat(frames)
        
    except IndexError:
        print('최근 가격 자료를 불러올 수 없습니다.', i)

#결과값
In[6]: runcell(0, 'C:/Users/v20501338/untitled1.py')

최근 가격 자료를 불러올 수 없습니다. 2

             Open   High    Low  Close   Volume Currency
Date                                                    
2020-10-26   3.16   3.34   3.16   3.16  5355078      EUR
2020-10-27   3.16   3.21   3.02   3.04  4943999      EUR
2020-10-28   2.95   2.95   2.80   2.87  7501965      EUR
2020-10-29   2.80   2.87   2.70   2.78  7134208      EUR
2020-10-30   2.72   2.81   2.61   2.81  9496302      EUR
          ...    ...    ...    ...      ...      ...
2020-11-20  40.81  41.26  40.65  40.95  4965831      EUR
2020-11-23  41.69  42.10  41.31  41.49  4514209      EUR
2020-11-24  42.19  44.10  42.08  43.74  6661655      EUR
2020-11-25  44.72  44.95  42.64  43.76  5384559      EUR
2020-11-26  43.97  43.97  43.08  43.37   269243      EUR
  • 결과를 보면, 2번째 회사의 자료를 불러오다가 오류가 발생한 것을 확인 할 수 있다.
  • try~ except 구문은 오류가 발생하는 상황을 제외하고 끝까지 코드를 실행시키고 싶을때 사용한다.

Step 3. CSV파일로 저장하기

  • 이제 통합된 최근 가격 자료를 내 컴퓨터에 CSV파일로 저장해 보도록 하겠다. 
now = datetime.now()
nowStr = now.strftime('%Y%m%d_%H%M%S')
df.to_csv('priceInfo_' + nowStr + '.csv')
  • 이렇게 하면 python파일이 들어있는 폴더에 "priveInfo_현재날짜와 시간.csv" 라는 이름의 파일이 생성된다.
  •  

얏호!

끝.

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함