티스토리 뷰
우선 더 많은 기능과 자세한 설명을 위해서는 개발자 Document을 살펴보기 바란다. 오늘 작업한 내용
- investpy라이브러리를 활용하여 investing.com 데이터 접근
- 원하는 정보를 pandas를 활용한 DataFrame 형식으로 합산
- 해장 Data를 CSV파일로 저장
작업시 발생한 이슈
- 인터넷이 연결되지 않을때 라이브러리 설치하는 방법
- 코드 실행시 오류발생하면 끝까지 코드진행이 안될 경우 예외처리하는 방법
사용할 라이브러리
import investpy
import pandas
from datetime import datetime
- Investpy = investing.com 에서 data를 불러오기 위해 사용할 라이브러리
- pandas = DataFrame 형식을 지원하고, 가공하는데 필요한 라이브러리
- datetiem = 파일저장할때, 현재 시간을 불러오기 위한 라이브러리
Step 1. Investpy 다운로드 및 설치 (window, anaconda)
https://pypi.org/project/investpy/
일단 이곳에서 다운로드 한다.
이슈 첫번째, 오프라인상황에서 수동으로 라이브러리를 설치하고 싶을때
- 우선 tar.gz 파일을 다운로드 합니다.
- 다운로드한 파일의 압출을 풀면 아래와 같은 파일이 들어있다.
- 이후 명령 prompt를 열어서 위에 표시된 'setup.py'파일이 있는 경로로 들어가서
- 아래와 같이 명령어를 입력한다.
- Enter를 누르면 아래와 같이 설치가 된다.
- 이후 pip list를 console에 입력하면 아래와 같이 잘 설치가 된 것을 확인할 수 있다.
Step 2. Investpy를 활용하여 원하는 데이터 불러오기
- 우선 더 많은 기능과 자세한 설명을 위해서는 개발자 Document을 살펴보기 바란다.
https://investpy.readthedocs.io/index.html
- 우선, 현재 접근가능한 국가 리스트를 확인한다.
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
'IT > IT 이것 저것' 카테고리의 다른 글
비전공자도 이해하는 클래스(class), 객체(object) 그리고 상속의 개념 (feat. 양념치킨) (0) | 2022.07.18 |
---|---|
클라우드가 미래를 책임진다고? - 그래서 그게 뭔데 (0) | 2020.12.17 |
데이터 구조 - 해쉬 테이블(Hash Table) (0) | 2020.10.05 |
알고리즘 기초(1) - 자료구조, 알고리즘 왜 배워야될까? (0) | 2020.09.25 |
비전공자가 혼자 정리해보는 네트워크 - 그래서 네트워크란 뭘까 (0) | 2020.07.23 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- json
- 경영학
- 스타트업
- 강화학습
- 일자별
- 심리학
- 알고리즘
- requests
- 터틀트레이딩
- Unity
- It
- 주식
- 크롤링
- 유니티
- IT기초
- Anet
- 주식투자
- 머신러닝
- 사진크롤링
- C#
- 파이썬
- ET5X
- PYTHON
- 비전공자
- 시스템투자
- 마케팅
- 프로그래머스
- beautifulsoup
- 랜덤맵
- 가격데이터
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함