見出し画像

勉強用に金融トランザクション・データを入手する

Spark を使った分析アプリケーション構築を作るに際して、ある程度の規模を持ったトランザクション・データが欲しかったので、暗号資産の取引データを入手してみました。
Googleで検索した感じ、日本語での説明書きがなかったので、記録として残しておきます。

1.データソースの選定

Blockchain から直接入手

暗号資産のデータはブロックチェーンから直接取得することが可能です。Github 上でETLプロジェクトが共有されており、Pythonであれば pip でプロジェクトを入手して、自分のアプリに組み込むことも可能です。

(結論)
ストリームでのデータ入手も可能で自由度は高いですが、ビットコイン・ノードのインストールが必要で環境構築が面倒だったので利用を断念しました。

Google BigQuery から入手

Google BigQuery から暗号資産のデータに対するクエリ実行と、CSVやJSON形式でのデータのダウンロードが可能です。Google アカウントがあれば無償で利用可能で、日本語で解説したQiitaの記事もあるため、かなりハードルは低いと思います。

(結論)
BigQueryは、最大1GBのデータ・ダウンロードが可能(※フォーマットによって異なる)ですが、ビットコインのデータは、1か月で最低でも数GBになるため、半年分くらいのデータが欲しかった私の利用用途には適合しませんでした。

AWS Public Blockchain Data から入手

こちらのデータ・セットは、2009年からのビットコインと2015年からのイーサリアムのみが対象となっていますが、1日単位で Parquet 形式に分割されて S3 上に保存されています。ダウンロードするために、AWS CLIのインストールは必要でしたが、AWSアカウントでの認証は不要です。

(結論)
入手が容易で、入手後のファイル形式も Spark でハンドリングする上では問題にならないので、こちらの手法で進めることとしました。

2.データの入手手順

AWS CLI のインストール

今回、私は WSL 上に環境構築しているため、AWS CLI install and update instructions を参考に、AWS CLI をインストールします。

$ sudo apt install unzip
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
rm awscliv2.zip
sudo ./aws/install

ファイルの確認

AWS CLI のインストールが完了したら、コマンドラインを利用して、ファイルを確認してみます。S3のディレクトリについては Github の guidance-for-digital-assets-on-aws にしました。
下記コマンドでは、ビットコインの2020年2月6日付のトランザクションデータを確認しています。1日で約456MBのParquetファイルが生成されています。
日付を変えれば、他の日のデータを確認することも可能です。

$ aws s3 ls --no-sign-request s3://aws-public-blockchain/v1.0/btc/transactions/date=2020-02-06/
2022-09-16 06:28:20  456230891 part-00000-4cbf63db-6734-4292-bbe2-6530ec2b92ca-c000.snappy.parquet
$ aws s3 ls --no-sign-request s3://aws-public-blockchain/v1.0/btc/transactions/date=2009-01-03/
2022-09-16 01:27:14       8807 part-00000-bdd84ab2-82e9-4a79-8212-7accd76815e8-c000.snappy.parquet

ファイルのダウンロード

上記 ls コマンド と同じ要領で cp コマンドを使うことで、ローカルにファイルをコピーすることができます。

$ aws s3 cp s3://aws-public-blockchain/v1.0/btc/transactions/date=2009-01-03/ ./ --recursive --no-sign-request 
download: s3://aws-public-blockchain/v1.0/btc/transactions/date=2009-01-03/part-00000-bdd84ab2-82e9-4a79-8212-7accd76815e8-c000.snappy.parquet to ./part-00000-bdd84ab2-82e9-4a79-8212-7accd76815e8-c000.snappy.parquet
$ ls
part-00000-bdd84ab2-82e9-4a79-8212-7accd76815e8-c000.snappy.parquet

3.ファイルの一括入手

最後にファイルの一括入手に向けて、シェルスクリプトを組みます。
Cursor にお願いしてシェルスクリプトを生成します。 これを実行することで、必要なブロックチェーンのデータを入手することができました。

Cursor のプロンプトと出力されたコードのイメージ


この記事が気に入ったらサポートをしてみませんか?