在本文中,将向展示如何通过Python从互联网获取股市和加密货币市场的数据,并基于这些数据创建机器学习模型。将探索两种方法,它们都使用Yahoo Finance Python作为数据源,因为它是免费的,无需注册。当然,也可以选择其他数据源,如Quandl、Tiingo、IEX Cloud等。
在开始之前,需要导入一些必要的Python库。将使用以下模块:
import pandas as pd
import yfinance as yf
from yahoofinancials import YahooFinancials
如果尚未安装这些库,可以通过pip进行安装:
!pip install yfinance
!pip install yahoofinancials
yfinance模块,原名为‘fix_yahoo_finance’,现在已经成为一个独立的模块,虽然它不是Yahoo的官方模块,但它是一个非常受欢迎的Python友好型库。这个库可以用于下载股票价格和加密货币价格等多种用途。下面,将通过代码下载苹果公司的股票价格。
aapl_df = yf.download('AAPL',
start='2019-01-01',
end='2021-06-12',
progress=False)
print(aapl_df.head())
数据间隔默认为1天,但可以通过参数如1m, 5m, 15m, 30m, 60m, 1h, 1d, 1wk, 1mo等进行外部指定。上述命令显示了下载数据的开始和结束日期,但也可以使用以下代码简单地下载数据:
aapl_df = yf.download('AAPL')
下载函数有许多参数,可以在文档中找到它们,其中start和end是最常用的。由于数据量较小,进度条被设置为false,对于大量数据,显示进度条是有意义的。
还可以一次性下载多个股票的价格。通过提供一个公司名称列表(例如['FB', 'MSFT', 'AAPL'])作为tickers参数,还可以提供一个额外的参数auto-adjust=True,以便所有当前价格都根据潜在的企业行动(如分割)进行调整。
除了yf.download函数,还可以使用ticker模块,并执行以下代码下载苹果公司过去5年的股票价格:
ticker = yf.Ticker('AAPL')
aapl_df = ticker.history(period="5y")
aapl_df['Close'].plot(title="APPLE's stock price")
使用ticker模块的一个优势是,可以利用与之相关的多种方法。可以使用的方法包括:
如果想了解更多关于这些函数的工作方式,可以查看yfinance的GitHub仓库。
第二种方法是使用yahoofinancials模块,这个模块比yfinance稍微难用一些,但它提供了比yfinance更多的信息。将首先下载苹果公司的股票价格。为此,将传递一个YahooFinancials对象,传入苹果的ticker名称,然后使用各种重要信息来获取所需的数据。这里返回的数据是JSON格式的,因此需要对其进行美化,以便将其转换为DataFrame以正确显示。
yahoo_financials = YahooFinancials('AAPL')
data = yahoo_financials.get_historical_price_data(start_date='2019-01-01',
end_date='2019-12-31',
time_interval='weekly')
aapl_df = pd.DataFrame(data['AAPL']['prices'])
aapl_df = aapl_df.drop('date', axis=1).set_index('formatted_date')
aapl_df.head()
从技术层面来看,获取历史股票价格的过程比yfinance要长一些,这主要是因为数据量较大。现在来看一些yahoofinancials的重要函数:
上述模块还可以像yfinance一样一次性下载公司数据,也可以下载加密货币数据,如下所示:
yahoo_financials = YahooFinancials('BTC-USD')
data=yahoo_financials.get_historical_price_data("2019-07-10", "2021-05-30", "monthly")
btc_df = pd.DataFrame(data['BTC-USD']['prices'])
btc_df = btc_df.drop('date', axis=1).set_index('formatted_date')
btc_df.head()