5

私はここでかなり新しいので、助けてくれてありがとう。ビットコインのトランザクション チェーン全体を分析しようとしています。そのために、2つのテーブルを作成しようとしています

1) すべてのビットコイン アドレスとその残高の完全なリスト。

| | ID | 住所 | バランス |
-------------------------------
| | 1 | 7d4kExk... | 32 |
| | 2 | 9Eckjes... | 0 |
| | . | | ... | ... |

2) ビットコイン ネットワークの任意の 2 つのアドレス間で発生したトランザクション数の記録

| | ID | 送信者 | 受信機 | 取引 |
--------------------------------------------------
| | 1 | 7d4kExk... | klDk39D... | 2 |
| | 2 | 9Eckjes... | 7d4kExk... | 3 |
| | . | | ... | ... | .. |

これを行うために、すべてのブロックをループし、blockexplorer.com をスクレイピングしてテーブルをコンパイルする (おそらく非常に非効率的な) スクリプトを R で作成しました。これまでに数回実行してみましたが、主な問題が 2 つあります。

1 - 非常に遅い... このペースで少なくとも 1 週間はかかると想像できる

2 - ハングせずに 1 日か 2 日以上実行できませんでした。RStudioをフリーズしているようです。

次の 2 つの分野でご協力をお願いいたします。

1-コードを大幅に高速化するためにRでこれを行うより良い方法はありますか?

2 - このために R の使用を完全にやめて、別のアプローチを試す必要がありますか?

助けてくれてありがとう!私が使用している関連するコードのチャンクについては、以下を参照してください

url_start <- "http://blockexplorer.com/b/"
url_end <- ""

readUrl <- function(url) {  
  table <- try(readHTMLTable(url)[[1]])
  if(inherits(table,"try-error")){
    message(paste("URL does not seem to exist:", url))
    errors <- errors + 1
    return(NA)
  } else {
    processed <- processed + 1
    return(table)
  }

}

block_loop <- function (end, start = 0) {

...

  addr_row <- 1 #starting row to fill out table
  links_row <- 1 #starting row to fill out table      

  for (i in start:end) {
    print(paste0("Reading block: ",i))
    url <- paste(url_start,i,url_end, sep = "")
    table <- readUrl(url)

    if(is.na(table)){ next } 

....
4

1 に答える 1