코인 거래 데이터를 읽어와 그래프를 그려보자

anhm(46)
Published in
#kr
Words
492
Reading
3 min
Listen
Play
9y

해당 포스팅은요...

앞으로 알고 있는 프로그램관련 잡다한 지식을 조금씩 정리하고, 새롭게 공부하는 분야를 정리하면서 작성해볼 생각 입니다.
자주 포스팅은 못하지만, 꾸준하게 작성하여 올릴 예정입니다.

작성된 내용에서 궁금하신 내용이 있으신 분들은 댓글을 통해 질문 환영 합니다.

첫번째 스탭으로는 Coinone에서 제공하고 API를 통해 데이터를 읽어와서 간단하게 그래프를 그리는 내용을 공유할까 합니다.

제가 잘못알고 있거나, 궁금하신 부분이 있으시면 언재든지 댓글 부탁 드립니다.
(내용 중간중간 프로그램을 하면서 알아야할 잡 지식들을 적어볼 예정이기 때문에, 내용이 삼천포로 빠질수 있다는것은 함정이에요.)

왜 처음부터 이런 주재인 것인가?

저는 기본적으로 python을 많이 다루고는 있는데, 매일 검정화면에 흰글씨로만 이루어진 터미널을 보다가 회사의 분석 팀에서 뷰티나느 그래프를 보고 나도 한번 그려보자라는 생각으로 시작을 하게 되었고, 그럼 어떤 데이터를 가지고 할까 고민하다가 쉽게 얻고 이슈도 있는 코인 데이터를 이용해보자라는 생각으로 이러한 주재로 하게 되었지요.

가장 큰 이유는 절대 분석이 아닙니다. 다만 그래프 한번 그려보자가 가장 크지요. 분석은 조금만..
즉, 이미 무언가를 분석하고 계신 분들이라면.. 거리가 조금 멀수도 있지요.. 모든지 가벼운 마음으로 시작을...

Coinone 실시간 채결 주문 가져오기

만약 특정 사이트에서 데이터를 가지고 오고 싶을 경우에는 해당 사이트에서 제공하는 API문서를 확인해 보는것이 가장 기본입니다.

Coinone에서 제공하는 API문서는 http://doc.coinone.co.kr 사이트에서 확인이 가능하고, 해당 포스팅에서는 이중 RecentTransactions 을 사용할 예정입니다.

해당 문서를 간단하게 확인해 보면 https://api.coinone.co.kr/trades/ 주소와 GET이 적혀 있는걸 확인할 수 있고, 다음과 같은 Parameter 정의 표가 있습니다.

FieldTypeDescription
currencyString
Default value: btc
Allowed values: btc, bch, eth, etc, xrp, qtum, ltc, iota, btg
periodString
Default value: hour
Allowed values: hour, day

즉, 이 의미는 HTTP의 GET 메소드 이용해서 데이터를 가져올수 있다라는 의미입니다.

그럼 URL주소와 param 데이터를 이용해서, 최근 1시간 동안 btc의 거래 정보를 가져오고 싶을 경우 아래와 같이 주소를 생성해 주면 됩니다.

https://api.coinone.co.kr/trades/?currency=btc&period=hour

여기에서 잠깐 - HTTP 메소드에 대해

GET메소드 이외에도 많이 쓰이는 POST메소드가 있습니다.
이 두가지의 가장큰 차이는 URL주소를 이용해서 데이터를 전달하는지 아닌지 입니다.

  • GET 메소드: URL 주소를 이용해서 데이터를 전달합니다.
    GET 메소드를 사용시 URL은 {domain_info}/?{parameter1}={value1}&{parameter1}={value1} ... 형식처럼 ?로 시작하고 각 parameter간에는 &로 구분이 됩니다. 즉, https://www.google.co.kr/search?source=hp&q=steemit 이렇게 사용이 됩니다.

  • POST 메소드: HEAD를 이용해 데이터를 전달합니다.

데이터 읽어오기

import urllib
import json
import time

url = "https://api.coinone.co.kr/trades/?currency=btc.=hour"
response = urllib.urlopen(url)
data = json.loads(response.read())

result = data["result"]
error_code = data["errorCode"]
request_time = data["timestamp"]
for complete_order in data["completeOrders"]:
    price = complete_order["price"]
    qty = complete_order["qty"]
    complete_time = complete_order["timestamp"]
currency = data["currency"]

print("result:" + result)
print("errorCode: " + error_code)
print("timestamp: " + request_time)
print("completeOrders")
print("  price: " + price)
print("  qty: " + qty)
print("  timestamp: " + complete_time)
print("currency: " + currency)   
result:success
errorCode: 0
timestamp: 1519733879
completeOrders
  price: 12002000
  qty: 0.0263
  timestamp: 1519733867
currency: btc

위 코드의 출력은 이해가 쉽도록 API문서의 Suucess200 순서와 일치 시켜 두었습니다. 단, completeOrders 부분의 경우 리스트로 반환이 되기 때문에 마지막 컬럼의 데이터만 출력이 되게 됩니다.

대부분의 수치가 이해가 되지만 아마 timestmp에 출력된 내용이 이해가 되지 않을 수 있습니다. 결론부터 간단히 말하면 해당 시간은 localtime 기준으로 1980년 1월 1일 00시 00분 00초 부터 현재까지의 시간을 초로 표시를 한 시간입니다.

여기서 잠깐 - time zone

LST(Local Standard Time)은 의미 그대로 각 지역마다 시간이 다릅니다. 각 나라마다의 시차를 생각할수 있지요. 그렇다면, 공통 혹은 기준으로 사용해야 하는 시간이 필요하겠죠? 그것이 바로 UTC(Universal Time Coordinated) 입니다.

참고로 아래의 내용은 리눅스 상에서 시간을 LST와 UTC로 표현 했을때의 차이 입니다. 시차가 약 9시간이 발생하고 있는걸 확인할수 있죠.

[anhm@centos ~]$ date -u
2018. 02. 22. () 02:08:12 UTC
[anhm@centos ~]$ date
2018. 02. 22. () 11:08:14 KST

데이터 표현하기

python에서 그래프를 그릴때는 matplotlib 라이브러리를 많이 사용합니다.

이 포스팅에서는 간단하게 matplotlib을 이용해서 데이터를 표시하는 정도만 간단하게 다루겠습니다.

import matplotlib.pylab as plt

orderd_history = []
for order_info in data["completeOrders"]:
    price = int(order_info["price"])
    orderd_history.append(price)

fig = plt.figure(figsize=(16,4))
ax = fig.add_subplot(1, 1, 1)
ax.plot(orderd_history)

plt.show()

output_11_0.png

이렇게 하면 대략 위와 같은 그래프를 얻을 수가 있죠.

이것으로 확인할수 있는 내용은, 최근 1시간동안 이런 가격으로 거래가 되고 있었구나 정도 입니다.

물론 해당 내용은 거래소에서 제공하는 그래프를 이용하면 훨씬 더 자세한 내용을 볼수 있지만, 저는 개발자니깐.. 한번 정도는 직접 해보는 것이 좋겠죠 ^^

다음에는 하나의 여로 코인을 하나의 그래프에 겹쳐그리는 방법을 정리해 볼까 합니다.
다음 포스팅도 기대해 주세요~

코인 거래 데이터를 읽어와 그래프를 그려보자 | Ecency