Tag Archives: ipython

[Python] 2010~2015년 애플, 구글, 아마존, IBM 주가 분석 예제

오늘은 numpy, pandas로 주가를 분석해보도록 하겠습니다.

분석할 주식은 ‘AMZN’,’IBM’,’GOOG’,’APPL’ 입니다.

요런식으로 되어있는 csv데이터를 분석해보도록 하겠습니다.

물론 멀쩡하게 여기보다 훨씬 잘 분석해 놓은게 많지만 저는 어디까지나 분석툴을 사용해보는게 목적입니다.

Date,AMZN,IBM,GOOG,APPL
24-Dec-15,662.79,138.25,748.4,108.03
23-Dec-15,663.7,138.54,750.31,108.61
22-Dec-15,663.15,137.93,750,107.23
21-Dec-15,664.51,135.5,747.77,107.33
18-Dec-15,664.14,134.9,739.31,106.03
16-Dec-15,675.77,139.29,758.09,111.34
15-Dec-15,658.64,137.79,743.4,110.49
14-Dec-15,657.91,135.93,747.77,112.48
11-Dec-15,640.15,134.57,738.87,113.18
10-Dec-15,662.32,136.78,749.46,116.17
09-Dec-15,664.79,136.61,751.61,115.62
08-Dec-15,677.33,138.05,762.37,118.23
07-Dec-15,669.83,139.55,763.25,118.28
04-Dec-15,672.64,140.43,766.81,119.03
03-Dec-15,666.25,138.92,752.54,115.2
02-Dec-15,676.01,139.7,762.38,116.28

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
stokcs_all = pd.read_csv('stocks.csv', parse_dates=True, index_col=0)
# 마지막행에 이상한 데이터가 있어서 자릅니다
stokcs_all = close_xp_all[:1504]
stock = stokcs_all[['AMZN','IBM','GOOG','APPL']]
stock

AMZN IBM GOOG APPL
Date
2015-12-24 662.79 138.25 748.40 108.03
2015-12-23 663.70 138.54 750.31 108.61
2015-12-22 663.15 137.93 750.00 107.23
2015-12-21 664.51 135.50 747.77 107.33
2015-12-18 664.14 134.90 739.31 106.03
2015-12-16 675.77 139.29 758.09 111.34

이제 시계열 데이터를 정리해보도록 하겠습니다.

stock = stock.resample('B', fill_method='ffill')

앞에 String은 Rule을 의미합니다.
B business day frequency
C custom business day frequency
D calendar day frequency
W weekly frequency
M month end frequency
BM business month end frequency
CBM custom business month end frequency
MS month start frequency
BMS business month start frequency
CBMS custom business month start frequency
Q quarter end frequency
BQ business quarter endfrequency
QS quarter start frequency
BQS business quarter start frequency
A year end frequency
BA business year end frequency
AS year start frequency
BAS business year start frequency
BH business hour frequency
H hourly frequency
T minutely frequency
S secondly frequency
L milliseonds
U microseconds
N nanoseconds
이런거 라고 합니다.

참조

Resample은 DateFrame의 시계열 데이터를 정렬해줍니다. fill_method는 다음과 같습니다.

Method Action
pad / ffill Fill values forward
bfill / backfill Fill values backward

아름답게 Google의 주가를 그려보도록 하겠습니다.

stock['GOOG'].plot()

stock1

2010년 주가를 그려볼까요?

stock.ix[:'2010-12-31'].plot()

stock2

이렇게 하면 특정기간도 그릴수 있을 것입니다.

stock.ix[:'2010-12-31'].plot()

stock3

아까 이용했던 Resample을 이용하면, 분기별 데이터도 그릴 수 있습니다

google_quater = stock['GOOG'].resample('Q-DEC', fill_method='pad')

stock4

이동평균도 다음과 같이 간단하게 구현할 수 있다.

# rolling mean을 구할 Arguement 와 window size값을 넘겨주면 된다.
pd.rolling_mean(stock.GOOG, 250)

stock5

이동 표준편차도 구할 수 있을 것이다.

Google의 250일간 일별 수익률의 표준편차다.

goog_std250 = pd.rolling_std(stock.GOOG, 250, min_periods=10)
goog_std250.plot()

stock6

마지막으로 주가 60일 동안의 평균 이동선을 구해봅시다.

pd.rolling_mean(stock, 60).plot(logy=True)

stock7

Notebook 전체보기

