본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
금융 데이터 분석

비트코인(암호화폐) 가격 불러오기 in R

by 아참형인간 2022. 8. 21.
crypto2.knit

암호화폐 정보를 위한 crypto2

최근 암호 화폐의 인기가 높아짐에 따라 암호 화폐 데이터에 대한 정보의 분석도 금융권 데이터 분석에 큰 화두가 되고 있다. 그러다보니 당연히 R에서도 암호 화폐를 전문적으로 다루는 패키지가 개발되었다. crypto2가 바로 그것인데 crypto2는 지금은 제공되고 있지 않는 crypto 패키지의 개선판이다. crypto2에서 제공하는 정보는 암호화폐 정보를 전문적으로 다루는 https://coinmarketcap.com/의 정보를 기반으로 제공하는데 이 사이트에서 제공하는 API를 기반으로 제작되었다. 패키지 자체에서 모든 API 접속이 이루어지기 때문에 사용자는 API 접속 키를 따로 받지 않아도 사용할 수 있는 장점이 있지만 이 사이트에서 제공하는 정보에 한정된다는 단점도 있다.

crypto2 패키지에서는 총 7개의 함수를 제공하는데 이 함수들 중 주요한 함수를 살펴보겠다.

설치

crypto2 패키지는 현재(2020-08-20) CRAN에 정식 등록되어 있기 때문에 install.packages()를 사용하여 간단히 설치가 가능하다.

if (!require(crypto2)) {
  install.packages('crypto2')
  library(crypto2)
}

암호 화페 리스트 가져오기

앞서 설명했듯이 crypto2https://coinmarketcap.com/의 정보를 가져온다. 이 정보중에 가장 기본적인 것이 이 사이트에서 제공하는 암호화폐의 리스트를 알아보는 것일 것이다. CMC에서 제공하는 암호화폐의 종류는 crypto_list()를 사용하여 가져올 수 있다. crypto_list()로 가져올수 있는 정보는 id, name, symbol 등 8개의 정보이고 이들은 tibble 형태로 반환된다.

list_crypto <- crypto_list(only_active=TRUE)

glimpse(list_crypto)
## Rows: 9,662
## Columns: 8
## $ id                    <int> 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 18, 25, 35, 37,~
## $ name                  <chr> "Bitcoin", "Litecoin", "Namecoin", "Terracoin", ~
## $ symbol                <chr> "BTC", "LTC", "NMC", "TRC", "PPC", "NVC", "FTC",~
## $ slug                  <chr> "bitcoin", "litecoin", "namecoin", "terracoin", ~
## $ rank                  <int> 1, 21, 664, 1763, 744, 2394, 1391, 1991, 1708, 7~
## $ is_active             <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ~
## $ first_historical_data <date> 2013-04-28, 2013-04-28, 2013-04-28, 2013-04-28,~
## $ last_historical_data  <date> 2022-08-20, 2022-08-20, 2022-08-20, 2022-08-20,~

위의 결과에서 보이는 바와 같이 현재 CMC에서 제공하는 암호화폐 정보 중 현재 거래되고 있는 암호화폐 총 9,660개의 정보를 가져온다.

이중 ’Bitcoin’과 ’Dogecoin’의 정보는 다음과 같다.

list_crypto |> filter(name %in% c('Bitcoin', 'Dogecoin'))
id name symbol slug rank is_active first_historical_data last_historical_data
1 Bitcoin BTC bitcoin 1 1 2013-04-28 2022-08-20
74 Dogecoin DOGE dogecoin 10 1 2013-12-15 2022-08-20

암호 화페 세부 정보 가져오기

CMC에서 제공하는 암호화폐의 종류를 가져왔으니 이제 분석 대상 암호 화폐의 세부 정보를 가져와야 한다. 특정 암호 화폐의 세부 정보를 가져오기 위해서는 crypto_info()를 사용한다. crypto_info()crypto_list()에서 가져온 데이터 중 분석 대상인 데이터에 대한 리스트를 매개변수로 전달하면 해당하는 암호 화폐에 대한 정보를 가져온다.

