2편에서는 yfinance를 이용한 해외주식 다루기와
분석하기(전략 세우고, 데이터를 모은 후, 분석하기)를 해보았다.
수업 내내 신세계를 경험했지만,
내것으로 만들려면, 복습이 많이 필요할 것으로 보인다.
4. 해외주식 다루기 - yfinance
- yfinance 라이브러리를 설치한다.
- yfinance를 yf로 import 해준다.
- yfinance의 전체 사용법을 알고 싶다면, "https://pypi.org/project/yfinance/" 에서 참고하면 된다.
- 기본 정보 얻기 > 예시 _ 회사명(name), 산업(industry), 시가총액(marketcap), 매출(revenue)
- 재무제표에서 대차대조표 company.balance_sheet, 현금흐름표 company.cashflow, 기업 실적 company.earnings, 애널리스트 추천 company.recommendations)을 불러와본다.
- 특정 행의 데이터의 정보를 가져온다. ( [ ] 를 두번 써주면 표로 예쁘게 나온다.)
- 특정 열의 데이터 정보를 가져온다. (Firm 열에서 JP Morgan 데이터만 가져와본다.)
- 회사 news를 가져온다.
- 회사 news 중 첫번째 기사의 제목을 가져온다.
5. 분석하기
1) 전략 세우기
- 종목 별로 보고 싶은 정보를 모아본다.
- 종목코드 ⇒ code
- 회사명 ⇒ company.info[’shortName’]
- 산업 ⇒ company.info[’industry’]
- 설명 ⇒ company.info[’longBusinessSummary’]
- 시가총액 ⇒ company.info[’marketCap’]
- 현재 주가 ⇒ company.info[’currentPrice’]
- 1년 후 예상 주가 ⇒ company.info[’targetMeanPrice’]
- PER ⇒ company.info[’trailingPE’]
- EPS ⇒ company.info[’trailingEps’]
- PBR ⇒ company.info[’priceToBook’]
- 매출 (3년치) ⇒ company.earnings ⇒ 3년 치 가져오기
- 순이익 (3년치) ⇒ company.earnings ⇒ 3년 치 가져오기
- 뉴스 ⇒ company.news ⇒ 최근 뉴스 1개 가져오기
- 위의 정보는 아래와 같이 구현할 수 있다.
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']
per = company.info['trailingPE']
eps = company.info['trailingEps']
pbr = company.info['priceToBook']
print(code,name,industry,marketcap,summary,currentprice,targetprice,per,eps,pbr)
- 매출, 순이익의 표를 보고, 특정 데이터 값을 불러 내려면 아래와 같은 코드를 이용한다.
rev2021 = company.earnings.iloc[-1,0]
- 최근 3년 매출, 순이익 더하기는 다음과 같이 한다.
rev2021 = company.earnings.iloc[-1,0]
rev2020 = company.earnings.iloc[-2,0]
rev2019 = company.earnings.iloc[-3,0]
ear2021 = company.earnings.iloc[-1,1]
ear2020 = company.earnings.iloc[-2,1]
ear2019 = company.earnings.iloc[-3,1]
2) 데이터 모으기
- 여러 회사 코드의 정보를 얻기 위해, 함수를 사용한다.
- 데이터 프레임에 넣기 위한 딕셔너리 형태의 데이터를 만든다. > doc = { }
- 데이터를 모을 DataFrame을 만들고, 테슬라에 대한 정보를 불러온다.
- DataFrame에 데이터를 넣기 위해, 딕셔너리 형태를 “append” 하면 된다.
- 딕셔너리 변환하기 코드는 아래와 같다.
df.append(doc,ignore_index = True)
- 데이터를 보기 쉽게 하기위해 소숫점 둘째자리수까지 나타내는 코드 입력 후 다시 실행해본다.
pd.options.display.float_format = '{:.2f}'.format
- 특정 회사 데이터 모으기 코드는 아래와 같다.
- try:~ except:~ 구문은 데이터 에러가 나더라도, error 표시 후 생략할 수 있도록 하는 코드다.
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}')
3) 분석하기
- PES 순서대로 정렬해본다. (내림차순 정렬)
df.sort_values(by='EPS',ascending=False)
- PER이 30이하인 것만 보려면, 아래 코드를 입력한다.(내림차순 정렬)
df[df['PER'] < 30].sort_values(by='PER',ascending=False)
- 현재가격에서 1년 후 가격의 비율 차이가 큰 종목들을 추려내기 위해, 새로운 데이터 프레임을 생성한다.
- copy()를 해서 복사본을 만든 후, gap(현재가격에서 1년 후 가격의 비율 차이)을 만들고, gap 순서대로 정렬해준다.
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년 연속 순수익이 오른 기업을 표기(O,X)해본다.
(2021년이 2020년보다 크고, 2020년이 2019년보다 크다는 조건을 만들어, 맞으면 O, 틀리면 X로 나타나게 한다.)
new_df2 = df[['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')
- 어떤 기업의 Balance Sheet 중에서 Cash를 아래 표로 정리하려면, 표 밑에 있는 코드를 사용하면 된다.
company = yf.Ticker('TSLA')
df = company.balance_sheet.loc[['Cash']] > Balance Sheet에서 Cash를 불러온다.
df.columns = ['2021','2020','2019','2018'] > 열 이름을 바꿔준다.
df['name'] = company.info['shortName'] > name은 company.info에서 shortName 데이터를 가지고 온다.
new_df = df[['name','2021','2020']].copy() > 새로운 데이터프레임을 생성한다.
new_df['diff'] = new_df['2021'] - new_df['2020'] >새로운 데이터 프레임에다가 새로운 열을 만든다.
new_df.reset_index(drop=True) > 1행의 index를 0으로 만들어 준다.
'CODING > PYTHON' 카테고리의 다른 글
[Python] 3주차_DART 데이터 내 마음대로 활용하기(2편) (Feat. 스파르타코딩클럽) (0) | 2022.12.08 |
---|---|
[Python] 3주차_DART 데이터 내 마음대로 활용하기(1편) (Feat. 스파르타코딩클럽) (1) | 2022.12.08 |
[Python] 2주차_손쉽게 다루는 해외주식(1편) (Feat. 스파르타코딩클럽) (0) | 2022.12.01 |
[Python] 1주차_주식데이터를 활용한 파이썬 데이터 분석(2편) (Feat. 스파르타코딩클럽) (0) | 2022.11.29 |
[Python] 1주차_주식데이터를 활용한 파이썬 데이터 분석(1편) (Feat. 스파르타코딩클럽) (0) | 2022.11.25 |