삼성전자 야후파이낸스 데이터로 분석해보기

문제: 삼성전자 주식의 거래량 증가값 증가율을 확인해보고 만약에 삼성전자 주식 거래증가율이 40% 증가하면 시그널을 주는 프로그램을 해보자

import yfinance as yf import pandas from pandas_datareader import data as pdr samsung = pdr.get_data_yahoo('005930.KS',start = '2020-01-01') #samsung.to_csv("samsung.csv",index=False)

야후파이낸스 API를 쓰면, 주식 데이터를 분석할 수 있다.

이를 이용해서 내가 원하는 데이터를 뽑아내고 응용해보자

이번 문제는 거래량이 40%가 넘어가면 sign을 주는 프로그램을 만들어보는 것이다

사실상 이는 HTS에 구현이 되어 있는 내용이다.

HTS 보면 내가 원하는 조건에 들어오면 볼 수 있도록 해준다

'HTS 조건검색' 이라고 검색하면 해당 내용을 찾아볼 수 있다.

import matplotlib.pyplot as plt plt.plot(samsung.index, samsung.Close, 'b', label='Samsung Electronics') plt.show()

그리하여 잘 입력을 해두면 삼성전자의 주가를 볼 수 있는 것이다

그렇다면 우리가 원하는 건 전날 대비 거래량이 40% 이상 올라간 걸 보고 싶기 때문에

column을 하나 만들어서 우리가 원하는 바를 이루면 되겠다.

우선 데이터 프래임을 살펴보자

거래날은 681일간이었고, 칼럼숫자는 7개이다

당일 최대값 최소값 시가 종가 거래량

그리고 adj close 라는 말이 나오는데 이 말은 간단히 살펴보면, 배당금과 분할 등 그리고 기업에 영향을 미칠 수 있는 활동을 미치는 요인을 제거한 종가이다.

여기에서 두 행의 차이를 구하는 매서드를 써야 한다.

samsung['Difference'] = samsung.Volume.diff()

그것은 Volume의 행의 차이를 구하는 .dff 매서드

삼성 데이터 프래임 안에서 Difference 라는 칼럼을 만들어주고, 그 안에 볼륨의 차이 값을 넣어주라는 메서드 이다.

칼럼이 하나 증가했음을 볼 수 있다.

거의 다 왔다

마지막으로 칼럼을 하나 더 만들어서, 차이값을 판별해주면 된다. 라운드 함수를 써서 소수 2번째 자리까지만 나타내준다.

samsung['pct'] = round((samsung.Difference/(samsung.Volume-samsung.Difference)) *100,2)

그리고 40% 이상 값이 되는 데이터를 추출해줘야 하기 때문에 while 또는 if를 써야한다

여기에선 if문을 써서 구현한다.

빈 리스트를 signal 이라는 변수명에 넣고 리스트를 채워준다.

리스트를 채워주는 개념이기 때문에 append 매서드를 사용했다.

매서드를 자유자재로 잘 쓸 줄 알아야 간단히 코딩이 가능하다

signal = [] for row in samsung.pct: if row >= 40: signal.append("Over 40% up") elif row <= -40: signal.append("Over 40% down") else: signal.append("이상없음") signal

그리고 이 리스트 값을 다시 데이터프래임 칼럼 값에 추가를 해준다

samsung['Signal']=signal

그리고 칼럼이 대폭 추가된 데이터프래임 값을 살펴보자

681 거래일 중에서 89 거래일 동안은 전날에 비해 거래량이 40%이상 증가했음을 알 수 있다. 약 13% 이다

전날에 비해 거래량의 증가가 가장 높았던 날부터 sort 하고 싶기 때문에 매서드를 추가로 써보기로 한다

ascending=False 문구를 적지 않으면 내림차순 정렬이 된다.

samsung.pct.sort_values(ascending=False)

하지만 오류가 나온다. 아마 결측치가 너무 많아서가 아닐까

그래서 아래와 같이 넘파이를 써서 inf 값을 제거 해주고,isnull() 을 쓰면 이건 결측치 이다.

notnull() 은 결측치 이기 때문에 결측치와 inf 값을 모두 제거해준 samsung의 DF를 알 수 있다.

import numpy as np samsung[(samsung.pct != np.inf)&(samsung.pct.notnull())].sort_values(by = 'pct', ascending=False)

평화롭다

드디어 완성

samsung['Adj Close'].plot(figsize=(15,8))

차트 사이즈를 지정할 수 있는데 이 숫자가 inch 임을 알아야 한다

삼성전자 야후파이낸스 데이터로 분석해보기 끝

네이버 블로그 원문 보기