info_crypto <- crypto_info(list_crypto |> filter(name %in% c('Bitcoin', 'Dogecoin')), finalWait=FALSE)
## > Scraping crypto info
## Scraping  https://web-api.coinmarketcap.com/v1/cryptocurrency/info?id=1,74  with  64  characters!
## > Processing crypto info
## > Sleep for 60s before finishing to not have next function call end up with this data!
glimpse(info_crypto)
## Rows: 2
## Columns: 19
## $ id                               <int> 1, 74
## $ name                             <chr> "Bitcoin", "Dogecoin"
## $ symbol                           <chr> "BTC", "DOGE"
## $ category                         <chr> "coin", "coin"
## $ description                      <chr> "## What Is Bitcoin (BTC)?\n\nBitcoin~
## $ slug                             <chr> "bitcoin", "dogecoin"
## $ logo                             <chr> "https://s2.coinmarketcap.com/static/~
## $ subreddit                        <chr> "bitcoin", "dogecoin"
## $ notice                           <chr> "", ""
## $ date_added                       <chr> "2013-04-28T00:00:00.000Z", "2013-12-~
## $ twitter_username                 <chr> "", "dogecoin"
## $ is_hidden                        <int> 0, 0
## $ date_launched                    <lgl> NA, NA
## $ self_reported_circulating_supply <lgl> NA, NA
## $ self_reported_market_cap         <lgl> NA, NA
## $ tags                             <list> [<tbl_df[28 x 1]>], [<tbl_df[8 x 1]>]
## $ self_reported_tags               <lgl> NA, NA
## $ urls                             <list> [<tbl_df[10 x 2]>], [<tbl_df[12 x 2]>~
## $ platform                         <lgl> NA, NA

crypto_info()의 결과로 가져오는 정보는 총 19개의 열을 가진 tibble 객체이다. 이 객체의 열 중 2개는 중첩된 tibble을 포함한다.

중첩된 tibble은 다음과 같이 unnest()를 사용하면 정보를 확인할 수 있다.

info_crypto |> select(name, tags) |> unnest(tags) |> head()
name tags
Bitcoin mineable
Bitcoin pow
Bitcoin sha-256
Bitcoin store-of-value
Bitcoin state-channel
Bitcoin coinbase-ventures-portfolio
info_crypto |> select(slug, urls) |> unnest(urls) |> head()
slug name url
bitcoin website https://bitcoin.org/
bitcoin message_board https://bitcointalk.org
bitcoin explorer1 https://blockchain.coinmarketcap.com/chain/bitcoin
bitcoin explorer2 https://blockchain.info/
bitcoin explorer3 https://live.blockcypher.com/btc/
bitcoin explorer4 https://blockchair.com/bitcoin

암호 화페 가격 가져오기

암호 화폐를 분석하기 위해서 가장 필요한 것이 암호 화폐의 가격일 것이다. 이 데이터는 당연히 시계열 데이터로 다운로드 될 것이다.

암호 화폐 가격 데이터를 가져오기 위해서는 crypto_history()를 사용한다. 여기서 가져오는 가격 정보는 주식 정보와 유사한 시가(Open), 고가(High), 저가(Low), 종가(Close)와 이 가격에 사용된 화폐, 거래량 등이다. 주식과 달리 암호 화폐는 장의 시작과 종료가 없기 때문에 CMC에서 측정하는 OHLC는 매일의 시작(0시 0분 0초)과 매일의 끝(23시 59분 59초)을 기준으로 산출된다.

