2022. 12. 24. 16:23ㆍ자격증(다다익선)/파이썬
https://chanytv.tistory.com/137
[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문
[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크롤링 한 번 해보자고 시작한 파이썬 공부다. 모든 공부는 기초가 중요한 법!! 이 번 공부로 파
chanytv.tistory.com
https://chanytv.tistory.com/138
[파이썬] 스크래핑(크롤링)
https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크
chanytv.tistory.com
https://chanytv.tistory.com/139
[파이썬] openpyxl / 파일 업로드, 다운로드
https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크
chanytv.tistory.com
https://chanytv.tistory.com/142
[파이썬] Pandas와 DataFrame
https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크
chanytv.tistory.com
[파이썬] yfinance을 이용한 해외 주식 정보 분석
pandas의 기초를 어느 정도 공부 했으니 이제 실전이다. yfinance를 이용해서 실제 주식 정보 분석해보는 거다.
역시나 시작 전 환경부터 구성해야 한다.
!pip install yfinance
'yfinance'는 'Yahoo finance'의 줄임말이다. 설치 시 'pip'앞에 '!'를 붙여줘야 하는데 이유는 문법이 아닌 설치 명령어라서 그런다고 한다. 야후 주식 사이트 주소는 아래와 같다. https://pypi.org/project/yfinance/
yfinance
Download market data from Yahoo! Finance API
pypi.org
설치가 끝났다면 테스트로 '테슬라'를 조회 해보자.
라이브러리 설정 후 아래와 같이 하면 yfinance에서 제공하는 테슬라 회사의 정보를 볼 수 있다.
import yfinance as yf
company = yf.Ticker('TSLA')
company.info
엄청 많은 내용을 불러오기 때문에 필요한 정보만 추려줄 필요가 있다.
# 회사명, 산업, 시가총액, 매출
name = company.info['shortName']
industry = company.info['industry']
marketcap = company.info['marketCap']
revenue = company.info['totalRevenue']
print(name,industry,marketcap,revenue)
# 대차대조표, 현금흐름표, 기업 실적
company.balance_sheet
company.cashflow
company.earnings
# 주주정보, 애널리스트 추천 등
company.institutional_holders
company.recommendations
company.calendar
news = company.news
for n in news:
print(n['title'])
정보란건 가공이 들어가야지만 진정으로 의미가 있는 법이다. 값을 불러오는 방법을 알았다면 이를 어떤 식으로 보여줄지 전략을 세우는 게 중요하다. 일단 주식에 대해 전혀 모르는 나는 강의해서 하라는 대로 전략을 세웠다. 나중에 관심이 생기면 내 입맛에 맞는 전략을 세워볼까 한다.
company = yf.Ticker('TSLA')
code = 'TSLA' # 종목코드
name = company.info['shortName'] # 회사명
industry = company.info['industry'] # 산업
marketcap = company.info['marketCap'] # 설명
summary = company.info['longBusinessSummary'] # 시가총액
currentprice = company.info['currentPrice'] # 현재 주가
targetprice = company.info['targetMeanPrice'] # 1년 후 예상 주가
per = company.info['trailingPE'] # PER
eps = company.info['trailingEps'] # EPS
pbr = company.info['priceToBook'] # PBR
rev2021 = company.earnings.iloc[-1,0] # 매출 3년 치 가져오기
rev2020 = company.earnings.iloc[-2,0]
rev2019 = company.earnings.iloc[-3,0]
ear2021 = company.earnings.iloc[-1,1] # 순이익 3년 치 가져오기
ear2020 = company.earnings.iloc[-2,1]
ear2019 = company.earnings.iloc[-3,1]
doc = {
'code':code,
'name':name,
'industry':industry,
'bussiness':bussiness,
'marketCap':marketCap/1000,
'currentPrice':currentPrice,
'targetPrice':targetPrice,
'per':per,
'eps':eps,
'pbr':pbr,
'rev2021':rev2021/1000,
'rev2020':rev2020/1000,
'rev2019':rev2019/1000,
'ear2021':ear2021/1000,
'ear2020':ear2020/1000,
'ear2019':ear2019/1000,
}
return doc
DataFrame형식으로 만들기 위해서는 값을 변환해야 한다. 이는 'doc'를 이용해 변경하면 된다.
여기서 여러 회사를 불러오고 싶다면 반복문(for)을 이용하면 된다.
df = pd.DataFrame()
codes = ['AAPL','ABNB','BIDU','FB','GOOG','MSFT','TSLA','PYPL','NFLX','NVDA']
for code in codes:
print(code)
try:
row = add_company(code)
df = df.append(row, ignore_index = True)
except:
print(f'error - {code}')
df
데이터를 불러왔다면 특정조건으로 정렬을 하거나 분류를 해보자.
# eps 순서대로 정렬해보기
df.sort_values(by='eps',ascending=False)
# 특정 per 이하만 보기
df[df['per'] < 30].sort_values(by='per',ascending=False)
# 현재가격 - 1년 후 가격의 비율 차이가 큰 종목들을 추려내기
df[['code','name','currentPrice','targetPrice']]
new_df = df[['code','name','currentPrice','targetPrice']].copy()
new_df['gap'] = new_df['targetPrice'] / new_df['currentPrice'] -1
new_df.sort_values(by='gap',ascending=False)
# 3년 연속 순수익이 오른 기업을 표기하기
import numpy as np
new_df2 = df[['code','name','ear2021','ear2020','ear2019']].copy()
cond = (new_df2['ear2021'] > new_df2['ear2020']) & (new_df2['ear2020'] > new_df2['ear2019'])
new_df2['is_target'] = np.where(cond,'O','X')
new_df2[new_df2['is_target'] == 'O']
역시 조건이 많아지면 많아질수록 코드 짜기가 여간 어려운 게 아닌 거 같다.
상당히 많이 반복적인 연습을 해야지만 제대로 사용할 수 있을 듯하다.ㅠㅠ
'자격증(다다익선) > 파이썬' 카테고리의 다른 글
[파이썬] 백테스팅(Back-testing) (0) | 2023.01.04 |
---|---|
[파이썬] Open API (0) | 2022.12.28 |
[파이썬] Pandas와 DataFrame (1) | 2022.12.23 |
[파이썬] openpyxl / 파일 업로드, 다운로드 (0) | 2022.12.16 |
[파이썬] 스크래핑(크롤링) (0) | 2022.12.15 |