English
Languages
English
Japanese
German
Korean
Portuguese, Brazilian
French
Shortcuts

Source code for qiskit.finance.data_providers.wikipedia_data_provider

# This code is part of Qiskit.
#
# (C) Copyright IBM 2019, 2020.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

""" Wikipedia data provider. """

from typing import Optional, Union, List
import datetime
import logging

from qiskit.aqua import MissingOptionalLibraryError
from ._base_data_provider import BaseDataProvider
from ..exceptions import QiskitFinanceError

try:
    import quandl
    _HAS_QUANDL = True
except ImportError:
    _HAS_QUANDL = False

logger = logging.getLogger(__name__)


[docs]class WikipediaDataProvider(BaseDataProvider): """Wikipedia data provider. Please see: https://github.com/Qiskit/qiskit-tutorials/blob/master/legacy_tutorials/aqua/finance/data_providers/time_series.ipynb for instructions on use. """
[docs] def __init__(self, token: Optional[str] = None, tickers: Optional[Union[str, List[str]]] = None, start: datetime.datetime = datetime.datetime(2016, 1, 1), end: datetime.datetime = datetime.datetime(2016, 1, 30)) -> None: """ Initializer Args: token: quandl access token, which is not needed, strictly speaking tickers: tickers start: start time end: end time Raises: MissingOptionalLibraryError: Quandl not installed """ super().__init__() if not _HAS_QUANDL: raise MissingOptionalLibraryError( libname='Quandl', name='WikipediaDataProvider', pip_install='pip install quandl') self._tickers = None # type: Optional[Union[str, List[str]]] tickers = tickers if tickers is not None else [] if isinstance(tickers, list): self._tickers = tickers else: self._tickers = tickers.replace('\n', ';').split(";") self._n = len(self._tickers) self._token = token self._tickers = tickers self._start = start.strftime('%Y-%m-%d') self._end = end.strftime('%Y-%m-%d') self._data = []
[docs] def run(self) -> None: """ Loads data, thus enabling get_similarity_matrix and get_covariance_matrix methods in the base class. """ quandl.ApiConfig.api_key = self._token quandl.ApiConfig.api_version = '2015-04-09' self._data = [] stocks_notfound = [] for _, ticker_name in enumerate(self._tickers): stock_data = None name = 'WIKI' + "/" + ticker_name try: stock_data = quandl.get(name, start_date=self._start, end_date=self._end) except quandl.AuthenticationError as ex: raise QiskitFinanceError("Quandl invalid token.") from ex except quandl.NotFoundError as ex: stocks_notfound.append(name) continue except quandl.QuandlError as ex: raise QiskitFinanceError("Quandl Error for '{}'.".format(name)) from ex try: self._data.append(stock_data["Adj. Close"]) except KeyError as ex: raise QiskitFinanceError("Cannot parse quandl output.") from ex if stocks_notfound: raise QiskitFinanceError('Stocks not found: {}. '.format(stocks_notfound))

© Copyright 2020, Qiskit Development Team. Last updated on 2021/05/25.

Built with Sphinx using a theme provided by Read the Docs.