hist_crypto <- crypto_history(list_crypto, limit=3, start_date="20220101", end_date="20220820", finalWait=FALSE)
## > Scraping historical crypto data
## > Processing historical crypto data
timestamp id slug name symbol ref_cur open high low close volume market_cap time_open time_close time_high time_low
2022-01-01 23:59:59 1 bitcoin Bitcoin BTC USD 46311.74 47827.31 46288.49 47686.81 24582667004 902104193385 2022-01-01 2022-01-01 23:59:59 2022-01-01 17:49:00 2022-01-01 00:01:00
2022-01-02 23:59:59 1 bitcoin Bitcoin BTC USD 47680.93 47881.41 46856.94 47345.22 27951569547 895688387523 2022-01-02 2022-01-02 23:59:59 2022-01-02 17:08:00 2022-01-02 18:35:00
2022-01-03 23:59:59 1 bitcoin Bitcoin BTC USD 47343.54 47510.73 45835.96 46458.12 33071628362 878946596803 2022-01-03 2022-01-03 23:59:59 2022-01-03 12:19:00 2022-01-03 20:45:00
2022-01-04 23:59:59 1 bitcoin Bitcoin BTC USD 46458.85 47406.55 45752.46 45897.58 42494677905 868383282082 2022-01-04 2022-01-04 23:59:59 2022-01-04 15:17:00 2022-01-04 19:03:00
2022-01-05 23:59:59 1 bitcoin Bitcoin BTC USD 45899.36 46929.05 42798.22 43569.00 36851084859 824368284530 2022-01-05 2022-01-05 23:59:59 2022-01-05 10:11:00 2022-01-05 22:35:00
2022-01-06 23:59:59 1 bitcoin Bitcoin BTC USD 43565.51 43748.72 42645.54 43160.93 30208048289 816685390313 2022-01-06 2022-01-06 23:59:59 2022-01-06 01:20:00 2022-01-06 09:59:00

crypto_history()로 가져오는 가격 데이터의 간격은 매 1일 간격으로 가져온다. 만약 이 간격을 조절하기 위해서는 ‘interval’ 매개변수를 사용한다. 다음은 주 단위로 가격정보를 가져오는 코드이다.

hist_crypto_weekly <- crypto_history(list_crypto, limit=3, start_date="20220101", end_date="20220820", finalWait=FALSE, interval ="weekly")
## > Scraping historical crypto data
## > Processing historical crypto data
timestamp id slug name symbol ref_cur open high low close volume market_cap time_open time_close time_high time_low
2022-01-03 23:59:59 1 bitcoin Bitcoin BTC USD 47343.54 47510.73 45835.96 46458.12 33071628362 878946596803 2022-01-03 2022-01-03 23:59:59 2022-01-03 12:19:00 2022-01-03 20:45:00
2022-01-10 23:59:59 1 bitcoin Bitcoin BTC USD 41910.23 42199.49 39796.57 41821.26 32104232331 791484886194 2022-01-10 2022-01-10 23:59:59 2022-01-10 05:01:00 2022-01-10 14:37:00
2022-01-17 23:59:59 1 bitcoin Bitcoin BTC USD 43118.12 43179.39 41680.32 42250.55 21690904261 799910089279 2022-01-17 2022-01-17 23:59:59 2022-01-17 00:09:00 2022-01-17 22:18:00
2022-01-24 23:59:59 1 bitcoin Bitcoin BTC USD 36275.73 37247.52 33184.06 36654.33 41856658597 694196560317 2022-01-24 2022-01-24 23:59:59 2022-01-24 20:59:00 2022-01-24 11:07:00
2022-01-31 23:59:59 1 bitcoin Bitcoin BTC USD 37920.28 38647.26 36733.57 38483.13 20734730465 729073641688 2022-01-31 2022-01-31 23:59:59 2022-01-31 19:19:00 2022-01-31 02:07:00
2022-02-07 23:59:59 1 bitcoin Bitcoin BTC USD 42406.78 44401.86 41748.16 43840.29 28641855926 830838884165 2022-02-07 2022-02-07 23:59:59 2022-02-07 19:46:00 2022-02-07 00:50:00

crypto_history()에서의 암호 화폐 가격은 기본적으로 미국 달러(USD)로 설정되어 있다. 만약 이 통화를 다른 통화로 바꾸려면 ‘convert’ 매개변수를 사용한다. ’convert’에서 하나 이상의 통화로 변환하기 위해서는 콤마(,)를 사용하여 통화의 이름을 명기해주면 각각의 통화로 변환된 행들이 추가되어 변환된다.

