EXPANSION OF THINKING IN INVESTMENT

투자에 대한 생각의 확장

CODING/PYTHON

[Python] 2주차_손쉽게 다루는 해외주식(2편) (Feat. 스파르타코딩클럽)

메타닷 2022. 12. 4. 22:17
728x90
반응형

 

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 가져오기 실습]

 

- 회사 news 중 첫번째 기사의 제목을 가져온다.

[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]

[최근 3년간의 매출, 순이익 불러오기 실습]



 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)

[EPS 순서대로 정렬하기 실습]

 

  - 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)

[ 현재가격에서 1년 후 가격의 비율 차이가 큰 종목 골라내기 실습]

 

- 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')

[3년 연속 순수익이 오른 기업 표기하기 실습]

 

  - 어떤 기업의 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으로 만들어 준다.

 

 

728x90
반응형