如何获取比特币历史价格数据

2023-12-30 00:02:00 147小编

大家好久不见,停更的这段时间,学习与思考了很多方面事情,所以今年的博文可能没有一个固定的主题,大方向还是区块链、人工智能和投资相关,感谢继续关注。

随着智能时代的到来,数据获取与处理的技能在工作中越来越重要,李笑来老师甚至这样说:

到了最近,不懂数据分析的,也开始算作文盲了。许多年前人们惊呼信息时代来了的时候,其实暂时体会不到什么太多的不同。然而,许多年过去,互联网上的格式化数据越来越多,不仅如此,实时产出的格式化数据也越来越多,于是,数据分析不仅成了必备的能力,而且早就开始直接影响一个人的薪资水平。

所以我们今天从零开始,从获取数据开始。我们例子是获取比特币的历史上每天的价格与成交量数据。使用的工具是 python 3.7 和 Juypter Notebook,我建议不直接安装这两个工具,而是使用一个叫 Anaconda 的软件,这个软件包含了 python 做数据处理时所需要的大部分依赖包,当然也包含了 Juypter Notebook,比自己管理依赖包要方便。有关 python 和 Juypter Notebook 的基础教程有很多,如果想看下去一定要提前了解一下。

欧意易交易所
Juypter Notebook

进入正题,首先我们想想,在哪可以找到比特币的历史上每天的价格数据?现成的数据文件肯定是有的,但是很难找到每天都更新的,所以这里就有两个方向:一是雅虎金融,这里有全世界各个金融市场的历史数据,包括加密货币的;二是区块链行业的各大网站,比如专门统计数据的 http://coinmarketcap.com 以及各大交易所提供的 API,所以大家可以各显神通,这里说一下我的思路:

打开 coinmarketcap.com 页面,在页面按F12,打开调试界面的“网络”选项卡。这时候点历史数据,设置一个时间,确定之后能看到浏览器发起了一个新的网络请求,拉取新的历史数据,可以看到请求的地址和返回的数据结构。这是是一个典型的 Https GET 请求,把途中路径用浏览器打开就可以看到返回数据。

欧意易交易所
获取网站接口信息
欧意易交易所
接口的数据结构

我们用 python 的 request 模块实现这个接口数据的获取。代码如下,其中被注释掉的代码是调试使用的。

import time import requests import json import csv time_stamp = int(time.time()) print(f"Now timestamp: {time_stamp}") # 1367107200 request_link = f"https://web-api.coinmarketcap.com/v1/cryptocurrency/ohlcv/historical?convert=USD&slug=bitcoin&time_end={time_stamp}&time_start=1367107200" print("Request link: " + request_link) r = requests.get(url = request_link) #print(r.content) # 返回的数据是 JSON 格式,使用 json 模块解析 content = json.loads(r.content) #print(type(content)) quoteList = content[data][quotes] #print(quoteList)

如果顺利没报错的话,数据已经下载下来并保存在内存中了,一般来说我们还要把数据在硬盘里保存一下,以后使用数据的时候就不需要再次下载了。如果是比较小的数据(几十 MB 以内),用 csv 文件保存就行。如果是比较大的数据可以考虑 MySQL 数据库或者 NoSQL 数据库,再大的(超过 PB)就要考虑 Hadoop 这种大数据框架了。

# 将数据保存为 BTC.csv # for windows, newline= with open(BTC.csv,w ,encoding=utf8,newline=) as f: csv_write = csv.writer(f) csv_head = ["Date","Price","Volume"] csv_write.writerow(csv_head) for quote in quoteList: quote_date = quote["time_open"][:10] quote_price = "{:.2f}".format(quote["quote"]["USD"]["close"]) quote_volume = "{:.2f}".format(quote["quote"]["USD"]["volume"]) csv_write.writerow([quote_date, quote_price, quote_volume]) print("Done")

运行完毕之后,本地会多出一个 BTC.csv 文件。Excel 熟练的同学甚至可以开始数据处理和分析了。

欧意易交易所
生成的 CSV 文件

但 Excel 对机器学习的支持并不好,我们后续肯定不会满足于只获取数据,所以还是要回到 python 上来,我们用 pandas 将 csv 文件读取到内存中:

import pandas as pd series = pd.DataFrame() df = pd.read_csv("BTC.csv") series[Date] = df[Date].tolist() series[Price] = df[Price].tolist() series[Volume] = df[Volume].tolist() print(series)

得到下面这些输出:

Date Price Volume 0 2013-04-29 144.54 0.000000e+00 1 2013-04-30 139.00 0.000000e+00 2 2013-05-01 116.99 0.000000e+00 3 2013-05-02 105.21 0.000000e+00 4 2013-05-03 97.75 0.000000e+00 ... ... ... ... 2487 2020-02-19 9633.39 4.699202e+10 2488 2020-02-20 9608.48 4.492526e+10 2489 2020-02-21 9686.44 4.093055e+10 2490 2020-02-22 9663.18 3.583803e+10 2491 2020-02-23 9924.52 4.118519e+10 [2492 rows x 3 columns]

看着2013年的价格真是。。。好了,数据已经在内存里了,我们用 pyplot 将数据画个图展示一下:

import matplotlib.pyplot as plt ax = plt.gca() series.plot(kind=line, x=Date, y=Price, ax=ax) plt.show() plt.cla() ax = plt.gca() series.plot(kind=line, x=Date, y=Volume, ax=ax) plt.show()

得到下面的曲线图,今天就大功告成了:

欧意易交易所

源码:https://github.com/xxd9980/get-histical-data-from-coinmarketcap

最后的最后,希望大家都能动手实战一下,真的不难,下面的书推荐给你。

首页
欧意官网
欧意安卓下载
okx国际官网