hist_crypto <- crypto_history(list_crypto, convert = 'EUR, KRW', limit=3, start_date="20220101", end_date="20220820", finalWait=FALSE)
## > Scraping historical crypto data
## > Processing historical crypto data
timestamp id slug name symbol ref_cur open high low close volume market_cap time_open time_close time_high time_low
2022-01-01 23:59:06 1 bitcoin Bitcoin BTC EUR 4.071738e+04 4.204987e+04 4.069693e+04 4.192634e+04 2.161313e+10 7.931318e+11 2022-01-01 2022-01-01 23:59:59 2022-01-01 17:49:00 2022-01-01 00:01:00
2022-08-19 23:59:06 3 namecoin Namecoin NMC EUR 1.105026e+00 1.106187e+00 1.022230e+00 1.029409e+00 5.569530e+03 1.516979e+07 2022-08-19 2022-08-19 23:59:59 2022-08-19 00:48:00 2022-08-19 21:49:00
2022-01-01 23:59:06 1 bitcoin Bitcoin BTC KRW 5.505911e+07 5.686093e+07 5.503146e+07 5.669390e+07 2.922584e+13 1.072494e+15 2022-01-01 2022-01-01 23:59:59 2022-01-01 17:49:00 2022-01-01 00:01:00
2022-08-19 23:59:06 3 namecoin Namecoin NMC KRW 1.479713e+03 1.479443e+03 1.370472e+03 1.380097e+03 7.466896e+06 2.033766e+10 2022-08-19 2022-08-19 23:59:59 2022-08-19 00:48:00 2022-08-19 21:49:00

거래소 리스트와 정보

crypto2에서는 암호 화폐 자체의 정보외에 거래소에 대한 정보를 제공한다. exchange_list()를 사용하면 암호 화폐를 거래하는 거래소 리스트를 가져오고 exchange_info()는 거래소의 수수료나 거래량 등의 상세 정보를 가져올 수 있다.

list_exchanges <- exchange_list(only_active=TRUE)
list_exchanges |> head()
id name slug is_active first_historical_data last_historical_data
16 Poloniex poloniex 1 2018-04-26 2022-08-20
21 BTCC btcc 1 2018-04-26 2022-08-20
22 Bittrex bittrex 1 2018-04-26 2022-08-20
24 Kraken kraken 1 2018-04-26 2022-08-20
34 Bittylicious bittylicious 1 2018-04-26 2022-08-20
36 CEX.IO cex-io 1 2018-04-26 2022-08-20
info_exchange <- exchange_info(list_exchanges |> filter(name %in% c('Upbit', 'Bithumb', 'Korbit', 'Coinone')), finalWait=FALSE)
## > Scraping exchange info
## Scraping exchanges from  https://web-api.coinmarketcap.com/v1/exchange/info?id=174,194,200,351  with  69  characters!
## > Processing exchange info
id name slug description notice logo type date_launched is_hidden is_redistributable maker_fee taker_fee spot_volume_usd spot_volume_last_updated weekly_visits tags urls countries fiats
174 174 Coinone coinone NA https://s2.coinmarketcap.com/static/img/exchanges/64x64/174.png 2014-06-11T00:00:00.000Z 0 NA 0 0 130134802 2022-08-20 16:35:16 256177 NA twitter , chat , website , fee , https://twitter.com/CoinoneOfficial, https://coinone.co.kr/chat/ , https://coinone.co.kr/ , https://coinone.co.kr/fees/ NA KRW
194 194 Korbit korbit NA https://s2.coinmarketcap.com/static/img/exchanges/64x64/194.png 2013-07-25T00:00:00.000Z 0 NA 0 0 7020274 2022-08-20 16:35:16 36030 NA website , fee , https://www.korbit.co.kr , https://www.korbit.co.kr/notice/?id=6yMDTqvYPYGaGKoBvzKVo2 NA KRW
200 200 Bithumb bithumb Since its launch, Bithumb has developed from a Korea-focused cryptocurrency exchange to one that serves the global market. Bithumb aims to become a comprehensive digital financial corporation based on the blockchain.

각각 거래소의 수수료와 거래량은 다음과 같이 알아볼 수 있다.

info_exchange |> select(name, contains("fee"), contains("spot"))
name maker_fee taker_fee spot_volume_usd spot_volume_last_updated
Coinone 0 0 130134802 2022-08-20 16:35:16
Korbit 0 0 7020274 2022-08-20 16:35:16
Bithumb 0 0 600960260 2022-08-20 16:35:16
Upbit 0 0 1509503596 2022-08-20 16:35:16

댓글