본문 바로가기
python

파이썬 2주차 - 2) yahooquery로 해외주식

by 치킨먹는예티 2023. 6. 19.

1) 라이브러리 설치

!pip install urllib3==1.26.14 requests==2.25.1 yahooquery==2.3.0

버전이 맞아야 구동이 된다.

https://yahooquery.dpguthrie.com/guide/ticker/modules/ : 야후쿼리 라이브러리 홈페이지

 

colab에서 urllib3 라이브러리는 이미 설치되어 있지만 만약 아니라면

!pip install urllib3 -U

버전 확인은

!pip show urllib3 requests yahooquery

 

2) yahooquery 사용법

from yahooquery import Ticker
company = Ticker('MSFT') 

company.summary_detail #마이크로소프트 정보 불러오기

https://finance.yahoo.com/quote/MSFT 의 정보를 거의 다 불러온다.

 

modules = 'summaryDetail assetProfile price financialData defaultKeyStatistics'
all_data = company.get_modules(modules)

https://yahooquery.dpguthrie.com/guide/ticker/modules/

야후쿼리 모듈은 엄청엄청 많다. 그 중에서 위 코드로 all_data를 설정해두면 웬만한 정보는 다 볼 수 있다. 필요하면 모듈에 추가하면 된다.

 

name = all_data['MSFT']['price']['shortName']
marketcap = all_data['MSFT']['price']['marketCap']
industry = all_data['MSFT']['assetProfile']['industry']
revenue = all_data['MSFT']['financialData']['totalRevenue']

print(name, marketcap, industry, revenue)  #이런 식으로 원하는 데이터를 뽑을 수 있다.
company.balance_sheet()

company.cash_flow()

company.earnings()

#대차대조표, 현금흐름표, 기업 실적

 

3) 데이터 분석하기(Dataframe 사용)

company = Ticker('MSFT')

code = 'MSFT'
modules = 'summaryDetail assetProfile price financialData defaultKeyStatistics'
all_data = company.get_modules(modules)

name = all_data['MSFT']['price']['shortName']
industry = all_data['MSFT']['assetProfile']['industry']
marketCap= all_data['MSFT']['price']['marketCap']
currentPrice= all_data['MSFT']['financialData']['currentPrice']
summary = all_data['MSFT']['assetProfile']['longBusinessSummary']
targetprice = all_data['MSFT']['financialData']['targetMeanPrice']
per = all_data['MSFT']['summaryDetail']['trailingPE']
eps = all_data['MSFT']['defaultKeyStatistics']['trailingEps']
pbr = all_data['MSFT']['defaultKeyStatistics']['priceToBook']

print(code,name,industry,marketCap,summary,currentPrice,targetprice,per,eps,pbr)

이런 식으로 원하는 데이터를 다 변수화해준다.

그리고 Pandas를 이용, Dataframe화 하기!

import pandas as pd

def add_company(code):
  company = Ticker(code)

  modules = 'summaryDetail assetProfile price financialData defaultKeyStatistics'
  all_data = company.get_modules(modules)

  name = all_data[code]['price']['shortName']
  marketcap = all_data[code]['price']['marketCap']
  industry = all_data[code]['assetProfile']['industry']
  summary = all_data[code]['assetProfile']['longBusinessSummary']

  currentPrice = all_data[code]['financialData']['currentPrice']
  targetPrice = all_data[code]['financialData']['targetMeanPrice']

  per = all_data[code]['summaryDetail']['trailingPE']
  eps = all_data[code]['defaultKeyStatistics']['trailingEps']
  pbr = all_data[code]['defaultKeyStatistics']['priceToBook']

  doc = company.earnings[code]['financialsChart']['yearly']
  df = pd.DataFrame(doc)

  rev2019 = df.iloc[0,1] / 1000
  rev2020 = df.iloc[1,1] / 1000
  rev2021 = df.iloc[2,1] / 1000

  ear2019 = df.iloc[0,2] / 1000
  ear2020 = df.iloc[1,2] / 1000
  ear2021 = df.iloc[2,2] / 1000

  doc = {
      'code':code,
      'name':name,
      'industry':industry,
      '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

위 코드에 company = Ticker(code)이므로, code에 들어갈 회사들을 몇 가지 설정해주자.

df = pd.DataFrame()

codes = ['AAPL','ABNB','BIDU','META','GOOG','MSFT','TSLA','PYPL','NFLX','NVDA']

for code in codes:
  try:
    row = add_company(code)
    df = df.append(row, ignore_index = True) #append기능이 pandas.concat으로 바뀔것
  except:
    print(f'error - {code}')

df

이걸로 내가 원하는 데이터만 뽑아 볼 수 있다.

per을 보고싶다면

 

df[df['per'] < 30].sort_values(by='per',ascending=False)