본문 바로가기
  • 시간(時間)을 아끼는 방법은 시간을 낭비하지 않는것


교육 후기/스파르타코딩클럽_개발일지

주식 데이터를 활용한 파이썬 데이터 분석_2주차 개발일지

by pk7912 2023. 9. 10.
728x90

주식데이터 사용 데이터 분석 시작

 

해외주식 다루기 - FinanceDataReader

 

!pip install finance-datareader

FinanceDataReader 라이브러리 설치

pandas 라이브러리 설치

numpy 라이브러리 설치

 

def make_rate(code):
    df = fdr.DataReader(code, '2017')
    original = df[['Close']].iloc[0]
    df = df[['Close']] / original -1
    return df['Close']

수익률 구하기 함수(종목티커넣기)

  1. 2017년부터 현재까지 'code' 종목데이터 = df에 담기
  2. 종가데이터 처음 꺼 = original에 담기
  3. 현재 종가 데이터 / 종가데이터 처음꺼 담은 original을 나누기 -1(수익률계산하는 방법)
  4. 계산한 수익률 리턴
def final_rate(code):
    try:
        return make_rate(code).iloc[-1]

    except:
        return(-1000)

최종수익률 구하는 함수

  1. make_rate(code) 함수의 마지막 수익률 가져와
  2. 없거나 에러 나면 -1000으로 대체해

 

df = fdr.StockListing('SP500')

s&p500 기업의 데이터를 = df에 담아

 

df = df[['Symbol', 'Name']].head(100)

 

df(s&p500 기업의 데이터) 중에 100개가져오는데 그중에 [['Symbol', 'Name']]데이터만 가져와

 

df['rate'] = df['Symbol'].apply(final_rate)

df(s&p500 기업의 데이터)중 ['Symbol'] 항목, 즉 티커랑 일치하는 데이터를 행 맨뒤에 'rate'란이름으로 항목을 추가하고 티커가 같은 행에 final_rate(마지막 수익률) 데이터로 채운다. 티커를 이용해 데이터를 추가할 때 이런 코드를 쓴다.

 

cond = df['rate'] > -50
df = df[cond]

condition(조건) 만들기

  1. df(s&p500 기업의 데이터) 중 ['rate'] 항목 > -50 보다 큰 데이터만 cond에 담는다.
  2. df [cond]로 df에 담는다. (조건에 맞는 값만 보인다.)(즉, 에러 있는 -1000 값이 들어있는 건 다 잘리고 보인다.)
df = df.sort_values(by='rate', ascending=False)

정렬해 준다('rate'항목을, 오름차순이 False 한 내림차순으로) 그걸 10개만 df에 담는다.

 

df.set_index('Name', inplace=True)

그래프에 인덱스로 표시되는걸 회사이름으로 바꿔준다.

 

df.plot(kind='bar')

바 그래프로 그려준다.

 



S&P 500 기업 100개 중 수익률 best 10 기업을 찾고, 바 그래프를 그려보기

!pip install finance-datareader

import FinanceDataReader as fdr
import pandas as pd
import numpy as np

def make_rate(code):
    df = fdr.DataReader(code, '2017')
    original = df[['Close']].iloc[0]
    df = df[['Close']] / original -1
    return df['Close']


def final_rate(code):
    try:
        return make_rate(code).iloc[-1]

    except:
        return (-1000)


df = fdr.StockListing('SP500')

df = df[['Symbol', 'Name']].head(100)

df['rate'] = df['Symbol'].apply(final_rate)

cond= df['rate'] > -50
df = df[cond]

df = df.sort_values(by='rate', ascending=False).head(10)

df.set_index('Name', inplace=True)
df.plot(kind='bar')

 

댓글