도메인/금융공학

파이썬 시작, Xing API 이용하기 (5) - 데이터 리드

늘근이 2015. 4. 18. 06:26

이것을 실행해보기 전에 나는 신이 났다.

왜냐면, 주식가격을 그냥 냅다 가져올수 있기 때문이다. 네이버 금융에서 몰래 퍼다쓰는 주식가격같은 짓은 하지 않아도 된다. 나는 지금 이것을 해보지 않았지만 이게 된다면.. 지연시세인지는 모르겠지만 어쨌든 해본다.

일단은 주식가격등을 웹에서 바로 연동해서 가져올수 있는 기능이라고 한다. 한국 KOSPI도 되느냐? 그냥 다 된다고 말하고 있다.

그렇다면 orakgarak.co.kr 여기를 구축하기 위해 했던 수많은 파싱작업들은 뭐지.. 헛수고라는 것이다.


일단 다음과 같이 모듈을 가져온다.


 import pandas.io.data as web

import datetime


와 너무 쉽다. 이제 주식가격을 긁어올수 있는건가?



beg = datetime.datetime(2015,1,1)

end = datetime.datetime(2015,4,17)

data = web.DataReader("005930.KS","Samsung Electronics",beg,end)

data

data


어 ..안되잖아!!! 야후만 긁고 있다. 이상하다. 안된다. 음...

아 이렇게 써야한다.



2010-01-08   820000   821000   806000   821000  291100   787774.00

data
Out[53]:
               Open     High      Low    Close  Volume   Adj Close
Date                                                             
2010-01-04   803000   809000   800000   809000  233300   776259.62
2010-01-05   826000   829000   815000   822000  531600   788733.50
2010-01-06   829000   841000   826000   841000  452400   806964.56
2010-01-07   841000   841000   813000   813000  428000   780097.75
2010-01-08   820000   821000   806000   821000  291100   787774.00 


즉, 야후에서 가지고 오란 뜻이다.  야후에서 가격을 가지고 오란뜻으로 여기에는 뭐 야후도 있겠고 구글도 있겠다. 아무래도 금융은 야후가 세다.


여기까지 오니 정말 신난다.



memory usage: 74.7 KB
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1366 entries, 2010-01-04 00:00:00 to 2015-04-17 00:00:00
Data columns (total 6 columns):
Open         1366 non-null float64
High         1366 non-null float64
Low          1366 non-null float64
Close        1366 non-null float64
Volume       1366 non-null int64
Adj Close    1366 non-null float64
dtypes: float64(5), int64(1)
memory usage: 74.7 KB 



info()함수를 써서 쉽게 가져올수 있다.


자 이제 데이터를 그려보자.


plot.plot(data['Close'])
Out[56]: [<matplotlib.lines.Line2D at 0x7e34320>]

plot.show()



어?? 잠깐만 다음 티스토리에 그냥 붙여넣기하면 되네?? 상당히 괜찮다.

날짜까지 출력하려면 data.index를 주면 된다.



이제 이동평균선을 한번 그려보겠다. 해당함수가 rolling_mean이라는 함수로 벌써 구현이 되어있다고 한다..



import pandas as panda

data['mean5'] = panda.stats.moments.rolling_mean(soil['Adj Close'], 5) 

            mean5 
Date                    
2010-01-04          NaN 
2010-01-05          NaN 
2010-01-06          NaN 
2010-01-07          NaN 
2010-01-08   787965.886 
2010-01-11   785663.012 
2010-01-12   783168.236 
2010-01-13   774724.374 
2010-01-14   777411.062 
2010-01-15   781441.086 
2010-01-18   790268.760 
2010-01-19   792955.448 
2010-01-20   800055.974 
2010-01-21   804469.812 
2010-01-22   801207.412 
2010-01-25   801015.512 
2010-01-26   799480.262 
2010-01-27   792955.462 
2010-01-28   784895.398 
2010-01-29   777027.250 
2010-02-01   764553.364 
2010-02-02   756301.402 
2010-02-03   751887.564 
2010-02-04   745746.576 
2010-02-05   739221.776 
2010-02-08   733656.500 
2010-02-09   731545.538 
2010-02-10   727323.600 
2010-02-11   724828.826 
2010-02-12   724828.826 
...                 ... 
2015-03-09  1427800.000 
2015-03-10  1428400.000 
2015-03-11  1435800.000 
2015-03-12  1440800.000 
2015-03-13  1443800.000 
2015-03-16  1453800.000 
2015-03-17  1469000.000 
2015-03-18  1474800.000 
2015-03-19  1479400.000 
2015-03-20  1480800.000 
2015-03-23  1480200.000 
2015-03-24  1476000.000 
2015-03-25  1472400.000 
2015-03-26  1462600.000 
2015-03-27  1454000.000 
2015-03-30  1446200.000 
2015-03-31  1439200.000 
2015-04-01  1426800.000 
2015-04-02  1429400.000 
2015-04-03  1432000.000 
2015-04-06  1440400.000 
2015-04-07  1444600.000 
2015-04-08  1455800.000 
2015-04-09  1465600.000 
2015-04-10  1476800.000 
2015-04-13  1478600.000 
2015-04-14  1481000.000 
2015-04-15  1474400.000 
2015-04-16  1473200.000 
2015-04-17  1465200.000 


와 상당히 빠르게 계산된다.