아마존웹서비스(AWS)에 Ipython notebook 올리기

    1. EC2 Instance를 하나 만든다.
      ipythoninAWS 001
    2. 난 Ubuntu 빠니까 Ubuntu를 고른다.
      ipythoninAWS 002
    3. 공짜를 고르자. 공짜도 충분한 ipython만 올리면 충분히 빠르다.
      ipythoninAWS 003
    4. Edit Security Group을 가서 포트 하나를 열어주자. 이 포트로 접속할 것이다. 어차피 개인적으로 쓰는 것이기 때문에 포트 하나만 열어두는게 나을 것 같다.
      ipythoninAWS 005
    5. Lauch를 누르니까 Key를 하나 만들거냐고 물어본다. 이거 설정하고 이 파일 잃어버리면 안된다. 잃어버리면 귀찮아진다.
      ipythoninAWS 006
    6. Launch and View Instance
      ipythoninAWS 007
    7. 기다리는 동안 IP하나를 할당 받자. Elastic IP
      ipythoninAWS 008
    8. 그리고 Ip를 선택하고 associate
      ipythoninAWS 009
    9. 이제 Putty를 이용해서 방금 만든 EC2 Instance에 접속해 볼 차례다. 설명은 요기에 있다.
    10. 짜란
      ipythoninAWS 010
    11. Enthought, pythonXY 도 있지만, 개인적으로는 Anaconda를 좋아한다. 과학용 Python 중에 유일하게 python3.x를 지원한다.
      wget https://3230d63b5fc54e62148e-c95ac804525aac4b6dba79b00b39d1d3.ssl.cf1.rackcdn.com/Anaconda3-2.4.1-Linux-x86_64.sh
      주소가 바뀔 수도 있으니, 요기 로 가서 주소를 복사하길 추천한다. 물론 linux 64bit 를 해야겠지.
      참고로 Putty에서 붙여넣기는 shift+insert다.
      ipythoninAWS 011
    12. 받았으면 설치하자.
      bash Anaconda3-2.4.1-Linux-x86_64.sh
      라이센스를 동의하자.
      ipythoninAWS 012
      ipythoninAWS 013
      설치가 다됐으면 path를 잡을거냐고 물어본다. 꼭잡자.
      ipythoninAWS 014
      어이쿠 제가 감사하죠.
    13. source .bashrc 와 which python 명령어로 path를 갱신하고, 제대로 잡혀있나 확인해보자.
      ipythoninAWS 015
    14. 이제 ipython을 해보자. 아름답다
    15. 암호를 설정해야한다.

       
      from IPython.lib import passwd
      passwd() 
      

      ipythoninAWS 016
      키가 나타났을 것이다. 키를 메모장에 복사해두자.

    16. 방금 만든 암호 키를 SSL Certificate를 만들어서, ipython에 접속할때마다 암호를 묻게 할 것이다.
      적절한 위치에 폴더를 만들어서 다음 명령어를 때리도록 하자
      ipythoninAWS 017
      !openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
      뭔가 여러가지를 물어볼텐데 적당히 답해주자.
      성공!
    17. 이제 profile을 설정하면 끝난다. ipython을 빠져나오자.
    18. jupyter notebook을 한번 실행하고, 바로 빠져나오자.
      ipythoninAWS 018
    19. 프로파일을 만들자.

       
      jupyter notebook --generate-config
      

      ipythoninAWS 019

      vim으로 편집하자. 아래와 같이 입력하면 된다.
      ipythoninAWS 020

      pylab inline은 왜 안먹는지 모르겟다.
      -> c.IPKernelApp.matplotlib = u’inline’ 으로 바꿔주자.
      certifile은 아까 만든 pem 파일의 경로를 잡아주면 된다.
      ip는 어차피 AWS에서 제어 할 것이므로 모든 아이피로 들어오게 하자.
      Ubuntu 콘솔에 열 브라우저따위는 없다.
      아까 만든 암호를 입력한다.
      아까 열어두었던 포트번호를 입력한다.

    20. 자 이제 실행해보자…!!
      ipythoninAWS 021
      ipythoninAWS 022
    21. putty 끌때마다 ipython notebook이 같이 꺼질 것이다. tmux 에 ipython을 올리자.
      tmux를 치고
      거기에서 jupyter notebook 을 올리면 끝
      tmux에 대한 설명은 여기에 자세히 나와있다. 글 정말 재밌게 써주셨다.

 

ps 포트번호가 왔다리갔다리 해서 헷갈릴 것 같은데, 4번대로 하면 포트를 하나 열수 있다. SSH 포트는 건들지 말자.