使用Python和Pandas收集比特币历史数据

2020-09-09 10:25 栏目:经验之谈 来源:网络整理 查看()

总体而言,最近几个月比特币和密码货币一直在上涨。自3月份突然崩盘以来,比特币的反应非常好,其价格自那以来几乎翻了一番。再加上本月早些时候广为宣传的减半事件,许多人现在都很好奇,想开始投资比特币。

使用Python和Pandas收集比特币历史数据

这里我展示了Python代码,它开始分析比特币并将其转换成可用的形式。我将使用熊猫库来演示使用Python是多么容易。

如果你对密码货币不感兴趣,这也可能是一个很好的教程来展示Python和panasus在数据操作和分析方面的能力,并且可能有一些有用的代码片段可以应用到其他项目中。

安装熊猫图书馆

首先,如果你还没有熊猫图书馆,你需要安装它。只需从命令行运行以下命令。

pip安装熊猫

或者您可以像我一样使用Anaconda,您可以在您使用它的环境中打开Anaconda终端,然后输入以下命令。

conda安装熊猫

如果没有错误,应该正确安装库。我们很快就要做最后的测试了。

对于数据分析,我发现Jupyter Notebook是最好的集成开发环境,因为它允许您分块运行代码片段,所以在导入和处理大型数据集时可以节省大量时间。但是任何集成开发环境都可以。

所以现在做一些编码.

打开一个新脚本并保存它。第一个任务是测试熊猫图书馆是否安装正确。

运行以下代码将库导入脚本。如果没有错误,您可以继续学习本教程的其余部分。

进口熊猫作为pd

获取数据集

我将使用的数据来自Kaggle,它是世界上最大的数据科学社区,也是发现大量数据集的最佳场所之一。该特定数据集是比特币从2012年1月1日到2020年4月22日的历史分钟数据。

将csv文件下载并保存到与脚本相同的目录后,现在将加载数据。因此,我们在熊猫中使用pd.read_csv()方法将数据文件名作为字符串传递。这将创建一个包含csv文件中所有数据的数据框。

我们还将运行。head()方法,它显示了前五行数据。如您所见,有一行数据后跟四行连续的NaN值。这是由于缺少一些数据,所以我们需要做一些清洁工作。这是由许多原因造成的,但是在这个数据集的早期,数据不是每分钟都存档的,所以大量的数据丢失了。

raw _ data=PD . read _ CSV(' BitStampusd _ 1-min _ data _ 2012-01-01 _ to _ 2020-04-22 . CSV ')

raw_data.head()

使用Python和Pandas收集比特币历史数据

运行。方法将显示最后5行,您可以看到这5行实际上已经满了。此外,请注意数据框索引列中数据集的行数(最左边)超过400万!这对Excel来说太多了,但是Python和熊猫可以轻松处理。

raw_data.tail()

使用Python和Pandas收集比特币历史数据

清理和格式化数据帧

所以现在我们要创建一个数据框架,其中所有的NaN值都被删除。对熊猫来说,这很简单。我们只使用。方法,并将其分配给我们称为df的新数据帧。这是一个包含所有有用数据的数据框架,将用于未来的分析。

我们也称之为。方法来重置索引列。这将为第一行数据分配一个索引值,从0开始为第二行分配一个索引值,依此类推。我们还将在原地传递参数=真。这在熊猫中很常见,它的功能是告诉Python,我们希望我们的原始数据框架是这个数据框架的新编辑版本。如果inplace未设置为True,我们正在处理的数据帧在运行该行后将保持不变。使用。head()方法并查看索引值来探索这种行为。

我们还传递了第二个参数drop=真。默认情况下。reset_index()方法重置数据索引,但原始索引列被复制到名为“index”的新列中。我们没有使用这个额外的列,所以我们删除了它。这也可以通过使用。方法,并指定要删除的列的名称。

df=raw_data.dropna()

重置索引(就地=真,丢弃=真)

df.head()

使用Python和Pandas收集比特币历史数据

更改时间戳格式

您可能会看到“时间戳”列的格式非常奇怪,它实际上是UNIX时间格式,所以我们想将其转换为世界协调时时间。为此,我们使用pd.to_datetime()方法。我们将传递要执行此函数的数据的参数,即数据的“时间戳”列,参数单位='s ',它告诉UNIX函数输入的时间单位是秒。我们使用下面的代码行将这个函数的输出保存到数据帧中的“时间戳”列。请注意,当引用熊猫列中的数据时,我们使用以下概念df ['时间戳']。方括号中传递的字符串是列的名称。

df['时间戳']=pd.to_datetime(df['时间戳'],单位='s ')

df.head()

使用Python和Pandas收集比特币历史数据

我们可以在这里看到,部分数据集实际上来自2011年。为了完整起见,我将删除这四行。当只有几行要删除时,最简单的方法就是在列表中指定该行的索引,并将其传递给。drop()方法。我们还必须再次传递参数inplace=True。最后像以前一样修复索引。

下降([0,1,2,3],原位=真)

重置索引(就地=真,丢弃=真)

df.head()

使用Python和Pandas收集比特币历史数据

为目视检查绘制数据

因此,我们现在的数据结构是好的,我们希望所有的数据都在数据框中。这是一个非常快速的检查,以确保此时一切看起来都很好,只需绘制一段时间内比特币的价格即可。我们将运行。方法,然后指定x轴和y轴之外的列。那个。熊猫中的plot()方法实际上使用matplotlib库在背景中显示图形,并尝试为轴选择合理的默认设置。当然,您可以根据需要定制图表。

图(x='时间戳',y='加权价格')

使用Python和Pandas收集比特币历史数据

创建新列

太好了。因此,我们的数据似乎是正确的,所以我们可以继续进行更有趣的部分,即分析或操作数据。您可能想做的一件事是创建一个新列,并以某种方式处理数据。一个例子是找出每个连续时间点之间的差异。

我们可以使用一个名为。为了实现这一点,在熊猫中使用diff()。我们只需要使用下面的符号df ["新列的标题"]来指定要创建的列,并将其设置为我们希望通过。diff()方法。

df['closeDiff']=df['Close']。差异()

df.head()

使用Python和Pandas收集比特币历史数据

请注意,我们创建的新列名为“closeDiff”。

现在让我们想象一下,我们想要为数据中的每一年创建一个数据框架。例如,数据帧df19包含自2019年以来的所有数据。一种方法是首先创建一个名为“年”的列,其中包含每个数据点的年值。然后,我们将创建一个新的数据框,其中只包含年份列等于2019的数据行。

为此,我们将首先创建一个“年”列。我们在pd中输入“时间戳”列。DatetimeIndex类并要求。年份属性。这将返回每个时间戳的年值,并将该数据分配给一个新列,我们将其定义为“年”。

df['year']=pd。日期时间索引(df['时间戳'])。年

df.head()

使用Python和Pandas收集比特币历史数据

因此,现在我们需要一个新的数据帧df19,它包含数据帧df中的所有行,并且“年份”列中的值是2019。为此,我们编写了以下代码行。这种表示法可能会造成一些混乱,但我们在这里只是说,获取数据框df的所有行,其中“年”列等于2019,然后将其分配给名为df19的新数据框。

df19=df[df['年']==2019]

df19 .重置_索引(就地=真,丢弃=真)

df19.head()

使用Python和Pandas收集比特币历史数据

现在我们可以像以前一样画图表,但是这次我们只画2019年的数据。

df19 .绘图(x='时间戳',y='加权价格')

使用Python和Pandas收集比特币历史数据

保存数据

现在您有了干净的数据,也许您已经将它添加到数据中,或者成为数据的子集。通常会保存这些数据,这样您就不必再次运行这些代码。它很容易使用。to_csv()方法。以下是我用来保存df19数据帧以便将来使用的代码。传递给此方法的第一个参数是您想要保存的文件名,index=False告诉Python不要保存csv文件中通常不需要的列中的数据帧的索引。

df19.to_csv('btc19.csv ',索引=False)

有了它,这是一个基本的框架,允许你开始使用这个比特币历史数据集,以及一些可以用Python和熊猫完成的基本操作。完整的压缩代码。头()和。tail()调用可以在下面找到。

进口熊猫作为pd

raw _ data=PD . read _ CSV(' BitStampusd _ 1-min _ data _ 2012-01-01 _ to _ 2020-04-22 . CSV ')

df=raw_data.dropna()

重置索引(就地=真,丢弃=真)

df['时间戳']=pd.to_datetime(df['时间戳'],单位='s ')

下降([0,1,2,3],原位=真)

重置索引(就地=真,丢弃=真)

图(x='时间戳',y='加权价格')

df['closeDiff']=df['Close']。差异()

df['year']=pd。日期时间索引(df['时间戳'])。年

df19=df[df['年']==2019]

df19 .重置_索引(就地=真,丢弃=真)

df19 .绘图(x='时间戳',y='加权价格')

df19.to_csv('btc19.csv ',索引=False)

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发