{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# Using APIs for Data Imports \n", "\n", "This chapter starts by using [NASDAQ Data Link](https://data.nasdaq.com/tools/api) to download some BTC price and return data. We'll also see our first set of **simulations**. I'll then show you how to use [Pandas Data Reader](https://pandas-datareader.readthedocs.io/en/latest/).\n", "\n", "This is also our first time using an **API**. Their API, or Application Programming Interface, let's us talk to a remote data storage system and pull in what we need. APIs are more general, though, and are used whenever you need one application to talk to another.\n", "\n", "We'll use the [NASDAQ Data Link](https://data.nasdaq.com/tools/api). They also have [Python specific instructions](https://data.nasdaq.com/tools/python).\n", "\n", "You can read about the install [on their package page](https://pypi.org/project/Nasdaq-Data-Link/).\n", "\n", "\n", "We can again use `pip` to install packages via the command line or in your Jupyter notebook. \n", "\n", "```\n", "pip install nasdaq-data-link\n", "```\n", "\n", "To install a package directly in your notebook (e.g. in Google Colabs), use the `! pip` convention.\n", "\n", "```\n", "! pip install nasdaq-data-link\n", "```\n", "\n", "When you sign-up for NASDAQ Data Link, you'll get an API Key. You will need to add this key to the set-up to access the NASDAQ data using Quandl. \n", "\n", "I have saved my key locally and am bringing it in with `quandl.read_key`, so that it isn't publicly available. You don't need that bit of code.\n", "\n", "You can also install `pandas-datareader` using `pip`.\n", "\n", "```\n", "pip install pandas-datareader\n", "```\n", "\n", "Again, add the `! pip` if you're in Google Colab.\n", "\n", "Finally, for a large set of APIs for access data, check out [Rapid API](https://rapidapi.com/hub). Some are free, others you have to pay for. You'll need to get an access API key for each one. **This is a great way to get data for projects!**. More on this at the end of these notes." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Let's do our usual sort of set-up code." ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [], "source": [ "# Set-up\n", "\n", "import nasdaqdatalink # You could also do something like: import nasdaqdatalink as ndl\n", "import pandas_datareader as pdr\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import datetime as dt\n", "\n", "import matplotlib as mpl \n", "\n", "import matplotlib.pyplot as plt\n", "\n", "# Include this to have plots show up in your Jupyter notebook.\n", "%matplotlib inline \n", "\n", "# nasdaqdatalink.ApiConfig.api_key = 'YOUR_KEY_HERE'\n", "\n", "nasdaqdatalink.read_key()\n", "\n", "#nasdaqdatalink.read_key(filepath=\"/data/.corporatenasdaqdatalinkapikey\")\n", "#print(nasdaqdatalink.ApiConfig.api_key)" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Value
Date
1947-01-01243.164
1947-04-01245.968
1947-07-01249.585
1947-10-01259.745
1948-01-01265.742
......
2020-10-0121477.597
2021-01-0122038.226
2021-04-0122740.959
2021-07-0123202.344
2021-10-0123992.355
\n", "

300 rows × 1 columns

\n", "
" ], "text/plain": [ " Value\n", "Date \n", "1947-01-01 243.164\n", "1947-04-01 245.968\n", "1947-07-01 249.585\n", "1947-10-01 259.745\n", "1948-01-01 265.742\n", "... ...\n", "2020-10-01 21477.597\n", "2021-01-01 22038.226\n", "2021-04-01 22740.959\n", "2021-07-01 23202.344\n", "2021-10-01 23992.355\n", "\n", "[300 rows x 1 columns]" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gdp = nasdaqdatalink.get('FRED/GDP')\n", "gdp" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Value
Date
2023-04-1129656.24
2023-04-1230234.98
2023-04-1329899.24
2023-04-1430407.60
2023-04-1530486.05
\n", "
" ], "text/plain": [ " Value\n", "Date \n", "2023-04-11 29656.24\n", "2023-04-12 30234.98\n", "2023-04-13 29899.24\n", "2023-04-14 30407.60\n", "2023-04-15 30486.05" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "btc = nasdaqdatalink.get('BCHAIN/MKPRU')\n", "btc.tail()" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [], "source": [ "btc['ret'] = btc.pct_change().dropna()\n" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "btc = btc.loc['2015-01-01':,['Value', 'ret']]\n", "btc.plot()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Well, that's not a very good graph. The returns and price levels are in different units. Let's use an `f print` to show and format the average BTC return." ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Average return: 0.23%\n" ] } ], "source": [ "print(f'Average return: {100 * btc.ret.mean():.2f}%')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Let's make a cumulative return chart and daily return chart. We can then stack these on top of each other. I'll use the `.sub(1)` method to subtract 1 from the cumulative product. You see this a lot in the DataCamps." ] }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Valueretret_gret_c
Date
2015-01-01316.150.0014251.0014250.001425
2015-01-02314.81-0.0042380.995762-0.002819
2015-01-03270.93-0.1393860.860614-0.141812
2015-01-04276.800.0216661.021666-0.123218
2015-01-05263.17-0.0492410.950759-0.166392
...............
2023-04-1129656.240.0465861.04658692.938042
2023-04-1230234.980.0195151.01951594.771239
2023-04-1329899.24-0.0111040.98889693.707761
2023-04-1430407.600.0170021.01700295.318023
2023-04-1530486.050.0025801.00258095.566519
\n", "

3027 rows × 4 columns

\n", "
" ], "text/plain": [ " Value ret ret_g ret_c\n", "Date \n", "2015-01-01 316.15 0.001425 1.001425 0.001425\n", "2015-01-02 314.81 -0.004238 0.995762 -0.002819\n", "2015-01-03 270.93 -0.139386 0.860614 -0.141812\n", "2015-01-04 276.80 0.021666 1.021666 -0.123218\n", "2015-01-05 263.17 -0.049241 0.950759 -0.166392\n", "... ... ... ... ...\n", "2023-04-11 29656.24 0.046586 1.046586 92.938042\n", "2023-04-12 30234.98 0.019515 1.019515 94.771239\n", "2023-04-13 29899.24 -0.011104 0.988896 93.707761\n", "2023-04-14 30407.60 0.017002 1.017002 95.318023\n", "2023-04-15 30486.05 0.002580 1.002580 95.566519\n", "\n", "[3027 rows x 4 columns]" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "btc['ret_g'] = btc.ret.add(1) # gross return\n", "btc['ret_c'] = btc.ret_g.cumprod().sub(1) # cummulative return\n", "btc" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "We can now make a graph using the **fig, axs** method. This is good review! Again, notice that semi-colon at the end. This suppresses some annoying output in the Jupyter notebook. " ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(2, 1, sharex=True, sharey=False, figsize=(10, 6))\n", "\n", "axs[0].plot(btc.ret_c, 'g', label = 'BTC Cumulative Return')\n", "axs[1].plot(btc.ret, 'b', label = 'BTC Daily Return')\n", " \n", "axs[0].set_title('BTC Cumulative Returns')\n", "axs[1].set_title('BTC Daily Returns')\n", "\n", "axs[0].legend()\n", "axs[1].legend();\n", "\n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "I can make the same graph using the `.add_subplot()` syntax. The method above gives you some more flexibility, since you can give both plots the same x-axis." ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [ { "data": { "image/png": "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JNjY2Ag2NjbCoEGD8i3pXxoZ8p4OHTo0xzbHjh0z3AUbgKHuaUhISK5tyhpD3dPr168L7du3FxwdHQW5XC54e3sLo0ePFp48eWLgKzYMiSCUwZlTREREREREhVA2B14SEREREREVAhMjIiIiIiIq95gYERERERFRucfEiIiIiIiIyj0mRkREREREVO4xMSIiIiIionKPiREREREREZV7TIyIiIiIiKjcY2JERERERETlHhMjIiIiIiIq95gYERERERFRucfEiIiIiIiIyj0mRkREREREVO4xMSIiIiIionKPiREREREREZV7TIyIiIiIiKjcY2JERERERETlHhMjIiIiIiIq95gYERERERFRucfEiIiIiIiIyj0mRkREREREVO4xMSIiIiIionKPiREREREREZV7TIyIiIiIiKjcY2JERERERETlHhMjIiIiIiIq95gYERERERFRucfEiIiIiIiIyj0mRkREREREVO4xMSIiIiIionKPiREREREREZV7TIyIiIiIiKjcY2JERERERETlHhMjIiIiIiIq95gYERERERFRucfEiIiIiIiIyj0mRkREREREVO4xMSIiIiIionKPiREREREREZV7TIyIiIiIiKjcY2JERERERETlHhMjIiIiIiIq95gYERERERFRucfEiIiIiIiIyj0mRkREREREVO4xMSIiIiIionKPiREREREREZV7TIyIiIiIiKjcY2JERERERETlHhMjIiIiIiIq95gYERGVQmvXroVEItF4OTs7IyAgALt37xbbDRs2TKtdTq9hw4YBAJRKJX799Vd07NgRTk5OkMlkcHFxQffu3bFr1y4olco84/L29haPaWJiAjs7O9SqVQvvvvsuDh48WKxrDggIQEBAgMY6iUSC4ODgYh1XLTw8XOOemJiYwMHBAW+88UaRY09OTkZwcDCOHz+ukxiJiEh/TI0dABERFV1ISAhq1qwJQRAQFRWFJUuWICgoCDt37kRQUBC+/PJLjB49Wmx/5coVjB07FnPmzEH79u3F9c7OzkhNTUWvXr1w8OBB9O/fH8uXL4ebmxueP3+O/fv345133sGWLVvQs2fPPGNq1aoVfvjhBwBAYmIi7ty5g82bNyMwMBBvvfUWNm3aBJlMVuhrXbZsWaH3KYrx48dj4MCBUCgU+PfffzFr1ix07doVR48eRdu2bQt1rOTk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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(10, 6))\n", "\n", "ax1 = fig.add_subplot(2, 1, 1)\n", "ax1.plot(btc.ret_c, 'g', label = 'BTC Cumulative Return')\n", "\n", "ax2 = fig.add_subplot(2, 1, 2)\n", "ax2.plot(btc.ret, 'b', label = 'BTC Daily Return')\n", "\n", "ax1.set_title('BTC Cumulative Returns')\n", "ax2.set_title('BTC Daily Returns')\n", "\n", "ax1.legend()\n", "ax2.legend()\n", "\n", "plt.subplots_adjust(wspace=0.5, hspace=0.5);\n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Let's put together some ideas, write a function, and run a simulation. We'll use something called **geometric brownian motion** (GBM). What is GBM? It is a particular [stochastic differential equation](https://arxiv.org/pdf/1504.05309.pdf). But, what's important for us is the idea, which is fairly simple. Here's the formula:\n", "\n", "\\begin{align}\n", "dS = \\mu S dt + \\sigma S dW_t\n", "\\end{align}\n", "\n", "This says that the change in the stock price has two components - a **drift**, or average increase over time, and a **shock** that it is random at each point in time. The shock is scaled by the standard deviation of returns that you use. So, larger standard deviation, the bigger the shocks can be. This is basically the simplest way that you can model an asset price.\n", "\n", "The shocks are what make the price wiggle around around, or else it would just go up over time, based on the drift value that we use.\n", "\n", "And, I'll stress - we aren't predicting here, so to speak. We are trying to capture some basic reality about how an asset moves and then seeing what is possible in the future. We aren't making a statement about whether we think an asset is overvalued or undervalued, will go up or down, etc.\n", "\n", "You can solve this equation to get the value of the asset at any point in time t. You just need to know the total of all of the shocks at time t.\n", "\n", "\\begin{align}\n", "S(t) = S(0) \\exp \\left(\\left(\\mu - \\frac{1}{2}\\sigma^2\\right)t + \\sigma W(t)\\right)\n", "\\end{align}" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [], "source": [ "T = 30 # How long is our simulation? Let's do 31 days (0 to 30 the way Python counts)\n", "N = 30 # number of time points in the prediction time horizon, making this the same as T means that we will simulate daily returns \n", "S_0 = btc.Value[-1] # initial BTC price\n", "N_SIM = 100 # How many simulations to run?\n", "mu = btc.ret.mean()\n", "sigma = btc.ret.std()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "This is the basic syntax for writing a function in Python. We saw this earlier, back when doing \"Comp 101\". Remember, in Python, **indentation matters**!" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [], "source": [ "def simulate_gbm(s_0, mu, sigma, n_sims, T, N):\n", " dt = T/N # One day\n", " dW = np.random.normal(scale = np.sqrt(dt), \n", " size=(n_sims, N)) # The random part\n", " W = np.cumsum(dW, axis=1)\n", " time_step = np.linspace(dt, T, N)\n", " time_steps = np.broadcast_to(time_step, (n_sims, N))\n", " S_t = s_0 * np.exp((mu - 0.5 * sigma ** 2) * time_steps + sigma * np.sqrt(time_steps) * W)\n", " S_t = np.insert(S_t, 0, s_0, axis=1)\n", " return S_t" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Nothing happens when we define a function. We've just created something called `simulate_gbm` that we can now use just like any other Python function.\n", "\n", "We can look at each piece of the function code, with some numbers hard-coded, to get a sense of what's going on. This gets tricky - keep track of the dimensions. I think that's the hardest part. How many numbers are we creating in each array? What do they mean?" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [], "source": [ "# Creates 100 rows of 30 random numbers from the standard normal distribution.\n", "dW = np.random.normal(scale = np.sqrt(1), \n", " size=(100, 30))\n", "\n", "# cumulative sum along each row\n", "W = np.cumsum(dW, axis=1) \n", "\n", "# Array with numbers from 1 to 30\n", "time_step = np.linspace(1, 30, 30)\n", "\n", "# Expands that to be 100 rows of numbers from 1 to 30. This is going to be the t in the formula above. So, for the price on the 30th day, we have t=30.\n", "time_steps = np.broadcast_to(time_step, (100, 30))\n", "\n", "# This is the formula from above to find the value of the asset any any point in time t. np.exp is the natural number e. W is the cumulative sum of all of our random shocks.\n", "S_t = S_0 * np.exp((mu - 0.5 * sigma ** 2) * time_steps + sigma * np.sqrt(time_steps) * W)\n", "\n", "# This inserts the initial price at the start of each row.\n", "S_t = np.insert(S_t, 0, S_0, axis=1)\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "We can look at these individually, too." ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.22764375, 0.66616125, 0.2690296 , ..., 1.23724302,\n", " -1.7193544 , -0.31297741],\n", " [-0.37475192, -0.576506 , 2.83087209, ..., -0.39934126,\n", " -0.67269187, 0.80478657],\n", " [-0.34028403, 0.36534647, -0.42024997, ..., -1.23703819,\n", " -1.86703547, 1.67135591],\n", " ...,\n", " [-1.06306433, -0.05604163, -1.82729248, ..., 0.11109672,\n", " -0.54515618, 1.74339067],\n", " [-0.96750323, 0.17279 , -1.78542644, ..., -0.47524907,\n", " -0.13458806, -0.13247772],\n", " [ 0.06363717, -0.54343608, 1.01651732, ..., -0.12964301,\n", " -0.76946645, -0.86638566]])" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dW" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 2., 3., ..., 28., 29., 30.],\n", " [ 1., 2., 3., ..., 28., 29., 30.],\n", " [ 1., 2., 3., ..., 28., 29., 30.],\n", " ...,\n", " [ 1., 2., 3., ..., 28., 29., 30.],\n", " [ 1., 2., 3., ..., 28., 29., 30.],\n", " [ 1., 2., 3., ..., 28., 29., 30.]])" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "time_steps" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "100" ] }, "execution_count": 124, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(time_steps)" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(100, 30)" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.shape(time_steps)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "I do this kind of step-by-step break down **all of the time**. It's the only way I can understand what's going on.\n", "\n", "We can then use our function. This returns an `narray`. " ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [], "source": [ "gbm_simulations = simulate_gbm(S_0, mu, sigma, N_SIM, T, N)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "And, we can plot all of the simulations. I'm going to use `pandas` to plot, save to `ax`, and the style the `ax`." ] }, { "cell_type": "code", "execution_count": 127, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAG3CAYAAADo7xwFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABivUlEQVR4nO3de5gkVZkn/u85EZGZdc3q6ntD0zDIRbmJgNrcUWHtEcfLrqLjuK3juKuLPjq4q4M+M8A8rs2o8MPRhfH2iIzs4noBr6g40M2AutKIAyIKSAs90E1f65aVmRFxzvv740REZnZVd9clqzKz6vvRpKrzejIyKs8b73nPCSUiAiIiIqIm0K1uABERES0cDCyIiIioaRhYEBERUdMwsCAiIqKmYWBBRERETcPAgoiIiJqGgQURERE1DQMLIiIiahoGFkRERNQ0DCyIFpGbb74ZSim84x3vaHVTDunqq6+GUgpXX331vL3m0UcfDaUU/vjHP87baxItRAwsaFFJO48DL729vTj11FNx5ZVXYu/evQ2PufDCCyd9zOEu9ay1uO222/CmN70J69atQ3d3N3p6enDcccfhL/7iL/D9738f011dP45jfP7zn8dFF12EpUuXIggCrFixAqeccgre/va348tf/jL2798/6222ENxxxx24+uqr8etf/7rVTSFa8PxWN4CoFY477jisWLECgOv0d+zYgUceeQSPPPII/vmf/xn33Xcfjj76aADAKaecgjiOJzzH/fffDwA4+eSTUSwWD/paf/jDH/DGN74RDz/8MABgyZIlOOGEEyAiePrpp3Hrrbfi1ltvxRlnnIH77rsPhULhsO0fGRnBq1/9avz85z8HACxbtgynnHIKrLV48skn8Zvf/AZf+9rXsHLlSlx66aXZ44rFIk444QSsXr16ahtqgbjjjjvw1a9+FUcffTRe/OIXT3qfY489FoVCAUEQzG/jiBYYBha0KH30ox+dMBzw0EMP4dJLL8Wzzz6LD3/4w/i///f/AgA++9nPTvocaVbis5/9LC688MJJ7/P0009j/fr12L17N84880x86lOfwvnnnw+tXbLQGIN//dd/xSc+8QncddddqFQqUwos/sf/+B/4+c9/jmXLluGf//mf8epXvzq7zRiD+++/HzfffPOE53rDG96AN7zhDYd9/sXoX/7lX1rdBKIFgYEFUeL000/Hxz72MVx++eX46U9/2pTnfNvb3obdu3fjggsuwJ133omurq6G2z3Pw4UXXogLL7wQN954IzzPO+xzxnGMW2+9FQBwww03NAQV6XOef/75OP/885vyHoiIpoM1FkR11q1bBwAIw3DWz3X33Xfj/vvvRxAEuOWWWyYEFQf6b//tv6Gvr++wz7tr1y6USiUAOGha/2AOVry5efNmKKVw4YUXwhiDf/iHf8ALX/hCdHV14eijj8bVV1+dDQeVy2X87d/+LV7wghegUCjg2GOPxSc/+clJa0TS+pTNmzdP2p53vOMdUErh5ptvnlL7jTH4zne+g7/8y7/ESSedhGKxiO7ubrzwhS/Ehz/8YezZs6fh/n/84x+hlMJXv/pVAMA73/nOhjqY+uLQQxVvRlGEz372s3jpS1+K/v5+9PT04LTTTsP//J//E+Pj4xPun75uOpz2ta99DWeeeSa6u7sxODiIN73pTXjqqacmfY+/+c1v8La3vQ1r165FLpfDwMAAjjvuOPz5n/85fvSjH01pOxG1EjMWRHW2bt0KADjxxBNn/Vy33XYbAODSSy/FUUcdNevnS/X19UEpBRHBL3/5S5x00klNe24AuOyyy/Ctb30LL3zhC7Fu3To8/vjjuOaaa/DMM8/gxhtvxEUXXYStW7fipJNOwurVq/HUU0/hIx/5CEqlEq655pqmtuVAO3bswOtf/3porbFy5Uq84AUvwPj4OP74xz/iU5/6FL7xjW/gF7/4BVauXAkAKBQKOOecc/DEE09g165dDbU1AKb0uZTLZVx66aW4++67AQAvfOELEQQBfvOb3+Dhhx/GN7/5Tfz0pz/F0qVLJ338lVdeiWuvvRbr1q3D8ccfj9/97nf45je/ifvvvx8PP/wwli1blt33l7/8JS688EKUy2UUi0W86EUvgjEG27dvx//5P/8H4+PjEzJURG1HiBaRdevWCQD5yle+kl1njJFnn31WbrzxRunq6hKllHzzm9887HMBEAByzz33THr7SSedJADkhhtuaFLra8455xwBIH19fbJp0yZ54oknpvS4r3zlKwJANm7c2HD9PffcIwAkCAI58sgj5aGHHspu27x5s+RyOVFKyZ/92Z/JKaecIn/4wx+y22+99VYBIPl8Xvbt29fwvBdccMEht9HGjRsnfB4iIldddZUAkKuuuqrh+qGhIbn55ptl7969Ddfv379f3ve+9wkAecc73jHl16mX7hvbtm1ruP5DH/qQAJA1a9bIgw8+mF3/xBNPyIknnigA5M1vfnPDY7Zt2yYAxPd96e/vlx/+8IfZbTt27JBTTz1VAMhHPvKRhsddeumlAkA++tGPSrVabbjtgQcekFtvvfWg7SdqFwwsaFFJO4+DXc466yz58Y9/PKXnOlxgMTAwIADkO9/5ThPfgfNv//ZvsnTp0oa2L1u2TDZs2CD/8A//IM8888ykjztcYAFAbr/99gmPe+tb3yoARCklv/rVrybc/vKXv1wAyLe//e2G65sdWBzO2rVrpbu7W6IomtLr1JsssBgeHpbu7u6Dbpdf/vKX2XZ58skns+vTwAKAXHfddRMe993vflcAyKmnntpw/QknnCAAZHh4eGpvmKgNscaCFqXjjjsO55xzTnY54YQTkM/n8eCDD+LGG29syvoPo6OjAICenp5ZP9eBTj31VPzmN7/BX//1X2dp/z179uDOO+/ERz7yERx77LH42Mc+BmvttJ53cHAQr3/96ydcn9ZynH766Tj99NMn3J5ed7C6gWa7++678dd//dd4zWteg/PPPx/nnnsuzj33XAwPD2N8fBxPPPFEU17nvvvuw/j4OI466ii87nWvm3D7WWedhfXr10NEcNddd036HO9617smfRwwcXutXbsWALIZSUSdiDUWtChNNt10aGgIH/jAB3DLLbfgkksuwS9/+csJC11NR19fH4aGhrJCy2ZbtWoVrr/+elx//fV47LHH8MADD+Bf/uVf8N3vfhdDQ0P4xCc+gXw+j7/7u7+b8nMee+yxk16/fPnyKd0+NjY2zXcxPWEY4rLLLsMdd9xxyPvt27evKa/3+OOPA3A1NwfbF0466ST8/Oc/z+5bb9myZZOucZLWeRy4vT74wQ/ipz/9Kd797nfjuuuuw3/4D/8B5557brYIGlEnYMaCKDEwMIAvfOELOOKII7B161Z85zvfmdXzHXHEEQCAbdu2NaN5h/TCF74Q//k//2d89atfxZNPPolXvOIVAIBPfvKTqFarU36e7u7uSa9PO9XD3S7TXD10uq699lrccccdWLVqFW655Rb88Y9/RKVSgbhhXZxzzjkA3CyOZkg7/vqCzwOlGaM0Q1XvYNmqdB2TA73mNa/BD37wA5x99tl4/PHH8ZnPfAZvetObsGrVKrz5zW/Gs88+O923QDTvWhZY3HvvvXjta1+LNWvWQCl12COQyYgIPv3pT+P4449HPp/H2rVr8YlPfKL5jaVFI5/P4yUveQkAV6E/G2effTYAYMuWLbNu13QsXbo0W9SrVCrht7/97by+fr3DBRzTzeak63fcfPPNePvb345169Yhn89nt2/fvn2GLZ1cb28vADfF92Cef/55AJjSVOGp+NM//VPcf//92L17N+644w68//3vx8DAAL7xjW/gta99bdOCJqK50rLAolQq4bTTTsPnPve5GT/HBz7wAXzpS1/Cpz/9afzud7/D9773Pbz0pS9tYitpMUrrEmabTr/ssssAAN///vfxzDPPzLpd0/Enf/In2e/NWJNjptIj9t27d096+5NPPjmt50vXmEiDtnp79+496BH9TIe0jj/+eADAY489dtDg6NFHH224b7MMDg7ida97Hf7xH/8Rv/nNb1AsFvHQQw9lU6KJ2lXLAosNGzbg4x//ON74xjdOensYhvjwhz+MI444Aj09PXjZy17WsMjOY489hptuugnf+c538Gd/9mc45phj8OIXvxivetWr5ukd0EJUqVTw0EMPAWjsnGfila98JdavX48oirBx40ZUKpVD3v+f/umfJk2nHyiO48MWl/7sZz8D4FLuB6uLmA/pNnzggQcm3LZ161b827/927SeL11kLM0S1LvuuutgjDnk48rl8rRe79xzz0V3dze2b98+6dDY1q1b8fOf/xxKKVx88cXTeu7pWLlyJY455hgAwHPPPTdnr0PUDG1bY/HOd74T999/P2677TY8/PDDeNOb3oRXv/rVWbX39773PfzJn/wJvv/97+OYY47B0Ucfjb/6q79qWtEWLT779+/Hu9/9bjz33HPI5XJ485vfPOvnvPXWW7F06VJs3rwZ5513HjZv3twwU8Nai/vuuw+vfvWr8d73vvegHWO9sbExHH300fjwhz+MRx55pOFIWkTw/e9/Hxs3bgTgFueqX4Bpvm3YsAEA8MUvfrFhaOmJJ57Axo0b4fvTqx8/99xzAQAf+tCHsvoHEcEtt9yCT3/60wc9z0oa4Nx7773TqgPp7+/He9/7XgDA+973vizoBNzJ5dLt/OY3v7kpAdxb3vIW/OAHP5iQZfrmN7+JRx55BEqpSWflELWVFk1zbYAD5og/+eSTopSSZ599tuF+r3zlK+XKK68UEZH/+l//q+TzeXnZy14m9957r9xzzz3y4he/WC666KL5bDp1mHStguOOO07OOeec7HLiiSdKPp/PFjU61HoHKRxmHYvU448/LieffHJ2/8HBQTn99NPlxS9+sSxZsiS7/mUve5lUKpXDvu7Q0FDD+hVLliyR008/XU477bSG5zv55JNlx44dDY893DoWF1xwwaSvebDHpQ627oS1Vl71qlcJANFaywknnCAnn3yyaK3l/PPPlz//8z+f1joWW7duzT6n/v5+OeOMM2TNmjUCQN7+9rcfdN2MJ598UnK5nACQdevWyXnnnScXXHBBw+sebIGs8fFxueiii7Lt+qIXvUhOO+008TxPAMhpp50me/bsaXhMuo7FunXrJt1eIrX9p16xWMwWGzv55JPlrLPOktWrV2f3/du//duDPh9Ru2jLjMWvfvUriAiOP/549Pb2ZpctW7bgD3/4AwB3pFetVnHLLbfgvPPOw4UXXogvf/nLuOeee/D73/++xe+A2t0TTzyB+++/P7ts27YNRxxxBN75zndi69atE6aizsZxxx2HX//617j11lvxxje+ET09PXjsscfw+9//HoODg3jb296GO++8Ez//+c8bChEPplgs4vHHH8cNN9yA17zmNVixYgWefPJJ/Pa3v0Uul8PFF1+Mm266CQ8++CBWrVrVtPcxE0op3H777bjiiiuwZs0abNu2DaVSCVdeeSV+8pOfTPsU5WeccQbuvfdeXHzxxbDW4ne/+x1WrFiBf/zHf8zOBzKZY489Ft/73vdwwQUXYP/+/bjvvvuwZcuWSc8LcqCuri78+Mc/xmc+8xmceeaZePrpp/H444/jRS96ET7+8Y/jZz/7WdOmgn71q1/Ff/kv/wXHHXccnnvuOTz88MPo7u7GG97wBmzZsgV///d/35TXIZpLSmSO54dNpRHJl0+6MM/Xv/51vO1tb8Ojjz464WyPvb29WLVqFa666ip84hOfaKiQLpfL6O7uxk9+8pM5He8kIiKiybXlAlmnn346jDHYtWsXzjvvvEnvc8455yCOY/zhD3/IxjbTBWrSM1QSERHR/GpZxmJsbCybanb66afj+uuvx0UXXYTBwUEcddRR+Iu/+Avcf//9uO6663D66adjz549uPvuu3HKKafgT//0T2GtxVlnnYXe3l7ccMMNsNbi8ssvR39/P37yk5+04i0REREtei0LLDZv3oyLLrpowvUbN27EzTffjCiK8PGPfxy33HILnn32WSxduhTr16/HNddcg1NOOQWAm3b1/ve/Hz/5yU/Q09ODDRs24LrrrsPg4OB8vx0iIiJCm9RYEBER0cLQlrNCiIiIqDMxsCAiIqKmmfdZIdZaPPfcc+jr65vVKamJiIho/ogIRkdHsWbNmoOeoRdoQWDx3HPPYe3atfP9skRERNQE27dvx5FHHnnQ2+c9sEhPLbx9+3b09/fP98sTERHRDIyMjGDt2rVZP34w8x5YpMMf/f39DCyIiIg6zOHKGFi8SURERE3DwIKIiIiahoEFERERNQ0DCyIiImoaBhZERETUNAwsiIiIqGkYWBAREVHTMLAgIiKipmFgQURERE3DwIKIiIiahoEFERERNQ0DCyIiImoaBhZEREQLxMjICEZHRyEiLWvDvJ/dlIiIiJovDEOMjY0BAHK5HPL5fEvawYwFERFRh7PWYmhoCADQ1dXVsqACYGBBRETU8cbGxhDHMbTW6O/vb2lbGFgQERF1sPohkGKxCM/zWtqeaQUWV199NZRSDZdVq1bNVduIiIjoEEQkGwIpFAro6upqbYMwg+LNk046CT/96U+zf7c6MiIiIlqs6odAisViq5sDYAaBhe/708pSVKtVVKvV7N8jIyPTfUkiIiI6QBRFGB0dBdAeQyCpaddYPPHEE1izZg2OOeYYvOUtb8FTTz11yPtv2rQJxWIxu6xdu3bGjSUiIqL2HAJJKZnGKhp33nknxsfHcfzxx+P555/Hxz/+cfzud7/Do48+iqVLl076mMkyFmvXrsXw8HDLK1eJiIg60ejoKEZHR6GUwooVK+YlWzEyMoJisXjY/ntagcWBSqUSjj32WHz4wx/GFVdc0dSGERER0URRFGH37t0AgIGBAXR3d8/L6061/57VdNOenh6ccsopeOKJJ2bzNERERDQF9UMg+Xx+3oKK6ZhVYFGtVvHYY49h9erVzWoPERERHUSpVEIURVBKtc0skANNK7D47//9v2PLli3Ytm0b/t//+3/4T//pP2FkZAQbN26cq/YRERERgDiOs1kg/f398P32PN3XtFr17//+73jrW9+KPXv2YPny5Xj5y1+OX/ziF1i3bt1ctY+IiIgADA0NQUSQy+XQ09PT6uYc1LQCi9tuu22u2kFEREQHUSqVEIYhlFIYGBhodXMOiecKISIiamNxHGeLS/b19bXtEEiKgQUREVEbGx4ezoZAent7W92cw2JgQURE1KZKpRKq1WpbzwI5EAMLIiKiNmSMaRgCCYKgxS2aGgYWREREbSidBRIEQVvPAjkQAwsiIqI2Mz4+np1na2BgAEqpFrdo6hhYEBERtZFOHQJJMbAgIiJqI8PDw7DWIgiCjpgFciAGFkRERG3CWotKpQIAKBaLHTUEkmJgQURE1CastQAApRRyuVyLWzMzDCyIiIjahDEGAKB153bPndtyIiKiBSbNWDCwICIiollLAwvP81rckpljYEFERNQmOBRCRERETcOMBRERETUNayyIiIioaTgUQkRERE3DoRAiIiJqGmYsiIiIqCnSbAXAwIKIiIhmKc1WKKUYWBAREdHsLIT6CoCBBRERUVtYCPUVAAMLIiKitrAQ1rAAGFgQERG1BQ6FEBERUdNwKISIiIiahhkLIiIiahrWWBAREVHTcCiEiIiImkJEOBRCREREzbFQlvMGGFgQERG1XH19hVKqxa2ZHQYWRERELbZQ6isABhZEREQtt1DqKwAGFkRERC3HjAURERE1zUJZwwJgYEFERNRyHAohIiKipuFQCBERETUNMxZERETUNKyxICIioqaoX86bgQURERHNSlpfAXAohIiIiGZpIWUrAAYWRERELbWQCjcBBhZEREQttZCmmgIMLIiIiFqKGQsiIiJqGtZYEBERUdNwKISIiIiahkMhRERE1DTMWBAREVHTMGNBRERETWGthYgAYMaCiIiIZinNViilGFgQERHR7Cy0+gpgloHFpk2boJTCBz/4wSY1h4iIaPFYaGtYALMILB544AF84QtfwKmnntrM9hARES0aC61wE5hhYDE2Noa3ve1t+OIXv4glS5Y0u01ERESLAodCEpdffjle85rX4FWvetVh71utVjEyMtJwISIiooWZsfCn+4DbbrsNv/rVr/DAAw9M6f6bNm3CNddcM+2GERERLXSLvsZi+/bt+MAHPoCvfe1rKBQKU3rMlVdeieHh4eyyffv2GTWUiIhooVmIQyHTylg8+OCD2LVrF84444zsOmMM7r33Xnzuc59DtVqdkM7J5/PI5/PNaS0REdECsuiHQl75ylfikUceabjune98J0488UR85CMfWVAbhoiIaK4t+oxFX18fTj755Ibrenp6sHTp0gnXExER0cGl2QpgYQUWC+edEBERdZA0W7GQlvMGZjAr5ECbN29uQjOIiIgWl4VYXwEwY0FERNQSC7G+AmBgQURE1BILcQ0LgIEFERFRS3AohIiIiJqGQyFERETUNMxYEBERUdOwxoKIiIiahkMhRERE1BQiwqEQIiIiao6Fupw3wMCCiIho3tXXVyilWtya5mJgQURENM8Wan0FwMCCiIho3i3U+gqAgQUREdG8W6hTTQEGFkRERPOOQyFERETUNBwKISIioqZhxoKIiIiahhkLIiIiahoWbxIREVFT1C/nzcCCiIiIZiWtrwA4FEJERESztJCzFQADCyIionm1kAs3AQYWRERE82ohTzUFGFgQERHNK2YsiIiIqGlYY0FERERNw6EQIiIiahoOhRAREVHTMGNBRERETcOMBRERETWFtRYiAoAZCyIiIpqlNFuhlGJgQURERLOz0OsrAAYWRERE82ahr2EBMLAgIiKaNwu9cBNgYEFERDRvOBRCRERETcOMBRERETUNayyIiIioaTgUQkRERE3DoRAiIiJqGmYsiIiIqCnSbAXAwIKIiIhmKc1WLOTlvAEGFkRERPNiMdRXAAwsiIiI5sViqK8AGFgQERHNi8WwhgXAwIKIiGhecCiEiIiImoZDIURERNQ0zFgQERFR07DGgoiIiJqGQyFERETUFCLCoRAiIiJqjsWynDfAwIKIiGjO1ddXKKVa3Jq5xcCCiIhoji2W+gqAgQUREdGcWyz1FcA0A4ubbroJp556Kvr7+9Hf34/169fjzjvvnKu2ERERLQiLZaopMM3A4sgjj8S1116LrVu3YuvWrXjFK16B173udXj00Ufnqn1EREQdbzENhSgRkdk8weDgID71qU/hXe9615TuPzIygmKxiOHhYfT398/mpYmIiDrC/v37US6X0d/fj97e3lY3Z0am2n/7M30BYwy+8Y1voFQqYf369Qe9X7VaRbVabWgYERHRYrKYMhbTfoePPPIIent7kc/n8Z73vAe33347XvSiFx30/ps2bUKxWMwua9eunVWDiYiIOs1iKt6c9lBIGIZ45plnMDQ0hG9961v40pe+hC1bthw0uJgsY7F27VoOhRAR0aKxc+dOWGuxfPlyBEHQ6ubMyFSHQmZdY/GqV70Kxx57LD7/+c83tWFEREQLgYhgx44dAICVK1d2bNZiqv33rAd7RKQhI0FEREQ1aX0FsDiGQqZVvPnRj34UGzZswNq1azE6OorbbrsNmzdvxo9+9KO5ah8REVFHW0xrWADTDCyef/55vP3tb8eOHTtQLBZx6qmn4kc/+hEuvvjiuWofERFRR1tMhZvANAOLL3/5y3PVDiIiogVpMU01BXiuECIiojm12DIWDCyIiIjm0GKrsVgc75KIiKhFOBRCRERETcOhECIiImoaZiyIiIioaZixICIioqaw1iI9cwYzFkRERDQrabZCKcXAgoiIiGZnsdVXAAwsiIiI5sxiW8MCYGBBREQ0ZxZb4SbAwIKIiGjOcCiEiIiImoYZCyIiImoa1lgQERFR03AohIiIiJqGQyFERETUNMxYEBERUVOk2QqAgQURERHNUpqtWEzLeQMMLIiIiObEYqyvABhYEBERzYnFONUUYGBBREQ0JxZj4SbAwIKIiGhOcCiEiIiImoYZCyIiImoaZiyIiIioaVi8SURERE3DoRAiIiJqChHhUAgRERE1x2JdzhtgYEFERNR09fUVSqkWt2Z+MbAgIiJqssVaXwEwsCAiImq6xVpfATCwICIiarrFOtUUYGBBRETUdBwKISIioqbhUAgRERE1DTMWRERE1DTMWBAREVHTsHiTiIiImsJay8CCiIiImmN0dBQA4Ps+h0KIiIho5qIoQqlUAgD09/e3uDWtwcCCiIioSYaHhwEAhUIBhUKhxa1pDQYWRERETVAulxGGIYDFm60AGFgQERHNmrUWIyMjAIDe3l74vt/iFrUOAwsiIqJZGhsbgzEGnueht7e31c1pKQYWREREsxDHMcbGxgC4IZDFOMW03uJ+90RERLOUFmzm83l0dXW1uDWtx8CCiIhohiqVCqrVKoDFXbBZj4EFERHRDIhIlq3o6elBEAQtblF7YGBBREQ0A2nBptYafX19rW5O22BgQURENE0s2Dw4bgkiIqJpGh0dhYggl8uhu7u71c1pKwwsiIiIpqFaraJcLgNgweZkGFgQERFNUX3BZnd3N3K5XItb1H4YWBAREU1RqVRCHMcs2DyEaQUWmzZtwllnnYW+vj6sWLECr3/96/H73/9+rtpGRETUNowxGB0dBQD09fXB87wWt6g9TSuw2LJlCy6//HL84he/wF133YU4jnHJJZdk554nIiJaqNKCzSAIWLB5CNM6/dqPfvSjhn9/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fvazn7WoVe3riSeewJo1a3DMMcfgLW95C5566qlWN6ntbdu2DTt37mzYx/L5PC644ALuYwexefNmrFixAscffzze/e53Y9euXa1uUlsYHh4GAAwODgLgvnUoB26rFPetRsYY3HbbbSiVSli/fn1b7FMdH1js2bMHxhisXLmy4fqVK1di586dLWpVe3rZy16GW265BT/+8Y/xxS9+ETt37sTZZ5+NvXv3trppbS3dj7iPTc2GDRtw66234u6778Z1112HBx54AK94xStQrVZb3bSWEhFcccUVOPfcc3HyyScD4L51MJNtK4D7Vr1HHnkEvb29yOfzeM973oPbb78dL3rRi9pin5r306bPFaVUw79FZMJ1i92GDRuy30855RSsX78exx57LL761a/iiiuuaGHLOgP3sam57LLLst9PPvlknHnmmVi3bh1+8IMf4I1vfGMLW9Za73vf+/Dwww/jvvvum3Ab961GB9tW3LdqTjjhBPz617/G0NAQvvWtb2Hjxo3YsmVLdnsr96mOz1gsW7YMnudNiMR27do1IWKjRj09PTjllFPwxBNPtLopbS2dOcN9bGZWr16NdevWLer97P3vfz+++93v4p577sGRRx6ZXc99a6KDbavJLOZ9K5fL4QUveAHOPPNMbNq0Caeddho+85nPtMU+1fGBRS6XwxlnnIG77rqr4fq77roLZ599dota1Rmq1Soee+wxrF69utVNaWvHHHMMVq1a1bCPhWGILVu2cB+bgr1792L79u2Lcj8TEbzvfe/Dt7/9bdx999045phjGm7nvlVzuG01mcW8bx1IRFCtVttjn5qXEtE5dtttt0kQBPLlL39Zfvvb38oHP/hB6enpkT/+8Y+tblpb+dCHPiSbN2+Wp556Sn7xi1/IpZdeKn19fdxOIjI6OioPPfSQPPTQQwJArr/+ennooYfk6aefFhGRa6+9VorFonz729+WRx55RN761rfK6tWrZWRkpMUtn3+H2lajo6PyoQ99SH72s5/Jtm3b5J577pH169fLEUccsSi31Xvf+14pFouyefNm2bFjR3YZHx/P7sN9yznctuK+VXPllVfKvffeK9u2bZOHH35YPvrRj4rWWn7yk5+ISOv3qQURWIiI/K//9b9k3bp1ksvl5CUveUnDFCVyLrvsMlm9erUEQSBr1qyRN77xjfLoo4+2ullt4Z577hEAEy4bN24UETct8KqrrpJVq1ZJPp+X888/Xx555JHWNrpFDrWtxsfH5ZJLLpHly5dLEARy1FFHycaNG+WZZ55pdbNbYrLtBEC+8pWvZPfhvuUcbltx36r5y7/8y6y/W758ubzyla/MggqR1u9TSkRkfnIjREREtNB1fI0FERERtQ8GFkRERNQ0DCyIiIioaRhYEBERUdMwsCAiIqKmYWBBRERETcPAgoiIiJqGgQURERE1DQMLIiIiahoGFkRERNQ0DCyIiIioaf5/scz/D68vUpsAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gbm_simulations_df = pd.DataFrame(np.transpose(gbm_simulations))\n", "\n", "# plotting\n", "ax = gbm_simulations_df.plot(alpha=0.2, legend=False)\n", "\n", "ax.set_title('BTC Simulations', fontsize=16);\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "The y-axis has a very wide range, since some extreme values are possible, given this simulation." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Using pandas-datareader and yfinance\n", "\n", "The [pandas data-reader](https://pydata.github.io/pandas-datareader/) API lets us access additional data sources, such as [FRED](https://fred.stlouisfed.org). \n", "\n", "There are also API that let you access the same data. For example, Yahoo! Finance has several, like [yfinance](https://pypi.org/project/yfinance/). I think that the Yahoo! Finance access for `pandas-datareader` was [broken in a recent update](https://stackoverflow.com/questions/74834834/pdr-datareader-typeerror-string-indices-must-be-integers). See my comments below.\n", "\n", "Lots of developers have written APIs to access different data sources. \n", "\n", "```{note}\n", "Different data sources might require API keys. Sometimes you have to pay. Always read the documentation.\n", "```\n", "\n", "Here's another FRED example, but using `pandas-datareader`." ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 128, "metadata": {}, "output_type": "execute_result" } ], "source": [ "start = dt.datetime(2010, 1, 1)\n", "\n", "end = dt.datetime(2013, 1, 27)\n", "\n", "gdp = pdr.DataReader('GDP', 'fred', start, end)\n", "\n", "gdp.head" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "As mentioned, the [pandas data-reader](https://pydata.github.io/pandas-datareader/) and [yfinance](https://pypi.org/project/yfinance/) APIs let you pull stock data from Yahoo! Finance. However, Yahoo! Finance keeps breaking what you need to scrape the data, so these packages can sometimes be unreliable. However, we can get aspects of them to work.\n", "\n", "Here's some basic set-up that gets [yfinance](https://pypi.org/project/yfinance/) working." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# The usual type of set-up.\n", "import pandas as pd\n", "import numpy as np\n", "import bt as bt\n", "import ffn as ffn\n", "\n", "# This will get our plots to automatically show up.\n", "%matplotlib inline\n", "\n", "# As of Dec 2022, looks like yfinance broke the ffn/bt data import. Add this to get it to work. See https://github.com/pmorissette/ffn/issues/185\n", "import yfinance as yf\n", "yf.pdr_override()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "I'll do the example from the [yfinance](https://pypi.org/project/yfinance/) webpage. This brings in information on MSFT as a `yfinance` ticker object. It looks like a JSON file to me. See below for more on JSON as a storage type." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'address1': 'One Microsoft Way',\n", " 'city': 'Redmond',\n", " 'state': 'WA',\n", " 'zip': '98052-6399',\n", " 'country': 'United States',\n", " 'phone': '425 882 8080',\n", " 'fax': '425 706 7329',\n", " 'website': 'https://www.microsoft.com',\n", " 'industry': 'Software—Infrastructure',\n", " 'sector': 'Technology',\n", " 'longBusinessSummary': 'Microsoft Corporation develops, licenses, and supports software, services, devices, and solutions worldwide. The company operates in three segments: Productivity and Business Processes, Intelligent Cloud, and More Personal Computing. The Productivity and Business Processes segment offers Office, Exchange, SharePoint, Microsoft Teams, Office 365 Security and Compliance, Microsoft Viva, and Skype for Business; Skype, Outlook.com, OneDrive, and LinkedIn; and Dynamics 365, a set of cloud-based and on-premises business solutions for organizations and enterprise divisions. The Intelligent Cloud segment licenses SQL, Windows Servers, Visual Studio, System Center, and related Client Access Licenses; GitHub that provides a collaboration platform and code hosting service for developers; Nuance provides healthcare and enterprise AI solutions; and Azure, a cloud platform. It also offers enterprise support, Microsoft consulting, and nuance professional services to assist customers in developing, deploying, and managing Microsoft server and desktop solutions; and training and certification on Microsoft products. The More Personal Computing segment provides Windows original equipment manufacturer (OEM) licensing and other non-volume licensing of the Windows operating system; Windows Commercial, such as volume licensing of the Windows operating system, Windows cloud services, and other Windows commercial offerings; patent licensing; and Windows Internet of Things. It also offers Surface, PC accessories, PCs, tablets, gaming and entertainment consoles, and other devices; Gaming, including Xbox hardware, and Xbox content and services; video games and third-party video game royalties; and Search, including Bing and Microsoft advertising. The company sells its products through OEMs, distributors, and resellers; and directly through digital marketplaces, online stores, and retail stores. Microsoft Corporation was founded in 1975 and is headquartered in Redmond, Washington.',\n", " 'fullTimeEmployees': 221000,\n", " 'companyOfficers': [{'maxAge': 1,\n", " 'name': 'Mr. Satya Nadella',\n", " 'age': 55,\n", " 'title': 'Chairman & CEO',\n", " 'yearBorn': 1967,\n", " 'fiscalYear': 2022,\n", " 'totalPay': 12676750,\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0},\n", " {'maxAge': 1,\n", " 'name': 'Mr. Bradford L. Smith LCA',\n", " 'age': 63,\n", " 'title': 'Pres & Vice Chairman',\n", " 'yearBorn': 1959,\n", " 'fiscalYear': 2022,\n", " 'totalPay': 4655274,\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0},\n", " {'maxAge': 1,\n", " 'name': 'Ms. Amy E. Hood',\n", " 'age': 50,\n", " 'title': 'Exec. VP & CFO',\n", " 'yearBorn': 1972,\n", " 'fiscalYear': 2022,\n", " 'totalPay': 4637915,\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0},\n", " {'maxAge': 1,\n", " 'name': 'Mr. Judson Althoff',\n", " 'age': 49,\n", " 'title': 'Exec. VP & Chief Commercial Officer',\n", " 'yearBorn': 1973,\n", " 'fiscalYear': 2022,\n", " 'totalPay': 4428268,\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0},\n", " {'maxAge': 1,\n", " 'name': 'Mr. Christopher David Young',\n", " 'age': 50,\n", " 'title': 'Exec. VP of Bus. Devel., Strategy & Ventures',\n", " 'yearBorn': 1972,\n", " 'fiscalYear': 2022,\n", " 'totalPay': 4588876,\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0},\n", " {'maxAge': 1,\n", " 'name': 'Ms. Alice L. Jolla',\n", " 'age': 55,\n", " 'title': 'Corp. VP & Chief Accounting Officer',\n", " 'yearBorn': 1967,\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0},\n", " {'maxAge': 1,\n", " 'name': 'Brett Iversen',\n", " 'title': 'Gen. Mang. of Investor Relations',\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0},\n", " {'maxAge': 1,\n", " 'name': 'Mr. Frank X. Shaw',\n", " 'title': 'Corp. VP for Corp. Communications',\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0},\n", " {'maxAge': 1,\n", " 'name': 'Mr. Christopher C. Capossela',\n", " 'age': 52,\n", " 'title': 'Exec. VP & Chief Marketing Officer',\n", " 'yearBorn': 1970,\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0},\n", " {'maxAge': 1,\n", " 'name': 'Mr. Keith Ranger Dolliver Esq.',\n", " 'title': 'VP, Deputy Gen. Counsel of Corp., External & Legal Affairs and Assistant Sec.',\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0}],\n", " 'auditRisk': 6,\n", " 'boardRisk': 5,\n", " 'compensationRisk': 2,\n", " 'shareHolderRightsRisk': 2,\n", " 'overallRisk': 2,\n", " 'governanceEpochDate': 1682899200,\n", " 'compensationAsOfEpochDate': 1672444800,\n", " 'maxAge': 86400,\n", " 'priceHint': 2,\n", " 'previousClose': 305.56,\n", " 'open': 307.76,\n", " 'dayLow': 303.91,\n", " 'dayHigh': 309.165,\n", " 'regularMarketPreviousClose': 305.56,\n", " 'regularMarketOpen': 307.76,\n", " 'regularMarketDayLow': 303.91,\n", " 'regularMarketDayHigh': 309.165,\n", " 'dividendRate': 2.72,\n", " 'dividendYield': 0.0089,\n", " 'exDividendDate': 1684281600,\n", " 'payoutRatio': 0.28170002,\n", " 'fiveYearAvgDividendYield': 1.1,\n", " 'beta': 0.929757,\n", " 'trailingPE': 33.088844,\n", " 'forwardPE': 27.865875,\n", " 'volume': 26404431,\n", " 'regularMarketVolume': 26404431,\n", " 'averageVolume': 31077618,\n", " 'averageVolume10days': 32338860,\n", " 'averageDailyVolume10Day': 32338860,\n", " 'bid': 305.95,\n", " 'ask': 306.26,\n", " 'bidSize': 800,\n", " 'askSize': 900,\n", " 'marketCap': 2270872993792,\n", " 'fiftyTwoWeekLow': 213.43,\n", " 'fiftyTwoWeekHigh': 309.165,\n", " 'priceToSalesTrailing12Months': 10.939169,\n", " 'fiftyDayAverage': 273.8126,\n", " 'twoHundredDayAverage': 256.3663,\n", " 'trailingAnnualDividendRate': 2.66,\n", " 'trailingAnnualDividendYield': 0.008705328,\n", " 'currency': 'USD',\n", " 'enterpriseValue': 2245765365760,\n", " 'profitMargins': 0.33248,\n", " 'floatShares': 7428646926,\n", " 'sharesOutstanding': 7435489792,\n", " 'sharesShort': 40038879,\n", " 'sharesShortPriorMonth': 35907039,\n", " 'sharesShortPreviousMonthDate': 1678838400,\n", " 'dateShortInterest': 1681430400,\n", " 'sharesPercentSharesOut': 0.0054,\n", " 'heldPercentInsiders': 0.00052,\n", " 'heldPercentInstitutions': 0.73767,\n", " 'shortRatio': 1.25,\n", " 'shortPercentOfFloat': 0.0054,\n", " 'impliedSharesOutstanding': 0,\n", " 'bookValue': 26.178,\n", " 'priceToBook': 11.666667,\n", " 'lastFiscalYearEnd': 1656547200,\n", " 'nextFiscalYearEnd': 1688083200,\n", " 'mostRecentQuarter': 1680220800,\n", " 'earningsQuarterlyGrowth': 0.094,\n", " 'netIncomeToCommon': 69020000256,\n", " 'trailingEps': 9.23,\n", " 'forwardEps': 10.96,\n", " 'pegRatio': 2.61,\n", " 'lastSplitFactor': '2:1',\n", " 'lastSplitDate': 1045526400,\n", " 'enterpriseToRevenue': 10.818,\n", " 'enterpriseToEbitda': 22.44,\n", " '52WeekChange': 0.08439207,\n", " 'SandP52WeekChange': -0.0018225312,\n", " 'lastDividendValue': 0.68,\n", " 'lastDividendDate': 1676419200,\n", " 'exchange': 'NMS',\n", " 'quoteType': 'EQUITY',\n", " 'symbol': 'MSFT',\n", " 'underlyingSymbol': 'MSFT',\n", " 'shortName': 'Microsoft Corporation',\n", " 'longName': 'Microsoft Corporation',\n", " 'firstTradeDateEpochUtc': 511108200,\n", " 'timeZoneFullName': 'America/New_York',\n", " 'timeZoneShortName': 'EDT',\n", " 'uuid': 'b004b3ec-de24-385e-b2c1-923f10d3fb62',\n", " 'messageBoardId': 'finmb_21835',\n", " 'gmtOffSetMilliseconds': -14400000,\n", " 'currentPrice': 305.41,\n", " 'targetHighPrice': 400.0,\n", " 'targetLowPrice': 232.0,\n", " 'targetMeanPrice': 327.6,\n", " 'targetMedianPrice': 333.0,\n", " 'recommendationMean': 1.8,\n", " 'recommendationKey': 'buy',\n", " 'numberOfAnalystOpinions': 45,\n", " 'totalCash': 104419000320,\n", " 'totalCashPerShare': 14.043,\n", " 'ebitda': 100080001024,\n", " 'totalDebt': 79312003072,\n", " 'quickRatio': 1.655,\n", " 'currentRatio': 1.913,\n", " 'totalRevenue': 207590998016,\n", " 'debtToEquity': 40.739,\n", " 'revenuePerShare': 27.844,\n", " 'returnOnAssets': 0.14829001,\n", " 'returnOnEquity': 0.38601002,\n", " 'grossProfits': 135620000000,\n", " 'freeCashflow': 42964873216,\n", " 'operatingCashflow': 83441000448,\n", " 'earningsGrowth': 0.104,\n", " 'revenueGrowth': 0.071,\n", " 'grossMargins': 0.68522,\n", " 'ebitdaMargins': 0.48209998,\n", " 'operatingMargins': 0.41415,\n", " 'financialCurrency': 'USD',\n", " 'trailingPegRatio': 2.0698}" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "msft = yf.Ticker(\"MSFT\")\n", "\n", "# get all stock info\n", "msft.info" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "In VS Code, you can open the rest of that in a text editor (see the message) and look at every variable in there. You can pull specific information out this object." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Technology'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get the sector.\n", "msft.info['sector']" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Here's something a bit more complex. I'll pull the first company officer. Note the indexing, starting at 0, the usual Python way." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'maxAge': 1,\n", " 'name': 'Mr. Satya Nadella',\n", " 'age': 55,\n", " 'title': 'Chairman & CEO',\n", " 'yearBorn': 1967,\n", " 'fiscalYear': 2022,\n", " 'totalPay': 12676750,\n", " 'exercisedValue': 0,\n", " 'unexercisedValue': 0}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "msft.info['companyOfficers'][0]" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "You can drill down even more. Honestly, I was guessing a bit at how to access this data. This just seemed like a \"Python\" or \"JSON\" way to do it and it worked." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "12676750" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "msft.info['companyOfficers'][0]['totalPay']" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "They have recent accounting data, too." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.68522" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "msft.info['grossMargins']" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Here's two years of price, volume, dividend, and split data. Remember when we looked at return calculations? You need the dividends if you're going to accurately calculate returns. You also need the stock splits, or you'll be comparing prices pre- and post- splits, getting funky returns!" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeDividendsStock Splits
Date
2021-05-03 00:00:00-04:00248.910705249.843887246.671100247.397995196266000.00.0
2021-05-04 00:00:00-04:00246.523756246.759509241.406051243.400085327561000.00.0
2021-05-05 00:00:00-04:00244.647597245.079804241.465007242.103485219013000.00.0
2021-05-06 00:00:00-04:00242.083851245.433442240.355036245.305740264911000.00.0
2021-05-07 00:00:00-04:00247.682876249.794795246.720242247.987396270329000.00.0
........................
2023-04-26 00:00:00-04:00296.700012299.570007292.730011295.369995645992000.00.0
2023-04-27 00:00:00-04:00295.970001305.200012295.250000304.829987464626000.00.0
2023-04-28 00:00:00-04:00304.010010308.929993303.309998307.260010364467000.00.0
2023-05-01 00:00:00-04:00306.970001308.600006305.149994305.559998212941000.00.0
2023-05-02 00:00:00-04:00307.760010309.165009303.910004305.410004264044310.00.0
\n", "

504 rows × 7 columns

\n", "
" ], "text/plain": [ " Open High Low Close \\\n", "Date \n", "2021-05-03 00:00:00-04:00 248.910705 249.843887 246.671100 247.397995 \n", "2021-05-04 00:00:00-04:00 246.523756 246.759509 241.406051 243.400085 \n", "2021-05-05 00:00:00-04:00 244.647597 245.079804 241.465007 242.103485 \n", "2021-05-06 00:00:00-04:00 242.083851 245.433442 240.355036 245.305740 \n", "2021-05-07 00:00:00-04:00 247.682876 249.794795 246.720242 247.987396 \n", "... ... ... ... ... \n", "2023-04-26 00:00:00-04:00 296.700012 299.570007 292.730011 295.369995 \n", "2023-04-27 00:00:00-04:00 295.970001 305.200012 295.250000 304.829987 \n", "2023-04-28 00:00:00-04:00 304.010010 308.929993 303.309998 307.260010 \n", "2023-05-01 00:00:00-04:00 306.970001 308.600006 305.149994 305.559998 \n", "2023-05-02 00:00:00-04:00 307.760010 309.165009 303.910004 305.410004 \n", "\n", " Volume Dividends Stock Splits \n", "Date \n", "2021-05-03 00:00:00-04:00 19626600 0.0 0.0 \n", "2021-05-04 00:00:00-04:00 32756100 0.0 0.0 \n", "2021-05-05 00:00:00-04:00 21901300 0.0 0.0 \n", "2021-05-06 00:00:00-04:00 26491100 0.0 0.0 \n", "2021-05-07 00:00:00-04:00 27032900 0.0 0.0 \n", "... ... ... ... \n", "2023-04-26 00:00:00-04:00 64599200 0.0 0.0 \n", "2023-04-27 00:00:00-04:00 46462600 0.0 0.0 \n", "2023-04-28 00:00:00-04:00 36446700 0.0 0.0 \n", "2023-05-01 00:00:00-04:00 21294100 0.0 0.0 \n", "2023-05-02 00:00:00-04:00 26404431 0.0 0.0 \n", "\n", "[504 rows x 7 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hist = msft.history(period=\"2y\")\n", "hist" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "As noted on their webpage, you can pull multiple stocks, by ticker, at once." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeDividendsStock Splits
Date
2023-04-03 00:00:00-04:00164.270004166.289993164.220001166.169998569762000.00.0
2023-04-04 00:00:00-04:00166.600006166.839996165.110001165.630005462783000.00.0
2023-04-05 00:00:00-04:00164.740005165.050003161.800003163.759995515117000.00.0
2023-04-06 00:00:00-04:00162.429993164.960007162.000000164.660004453901000.00.0
2023-04-10 00:00:00-04:00161.419998162.029999160.080002162.029999477169000.00.0
2023-04-11 00:00:00-04:00162.350006162.360001160.509995160.800003476442000.00.0
2023-04-12 00:00:00-04:00161.220001162.059998159.779999160.100006501331000.00.0
2023-04-13 00:00:00-04:00161.630005165.800003161.419998165.559998684456000.00.0
2023-04-14 00:00:00-04:00164.589996166.320007163.820007165.210007493372000.00.0
2023-04-17 00:00:00-04:00165.089996165.389999164.029999165.229996415162000.00.0
2023-04-18 00:00:00-04:00166.100006167.410004165.649994166.470001499230000.00.0
2023-04-19 00:00:00-04:00165.800003168.160004165.539993167.630005477202000.00.0
2023-04-20 00:00:00-04:00166.089996167.869995165.559998166.649994524564000.00.0
2023-04-21 00:00:00-04:00165.050003166.449997164.490005165.020004583119000.00.0
2023-04-24 00:00:00-04:00165.000000165.600006163.889999165.330002419496000.00.0
2023-04-25 00:00:00-04:00165.190002166.309998163.729996163.770004487141000.00.0
2023-04-26 00:00:00-04:00163.059998165.279999162.800003163.759995454988000.00.0
2023-04-27 00:00:00-04:00165.190002168.559998165.190002168.410004649023000.00.0
2023-04-28 00:00:00-04:00168.490005169.850006167.880005169.679993552092000.00.0
2023-05-01 00:00:00-04:00169.279999170.449997168.639999169.589996524729000.00.0
2023-05-02 00:00:00-04:00170.089996170.350006167.539993168.539993484256960.00.0
\n", "
" ], "text/plain": [ " Open High Low Close \\\n", "Date \n", "2023-04-03 00:00:00-04:00 164.270004 166.289993 164.220001 166.169998 \n", "2023-04-04 00:00:00-04:00 166.600006 166.839996 165.110001 165.630005 \n", "2023-04-05 00:00:00-04:00 164.740005 165.050003 161.800003 163.759995 \n", "2023-04-06 00:00:00-04:00 162.429993 164.960007 162.000000 164.660004 \n", "2023-04-10 00:00:00-04:00 161.419998 162.029999 160.080002 162.029999 \n", "2023-04-11 00:00:00-04:00 162.350006 162.360001 160.509995 160.800003 \n", "2023-04-12 00:00:00-04:00 161.220001 162.059998 159.779999 160.100006 \n", "2023-04-13 00:00:00-04:00 161.630005 165.800003 161.419998 165.559998 \n", "2023-04-14 00:00:00-04:00 164.589996 166.320007 163.820007 165.210007 \n", "2023-04-17 00:00:00-04:00 165.089996 165.389999 164.029999 165.229996 \n", "2023-04-18 00:00:00-04:00 166.100006 167.410004 165.649994 166.470001 \n", "2023-04-19 00:00:00-04:00 165.800003 168.160004 165.539993 167.630005 \n", "2023-04-20 00:00:00-04:00 166.089996 167.869995 165.559998 166.649994 \n", "2023-04-21 00:00:00-04:00 165.050003 166.449997 164.490005 165.020004 \n", "2023-04-24 00:00:00-04:00 165.000000 165.600006 163.889999 165.330002 \n", "2023-04-25 00:00:00-04:00 165.190002 166.309998 163.729996 163.770004 \n", "2023-04-26 00:00:00-04:00 163.059998 165.279999 162.800003 163.759995 \n", "2023-04-27 00:00:00-04:00 165.190002 168.559998 165.190002 168.410004 \n", "2023-04-28 00:00:00-04:00 168.490005 169.850006 167.880005 169.679993 \n", "2023-05-01 00:00:00-04:00 169.279999 170.449997 168.639999 169.589996 \n", "2023-05-02 00:00:00-04:00 170.089996 170.350006 167.539993 168.539993 \n", "\n", " Volume Dividends Stock Splits \n", "Date \n", "2023-04-03 00:00:00-04:00 56976200 0.0 0.0 \n", "2023-04-04 00:00:00-04:00 46278300 0.0 0.0 \n", "2023-04-05 00:00:00-04:00 51511700 0.0 0.0 \n", "2023-04-06 00:00:00-04:00 45390100 0.0 0.0 \n", "2023-04-10 00:00:00-04:00 47716900 0.0 0.0 \n", "2023-04-11 00:00:00-04:00 47644200 0.0 0.0 \n", "2023-04-12 00:00:00-04:00 50133100 0.0 0.0 \n", "2023-04-13 00:00:00-04:00 68445600 0.0 0.0 \n", "2023-04-14 00:00:00-04:00 49337200 0.0 0.0 \n", "2023-04-17 00:00:00-04:00 41516200 0.0 0.0 \n", "2023-04-18 00:00:00-04:00 49923000 0.0 0.0 \n", "2023-04-19 00:00:00-04:00 47720200 0.0 0.0 \n", "2023-04-20 00:00:00-04:00 52456400 0.0 0.0 \n", "2023-04-21 00:00:00-04:00 58311900 0.0 0.0 \n", "2023-04-24 00:00:00-04:00 41949600 0.0 0.0 \n", "2023-04-25 00:00:00-04:00 48714100 0.0 0.0 \n", "2023-04-26 00:00:00-04:00 45498800 0.0 0.0 \n", "2023-04-27 00:00:00-04:00 64902300 0.0 0.0 \n", "2023-04-28 00:00:00-04:00 55209200 0.0 0.0 \n", "2023-05-01 00:00:00-04:00 52472900 0.0 0.0 \n", "2023-05-02 00:00:00-04:00 48425696 0.0 0.0 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tickers = yf.Tickers('msft aapl goog')\n", "\n", "tickers.tickers['AAPL'].history(period=\"1mo\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "I wasn't able to figure out how to get historical financial statement data out of `yfinance`. I would suggest using our Bloomberg terminals or Factset to do that. Easy enough to just pull historical data, by ticker, into Excel or a CSV file from those data sources. You can then import that into Python to use as part of a trading signal or just to do some basic comparisons and graphs." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Data Details - Using APIs\n", "\n", "This notes above use the [NASDAQ Datalink API](https://www.nasdaq.com/nasdaq-data-link) to pull some BTC data. Now, I'll discuss using this API more generally, as well as using [Rapid API](https://rapidapi.com/hub), another website with a variety of data options. I'll also show you an API from Github.\n", "\n", "As mentioned above, APIs are ways for one program or piece of software to talk to another. In our case, we're using them to get data. That data might come in as a `pandas` DataFrame, ready to use. Other times, it might come in as something called a [JSON](https://realpython.com/python-json/) file. We'll have to do a bit more work with this common data structure. " ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### NASDAQ API - Another Example\n", "\n", "Let's look at the NASDAQ API one more time. Once you log in, you'll see the home page below. Note the strip across the upper-left, that has API, Python, Excel, etc. You can use the NASDAQ API in a variety of settings. There's a **SEARCH FOR DATA** box at the top. \n", "\n", "```{figure} ../images/07-nasdaq-home.png\n", "---\n", "name: 07-nasdaq-home.png\n", "align: center\n", "---\n", "NASDAQ API homepage.\n", "```\n", "\n", "If you click **EXPLORE** next to the search box, you're taken to a list of all of their data. Much of it is premium - you have to pay. However, you can filter for free data. There's free data for house prices, gold and silver markets, IMF macro data, the Fed, etc. Much of this free data comes from Quandl, which was purchased by Nasdaq recently. \n", "\n", "Quandl has been completely integrated by NASDAQ now, though you will see legacy instructions on the website that refer to its older API commands.\n", "\n", "```{figure} ../images/07-nasdaq-explore.png\n", "---\n", "name: 07-nasdaq-explore.png\n", "align: center\n", "---\n", "Exploring NASDAQ data options.\n", "```\n", "\n", "Let's look at the Zillow data, the first option presented when I look for free data. I've used them in labs and exams. \n", "\n", "```{figure} ../images/07-nasdaq-zillow.png\n", "---\n", "name: 07-nasdaq-zillow.png\n", "align: center\n", "---\n", "NASDAQ has an API for Zillow housing data.\n", "```\n", "\n", "Each the data APIs shows you samples of what you can access. So, we see an example table with data for a particular indicator and region. We also see a table that has a list of all of the indicators and what they measure. Finally, we see a table with all of the regions and what they represent.\n", "\n", "This data structure makes it clear that we can download value data and then merge in ID and region descriptions if needed. But, how do we do that? See the tab in the upper-left, with **DATA** highlighted? You can click on **DOCUMENTATION** and **USAGE** to learn more. We'll look at a quick example here.\n", "\n", "Click **USAGE** and then the **Python** icon. You'll seen an example that lets you filter by a single *indicator_id* and *region*. It has your API key and the `.get_table` method. \n", "\n", "However, note the `quandl` stuff. They haven't transitioned this code yet. You'll need to do a `pip` install for quandl.\n", "\n", "Also, we didn't use `.get_table` above for BTC. The Zillow data is stored differently. \n", "\n", "Make sure that you include your API key. You can input it directly, using the code that they provide. I'm using a different way to do the key that doesn't require me to type my API key into this publicly available code." ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [], "source": [ "#! pip install quandl\n", "\n", "# Bring in quandl for downloading data\n", "import quandl\n", "# quandl.ApiConfig.api_key = 'YOUR_KEY_HERE'\n", "quandl.read_key()\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "You need that `paginate=True` in there in order to download all of the available data. Without it, it will only pull the first 10,000 rows. Using paginate extends the limit to 1,000,000 rows, or observations. Now, note that this could be a lot of data! You might need to download the data in chunks to get what you want.\n", "\n", "Let's try pulling in the *indicator_id* ZATT for all regions. " ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [], "source": [ "# zillow = quandl.get_table('ZILLOW/DATA', indicator_id = 'ZATT', paginate=True)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "I've commented out the code above, because I know it will exceed the download limit! So, we need to be more selective.\n", "\n", "If you look on the NASDAQ Zillow documentation page, you'll see the three tables that you can download, the variables inside of each, and what you're allowed to filter on. You unfortunately can't filter on date in the ZILLOW/DATA table. Other data sets, like FRED, do let you specify start and end dates. Every API is different. \n", "\n", "You can find examples of how to filter and sub-select your data on the NASDAQ website: [https://docs.data.nasdaq.com/docs/python-tables](https://docs.data.nasdaq.com/docs/python-tables)\n", "\n", "However, you can filter on *region_id*. Let's pull the ZILLOW/REGIONS table to see what we can use." ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [], "source": [ "regions = quandl.get_table('ZILLOW/REGIONS', paginate=True)" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
region_idregion_typeregion
None
099999zip98847; WA; Wenatchee, WA; Chelan County; Pesha...
199998zip98846; WA; Okanogan County; Pateros
299997zip98845; WA; Wenatchee; Douglas County; Palisades
399996zip98844; WA; Okanogan County; Oroville
499995zip98843; WA; Wenatchee, WA; Douglas County; Orondo
............
89300100000zip98848; WA; Moses Lake, WA; Grant County; Quincy
8930110000cityBloomington; MD; Garrett County
893021000countyEchols County; GA; Valdosta, GA
89303100countyBibb County; AL; Birmingham-Hoover, AL
8930410stateColorado
\n", "

89305 rows × 3 columns

\n", "
" ], "text/plain": [ " region_id region_type region\n", "None \n", "0 99999 zip 98847; WA; Wenatchee, WA; Chelan County; Pesha...\n", "1 99998 zip 98846; WA; Okanogan County; Pateros\n", "2 99997 zip 98845; WA; Wenatchee; Douglas County; Palisades\n", "3 99996 zip 98844; WA; Okanogan County; Oroville\n", "4 99995 zip 98843; WA; Wenatchee, WA; Douglas County; Orondo\n", "... ... ... ...\n", "89300 100000 zip 98848; WA; Moses Lake, WA; Grant County; Quincy\n", "89301 10000 city Bloomington; MD; Garrett County\n", "89302 1000 county Echols County; GA; Valdosta, GA\n", "89303 100 county Bibb County; AL; Birmingham-Hoover, AL\n", "89304 10 state Colorado\n", "\n", "[89305 rows x 3 columns]" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "regions" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "What if we just want cities?" ] }, { "cell_type": "code", "execution_count": 139, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
region_idregion_typeregion
None
109999cityCarrsville; VA; Virginia Beach-Norfolk-Newport...
209998cityBirchleaf; VA; Dickenson County
569994cityWright; KS; Dodge City, KS; Ford County
1249987cityWeston; CT; Bridgeport-Stamford-Norwalk, CT; F...
1689980citySouth Wilmington; IL; Chicago-Naperville-Elgin...
............
8920310010cityAtwood; KS; Rawlins County
8922410008cityBound Brook; NJ; New York-Newark-Jersey City, ...
8925410005cityChanute; KS; Neosho County
8929010001cityBlountsville; AL; Birmingham-Hoover, AL; Bloun...
8930110000cityBloomington; MD; Garrett County
\n", "

28131 rows × 3 columns

\n", "
" ], "text/plain": [ " region_id region_type region\n", "None \n", "10 9999 city Carrsville; VA; Virginia Beach-Norfolk-Newport...\n", "20 9998 city Birchleaf; VA; Dickenson County\n", "56 9994 city Wright; KS; Dodge City, KS; Ford County\n", "124 9987 city Weston; CT; Bridgeport-Stamford-Norwalk, CT; F...\n", "168 9980 city South Wilmington; IL; Chicago-Naperville-Elgin...\n", "... ... ... ...\n", "89203 10010 city Atwood; KS; Rawlins County\n", "89224 10008 city Bound Brook; NJ; New York-Newark-Jersey City, ...\n", "89254 10005 city Chanute; KS; Neosho County\n", "89290 10001 city Blountsville; AL; Birmingham-Hoover, AL; Bloun...\n", "89301 10000 city Bloomington; MD; Garrett County\n", "\n", "[28131 rows x 3 columns]" ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cities = regions[regions.region_type == 'city']\n", "cities" ] }, { "cell_type": "code", "execution_count": 140, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 28131 entries, 10 to 89301\n", "Data columns (total 3 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 region_id 28131 non-null object\n", " 1 region_type 28131 non-null object\n", " 2 region 28131 non-null object\n", "dtypes: object(3)\n", "memory usage: 879.1+ KB\n" ] } ], "source": [ "cities.info()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "I like to look and see what things are stored as, too. Remember, the `object` type is very generic. \n", "\n", "There are 28,131 rows of cities! How about counties?" ] }, { "cell_type": "code", "execution_count": 141, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
region_idregion_typeregion
None
94999countyDurham County; NC; Durham-Chapel Hill, NC
169998countyDuplin County; NC
246997countyDubois County; IN; Jasper, IN
401995countyDonley County; TX
589993countyDimmit County; TX
............
890691003countyElmore County; AL; Montgomery, AL
891201002countyElbert County; GA
892041001countyElbert County; CO; Denver-Aurora-Lakewood, CO
893021000countyEchols County; GA; Valdosta, GA
89303100countyBibb County; AL; Birmingham-Hoover, AL
\n", "

3097 rows × 3 columns

\n", "
" ], "text/plain": [ " region_id region_type region\n", "None \n", "94 999 county Durham County; NC; Durham-Chapel Hill, NC\n", "169 998 county Duplin County; NC\n", "246 997 county Dubois County; IN; Jasper, IN\n", "401 995 county Donley County; TX\n", "589 993 county Dimmit County; TX\n", "... ... ... ...\n", "89069 1003 county Elmore County; AL; Montgomery, AL\n", "89120 1002 county Elbert County; GA\n", "89204 1001 county Elbert County; CO; Denver-Aurora-Lakewood, CO\n", "89302 1000 county Echols County; GA; Valdosta, GA\n", "89303 100 county Bibb County; AL; Birmingham-Hoover, AL\n", "\n", "[3097 rows x 3 columns]" ] }, "execution_count": 141, "metadata": {}, "output_type": "execute_result" } ], "source": [ "counties = regions[regions.region_type == 'county']\n", "counties" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Can't find the regions you want? You could export the whole thing to a CSV file and explore it in Excel. This will show up in whatever folder you currently have as your home in VS Code." ] }, { "cell_type": "code", "execution_count": 142, "metadata": {}, "outputs": [], "source": [ "counties.to_csv('counties.csv', index = True)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "You can also open up the **Variables** window at the top of VS Code (or the equivalent in Google Colab) and scroll through the file, looking for the *region_id* values that you want. \n", "\n", "Finally, you can search the text in a column directly. Let's find counties in NC." ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
region_idregion_typeregion
None
94999countyDurham County; NC; Durham-Chapel Hill, NC
169998countyDuplin County; NC
2683962countyCraven County; NC; New Bern, NC
4637935countyChowan County; NC
497293countyAshe County; NC
............
874751180countyMartin County; NC
878211147countyLenoir County; NC; Kinston, NC
885781059countyGreene County; NC
886701049countyGraham County; NC
888231032countyGaston County; NC; Charlotte-Concord-Gastonia,...
\n", "

100 rows × 3 columns

\n", "
" ], "text/plain": [ " region_id region_type region\n", "None \n", "94 999 county Durham County; NC; Durham-Chapel Hill, NC\n", "169 998 county Duplin County; NC\n", "2683 962 county Craven County; NC; New Bern, NC\n", "4637 935 county Chowan County; NC\n", "4972 93 county Ashe County; NC\n", "... ... ... ...\n", "87475 1180 county Martin County; NC\n", "87821 1147 county Lenoir County; NC; Kinston, NC\n", "88578 1059 county Greene County; NC\n", "88670 1049 county Graham County; NC\n", "88823 1032 county Gaston County; NC; Charlotte-Concord-Gastonia,...\n", "\n", "[100 rows x 3 columns]" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nc_counties = counties[counties['region'].str.contains(\"; NC\")]\n", "nc_counties" ] }, { "cell_type": "code", "execution_count": 144, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 100 entries, 94 to 88823\n", "Data columns (total 3 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 region_id 100 non-null object\n", " 1 region_type 100 non-null object\n", " 2 region 100 non-null object\n", "dtypes: object(3)\n", "memory usage: 3.1+ KB\n" ] } ], "source": [ "nc_counties.info()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "There are 100 counties in NC, so this worked. Now, we can save these regions to a **list** and use that to pull data.\n", "\n", "By exploring the data like this, you can maybe find the *region_id* values that you want and give them as a list. I'm also going to use the `qopts = ` option to name the columns that I want to pull. This isn't necessary here, since I want all of the columns, but I wanted to show you that you could do this." ] }, { "cell_type": "code", "execution_count": 145, "metadata": {}, "outputs": [], "source": [ "nc_county_list = nc_counties['region_id'].to_list()" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [], "source": [ "zillow_nc = quandl.get_table('ZILLOW/DATA', indicator_id = 'ZATT', paginate = True, region_id = nc_county_list, qopts = {'columns': ['indicator_id', 'region_id', 'date', 'value']})" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indicator_idregion_iddatevalue
None
0ZATT9992023-03-31541442.450359
1ZATT9992023-02-28542934.945251
2ZATT9992023-01-31546725.963769
3ZATT9992022-12-31539928.263825
4ZATT9992022-11-30542585.370376
5ZATT9992022-10-31598375.000000
6ZATT9992022-09-30601490.000000
7ZATT9992022-08-31606467.000000
8ZATT9992022-07-31607902.000000
9ZATT9992022-06-30608465.000000
10ZATT9992022-05-31597607.000000
11ZATT9992022-04-30585235.000000
12ZATT9992022-03-31572754.000000
13ZATT9992022-02-28556641.000000
14ZATT9992022-01-31538430.000000
15ZATT9992021-12-31516010.000000
16ZATT9992021-11-30506505.000000
17ZATT9992021-10-31498382.000000
18ZATT9992021-09-30486909.000000
19ZATT9992021-08-31475100.000000
20ZATT9992021-07-31469689.000000
21ZATT9992021-06-30456018.000000
22ZATT9992021-05-31443594.000000
23ZATT9992021-04-30435319.000000
24ZATT9992021-03-31427213.000000
\n", "
" ], "text/plain": [ " indicator_id region_id date value\n", "None \n", "0 ZATT 999 2023-03-31 541442.450359\n", "1 ZATT 999 2023-02-28 542934.945251\n", "2 ZATT 999 2023-01-31 546725.963769\n", "3 ZATT 999 2022-12-31 539928.263825\n", "4 ZATT 999 2022-11-30 542585.370376\n", "5 ZATT 999 2022-10-31 598375.000000\n", "6 ZATT 999 2022-09-30 601490.000000\n", "7 ZATT 999 2022-08-31 606467.000000\n", "8 ZATT 999 2022-07-31 607902.000000\n", "9 ZATT 999 2022-06-30 608465.000000\n", "10 ZATT 999 2022-05-31 597607.000000\n", "11 ZATT 999 2022-04-30 585235.000000\n", "12 ZATT 999 2022-03-31 572754.000000\n", "13 ZATT 999 2022-02-28 556641.000000\n", "14 ZATT 999 2022-01-31 538430.000000\n", "15 ZATT 999 2021-12-31 516010.000000\n", "16 ZATT 999 2021-11-30 506505.000000\n", "17 ZATT 999 2021-10-31 498382.000000\n", "18 ZATT 999 2021-09-30 486909.000000\n", "19 ZATT 999 2021-08-31 475100.000000\n", "20 ZATT 999 2021-07-31 469689.000000\n", "21 ZATT 999 2021-06-30 456018.000000\n", "22 ZATT 999 2021-05-31 443594.000000\n", "23 ZATT 999 2021-04-30 435319.000000\n", "24 ZATT 999 2021-03-31 427213.000000" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "zillow_nc.head(25)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Hey, there's Durham County!" ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 26510 entries, 0 to 26509\n", "Data columns (total 4 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 indicator_id 26510 non-null object \n", " 1 region_id 26510 non-null object \n", " 2 date 26510 non-null datetime64[ns]\n", " 3 value 26510 non-null float64 \n", "dtypes: datetime64[ns](1), float64(1), object(2)\n", "memory usage: 828.6+ KB\n" ] } ], "source": [ "zillow_nc.info()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Now you can filter by *date* if you like. And, you could pull down multiple states this way, change the variable type, etc. You could also merge in the region names using *region_id* as your key." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Using Rapid API\n", "\n", "Another data option is [Rapid API](https://rapidapi.com/hub). There's all types of data here - markets, sports, gambling, housing, etc. People will write their own APIs, perhaps interfacing with the websites that contain the information. They can then publish their APIs on this webpage. Many have free options, some you have to pay for. There are thousands here, so you'll have to dig around.\n", "\n", "```{figure} ../images/07-rapidapi.png\n", "---\n", "name: 07-rapidapi.png\n", "align: center\n", "---\n", "Main Rapid API webpage\n", "```\n", "\n", "One you have an account, you'll be able to subscribe to different APIs. You probably want the data to have a free option.\n", "\n", "The quick start guide is [here](https://docs.rapidapi.com/docs/consumer-quick-start-guide). \n", "\n", "Luckily, all of the APIs here tend to have the same structures. These are called **REST APIs**. This stands for \"Representational State Transfer\" and is just a standardized way for computers to talk to each other. They are going to use a standard data format, like JSON. More on this below.\n", "\n", "You can read more on their [API Learn page](https://rapidapi.com/learn/rest). \n", "\n", "We'll look at one example, Pinnacle Odds, which has some sports gambling information: [https://rapidapi.com/tipsters/api/pinnacle-odds/](https://rapidapi.com/tipsters/api/pinnacle-odds/)\n", "\n", "Once you've subscribed, you see the main **endpoint** screen. \n", "\n", "```{figure} ../images/07-rapidapi-endpoint.png\n", "---\n", "name: 07-rapidapi-endpoint.png\n", "align: center\n", "---\n", "Pinnacle Odds endpoint page. I've blocked my API key with two different windows.\n", "```\n", "\n", "At the top, you'll see Endpoints, About, Tutorials, Discussions, and Pricing. Click around to read more about the API.\n", "\n", "We are currently on **Endpoints**. Endpoints are basically like URLs. They are where different tables of data live. We are going to use this page to figure out the data that we need. And, the webpage page will also create the Python code needed to download the data!\n", "\n", "You can start on the left of the screen. You'll see a list of the different tables available. I'll try **List of Sports** in this example. You'll see why in a minute.\n", "\n", "You'll note that the middle section now changed. This is where you can filter and ask for particular types of data from that table. In this case, there are no options to change.\n", "\n", "On the right, you'll see Code Snippets. The default is Node.js, a type of Javascript. We don't want that. Click the dropdown box and look for Python. They have three ways, using three different packages, to interface with the API from Python and download the data. I'll pick `Requests` - it seemed to work below. \n", "\n", "This will change the code. You'll see the package import, your API key, the host, and the data request. You can click **Copy Code**. \n", "\n", "But, before we run this on our end, let's click **Test Endpoint**. That's the blue box in the middle. Then, click **Results** on the left and **Body**. By doing this, we essentially just ran that code in the browser. We can see what data we're going to get. This is a **JSON file** with 9 items. Each item has 6 keys. You can see what the keys are - they are giving us the ids for each sport. For example, \"Soccer\" is \"id = 1\". \n", "\n", "This is very helpful! We need to know these id values if we want to pull particular sports.\n", "\n", "For fun, let's pull this simple JSON file on our end. I've copied and pasted the code below. It didn't like the `print` function, so I just dropped it. I am again loading in my API key from an separate file. You'll use your own." ] }, { "cell_type": "code", "execution_count": 149, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[{\"id\":1,\"p_id\":29,\"name\":\"Soccer\",\"last\":1681571699,\"special_last\":1681571658,\"last_call\":1681571702},{\"id\":2,\"p_id\":33,\"name\":\"Tennis\",\"last\":1681571703,\"special_last\":1681556172,\"last_call\":1681571705},{\"id\":3,\"p_id\":4,\"name\":\"Basketball\",\"last\":1681571705,\"special_last\":1681571632,\"last_call\":1681571706},{\"id\":4,\"p_id\":19,\"name\":\"Hockey\",\"last\":1681571474,\"special_last\":1681568468,\"last_call\":1681571707},{\"id\":5,\"p_id\":34,\"name\":\"Volleyball\",\"last\":1681571707,\"last_call\":1681571709},{\"id\":6,\"p_id\":18,\"name\":\"Handball\",\"last\":1681571709,\"last_call\":1681571710},{\"id\":7,\"p_id\":15,\"name\":\"American Football\",\"last\":1681571125,\"special_last\":1681520390,\"last_call\":1681571711},{\"id\":8,\"p_id\":22,\"name\":\"Mixed Martial Arts\",\"last\":1681571386,\"special_last\":1681571395,\"last_call\":1681571697},{\"id\":9,\"p_id\":3,\"name\":\"Baseball\",\"last\":1681571697,\"special_last\":1681571666,\"last_call\":1681571698}]\n" ] } ], "source": [ "import requests\n", "from dotenv import load_dotenv # For my .env file which contains my API keys locally\n", "import os # For my .env file which contains my API keys locally\n", "\n", "load_dotenv() # For my .env file which contains my API keys locally\n", "RAPID_API_KEY = os.getenv('RAPID_API_KEY')\n", "\n", "url = \"https://pinnacle-odds.p.rapidapi.com/kit/v1/sports\"\n", "\n", "headers = {\n", "\t\"X-RapidAPI-Key\": RAPID_API_KEY,\n", "\t\"X-RapidAPI-Host\": \"pinnacle-odds.p.rapidapi.com\"\n", "}\n", "\n", "sports_ids = requests.request(\"GET\", url, headers=headers)\n", "\n", "print(sports_ids.text)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "We can turn that response file into a JSON file. This is what it wants to be!\n", "\n", "All of the code that follows is also commented out so that it doesn't run every time I edit this online book. The output from the code is still there, however." ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[{'id': 1,\n", " 'p_id': 29,\n", " 'name': 'Soccer',\n", " 'last': 1681571699,\n", " 'special_last': 1681571658,\n", " 'last_call': 1681571702},\n", " {'id': 2,\n", " 'p_id': 33,\n", " 'name': 'Tennis',\n", " 'last': 1681571703,\n", " 'special_last': 1681556172,\n", " 'last_call': 1681571705},\n", " {'id': 3,\n", " 'p_id': 4,\n", " 'name': 'Basketball',\n", " 'last': 1681571705,\n", " 'special_last': 1681571632,\n", " 'last_call': 1681571706},\n", " {'id': 4,\n", " 'p_id': 19,\n", " 'name': 'Hockey',\n", " 'last': 1681571474,\n", " 'special_last': 1681568468,\n", " 'last_call': 1681571707},\n", " {'id': 5,\n", " 'p_id': 34,\n", " 'name': 'Volleyball',\n", " 'last': 1681571707,\n", " 'last_call': 1681571709},\n", " {'id': 6,\n", " 'p_id': 18,\n", " 'name': 'Handball',\n", " 'last': 1681571709,\n", " 'last_call': 1681571710},\n", " {'id': 7,\n", " 'p_id': 15,\n", " 'name': 'American Football',\n", " 'last': 1681571125,\n", " 'special_last': 1681520390,\n", " 'last_call': 1681571711},\n", " {'id': 8,\n", " 'p_id': 22,\n", " 'name': 'Mixed Martial Arts',\n", " 'last': 1681571386,\n", " 'special_last': 1681571395,\n", " 'last_call': 1681571697},\n", " {'id': 9,\n", " 'p_id': 3,\n", " 'name': 'Baseball',\n", " 'last': 1681571697,\n", " 'special_last': 1681571666,\n", " 'last_call': 1681571698}]" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sports_ids_json = sports_ids.json()\n", "sports_ids_json" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "That's JSON. I was able to show the whole thing in the notebook.\n", "\n", "Let's get that into a `pandas` DataFrame now. To do that, we have to know a bit about how JSON files are structured. This one is easy. `pd.json_normalize` is a useful tool here." ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idp_idnamelastspecial_lastlast_call
0129Soccer16815716991.681572e+091681571702
1233Tennis16815717031.681556e+091681571705
234Basketball16815717051.681572e+091681571706
3419Hockey16815714741.681568e+091681571707
4534Volleyball1681571707NaN1681571709
5618Handball1681571709NaN1681571710
6715American Football16815711251.681520e+091681571711
7822Mixed Martial Arts16815713861.681571e+091681571697
893Baseball16815716971.681572e+091681571698
\n", "
" ], "text/plain": [ " id p_id name last special_last last_call\n", "0 1 29 Soccer 1681571699 1.681572e+09 1681571702\n", "1 2 33 Tennis 1681571703 1.681556e+09 1681571705\n", "2 3 4 Basketball 1681571705 1.681572e+09 1681571706\n", "3 4 19 Hockey 1681571474 1.681568e+09 1681571707\n", "4 5 34 Volleyball 1681571707 NaN 1681571709\n", "5 6 18 Handball 1681571709 NaN 1681571710\n", "6 7 15 American Football 1681571125 1.681520e+09 1681571711\n", "7 8 22 Mixed Martial Arts 1681571386 1.681571e+09 1681571697\n", "8 9 3 Baseball 1681571697 1.681572e+09 1681571698" ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sports_ids_df = pd.json_normalize(data = sports_ids_json)\n", "sports_ids_df\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "What do all of those columns mean? I don't know! You'd want to read the documentation for your API.\n", "\n", "Also, note how I'm changing the names of my objects as I go. I want to keep each data structure in memory - what I originally downloaded, the JSON file, the DataFrame. This way, I don't overwrite anything and I won't be forced to download the data all over again.\n", "\n", "Now, let's see if we can pull some actual data. I notice that *id = 3* is Basketball. Cool. Let's try for some NBA data. Go back to the left of the **Endpoint** page and click on **List of archive events**. The middle will change and you'll have some required and optional inputs. I know I want *sport_id* to be 3. But I don't want all basketball. Just the NBA. So, I notice the *league_ids* option below. But I don't know the number of the NBA.\n", "\n", "OK, back to the left side. See **List of leagues**? Click that. I put in *sport_id = 3*. I then click **Test Endpoint**. I go to **Results**, select **Body**, and then **Expand All**. I do a CTRL-F to look for \"NBA\".\n", "\n", "And I find a bunch of possibilities! NBA games. Summer League. D-League. Summer League! If you're betting on NBA Summer League, please seek help. Let's use the regular NBA. That's *league_id = 487*. \n", "\n", "Back to **List of archive events**. I'll add that league ID to the bottom of the middle. I set the page_num to 1000. I then click **Test Endpoint** and look at what I get. \n", "\n", "Nothing! That's an empty looking file on the right. Maybe this API doesn't keep archived NBA? Who knows. \n", "\n", "Let's try another endpoint. Click on **List of markets**. Let's see what this one has. In the middle, I'll again use the codes for basketball and the NBA. I'll set *is_have_odds* to True. Let's test the endpoint and see what we get. \n", "\n", "```{figure} ../images/07-rapidapi-nba.png\n", "---\n", "name: 07-rapidapi-nba.png\n", "align: center\n", "---\n", "Some NBA odds for this weekend.\n", "```\n", "\n", "We can expand the result and look at the data structure. This is a more complicated one. I see 8 items under events. These correspond to the 8 games this weekend. Then, under each event, you can keep drilling down. The *level 0* is kind of like the header for that event. It has the game, the start time, the teams, etc. You'll see 4 more keys under *periods*. Each of these is a different betting line, with money lines, spreads, what I think are over/under point totals, etc. \n", "\n", "Anyway, the main thing here is that we have indeed pulled some rather complex looking data. That data is current for upcoming games, not historical. But, we can still pull this in and use it to see how to work with a more complex JSON structure. \n", "\n", "I'll copy and paste the code again. " ] }, { "cell_type": "code", "execution_count": 152, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\"sport_id\":3,\"sport_name\":\"Basketball\",\"last\":1681571705,\"last_call\":1681571706,\"events\":[{\"event_id\":1570671674,\"sport_id\":3,\"league_id\":487,\"league_name\":\"NBA\",\"starts\":\"2023-04-15T17:10:00\",\"last\":1681571077,\"home\":\"Philadelphia 76ers\",\"away\":\"Brooklyn Nets\",\"event_type\":\"prematch\",\"parent_id\":null,\"resulting_unit\":\"Regular\",\"is_have_odds\":true,\"periods\":{\"num_0\":{\"line_id\":2067360473,\"number\":0,\"cutoff\":\"2023-04-15T17:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.263,\"draw\":null,\"away\":4.18},\"spreads\":{\"-8.5\":{\"hdp\":-8.5,\"home\":1.909,\"away\":2.0,\"max\":25000.0},\"-6.0\":{\"hdp\":-6.0,\"home\":1.588,\"away\":2.48,\"max\":25000.0},\"-6.5\":{\"hdp\":-6.5,\"home\":1.636,\"away\":2.37,\"max\":25000.0},\"-7.0\":{\"hdp\":-7.0,\"home\":1.684,\"away\":2.28,\"max\":25000.0},\"-7.5\":{\"hdp\":-7.5,\"home\":1.746,\"away\":2.19,\"max\":25000.0},\"-8.0\":{\"hdp\":-8.0,\"home\":1.819,\"away\":2.09,\"max\":25000.0},\"-9.0\":{\"hdp\":-9.0,\"home\":1.99,\"away\":1.9,\"max\":25000.0},\"-9.5\":{\"hdp\":-9.5,\"home\":2.08,\"away\":1.826,\"max\":25000.0},\"-10.0\":{\"hdp\":-10.0,\"home\":2.16,\"away\":1.757,\"max\":25000.0},\"-10.5\":{\"hdp\":-10.5,\"home\":2.25,\"away\":1.704,\"max\":25000.0},\"-11.0\":{\"hdp\":-11.0,\"home\":2.34,\"away\":1.653,\"max\":25000.0}},\"totals\":{\"213.5\":{\"points\":213.5,\"over\":1.862,\"under\":2.03,\"max\":5000.0},\"211.0\":{\"points\":211.0,\"over\":1.632,\"under\":2.35,\"max\":5000.0},\"211.5\":{\"points\":211.5,\"over\":1.68,\"under\":2.27,\"max\":5000.0},\"212.0\":{\"points\":212.0,\"over\":1.714,\"under\":2.21,\"max\":5000.0},\"212.5\":{\"points\":212.5,\"over\":1.763,\"under\":2.15,\"max\":5000.0},\"213.0\":{\"points\":213.0,\"over\":1.806,\"under\":2.09,\"max\":5000.0},\"214.0\":{\"points\":214.0,\"over\":1.9,\"under\":1.98,\"max\":5000.0},\"214.5\":{\"points\":214.5,\"over\":1.952,\"under\":1.925,\"max\":5000.0},\"215.0\":{\"points\":215.0,\"over\":2.01,\"under\":1.869,\"max\":5000.0},\"215.5\":{\"points\":215.5,\"over\":2.06,\"under\":1.826,\"max\":5000.0},\"216.0\":{\"points\":216.0,\"over\":2.11,\"under\":1.775,\"max\":5000.0}},\"team_total\":{\"home\":{\"points\":111.5,\"over\":1.909,\"under\":1.943},\"away\":{\"points\":102.5,\"over\":1.869,\"under\":1.98}},\"meta\":{\"number\":0,\"max_spread\":25000.0,\"max_money_line\":15000.0,\"max_total\":5000.0,\"max_team_total\":2000.0}},\"num_1\":{\"line_id\":2067360475,\"number\":1,\"cutoff\":\"2023-04-15T17:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.363,\"draw\":null,\"away\":3.32},\"spreads\":{\"-5.0\":{\"hdp\":-5.0,\"home\":1.909,\"away\":1.97,\"max\":6500.0},\"-3.0\":{\"hdp\":-3.0,\"home\":1.649,\"away\":2.32,\"max\":6500.0},\"-3.5\":{\"hdp\":-3.5,\"home\":1.699,\"away\":2.23,\"max\":6500.0},\"-4.0\":{\"hdp\":-4.0,\"home\":1.763,\"away\":2.14,\"max\":6500.0},\"-4.5\":{\"hdp\":-4.5,\"home\":1.833,\"away\":2.06,\"max\":6500.0},\"-5.5\":{\"hdp\":-5.5,\"home\":1.99,\"away\":1.892,\"max\":6500.0},\"-6.0\":{\"hdp\":-6.0,\"home\":2.07,\"away\":1.819,\"max\":6500.0},\"-6.5\":{\"hdp\":-6.5,\"home\":2.15,\"away\":1.751,\"max\":6500.0},\"-7.0\":{\"hdp\":-7.0,\"home\":2.24,\"away\":1.694,\"max\":6500.0}},\"totals\":{\"109.0\":{\"points\":109.0,\"over\":1.9,\"under\":1.99,\"max\":2000.0},\"107.0\":{\"points\":107.0,\"over\":1.675,\"under\":2.28,\"max\":2000.0},\"107.5\":{\"points\":107.5,\"over\":1.735,\"under\":2.19,\"max\":2000.0},\"108.0\":{\"points\":108.0,\"over\":1.781,\"under\":2.12,\"max\":2000.0},\"108.5\":{\"points\":108.5,\"over\":1.84,\"under\":2.05,\"max\":2000.0},\"109.5\":{\"points\":109.5,\"over\":1.952,\"under\":1.917,\"max\":2000.0},\"110.0\":{\"points\":110.0,\"over\":2.02,\"under\":1.862,\"max\":2000.0},\"110.5\":{\"points\":110.5,\"over\":2.08,\"under\":1.806,\"max\":2000.0},\"111.0\":{\"points\":111.0,\"over\":2.16,\"under\":1.746,\"max\":2000.0}},\"team_total\":{\"home\":{\"points\":57.5,\"over\":1.943,\"under\":1.909},\"away\":{\"points\":52.5,\"over\":2.01,\"under\":1.854}},\"meta\":{\"number\":1,\"max_spread\":6500.0,\"max_money_line\":3500.0,\"max_total\":2000.0,\"max_team_total\":1000.0}},\"num_3\":{\"line_id\":2067360478,\"number\":3,\"cutoff\":\"2023-04-15T17:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.465,\"draw\":null,\"away\":2.86},\"spreads\":{\"-3.0\":{\"hdp\":-3.0,\"home\":1.909,\"away\":1.98,\"max\":3000.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.578,\"away\":2.47,\"max\":3000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.657,\"away\":2.3,\"max\":3000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.724,\"away\":2.2,\"max\":3000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":1.813,\"away\":2.07,\"max\":3000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":1.99,\"away\":1.877,\"max\":3000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.11,\"away\":1.787,\"max\":3000.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.2,\"away\":1.714,\"max\":3000.0},\"-5.0\":{\"hdp\":-5.0,\"home\":2.35,\"away\":1.632,\"max\":3000.0}},\"totals\":{\"55.0\":{\"points\":55.0,\"over\":1.961,\"under\":1.925,\"max\":1000.0},\"53.0\":{\"points\":53.0,\"over\":1.675,\"under\":2.29,\"max\":1000.0},\"53.5\":{\"points\":53.5,\"over\":1.746,\"under\":2.17,\"max\":1000.0},\"54.0\":{\"points\":54.0,\"over\":1.806,\"under\":2.09,\"max\":1000.0},\"54.5\":{\"points\":54.5,\"over\":1.877,\"under\":2.0,\"max\":1000.0},\"55.5\":{\"points\":55.5,\"over\":2.04,\"under\":1.847,\"max\":1000.0},\"56.0\":{\"points\":56.0,\"over\":2.14,\"under\":1.769,\"max\":1000.0},\"56.5\":{\"points\":56.5,\"over\":2.22,\"under\":1.714,\"max\":1000.0},\"57.0\":{\"points\":57.0,\"over\":2.35,\"under\":1.641,\"max\":1000.0}},\"team_total\":{\"home\":{\"points\":29.0,\"over\":1.917,\"under\":1.934},\"away\":{\"points\":26.0,\"over\":1.98,\"under\":1.877}},\"meta\":{\"number\":3,\"max_spread\":3000.0,\"max_money_line\":1500.0,\"max_total\":1000.0,\"max_team_total\":1000.0}},\"num_4\":{\"line_id\":2067360489,\"number\":4,\"cutoff\":\"2023-04-15T17:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.581,\"draw\":null,\"away\":2.51},\"spreads\":{\"-2.5\":{\"hdp\":-2.5,\"home\":1.99,\"away\":1.9,\"max\":500.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.649,\"away\":2.32,\"max\":500.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.709,\"away\":2.21,\"max\":500.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.8,\"away\":2.09,\"max\":500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.884,\"away\":1.99,\"max\":500.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.09,\"away\":1.8,\"max\":500.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.19,\"away\":1.729,\"max\":500.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.33,\"away\":1.645,\"max\":500.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.44,\"away\":1.591,\"max\":500.0}},\"totals\":{\"54.5\":{\"points\":54.5,\"over\":1.943,\"under\":1.943,\"max\":500.0},\"52.5\":{\"points\":52.5,\"over\":1.653,\"under\":2.33,\"max\":500.0},\"53.0\":{\"points\":53.0,\"over\":1.704,\"under\":2.23,\"max\":500.0},\"53.5\":{\"points\":53.5,\"over\":1.787,\"under\":2.12,\"max\":500.0},\"54.0\":{\"points\":54.0,\"over\":1.862,\"under\":2.03,\"max\":500.0},\"55.0\":{\"points\":55.0,\"over\":2.04,\"under\":1.847,\"max\":500.0},\"55.5\":{\"points\":55.5,\"over\":2.13,\"under\":1.775,\"max\":500.0},\"56.0\":{\"points\":56.0,\"over\":2.25,\"under\":1.694,\"max\":500.0},\"56.5\":{\"points\":56.5,\"over\":2.36,\"under\":1.636,\"max\":500.0}},\"team_total\":{\"home\":{\"points\":28.5,\"over\":1.961,\"under\":1.892},\"away\":{\"points\":26.5,\"over\":2.03,\"under\":1.833}},\"meta\":{\"number\":4,\"max_spread\":500.0,\"max_money_line\":500.0,\"max_total\":500.0,\"max_team_total\":500.0}}}},{\"event_id\":1570671683,\"sport_id\":3,\"league_id\":487,\"league_name\":\"NBA\",\"starts\":\"2023-04-16T00:40:00\",\"last\":1681570378,\"home\":\"Sacramento Kings\",\"away\":\"Golden State Warriors\",\"event_type\":\"prematch\",\"parent_id\":null,\"resulting_unit\":\"Regular\",\"is_have_odds\":true,\"periods\":{\"num_0\":{\"line_id\":2067336986,\"number\":0,\"cutoff\":\"2023-04-16T00:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.952,\"draw\":null,\"away\":1.952},\"spreads\":{\"-1.0\":{\"hdp\":-1.0,\"home\":1.98,\"away\":1.925,\"max\":25000.0},\"3.0\":{\"hdp\":3.0,\"home\":1.657,\"away\":2.33,\"max\":25000.0},\"2.5\":{\"hdp\":2.5,\"home\":1.709,\"away\":2.23,\"max\":25000.0},\"2.0\":{\"hdp\":2.0,\"home\":1.763,\"away\":2.15,\"max\":25000.0},\"1.5\":{\"hdp\":1.5,\"home\":1.826,\"away\":2.08,\"max\":25000.0},\"1.0\":{\"hdp\":1.0,\"home\":1.869,\"away\":2.03,\"max\":25000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":2.04,\"away\":1.869,\"max\":25000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":2.12,\"away\":1.793,\"max\":25000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.2,\"away\":1.735,\"max\":25000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.29,\"away\":1.675,\"max\":25000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.4,\"away\":1.625,\"max\":25000.0}},\"totals\":{\"237.5\":{\"points\":237.5,\"over\":1.917,\"under\":1.97,\"max\":5000.0},\"235.0\":{\"points\":235.0,\"over\":1.689,\"under\":2.25,\"max\":5000.0},\"235.5\":{\"points\":235.5,\"over\":1.735,\"under\":2.18,\"max\":5000.0},\"236.0\":{\"points\":236.0,\"over\":1.769,\"under\":2.13,\"max\":5000.0},\"236.5\":{\"points\":236.5,\"over\":1.819,\"under\":2.08,\"max\":5000.0},\"237.0\":{\"points\":237.0,\"over\":1.862,\"under\":2.02,\"max\":5000.0},\"238.0\":{\"points\":238.0,\"over\":1.961,\"under\":1.917,\"max\":5000.0},\"238.5\":{\"points\":238.5,\"over\":2.01,\"under\":1.877,\"max\":5000.0},\"239.0\":{\"points\":239.0,\"over\":2.06,\"under\":1.826,\"max\":5000.0},\"239.5\":{\"points\":239.5,\"over\":2.11,\"under\":1.787,\"max\":5000.0},\"240.0\":{\"points\":240.0,\"over\":2.17,\"under\":1.74,\"max\":5000.0}},\"team_total\":{\"home\":{\"points\":118.5,\"over\":1.862,\"under\":2.0},\"away\":{\"points\":118.5,\"over\":1.877,\"under\":1.98}},\"meta\":{\"number\":0,\"max_spread\":25000.0,\"max_money_line\":15000.0,\"max_total\":5000.0,\"max_team_total\":2000.0}},\"num_1\":{\"line_id\":2067336990,\"number\":1,\"cutoff\":\"2023-04-16T00:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.892,\"draw\":null,\"away\":2.0},\"spreads\":{\"-0.5\":{\"hdp\":-0.5,\"home\":1.97,\"away\":1.917,\"max\":6500.0},\"2.0\":{\"hdp\":2.0,\"home\":1.645,\"away\":2.33,\"max\":6500.0},\"1.5\":{\"hdp\":1.5,\"home\":1.694,\"away\":2.24,\"max\":6500.0},\"1.0\":{\"hdp\":1.0,\"home\":1.751,\"away\":2.16,\"max\":6500.0},\"0.5\":{\"hdp\":0.5,\"home\":1.819,\"away\":2.08,\"max\":6500.0},\"-1.0\":{\"hdp\":-1.0,\"home\":2.05,\"away\":1.833,\"max\":6500.0},\"-1.5\":{\"hdp\":-1.5,\"home\":2.13,\"away\":1.769,\"max\":6500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":2.22,\"away\":1.704,\"max\":6500.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.32,\"away\":1.653,\"max\":6500.0}},\"totals\":{\"117.5\":{\"points\":117.5,\"over\":1.952,\"under\":1.934,\"max\":2000.0},\"115.5\":{\"points\":115.5,\"over\":1.699,\"under\":2.24,\"max\":2000.0},\"116.0\":{\"points\":116.0,\"over\":1.746,\"under\":2.16,\"max\":2000.0},\"116.5\":{\"points\":116.5,\"over\":1.813,\"under\":2.08,\"max\":2000.0},\"117.0\":{\"points\":117.0,\"over\":1.877,\"under\":2.0,\"max\":2000.0},\"118.0\":{\"points\":118.0,\"over\":2.02,\"under\":1.862,\"max\":2000.0},\"118.5\":{\"points\":118.5,\"over\":2.09,\"under\":1.806,\"max\":2000.0},\"119.0\":{\"points\":119.0,\"over\":2.17,\"under\":1.746,\"max\":2000.0},\"119.5\":{\"points\":119.5,\"over\":2.24,\"under\":1.699,\"max\":2000.0}},\"team_total\":{\"home\":{\"points\":58.5,\"over\":1.847,\"under\":2.01},\"away\":{\"points\":58.5,\"over\":1.917,\"under\":1.934}},\"meta\":{\"number\":1,\"max_spread\":6500.0,\"max_money_line\":3500.0,\"max_total\":2000.0,\"max_team_total\":1000.0}},\"num_3\":{\"line_id\":2067327510,\"number\":3,\"cutoff\":\"2023-04-16T00:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.917,\"draw\":null,\"away\":1.97},\"spreads\":{\"-0.5\":{\"hdp\":-0.5,\"home\":2.02,\"away\":1.869,\"max\":3000.0},\"2.0\":{\"hdp\":2.0,\"home\":1.574,\"away\":2.48,\"max\":3000.0},\"1.5\":{\"hdp\":1.5,\"home\":1.657,\"away\":2.3,\"max\":3000.0},\"1.0\":{\"hdp\":1.0,\"home\":1.729,\"away\":2.19,\"max\":3000.0},\"0.5\":{\"hdp\":0.5,\"home\":1.819,\"away\":2.06,\"max\":3000.0},\"-1.0\":{\"hdp\":-1.0,\"home\":2.12,\"away\":1.775,\"max\":3000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":2.22,\"away\":1.709,\"max\":3000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":2.37,\"away\":1.625,\"max\":3000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.48,\"away\":1.578,\"max\":3000.0}},\"totals\":{\"58.5\":{\"points\":58.5,\"over\":1.909,\"under\":1.98,\"max\":1000.0},\"56.5\":{\"points\":56.5,\"over\":1.649,\"under\":2.33,\"max\":1000.0},\"57.0\":{\"points\":57.0,\"over\":1.694,\"under\":2.25,\"max\":1000.0},\"57.5\":{\"points\":57.5,\"over\":1.763,\"under\":2.15,\"max\":1000.0},\"58.0\":{\"points\":58.0,\"over\":1.826,\"under\":2.07,\"max\":1000.0},\"59.0\":{\"points\":59.0,\"over\":1.98,\"under\":1.9,\"max\":1000.0},\"59.5\":{\"points\":59.5,\"over\":2.05,\"under\":1.833,\"max\":1000.0},\"60.0\":{\"points\":60.0,\"over\":2.15,\"under\":1.757,\"max\":1000.0},\"60.5\":{\"points\":60.5,\"over\":2.24,\"under\":1.704,\"max\":1000.0}},\"team_total\":{\"home\":{\"points\":29.5,\"over\":1.934,\"under\":1.917},\"away\":{\"points\":29.5,\"over\":1.952,\"under\":1.9}},\"meta\":{\"number\":3,\"max_spread\":3000.0,\"max_money_line\":1500.0,\"max_total\":1000.0,\"max_team_total\":1000.0}},\"num_4\":{\"line_id\":2067327542,\"number\":4,\"cutoff\":\"2023-04-16T00:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.925,\"draw\":null,\"away\":1.961},\"spreads\":{\"-0.5\":{\"hdp\":-0.5,\"home\":2.02,\"away\":1.869,\"max\":500.0},\"2.0\":{\"hdp\":2.0,\"home\":1.598,\"away\":2.43,\"max\":500.0},\"1.5\":{\"hdp\":1.5,\"home\":1.675,\"away\":2.27,\"max\":500.0},\"1.0\":{\"hdp\":1.0,\"home\":1.746,\"away\":2.17,\"max\":500.0},\"0.5\":{\"hdp\":0.5,\"home\":1.833,\"away\":2.05,\"max\":500.0},\"-1.0\":{\"hdp\":-1.0,\"home\":2.13,\"away\":1.769,\"max\":500.0},\"-1.5\":{\"hdp\":-1.5,\"home\":2.23,\"away\":1.704,\"max\":500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":2.38,\"away\":1.621,\"max\":500.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.49,\"away\":1.571,\"max\":500.0}},\"totals\":{\"58.5\":{\"points\":58.5,\"over\":2.01,\"under\":1.877,\"max\":500.0},\"56.5\":{\"points\":56.5,\"over\":1.714,\"under\":2.21,\"max\":500.0},\"57.0\":{\"points\":57.0,\"over\":1.775,\"under\":2.12,\"max\":500.0},\"57.5\":{\"points\":57.5,\"over\":1.854,\"under\":2.03,\"max\":500.0},\"58.0\":{\"points\":58.0,\"over\":1.925,\"under\":1.952,\"max\":500.0},\"59.0\":{\"points\":59.0,\"over\":2.11,\"under\":1.793,\"max\":500.0},\"59.5\":{\"points\":59.5,\"over\":2.19,\"under\":1.735,\"max\":500.0},\"60.0\":{\"points\":60.0,\"over\":2.31,\"under\":1.662,\"max\":500.0},\"60.5\":{\"points\":60.5,\"over\":2.41,\"under\":1.613,\"max\":500.0}},\"team_total\":{\"home\":{\"points\":29.5,\"over\":2.02,\"under\":1.84},\"away\":{\"points\":29.5,\"over\":2.04,\"under\":1.826}},\"meta\":{\"number\":4,\"max_spread\":500.0,\"max_money_line\":500.0,\"max_total\":500.0,\"max_team_total\":500.0}}}},{\"event_id\":1570671684,\"sport_id\":3,\"league_id\":487,\"league_name\":\"NBA\",\"starts\":\"2023-04-17T00:10:00\",\"last\":1681568411,\"home\":\"Phoenix Suns\",\"away\":\"Los Angeles Clippers\",\"event_type\":\"prematch\",\"parent_id\":null,\"resulting_unit\":\"Regular\",\"is_have_odds\":true,\"periods\":{\"num_0\":{\"line_id\":2066957075,\"number\":0,\"cutoff\":\"2023-04-17T00:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.358,\"draw\":null,\"away\":3.42},\"spreads\":{\"-7.5\":{\"hdp\":-7.5,\"home\":2.0,\"away\":1.909,\"max\":20000.0},\"-5.0\":{\"hdp\":-5.0,\"home\":1.653,\"away\":2.34,\"max\":20000.0},\"-5.5\":{\"hdp\":-5.5,\"home\":1.704,\"away\":2.24,\"max\":20000.0},\"-6.0\":{\"hdp\":-6.0,\"home\":1.757,\"away\":2.16,\"max\":20000.0},\"-6.5\":{\"hdp\":-6.5,\"home\":1.826,\"away\":2.08,\"max\":20000.0},\"-7.0\":{\"hdp\":-7.0,\"home\":1.909,\"away\":1.99,\"max\":20000.0},\"-8.0\":{\"hdp\":-8.0,\"home\":2.1,\"away\":1.819,\"max\":20000.0},\"-8.5\":{\"hdp\":-8.5,\"home\":2.19,\"away\":1.746,\"max\":20000.0},\"-9.0\":{\"hdp\":-9.0,\"home\":2.28,\"away\":1.684,\"max\":20000.0},\"-9.5\":{\"hdp\":-9.5,\"home\":2.38,\"away\":1.632,\"max\":20000.0},\"-10.0\":{\"hdp\":-10.0,\"home\":2.48,\"away\":1.588,\"max\":20000.0}},\"totals\":{\"226.0\":{\"points\":226.0,\"over\":1.97,\"under\":1.917,\"max\":5000.0},\"223.5\":{\"points\":223.5,\"over\":1.735,\"under\":2.18,\"max\":5000.0},\"224.0\":{\"points\":224.0,\"over\":1.769,\"under\":2.13,\"max\":5000.0},\"224.5\":{\"points\":224.5,\"over\":1.819,\"under\":2.07,\"max\":5000.0},\"225.0\":{\"points\":225.0,\"over\":1.869,\"under\":2.02,\"max\":5000.0},\"225.5\":{\"points\":225.5,\"over\":1.917,\"under\":1.961,\"max\":5000.0},\"226.5\":{\"points\":226.5,\"over\":2.02,\"under\":1.862,\"max\":5000.0},\"227.0\":{\"points\":227.0,\"over\":2.08,\"under\":1.813,\"max\":5000.0},\"227.5\":{\"points\":227.5,\"over\":2.13,\"under\":1.769,\"max\":5000.0},\"228.0\":{\"points\":228.0,\"over\":2.19,\"under\":1.729,\"max\":5000.0},\"228.5\":{\"points\":228.5,\"over\":2.24,\"under\":1.694,\"max\":5000.0}},\"team_total\":{\"home\":{\"points\":116.5,\"over\":1.99,\"under\":1.869},\"away\":{\"points\":109.5,\"over\":1.917,\"under\":1.934}},\"meta\":{\"number\":0,\"max_spread\":20000.0,\"max_money_line\":12000.0,\"max_total\":5000.0,\"max_team_total\":2000.0}},\"num_1\":{\"line_id\":2065216317,\"number\":1,\"cutoff\":\"2023-04-17T00:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.446,\"draw\":null,\"away\":2.93},\"spreads\":{\"-4.5\":{\"hdp\":-4.5,\"home\":1.97,\"away\":1.917,\"max\":4000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":1.694,\"away\":2.24,\"max\":4000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":1.746,\"away\":2.15,\"max\":4000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":1.813,\"away\":2.07,\"max\":4000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":1.884,\"away\":1.99,\"max\":4000.0},\"-5.0\":{\"hdp\":-5.0,\"home\":2.05,\"away\":1.84,\"max\":4000.0},\"-5.5\":{\"hdp\":-5.5,\"home\":2.13,\"away\":1.769,\"max\":4000.0},\"-6.0\":{\"hdp\":-6.0,\"home\":2.22,\"away\":1.704,\"max\":4000.0},\"-6.5\":{\"hdp\":-6.5,\"home\":2.31,\"away\":1.653,\"max\":4000.0}},\"totals\":{\"110.5\":{\"points\":110.5,\"over\":1.97,\"under\":1.917,\"max\":1500.0},\"108.5\":{\"points\":108.5,\"over\":1.699,\"under\":2.24,\"max\":1500.0},\"109.0\":{\"points\":109.0,\"over\":1.751,\"under\":2.16,\"max\":1500.0},\"109.5\":{\"points\":109.5,\"over\":1.819,\"under\":2.07,\"max\":1500.0},\"110.0\":{\"points\":110.0,\"over\":1.884,\"under\":1.99,\"max\":1500.0},\"111.0\":{\"points\":111.0,\"over\":2.03,\"under\":1.854,\"max\":1500.0},\"111.5\":{\"points\":111.5,\"over\":2.1,\"under\":1.8,\"max\":1500.0},\"112.0\":{\"points\":112.0,\"over\":2.18,\"under\":1.735,\"max\":1500.0},\"112.5\":{\"points\":112.5,\"over\":2.25,\"under\":1.694,\"max\":1500.0}},\"team_total\":{\"home\":{\"points\":57.5,\"over\":1.952,\"under\":1.9},\"away\":{\"points\":53.5,\"over\":2.02,\"under\":1.84}},\"meta\":{\"number\":1,\"max_spread\":4000.0,\"max_money_line\":2000.0,\"max_total\":1500.0,\"max_team_total\":1000.0}},\"num_3\":{\"line_id\":2066958217,\"number\":3,\"cutoff\":\"2023-04-17T00:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.543,\"draw\":null,\"away\":2.61},\"spreads\":{\"-2.5\":{\"hdp\":-2.5,\"home\":1.943,\"away\":1.943,\"max\":3000.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.613,\"away\":2.39,\"max\":3000.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.671,\"away\":2.28,\"max\":3000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.763,\"away\":2.14,\"max\":3000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.84,\"away\":2.04,\"max\":3000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.04,\"away\":1.84,\"max\":3000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.14,\"away\":1.763,\"max\":3000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.27,\"away\":1.675,\"max\":3000.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.38,\"away\":1.621,\"max\":3000.0}},\"totals\":{\"55.5\":{\"points\":55.5,\"over\":1.943,\"under\":1.943,\"max\":1000.0},\"53.5\":{\"points\":53.5,\"over\":1.671,\"under\":2.29,\"max\":1000.0},\"54.0\":{\"points\":54.0,\"over\":1.724,\"under\":2.2,\"max\":1000.0},\"54.5\":{\"points\":54.5,\"over\":1.8,\"under\":2.1,\"max\":1000.0},\"55.0\":{\"points\":55.0,\"over\":1.862,\"under\":2.02,\"max\":1000.0},\"56.0\":{\"points\":56.0,\"over\":2.03,\"under\":1.854,\"max\":1000.0},\"56.5\":{\"points\":56.5,\"over\":2.11,\"under\":1.787,\"max\":1000.0},\"57.0\":{\"points\":57.0,\"over\":2.21,\"under\":1.719,\"max\":1000.0},\"57.5\":{\"points\":57.5,\"over\":2.3,\"under\":1.666,\"max\":1000.0}},\"team_total\":{\"home\":{\"points\":29.0,\"over\":1.934,\"under\":1.917},\"away\":{\"points\":26.5,\"over\":1.925,\"under\":1.925}},\"meta\":{\"number\":3,\"max_spread\":3000.0,\"max_money_line\":1500.0,\"max_total\":1000.0,\"max_team_total\":1000.0}},\"num_4\":{\"line_id\":2067164531,\"number\":4,\"cutoff\":\"2023-04-17T00:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.649,\"draw\":null,\"away\":2.36},\"spreads\":{\"-1.5\":{\"hdp\":-1.5,\"home\":1.892,\"away\":2.0,\"max\":500.0},\"1.0\":{\"hdp\":1.0,\"home\":1.515,\"away\":2.63,\"max\":500.0},\"0.5\":{\"hdp\":0.5,\"home\":1.588,\"away\":2.45,\"max\":500.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.724,\"away\":2.2,\"max\":500.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.793,\"away\":2.1,\"max\":500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.98,\"away\":1.892,\"max\":500.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.08,\"away\":1.806,\"max\":500.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.2,\"away\":1.719,\"max\":500.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.31,\"away\":1.653,\"max\":500.0}},\"totals\":{\"55.0\":{\"points\":55.0,\"over\":1.97,\"under\":1.917,\"max\":500.0},\"53.0\":{\"points\":53.0,\"over\":1.649,\"under\":2.33,\"max\":500.0},\"53.5\":{\"points\":53.5,\"over\":1.724,\"under\":2.2,\"max\":500.0},\"54.0\":{\"points\":54.0,\"over\":1.793,\"under\":2.11,\"max\":500.0},\"54.5\":{\"points\":54.5,\"over\":1.884,\"under\":2.0,\"max\":500.0},\"55.5\":{\"points\":55.5,\"over\":2.06,\"under\":1.833,\"max\":500.0},\"56.0\":{\"points\":56.0,\"over\":2.17,\"under\":1.751,\"max\":500.0},\"56.5\":{\"points\":56.5,\"over\":2.26,\"under\":1.689,\"max\":500.0},\"57.0\":{\"points\":57.0,\"over\":2.4,\"under\":1.617,\"max\":500.0}},\"team_total\":{\"home\":{\"points\":28.5,\"over\":1.961,\"under\":1.892},\"away\":{\"points\":27.0,\"over\":2.06,\"under\":1.806}},\"meta\":{\"number\":4,\"max_spread\":500.0,\"max_money_line\":500.0,\"max_total\":500.0,\"max_team_total\":500.0}}}},{\"event_id\":1570671685,\"sport_id\":3,\"league_id\":487,\"league_name\":\"NBA\",\"starts\":\"2023-04-15T22:10:00\",\"last\":1681571621,\"home\":\"Cleveland Cavaliers\",\"away\":\"New York Knicks\",\"event_type\":\"prematch\",\"parent_id\":null,\"resulting_unit\":\"Regular\",\"is_have_odds\":true,\"periods\":{\"num_0\":{\"line_id\":2067381755,\"number\":0,\"cutoff\":\"2023-04-15T22:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.473,\"draw\":null,\"away\":2.87},\"spreads\":{\"-5.5\":{\"hdp\":-5.5,\"home\":1.961,\"away\":1.943,\"max\":15000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":1.625,\"away\":2.4,\"max\":15000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":1.675,\"away\":2.3,\"max\":15000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":1.729,\"away\":2.21,\"max\":15000.0},\"-4.5\":{\"hdp\":-4.5,\"home\":1.793,\"away\":2.12,\"max\":15000.0},\"-5.0\":{\"hdp\":-5.0,\"home\":1.869,\"away\":2.03,\"max\":15000.0},\"-6.0\":{\"hdp\":-6.0,\"home\":2.05,\"away\":1.854,\"max\":15000.0},\"-6.5\":{\"hdp\":-6.5,\"home\":2.14,\"away\":1.781,\"max\":15000.0},\"-7.0\":{\"hdp\":-7.0,\"home\":2.23,\"away\":1.714,\"max\":15000.0},\"-7.5\":{\"hdp\":-7.5,\"home\":2.32,\"away\":1.662,\"max\":15000.0},\"-8.0\":{\"hdp\":-8.0,\"home\":2.42,\"away\":1.613,\"max\":15000.0}},\"totals\":{\"217.0\":{\"points\":217.0,\"over\":1.917,\"under\":1.97,\"max\":4000.0},\"214.5\":{\"points\":214.5,\"over\":1.704,\"under\":2.23,\"max\":4000.0},\"215.0\":{\"points\":215.0,\"over\":1.74,\"under\":2.18,\"max\":4000.0},\"215.5\":{\"points\":215.5,\"over\":1.781,\"under\":2.12,\"max\":4000.0},\"216.0\":{\"points\":216.0,\"over\":1.819,\"under\":2.07,\"max\":4000.0},\"216.5\":{\"points\":216.5,\"over\":1.869,\"under\":2.02,\"max\":4000.0},\"217.5\":{\"points\":217.5,\"over\":1.97,\"under\":1.909,\"max\":4000.0},\"218.0\":{\"points\":218.0,\"over\":2.03,\"under\":1.854,\"max\":4000.0},\"218.5\":{\"points\":218.5,\"over\":2.08,\"under\":1.806,\"max\":4000.0},\"219.0\":{\"points\":219.0,\"over\":2.15,\"under\":1.757,\"max\":4000.0},\"219.5\":{\"points\":219.5,\"over\":2.2,\"under\":1.719,\"max\":4000.0}},\"team_total\":{\"home\":{\"points\":110.5,\"over\":1.84,\"under\":2.02},\"away\":{\"points\":106.5,\"over\":1.98,\"under\":1.877}},\"meta\":{\"number\":0,\"max_spread\":15000.0,\"max_money_line\":7500.0,\"max_total\":4000.0,\"max_team_total\":2000.0}},\"num_1\":{\"line_id\":2067398065,\"number\":1,\"cutoff\":\"2023-04-15T22:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.552,\"draw\":null,\"away\":2.58},\"spreads\":{\"-2.5\":{\"hdp\":-2.5,\"home\":1.869,\"away\":2.03,\"max\":5000.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.613,\"away\":2.39,\"max\":5000.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.666,\"away\":2.29,\"max\":5000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.724,\"away\":2.2,\"max\":5000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.793,\"away\":2.11,\"max\":5000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":1.943,\"away\":1.934,\"max\":5000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.01,\"away\":1.862,\"max\":5000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.09,\"away\":1.793,\"max\":5000.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.18,\"away\":1.735,\"max\":5000.0}},\"totals\":{\"111.0\":{\"points\":111.0,\"over\":2.0,\"under\":1.892,\"max\":2000.0},\"109.0\":{\"points\":109.0,\"over\":1.751,\"under\":2.16,\"max\":2000.0},\"109.5\":{\"points\":109.5,\"over\":1.806,\"under\":2.08,\"max\":2000.0},\"110.0\":{\"points\":110.0,\"over\":1.862,\"under\":2.02,\"max\":2000.0},\"110.5\":{\"points\":110.5,\"over\":1.917,\"under\":1.961,\"max\":2000.0},\"111.5\":{\"points\":111.5,\"over\":2.06,\"under\":1.826,\"max\":2000.0},\"112.0\":{\"points\":112.0,\"over\":2.16,\"under\":1.757,\"max\":2000.0},\"112.5\":{\"points\":112.5,\"over\":2.23,\"under\":1.704,\"max\":2000.0},\"113.0\":{\"points\":113.0,\"over\":2.34,\"under\":1.645,\"max\":2000.0}},\"team_total\":{\"home\":{\"points\":57.0,\"over\":1.925,\"under\":1.925},\"away\":{\"points\":53.5,\"over\":1.869,\"under\":1.98}},\"meta\":{\"number\":1,\"max_spread\":5000.0,\"max_money_line\":2000.0,\"max_total\":2000.0,\"max_team_total\":1000.0}},\"num_3\":{\"line_id\":2067372965,\"number\":3,\"cutoff\":\"2023-04-15T22:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.625,\"draw\":null,\"away\":2.41},\"spreads\":{\"-2.0\":{\"hdp\":-2.0,\"home\":1.952,\"away\":1.934,\"max\":3000.0},\"0.5\":{\"hdp\":0.5,\"home\":1.558,\"away\":2.52,\"max\":3000.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.694,\"away\":2.24,\"max\":3000.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.763,\"away\":2.14,\"max\":3000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.854,\"away\":2.02,\"max\":3000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.04,\"away\":1.833,\"max\":3000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.17,\"away\":1.746,\"max\":3000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.27,\"away\":1.675,\"max\":3000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.43,\"away\":1.595,\"max\":3000.0}},\"totals\":{\"56.0\":{\"points\":56.0,\"over\":2.01,\"under\":1.884,\"max\":1000.0},\"54.0\":{\"points\":54.0,\"over\":1.704,\"under\":2.24,\"max\":1000.0},\"54.5\":{\"points\":54.5,\"over\":1.775,\"under\":2.13,\"max\":1000.0},\"55.0\":{\"points\":55.0,\"over\":1.84,\"under\":2.05,\"max\":1000.0},\"55.5\":{\"points\":55.5,\"over\":1.917,\"under\":1.961,\"max\":1000.0},\"56.5\":{\"points\":56.5,\"over\":2.1,\"under\":1.8,\"max\":1000.0},\"57.0\":{\"points\":57.0,\"over\":2.21,\"under\":1.729,\"max\":1000.0},\"57.5\":{\"points\":57.5,\"over\":2.29,\"under\":1.671,\"max\":1000.0},\"58.0\":{\"points\":58.0,\"over\":2.43,\"under\":1.602,\"max\":1000.0}},\"team_total\":{\"home\":{\"points\":29.0,\"over\":1.98,\"under\":1.877},\"away\":{\"points\":26.5,\"over\":1.854,\"under\":2.0}},\"meta\":{\"number\":3,\"max_spread\":3000.0,\"max_money_line\":1500.0,\"max_total\":1000.0,\"max_team_total\":1000.0}},\"num_4\":{\"line_id\":2067398089,\"number\":4,\"cutoff\":\"2023-04-15T22:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.694,\"draw\":null,\"away\":2.27},\"spreads\":{\"-1.0\":{\"hdp\":-1.0,\"home\":1.862,\"away\":2.03,\"max\":500.0},\"1.5\":{\"hdp\":1.5,\"home\":1.51,\"away\":2.65,\"max\":500.0},\"1.0\":{\"hdp\":1.0,\"home\":1.552,\"away\":2.53,\"max\":500.0},\"0.5\":{\"hdp\":0.5,\"home\":1.632,\"away\":2.37,\"max\":500.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.775,\"away\":2.13,\"max\":500.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.943,\"away\":1.925,\"max\":500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":2.05,\"away\":1.833,\"max\":500.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.15,\"away\":1.751,\"max\":500.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.28,\"away\":1.671,\"max\":500.0}},\"totals\":{\"55.5\":{\"points\":55.5,\"over\":1.99,\"under\":1.9,\"max\":500.0},\"53.5\":{\"points\":53.5,\"over\":1.671,\"under\":2.29,\"max\":500.0},\"54.0\":{\"points\":54.0,\"over\":1.724,\"under\":2.2,\"max\":500.0},\"54.5\":{\"points\":54.5,\"over\":1.806,\"under\":2.09,\"max\":500.0},\"55.0\":{\"points\":55.0,\"over\":1.884,\"under\":1.99,\"max\":500.0},\"56.0\":{\"points\":56.0,\"over\":2.09,\"under\":1.806,\"max\":500.0},\"56.5\":{\"points\":56.5,\"over\":2.19,\"under\":1.74,\"max\":500.0},\"57.0\":{\"points\":57.0,\"over\":2.32,\"under\":1.657,\"max\":500.0},\"57.5\":{\"points\":57.5,\"over\":2.43,\"under\":1.606,\"max\":500.0}},\"team_total\":{\"home\":{\"points\":28.5,\"over\":1.97,\"under\":1.884},\"away\":{\"points\":27.0,\"over\":1.952,\"under\":1.9}},\"meta\":{\"number\":4,\"max_spread\":500.0,\"max_money_line\":500.0,\"max_total\":500.0,\"max_team_total\":500.0}}}},{\"event_id\":1570794181,\"sport_id\":3,\"league_id\":487,\"league_name\":\"NBA\",\"starts\":\"2023-04-15T19:40:00\",\"last\":1681570462,\"home\":\"Boston Celtics\",\"away\":\"Atlanta Hawks\",\"event_type\":\"prematch\",\"parent_id\":null,\"resulting_unit\":\"Regular\",\"is_have_odds\":true,\"periods\":{\"num_0\":{\"line_id\":2067326363,\"number\":0,\"cutoff\":\"2023-04-15T19:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.247,\"draw\":null,\"away\":4.36},\"spreads\":{\"-9.5\":{\"hdp\":-9.5,\"home\":1.97,\"away\":1.934,\"max\":25000.0},\"-7.0\":{\"hdp\":-7.0,\"home\":1.632,\"away\":2.38,\"max\":25000.0},\"-7.5\":{\"hdp\":-7.5,\"home\":1.68,\"away\":2.28,\"max\":25000.0},\"-8.0\":{\"hdp\":-8.0,\"home\":1.735,\"away\":2.2,\"max\":25000.0},\"-8.5\":{\"hdp\":-8.5,\"home\":1.8,\"away\":2.11,\"max\":25000.0},\"-9.0\":{\"hdp\":-9.0,\"home\":1.877,\"away\":2.02,\"max\":25000.0},\"-10.0\":{\"hdp\":-10.0,\"home\":2.06,\"away\":1.847,\"max\":25000.0},\"-10.5\":{\"hdp\":-10.5,\"home\":2.15,\"away\":1.769,\"max\":25000.0},\"-11.0\":{\"hdp\":-11.0,\"home\":2.24,\"away\":1.709,\"max\":25000.0},\"-11.5\":{\"hdp\":-11.5,\"home\":2.33,\"away\":1.657,\"max\":25000.0},\"-12.0\":{\"hdp\":-12.0,\"home\":2.44,\"away\":1.606,\"max\":25000.0}},\"totals\":{\"231.0\":{\"points\":231.0,\"over\":1.98,\"under\":1.909,\"max\":5000.0},\"228.5\":{\"points\":228.5,\"over\":1.74,\"under\":2.16,\"max\":5000.0},\"229.0\":{\"points\":229.0,\"over\":1.781,\"under\":2.11,\"max\":5000.0},\"229.5\":{\"points\":229.5,\"over\":1.826,\"under\":2.06,\"max\":5000.0},\"230.0\":{\"points\":230.0,\"over\":1.877,\"under\":2.01,\"max\":5000.0},\"230.5\":{\"points\":230.5,\"over\":1.917,\"under\":1.952,\"max\":5000.0},\"231.5\":{\"points\":231.5,\"over\":2.03,\"under\":1.854,\"max\":5000.0},\"232.0\":{\"points\":232.0,\"over\":2.09,\"under\":1.806,\"max\":5000.0},\"232.5\":{\"points\":232.5,\"over\":2.14,\"under\":1.769,\"max\":5000.0},\"233.0\":{\"points\":233.0,\"over\":2.21,\"under\":1.719,\"max\":5000.0},\"233.5\":{\"points\":233.5,\"over\":2.26,\"under\":1.684,\"max\":5000.0}},\"team_total\":{\"home\":{\"points\":119.5,\"over\":1.854,\"under\":2.0},\"away\":{\"points\":110.5,\"over\":1.925,\"under\":1.925}},\"meta\":{\"number\":0,\"max_spread\":25000.0,\"max_money_line\":15000.0,\"max_total\":5000.0,\"max_team_total\":2000.0}},\"num_1\":{\"line_id\":2067339777,\"number\":1,\"cutoff\":\"2023-04-15T19:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.369,\"draw\":null,\"away\":3.29},\"spreads\":{\"-5.0\":{\"hdp\":-5.0,\"home\":1.917,\"away\":1.97,\"max\":6500.0},\"-3.0\":{\"hdp\":-3.0,\"home\":1.649,\"away\":2.32,\"max\":6500.0},\"-3.5\":{\"hdp\":-3.5,\"home\":1.704,\"away\":2.22,\"max\":6500.0},\"-4.0\":{\"hdp\":-4.0,\"home\":1.769,\"away\":2.14,\"max\":6500.0},\"-4.5\":{\"hdp\":-4.5,\"home\":1.833,\"away\":2.05,\"max\":6500.0},\"-5.5\":{\"hdp\":-5.5,\"home\":1.99,\"away\":1.884,\"max\":6500.0},\"-6.0\":{\"hdp\":-6.0,\"home\":2.07,\"away\":1.813,\"max\":6500.0},\"-6.5\":{\"hdp\":-6.5,\"home\":2.15,\"away\":1.746,\"max\":6500.0},\"-7.0\":{\"hdp\":-7.0,\"home\":2.24,\"away\":1.694,\"max\":6500.0}},\"totals\":{\"118.0\":{\"points\":118.0,\"over\":1.943,\"under\":1.943,\"max\":2000.0},\"116.0\":{\"points\":116.0,\"over\":1.714,\"under\":2.22,\"max\":2000.0},\"116.5\":{\"points\":116.5,\"over\":1.763,\"under\":2.14,\"max\":2000.0},\"117.0\":{\"points\":117.0,\"over\":1.813,\"under\":2.08,\"max\":2000.0},\"117.5\":{\"points\":117.5,\"over\":1.869,\"under\":2.01,\"max\":2000.0},\"118.5\":{\"points\":118.5,\"over\":2.01,\"under\":1.869,\"max\":2000.0},\"119.0\":{\"points\":119.0,\"over\":2.1,\"under\":1.8,\"max\":2000.0},\"119.5\":{\"points\":119.5,\"over\":2.17,\"under\":1.746,\"max\":2000.0},\"120.0\":{\"points\":120.0,\"over\":2.27,\"under\":1.68,\"max\":2000.0}},\"team_total\":{\"home\":{\"points\":61.5,\"over\":1.877,\"under\":1.98},\"away\":{\"points\":56.5,\"over\":1.961,\"under\":1.892}},\"meta\":{\"number\":1,\"max_spread\":6500.0,\"max_money_line\":3500.0,\"max_total\":2000.0,\"max_team_total\":1000.0}},\"num_3\":{\"line_id\":2067247663,\"number\":3,\"cutoff\":\"2023-04-15T19:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.478,\"draw\":null,\"away\":2.81},\"spreads\":{\"-3.0\":{\"hdp\":-3.0,\"home\":1.934,\"away\":1.952,\"max\":3000.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.598,\"away\":2.43,\"max\":3000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.68,\"away\":2.26,\"max\":3000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.751,\"away\":2.16,\"max\":3000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":1.84,\"away\":2.04,\"max\":3000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.02,\"away\":1.854,\"max\":3000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.14,\"away\":1.763,\"max\":3000.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.24,\"away\":1.694,\"max\":3000.0},\"-5.0\":{\"hdp\":-5.0,\"home\":2.39,\"away\":1.613,\"max\":3000.0}},\"totals\":{\"59.0\":{\"points\":59.0,\"over\":1.9,\"under\":1.98,\"max\":1000.0},\"57.0\":{\"points\":57.0,\"over\":1.645,\"under\":2.34,\"max\":1000.0},\"57.5\":{\"points\":57.5,\"over\":1.709,\"under\":2.22,\"max\":1000.0},\"58.0\":{\"points\":58.0,\"over\":1.763,\"under\":2.15,\"max\":1000.0},\"58.5\":{\"points\":58.5,\"over\":1.833,\"under\":2.06,\"max\":1000.0},\"59.5\":{\"points\":59.5,\"over\":1.98,\"under\":1.9,\"max\":1000.0},\"60.0\":{\"points\":60.0,\"over\":2.06,\"under\":1.826,\"max\":1000.0},\"60.5\":{\"points\":60.5,\"over\":2.14,\"under\":1.763,\"max\":1000.0},\"61.0\":{\"points\":61.0,\"over\":2.25,\"under\":1.694,\"max\":1000.0}},\"team_total\":{\"home\":{\"points\":31.0,\"over\":1.9,\"under\":1.952},\"away\":{\"points\":28.0,\"over\":1.892,\"under\":1.961}},\"meta\":{\"number\":3,\"max_spread\":3000.0,\"max_money_line\":1500.0,\"max_total\":1000.0,\"max_team_total\":1000.0}},\"num_4\":{\"line_id\":2067247692,\"number\":4,\"cutoff\":\"2023-04-15T19:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.546,\"draw\":null,\"away\":2.6},\"spreads\":{\"-2.5\":{\"hdp\":-2.5,\"home\":1.934,\"away\":1.952,\"max\":500.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.613,\"away\":2.39,\"max\":500.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.666,\"away\":2.28,\"max\":500.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.751,\"away\":2.15,\"max\":500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.833,\"away\":2.05,\"max\":500.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.02,\"away\":1.854,\"max\":500.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.13,\"away\":1.775,\"max\":500.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.25,\"away\":1.684,\"max\":500.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.36,\"away\":1.628,\"max\":500.0}},\"totals\":{\"58.5\":{\"points\":58.5,\"over\":1.884,\"under\":2.0,\"max\":500.0},\"56.5\":{\"points\":56.5,\"over\":1.625,\"under\":2.39,\"max\":500.0},\"57.0\":{\"points\":57.0,\"over\":1.671,\"under\":2.29,\"max\":500.0},\"57.5\":{\"points\":57.5,\"over\":1.746,\"under\":2.18,\"max\":500.0},\"58.0\":{\"points\":58.0,\"over\":1.806,\"under\":2.09,\"max\":500.0},\"59.0\":{\"points\":59.0,\"over\":1.97,\"under\":1.909,\"max\":500.0},\"59.5\":{\"points\":59.5,\"over\":2.06,\"under\":1.826,\"max\":500.0},\"60.0\":{\"points\":60.0,\"over\":2.17,\"under\":1.746,\"max\":500.0},\"60.5\":{\"points\":60.5,\"over\":2.27,\"under\":1.684,\"max\":500.0}},\"team_total\":{\"home\":{\"points\":30.5,\"over\":1.884,\"under\":1.97},\"away\":{\"points\":28.5,\"over\":2.02,\"under\":1.84}},\"meta\":{\"number\":4,\"max_spread\":500.0,\"max_money_line\":500.0,\"max_total\":500.0,\"max_team_total\":500.0}}}},{\"event_id\":1570800108,\"sport_id\":3,\"league_id\":487,\"league_name\":\"NBA\",\"starts\":\"2023-04-16T19:10:00\",\"last\":1681567037,\"home\":\"Memphis Grizzlies\",\"away\":\"Los Angeles Lakers\",\"event_type\":\"prematch\",\"parent_id\":null,\"resulting_unit\":\"Regular\",\"is_have_odds\":true,\"periods\":{\"num_0\":{\"line_id\":2067039020,\"number\":0,\"cutoff\":\"2023-04-16T19:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.613,\"draw\":null,\"away\":2.46},\"spreads\":{\"-3.5\":{\"hdp\":-3.5,\"home\":1.9,\"away\":2.01,\"max\":20000.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.609,\"away\":2.42,\"max\":20000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.641,\"away\":2.37,\"max\":20000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.684,\"away\":2.28,\"max\":20000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":1.74,\"away\":2.2,\"max\":20000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":1.813,\"away\":2.1,\"max\":20000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":1.98,\"away\":1.909,\"max\":20000.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.07,\"away\":1.833,\"max\":20000.0},\"-5.0\":{\"hdp\":-5.0,\"home\":2.15,\"away\":1.763,\"max\":20000.0},\"-5.5\":{\"hdp\":-5.5,\"home\":2.24,\"away\":1.709,\"max\":20000.0},\"-6.0\":{\"hdp\":-6.0,\"home\":2.33,\"away\":1.657,\"max\":20000.0}},\"totals\":{\"227.5\":{\"points\":227.5,\"over\":1.9,\"under\":1.99,\"max\":5000.0},\"225.0\":{\"points\":225.0,\"over\":1.675,\"under\":2.27,\"max\":5000.0},\"225.5\":{\"points\":225.5,\"over\":1.719,\"under\":2.2,\"max\":5000.0},\"226.0\":{\"points\":226.0,\"over\":1.757,\"under\":2.15,\"max\":5000.0},\"226.5\":{\"points\":226.5,\"over\":1.806,\"under\":2.09,\"max\":5000.0},\"227.0\":{\"points\":227.0,\"over\":1.847,\"under\":2.04,\"max\":5000.0},\"228.0\":{\"points\":228.0,\"over\":1.943,\"under\":1.934,\"max\":5000.0},\"228.5\":{\"points\":228.5,\"over\":1.99,\"under\":1.884,\"max\":5000.0},\"229.0\":{\"points\":229.0,\"over\":2.04,\"under\":1.84,\"max\":5000.0},\"229.5\":{\"points\":229.5,\"over\":2.09,\"under\":1.8,\"max\":5000.0},\"230.0\":{\"points\":230.0,\"over\":2.15,\"under\":1.751,\"max\":5000.0}},\"team_total\":{\"home\":{\"points\":115.5,\"over\":1.884,\"under\":1.97},\"away\":{\"points\":112.5,\"over\":1.952,\"under\":1.9}},\"meta\":{\"number\":0,\"max_spread\":20000.0,\"max_money_line\":12000.0,\"max_total\":5000.0,\"max_team_total\":2000.0}},\"num_1\":{\"line_id\":2067039017,\"number\":1,\"cutoff\":\"2023-04-16T19:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.645,\"draw\":null,\"away\":2.37},\"spreads\":{\"-2.0\":{\"hdp\":-2.0,\"home\":1.909,\"away\":1.98,\"max\":5000.0},\"0.5\":{\"hdp\":0.5,\"home\":1.602,\"away\":2.42,\"max\":5000.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.699,\"away\":2.23,\"max\":5000.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.763,\"away\":2.14,\"max\":5000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.833,\"away\":2.06,\"max\":5000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":1.99,\"away\":1.892,\"max\":5000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.06,\"away\":1.819,\"max\":5000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.15,\"away\":1.751,\"max\":5000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.23,\"away\":1.699,\"max\":5000.0}},\"totals\":{\"117.0\":{\"points\":117.0,\"over\":1.952,\"under\":1.934,\"max\":2000.0},\"115.0\":{\"points\":115.0,\"over\":1.729,\"under\":2.19,\"max\":2000.0},\"115.5\":{\"points\":115.5,\"over\":1.781,\"under\":2.11,\"max\":2000.0},\"116.0\":{\"points\":116.0,\"over\":1.833,\"under\":2.06,\"max\":2000.0},\"116.5\":{\"points\":116.5,\"over\":1.884,\"under\":1.99,\"max\":2000.0},\"117.5\":{\"points\":117.5,\"over\":2.01,\"under\":1.869,\"max\":2000.0},\"118.0\":{\"points\":118.0,\"over\":2.1,\"under\":1.8,\"max\":2000.0},\"118.5\":{\"points\":118.5,\"over\":2.17,\"under\":1.74,\"max\":2000.0},\"119.0\":{\"points\":119.0,\"over\":2.28,\"under\":1.68,\"max\":2000.0}},\"team_total\":{\"home\":{\"points\":59.0,\"over\":1.9,\"under\":1.952},\"away\":{\"points\":57.0,\"over\":1.934,\"under\":1.917}},\"meta\":{\"number\":1,\"max_spread\":5000.0,\"max_money_line\":2000.0,\"max_total\":2000.0,\"max_team_total\":1000.0}},\"num_3\":{\"line_id\":2067039018,\"number\":3,\"cutoff\":\"2023-04-16T19:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.68,\"draw\":null,\"away\":2.3},\"spreads\":{\"-1.5\":{\"hdp\":-1.5,\"home\":1.934,\"away\":1.952,\"max\":3000.0},\"1.0\":{\"hdp\":1.0,\"home\":1.531,\"away\":2.59,\"max\":3000.0},\"0.5\":{\"hdp\":0.5,\"home\":1.613,\"away\":2.4,\"max\":3000.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.757,\"away\":2.15,\"max\":3000.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.833,\"away\":2.05,\"max\":3000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":2.03,\"away\":1.847,\"max\":3000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.13,\"away\":1.775,\"max\":3000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.26,\"away\":1.684,\"max\":3000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.37,\"away\":1.625,\"max\":3000.0}},\"totals\":{\"58.5\":{\"points\":58.5,\"over\":1.9,\"under\":1.99,\"max\":1000.0},\"56.5\":{\"points\":56.5,\"over\":1.649,\"under\":2.33,\"max\":1000.0},\"57.0\":{\"points\":57.0,\"over\":1.699,\"under\":2.24,\"max\":1000.0},\"57.5\":{\"points\":57.5,\"over\":1.769,\"under\":2.14,\"max\":1000.0},\"58.0\":{\"points\":58.0,\"over\":1.826,\"under\":2.06,\"max\":1000.0},\"59.0\":{\"points\":59.0,\"over\":1.98,\"under\":1.9,\"max\":1000.0},\"59.5\":{\"points\":59.5,\"over\":2.06,\"under\":1.833,\"max\":1000.0},\"60.0\":{\"points\":60.0,\"over\":2.15,\"under\":1.757,\"max\":1000.0},\"60.5\":{\"points\":60.5,\"over\":2.23,\"under\":1.704,\"max\":1000.0}},\"team_total\":{\"home\":{\"points\":30.0,\"over\":1.9,\"under\":1.952},\"away\":{\"points\":28.5,\"over\":1.892,\"under\":1.961}},\"meta\":{\"number\":3,\"max_spread\":3000.0,\"max_money_line\":1500.0,\"max_total\":1000.0,\"max_team_total\":1000.0}},\"num_4\":{\"line_id\":2067039019,\"number\":4,\"cutoff\":\"2023-04-16T19:10:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.793,\"draw\":null,\"away\":2.12},\"spreads\":{\"-0.5\":{\"hdp\":-0.5,\"home\":1.877,\"away\":2.01,\"max\":500.0},\"2.0\":{\"hdp\":2.0,\"home\":1.512,\"away\":2.65,\"max\":500.0},\"1.5\":{\"hdp\":1.5,\"home\":1.581,\"away\":2.46,\"max\":500.0},\"1.0\":{\"hdp\":1.0,\"home\":1.636,\"away\":2.36,\"max\":500.0},\"0.5\":{\"hdp\":0.5,\"home\":1.714,\"away\":2.21,\"max\":500.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.97,\"away\":1.9,\"max\":500.0},\"-1.5\":{\"hdp\":-1.5,\"home\":2.07,\"away\":1.819,\"max\":500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":2.19,\"away\":1.724,\"max\":500.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.3,\"away\":1.662,\"max\":500.0}},\"totals\":{\"58.5\":{\"points\":58.5,\"over\":1.99,\"under\":1.9,\"max\":500.0},\"56.5\":{\"points\":56.5,\"over\":1.694,\"under\":2.25,\"max\":500.0},\"57.0\":{\"points\":57.0,\"over\":1.751,\"under\":2.16,\"max\":500.0},\"57.5\":{\"points\":57.5,\"over\":1.833,\"under\":2.06,\"max\":500.0},\"58.0\":{\"points\":58.0,\"over\":1.9,\"under\":1.97,\"max\":500.0},\"59.0\":{\"points\":59.0,\"over\":2.09,\"under\":1.813,\"max\":500.0},\"59.5\":{\"points\":59.5,\"over\":2.18,\"under\":1.74,\"max\":500.0},\"60.0\":{\"points\":60.0,\"over\":2.31,\"under\":1.662,\"max\":500.0},\"60.5\":{\"points\":60.5,\"over\":2.41,\"under\":1.613,\"max\":500.0}},\"team_total\":{\"home\":{\"points\":29.5,\"over\":1.909,\"under\":1.943},\"away\":{\"points\":29.0,\"over\":2.03,\"under\":1.833}},\"meta\":{\"number\":4,\"max_spread\":500.0,\"max_money_line\":500.0,\"max_total\":500.0,\"max_team_total\":500.0}}}},{\"event_id\":1571130758,\"sport_id\":3,\"league_id\":487,\"league_name\":\"NBA\",\"starts\":\"2023-04-16T21:40:00\",\"last\":1681565359,\"home\":\"Milwaukee Bucks\",\"away\":\"Miami Heat\",\"event_type\":\"prematch\",\"parent_id\":null,\"resulting_unit\":\"Regular\",\"is_have_odds\":true,\"periods\":{\"num_0\":{\"line_id\":2066966502,\"number\":0,\"cutoff\":\"2023-04-16T21:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.256,\"draw\":null,\"away\":4.26},\"spreads\":{\"-9.0\":{\"hdp\":-9.0,\"home\":1.917,\"away\":1.99,\"max\":15000.0},\"-6.5\":{\"hdp\":-6.5,\"home\":1.595,\"away\":2.46,\"max\":15000.0},\"-7.0\":{\"hdp\":-7.0,\"home\":1.641,\"away\":2.36,\"max\":15000.0},\"-7.5\":{\"hdp\":-7.5,\"home\":1.694,\"away\":2.26,\"max\":15000.0},\"-8.0\":{\"hdp\":-8.0,\"home\":1.757,\"away\":2.17,\"max\":15000.0},\"-8.5\":{\"hdp\":-8.5,\"home\":1.826,\"away\":2.08,\"max\":15000.0},\"-9.5\":{\"hdp\":-9.5,\"home\":2.0,\"away\":1.892,\"max\":15000.0},\"-10.0\":{\"hdp\":-10.0,\"home\":2.09,\"away\":1.813,\"max\":15000.0},\"-10.5\":{\"hdp\":-10.5,\"home\":2.17,\"away\":1.751,\"max\":15000.0},\"-11.0\":{\"hdp\":-11.0,\"home\":2.26,\"away\":1.694,\"max\":15000.0},\"-11.5\":{\"hdp\":-11.5,\"home\":2.36,\"away\":1.645,\"max\":15000.0}},\"totals\":{\"219.0\":{\"points\":219.0,\"over\":1.952,\"under\":1.934,\"max\":3000.0},\"216.5\":{\"points\":216.5,\"over\":1.719,\"under\":2.2,\"max\":3000.0},\"217.0\":{\"points\":217.0,\"over\":1.757,\"under\":2.15,\"max\":3000.0},\"217.5\":{\"points\":217.5,\"over\":1.806,\"under\":2.08,\"max\":3000.0},\"218.0\":{\"points\":218.0,\"over\":1.847,\"under\":2.04,\"max\":3000.0},\"218.5\":{\"points\":218.5,\"over\":1.892,\"under\":1.98,\"max\":3000.0},\"219.5\":{\"points\":219.5,\"over\":2.0,\"under\":1.877,\"max\":3000.0},\"220.0\":{\"points\":220.0,\"over\":2.06,\"under\":1.833,\"max\":3000.0},\"220.5\":{\"points\":220.5,\"over\":2.11,\"under\":1.787,\"max\":3000.0},\"221.0\":{\"points\":221.0,\"over\":2.17,\"under\":1.74,\"max\":3000.0},\"221.5\":{\"points\":221.5,\"over\":2.22,\"under\":1.704,\"max\":3000.0}},\"team_total\":{\"home\":{\"points\":113.5,\"over\":1.877,\"under\":1.97},\"away\":{\"points\":104.5,\"over\":1.869,\"under\":1.99}},\"meta\":{\"number\":0,\"max_spread\":15000.0,\"max_total\":3000.0,\"max_money_line\":7500.0,\"max_team_total\":1500.0}},\"num_1\":{\"line_id\":2066966507,\"number\":1,\"cutoff\":\"2023-04-16T21:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.366,\"draw\":null,\"away\":3.31},\"spreads\":{\"-5.5\":{\"hdp\":-5.5,\"home\":1.952,\"away\":1.934,\"max\":5000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":1.666,\"away\":2.29,\"max\":5000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":1.719,\"away\":2.2,\"max\":5000.0},\"-4.5\":{\"hdp\":-4.5,\"home\":1.781,\"away\":2.11,\"max\":5000.0},\"-5.0\":{\"hdp\":-5.0,\"home\":1.854,\"away\":2.03,\"max\":5000.0},\"-6.0\":{\"hdp\":-6.0,\"home\":2.04,\"away\":1.847,\"max\":5000.0},\"-6.5\":{\"hdp\":-6.5,\"home\":2.13,\"away\":1.775,\"max\":5000.0},\"-7.0\":{\"hdp\":-7.0,\"home\":2.21,\"away\":1.709,\"max\":5000.0},\"-7.5\":{\"hdp\":-7.5,\"home\":2.3,\"away\":1.657,\"max\":5000.0}},\"totals\":{\"112.5\":{\"points\":112.5,\"over\":1.917,\"under\":1.97,\"max\":1500.0},\"110.5\":{\"points\":110.5,\"over\":1.714,\"under\":2.22,\"max\":1500.0},\"111.0\":{\"points\":111.0,\"over\":1.751,\"under\":2.16,\"max\":1500.0},\"111.5\":{\"points\":111.5,\"over\":1.813,\"under\":2.09,\"max\":1500.0},\"112.0\":{\"points\":112.0,\"over\":1.862,\"under\":2.02,\"max\":1500.0},\"113.0\":{\"points\":113.0,\"over\":1.99,\"under\":1.884,\"max\":1500.0},\"113.5\":{\"points\":113.5,\"over\":2.07,\"under\":1.819,\"max\":1500.0},\"114.0\":{\"points\":114.0,\"over\":2.16,\"under\":1.746,\"max\":1500.0},\"114.5\":{\"points\":114.5,\"over\":2.25,\"under\":1.694,\"max\":1500.0}},\"team_total\":{\"home\":{\"points\":59.0,\"over\":1.98,\"under\":1.877},\"away\":{\"points\":53.5,\"over\":1.952,\"under\":1.892}},\"meta\":{\"number\":1,\"max_spread\":5000.0,\"max_money_line\":2500.0,\"max_total\":1500.0,\"max_team_total\":1000.0}},\"num_3\":{\"line_id\":2066955419,\"number\":3,\"cutoff\":\"2023-04-16T21:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.446,\"draw\":null,\"away\":2.93},\"spreads\":{\"-3.5\":{\"hdp\":-3.5,\"home\":1.97,\"away\":1.917,\"max\":3000.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.636,\"away\":2.35,\"max\":3000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.694,\"away\":2.24,\"max\":3000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":1.787,\"away\":2.11,\"max\":3000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":1.862,\"away\":2.01,\"max\":3000.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.07,\"away\":1.819,\"max\":3000.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.17,\"away\":1.746,\"max\":3000.0},\"-5.0\":{\"hdp\":-5.0,\"home\":2.31,\"away\":1.657,\"max\":3000.0},\"-5.5\":{\"hdp\":-5.5,\"home\":2.42,\"away\":1.602,\"max\":3000.0}},\"totals\":{\"56.5\":{\"points\":56.5,\"over\":1.917,\"under\":1.97,\"max\":1000.0},\"54.5\":{\"points\":54.5,\"over\":1.662,\"under\":2.31,\"max\":1000.0},\"55.0\":{\"points\":55.0,\"over\":1.709,\"under\":2.22,\"max\":1000.0},\"55.5\":{\"points\":55.5,\"over\":1.781,\"under\":2.12,\"max\":1000.0},\"56.0\":{\"points\":56.0,\"over\":1.847,\"under\":2.04,\"max\":1000.0},\"57.0\":{\"points\":57.0,\"over\":2.0,\"under\":1.884,\"max\":1000.0},\"57.5\":{\"points\":57.5,\"over\":2.09,\"under\":1.813,\"max\":1000.0},\"58.0\":{\"points\":58.0,\"over\":2.18,\"under\":1.735,\"max\":1000.0},\"58.5\":{\"points\":58.5,\"over\":2.27,\"under\":1.684,\"max\":1000.0}},\"team_total\":{\"home\":{\"points\":30.0,\"over\":1.934,\"under\":1.917},\"away\":{\"points\":26.5,\"over\":1.884,\"under\":1.97}},\"meta\":{\"number\":3,\"max_spread\":3000.0,\"max_money_line\":1500.0,\"max_total\":1000.0,\"max_team_total\":1000.0}},\"num_4\":{\"line_id\":2066966510,\"number\":4,\"cutoff\":\"2023-04-16T21:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.571,\"draw\":null,\"away\":2.53},\"spreads\":{\"-2.5\":{\"hdp\":-2.5,\"home\":1.97,\"away\":1.917,\"max\":500.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.641,\"away\":2.34,\"max\":500.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.699,\"away\":2.23,\"max\":500.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.787,\"away\":2.11,\"max\":500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.869,\"away\":2.0,\"max\":500.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.07,\"away\":1.813,\"max\":500.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.17,\"away\":1.74,\"max\":500.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.31,\"away\":1.657,\"max\":500.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.42,\"away\":1.602,\"max\":500.0}},\"totals\":{\"56.0\":{\"points\":56.0,\"over\":1.934,\"under\":1.952,\"max\":500.0},\"54.0\":{\"points\":54.0,\"over\":1.636,\"under\":2.36,\"max\":500.0},\"54.5\":{\"points\":54.5,\"over\":1.709,\"under\":2.23,\"max\":500.0},\"55.0\":{\"points\":55.0,\"over\":1.769,\"under\":2.14,\"max\":500.0},\"55.5\":{\"points\":55.5,\"over\":1.847,\"under\":2.04,\"max\":500.0},\"56.5\":{\"points\":56.5,\"over\":2.01,\"under\":1.869,\"max\":500.0},\"57.0\":{\"points\":57.0,\"over\":2.12,\"under\":1.781,\"max\":500.0},\"57.5\":{\"points\":57.5,\"over\":2.22,\"under\":1.714,\"max\":500.0},\"58.0\":{\"points\":58.0,\"over\":2.36,\"under\":1.636,\"max\":500.0}},\"team_total\":{\"home\":{\"points\":29.0,\"over\":1.9,\"under\":1.952},\"away\":{\"points\":26.5,\"over\":1.833,\"under\":2.03}},\"meta\":{\"number\":4,\"max_spread\":500.0,\"max_money_line\":500.0,\"max_total\":500.0,\"max_team_total\":500.0}}}},{\"event_id\":1571135863,\"sport_id\":3,\"league_id\":487,\"league_name\":\"NBA\",\"starts\":\"2023-04-17T02:40:00\",\"last\":1681571641,\"home\":\"Denver Nuggets\",\"away\":\"Minnesota Timberwolves\",\"event_type\":\"prematch\",\"parent_id\":null,\"resulting_unit\":\"Regular\",\"is_have_odds\":true,\"periods\":{\"num_0\":{\"line_id\":2067398680,\"number\":0,\"cutoff\":\"2023-04-17T02:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.353,\"draw\":null,\"away\":3.45},\"spreads\":{\"-7.5\":{\"hdp\":-7.5,\"home\":1.961,\"away\":1.943,\"max\":6500.0},\"-5.0\":{\"hdp\":-5.0,\"home\":1.621,\"away\":2.4,\"max\":6500.0},\"-5.5\":{\"hdp\":-5.5,\"home\":1.671,\"away\":2.3,\"max\":6500.0},\"-6.0\":{\"hdp\":-6.0,\"home\":1.724,\"away\":2.21,\"max\":6500.0},\"-6.5\":{\"hdp\":-6.5,\"home\":1.787,\"away\":2.12,\"max\":6500.0},\"-7.0\":{\"hdp\":-7.0,\"home\":1.869,\"away\":2.04,\"max\":6500.0},\"-8.0\":{\"hdp\":-8.0,\"home\":2.05,\"away\":1.854,\"max\":6500.0},\"-8.5\":{\"hdp\":-8.5,\"home\":2.14,\"away\":1.781,\"max\":6500.0},\"-9.0\":{\"hdp\":-9.0,\"home\":2.22,\"away\":1.714,\"max\":6500.0},\"-9.5\":{\"hdp\":-9.5,\"home\":2.32,\"away\":1.666,\"max\":6500.0},\"-10.0\":{\"hdp\":-10.0,\"home\":2.42,\"away\":1.613,\"max\":6500.0}},\"totals\":{\"224.5\":{\"points\":224.5,\"over\":1.943,\"under\":1.943,\"max\":2000.0},\"222.0\":{\"points\":222.0,\"over\":1.714,\"under\":2.21,\"max\":2000.0},\"222.5\":{\"points\":222.5,\"over\":1.757,\"under\":2.15,\"max\":2000.0},\"223.0\":{\"points\":223.0,\"over\":1.8,\"under\":2.09,\"max\":2000.0},\"223.5\":{\"points\":223.5,\"over\":1.847,\"under\":2.04,\"max\":2000.0},\"224.0\":{\"points\":224.0,\"over\":1.892,\"under\":1.99,\"max\":2000.0},\"225.0\":{\"points\":225.0,\"over\":1.99,\"under\":1.884,\"max\":2000.0},\"225.5\":{\"points\":225.5,\"over\":2.04,\"under\":1.84,\"max\":2000.0},\"226.0\":{\"points\":226.0,\"over\":2.1,\"under\":1.793,\"max\":2000.0},\"226.5\":{\"points\":226.5,\"over\":2.15,\"under\":1.757,\"max\":2000.0},\"227.0\":{\"points\":227.0,\"over\":2.21,\"under\":1.709,\"max\":2000.0}},\"team_total\":{\"home\":{\"points\":115.5,\"over\":1.877,\"under\":1.98},\"away\":{\"points\":108.5,\"over\":1.917,\"under\":1.934}},\"meta\":{\"number\":0,\"max_spread\":6500.0,\"max_money_line\":3500.0,\"max_total\":2000.0,\"max_team_total\":1000.0}},\"num_1\":{\"line_id\":2067398688,\"number\":1,\"cutoff\":\"2023-04-17T02:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.467,\"draw\":null,\"away\":2.85},\"spreads\":{\"-4.0\":{\"hdp\":-4.0,\"home\":1.917,\"away\":1.97,\"max\":3000.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.645,\"away\":2.33,\"max\":3000.0},\"-2.5\":{\"hdp\":-2.5,\"home\":1.694,\"away\":2.24,\"max\":3000.0},\"-3.0\":{\"hdp\":-3.0,\"home\":1.757,\"away\":2.15,\"max\":3000.0},\"-3.5\":{\"hdp\":-3.5,\"home\":1.833,\"away\":2.06,\"max\":3000.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.01,\"away\":1.877,\"max\":3000.0},\"-5.0\":{\"hdp\":-5.0,\"home\":2.09,\"away\":1.8,\"max\":3000.0},\"-5.5\":{\"hdp\":-5.5,\"home\":2.18,\"away\":1.729,\"max\":3000.0},\"-6.0\":{\"hdp\":-6.0,\"home\":2.26,\"away\":1.68,\"max\":3000.0}},\"totals\":{\"115.0\":{\"points\":115.0,\"over\":1.952,\"under\":1.934,\"max\":1000.0},\"113.0\":{\"points\":113.0,\"over\":1.724,\"under\":2.2,\"max\":1000.0},\"113.5\":{\"points\":113.5,\"over\":1.775,\"under\":2.12,\"max\":1000.0},\"114.0\":{\"points\":114.0,\"over\":1.826,\"under\":2.06,\"max\":1000.0},\"114.5\":{\"points\":114.5,\"over\":1.884,\"under\":2.0,\"max\":1000.0},\"115.5\":{\"points\":115.5,\"over\":2.01,\"under\":1.869,\"max\":1000.0},\"116.0\":{\"points\":116.0,\"over\":2.1,\"under\":1.8,\"max\":1000.0},\"116.5\":{\"points\":116.5,\"over\":2.17,\"under\":1.74,\"max\":1000.0},\"117.0\":{\"points\":117.0,\"over\":2.28,\"under\":1.68,\"max\":1000.0}},\"team_total\":{\"home\":{\"points\":59.5,\"over\":1.917,\"under\":1.934},\"away\":{\"points\":55.5,\"over\":1.943,\"under\":1.909}},\"meta\":{\"number\":1,\"max_spread\":3000.0,\"max_money_line\":1500.0,\"max_total\":1000.0,\"max_team_total\":500.0}},\"num_3\":{\"line_id\":2067398001,\"number\":3,\"cutoff\":\"2023-04-17T02:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.54,\"draw\":null,\"away\":2.62},\"spreads\":{\"-2.5\":{\"hdp\":-2.5,\"home\":1.934,\"away\":1.952,\"max\":1500.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.609,\"away\":2.4,\"max\":1500.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.666,\"away\":2.29,\"max\":1500.0},\"-1.5\":{\"hdp\":-1.5,\"home\":1.757,\"away\":2.15,\"max\":1500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":1.833,\"away\":2.05,\"max\":1500.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.03,\"away\":1.847,\"max\":1500.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.13,\"away\":1.775,\"max\":1500.0},\"-4.0\":{\"hdp\":-4.0,\"home\":2.26,\"away\":1.684,\"max\":1500.0},\"-4.5\":{\"hdp\":-4.5,\"home\":2.37,\"away\":1.625,\"max\":1500.0}},\"totals\":{\"57.5\":{\"points\":57.5,\"over\":1.9,\"under\":1.99,\"max\":750.0},\"55.5\":{\"points\":55.5,\"over\":1.645,\"under\":2.34,\"max\":750.0},\"56.0\":{\"points\":56.0,\"over\":1.694,\"under\":2.25,\"max\":750.0},\"56.5\":{\"points\":56.5,\"over\":1.769,\"under\":2.14,\"max\":750.0},\"57.0\":{\"points\":57.0,\"over\":1.826,\"under\":2.07,\"max\":750.0},\"58.0\":{\"points\":58.0,\"over\":1.98,\"under\":1.9,\"max\":750.0},\"58.5\":{\"points\":58.5,\"over\":2.06,\"under\":1.826,\"max\":750.0},\"59.0\":{\"points\":59.0,\"over\":2.15,\"under\":1.757,\"max\":750.0},\"59.5\":{\"points\":59.5,\"over\":2.24,\"under\":1.704,\"max\":750.0}},\"team_total\":{\"home\":{\"points\":30.0,\"over\":1.884,\"under\":1.961},\"away\":{\"points\":27.5,\"over\":1.9,\"under\":1.952}},\"meta\":{\"number\":3,\"max_spread\":1500.0,\"max_money_line\":750.0,\"max_total\":750.0,\"max_team_total\":500.0}},\"num_4\":{\"line_id\":2067398697,\"number\":4,\"cutoff\":\"2023-04-17T02:40:00Z\",\"period_status\":1,\"money_line\":{\"home\":1.68,\"draw\":null,\"away\":2.3},\"spreads\":{\"-1.5\":{\"hdp\":-1.5,\"home\":1.934,\"away\":1.952,\"max\":500.0},\"1.0\":{\"hdp\":1.0,\"home\":1.54,\"away\":2.56,\"max\":500.0},\"0.5\":{\"hdp\":0.5,\"home\":1.617,\"away\":2.39,\"max\":500.0},\"-0.5\":{\"hdp\":-0.5,\"home\":1.757,\"away\":2.15,\"max\":500.0},\"-1.0\":{\"hdp\":-1.0,\"home\":1.833,\"away\":2.05,\"max\":500.0},\"-2.0\":{\"hdp\":-2.0,\"home\":2.03,\"away\":1.847,\"max\":500.0},\"-2.5\":{\"hdp\":-2.5,\"home\":2.13,\"away\":1.775,\"max\":500.0},\"-3.0\":{\"hdp\":-3.0,\"home\":2.26,\"away\":1.684,\"max\":500.0},\"-3.5\":{\"hdp\":-3.5,\"home\":2.36,\"away\":1.625,\"max\":500.0}},\"totals\":{\"57.0\":{\"points\":57.0,\"over\":1.97,\"under\":1.917,\"max\":500.0},\"55.0\":{\"points\":55.0,\"over\":1.671,\"under\":2.29,\"max\":500.0},\"55.5\":{\"points\":55.5,\"over\":1.746,\"under\":2.17,\"max\":500.0},\"56.0\":{\"points\":56.0,\"over\":1.813,\"under\":2.09,\"max\":500.0},\"56.5\":{\"points\":56.5,\"over\":1.892,\"under\":1.99,\"max\":500.0},\"57.5\":{\"points\":57.5,\"over\":2.05,\"under\":1.84,\"max\":500.0},\"58.0\":{\"points\":58.0,\"over\":2.16,\"under\":1.757,\"max\":500.0},\"58.5\":{\"points\":58.5,\"over\":2.25,\"under\":1.694,\"max\":500.0},\"59.0\":{\"points\":59.0,\"over\":2.39,\"under\":1.621,\"max\":500.0}},\"team_total\":{\"home\":{\"points\":29.5,\"over\":2.0,\"under\":1.854},\"away\":{\"points\":28.0,\"over\":2.02,\"under\":1.84}},\"meta\":{\"number\":4,\"max_spread\":500.0,\"max_money_line\":500.0,\"max_total\":500.0,\"max_team_total\":500.0}}}}]}\n" ] } ], "source": [ "import requests\n", "\n", "url = \"https://pinnacle-odds.p.rapidapi.com/kit/v1/markets\"\n", "\n", "querystring = {\"sport_id\":\"3\",\"league_ids\":\"487\",\"is_have_odds\":\"true\"}\n", "\n", "headers = {\n", "\t\"X-RapidAPI-Key\": RAPID_API_KEY,\n", "\t\"X-RapidAPI-Host\": \"pinnacle-odds.p.rapidapi.com\"\n", "}\n", "\n", "current = requests.request(\"GET\", url, headers=headers, params=querystring)\n", "\n", "print(current.text)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Does that query string above make sense now?\n", "\n", "I'll convert that data to JSON below and peak at it." ] }, { "cell_type": "code", "execution_count": 153, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'sport_id': 3,\n", " 'sport_name': 'Basketball',\n", " 'last': 1681571705,\n", " 'last_call': 1681571706,\n", " 'events': [{'event_id': 1570671674,\n", " 'sport_id': 3,\n", " 'league_id': 487,\n", " 'league_name': 'NBA',\n", " 'starts': '2023-04-15T17:10:00',\n", " 'last': 1681571077,\n", " 'home': 'Philadelphia 76ers',\n", " 'away': 'Brooklyn Nets',\n", " 'event_type': 'prematch',\n", " 'parent_id': None,\n", " 'resulting_unit': 'Regular',\n", " 'is_have_odds': True,\n", " 'periods': {'num_0': {'line_id': 2067360473,\n", " 'number': 0,\n", " 'cutoff': '2023-04-15T17:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.263, 'draw': None, 'away': 4.18},\n", " 'spreads': {'-8.5': {'hdp': -8.5,\n", " 'home': 1.909,\n", " 'away': 2.0,\n", " 'max': 25000.0},\n", " '-6.0': {'hdp': -6.0, 'home': 1.588, 'away': 2.48, 'max': 25000.0},\n", " '-6.5': {'hdp': -6.5, 'home': 1.636, 'away': 2.37, 'max': 25000.0},\n", " '-7.0': {'hdp': -7.0, 'home': 1.684, 'away': 2.28, 'max': 25000.0},\n", " '-7.5': {'hdp': -7.5, 'home': 1.746, 'away': 2.19, 'max': 25000.0},\n", " '-8.0': {'hdp': -8.0, 'home': 1.819, 'away': 2.09, 'max': 25000.0},\n", " '-9.0': {'hdp': -9.0, 'home': 1.99, 'away': 1.9, 'max': 25000.0},\n", " '-9.5': {'hdp': -9.5, 'home': 2.08, 'away': 1.826, 'max': 25000.0},\n", " '-10.0': {'hdp': -10.0, 'home': 2.16, 'away': 1.757, 'max': 25000.0},\n", " '-10.5': {'hdp': -10.5, 'home': 2.25, 'away': 1.704, 'max': 25000.0},\n", " '-11.0': {'hdp': -11.0, 'home': 2.34, 'away': 1.653, 'max': 25000.0}},\n", " 'totals': {'213.5': {'points': 213.5,\n", " 'over': 1.862,\n", " 'under': 2.03,\n", " 'max': 5000.0},\n", " '211.0': {'points': 211.0, 'over': 1.632, 'under': 2.35, 'max': 5000.0},\n", " '211.5': {'points': 211.5, 'over': 1.68, 'under': 2.27, 'max': 5000.0},\n", " '212.0': {'points': 212.0, 'over': 1.714, 'under': 2.21, 'max': 5000.0},\n", " '212.5': {'points': 212.5, 'over': 1.763, 'under': 2.15, 'max': 5000.0},\n", " '213.0': {'points': 213.0, 'over': 1.806, 'under': 2.09, 'max': 5000.0},\n", " '214.0': {'points': 214.0, 'over': 1.9, 'under': 1.98, 'max': 5000.0},\n", " '214.5': {'points': 214.5, 'over': 1.952, 'under': 1.925, 'max': 5000.0},\n", " '215.0': {'points': 215.0, 'over': 2.01, 'under': 1.869, 'max': 5000.0},\n", " '215.5': {'points': 215.5, 'over': 2.06, 'under': 1.826, 'max': 5000.0},\n", " '216.0': {'points': 216.0, 'over': 2.11, 'under': 1.775, 'max': 5000.0}},\n", " 'team_total': {'home': {'points': 111.5, 'over': 1.909, 'under': 1.943},\n", " 'away': {'points': 102.5, 'over': 1.869, 'under': 1.98}},\n", " 'meta': {'number': 0,\n", " 'max_spread': 25000.0,\n", " 'max_money_line': 15000.0,\n", " 'max_total': 5000.0,\n", " 'max_team_total': 2000.0}},\n", " 'num_1': {'line_id': 2067360475,\n", " 'number': 1,\n", " 'cutoff': '2023-04-15T17:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.363, 'draw': None, 'away': 3.32},\n", " 'spreads': {'-5.0': {'hdp': -5.0,\n", " 'home': 1.909,\n", " 'away': 1.97,\n", " 'max': 6500.0},\n", " '-3.0': {'hdp': -3.0, 'home': 1.649, 'away': 2.32, 'max': 6500.0},\n", " '-3.5': {'hdp': -3.5, 'home': 1.699, 'away': 2.23, 'max': 6500.0},\n", " '-4.0': {'hdp': -4.0, 'home': 1.763, 'away': 2.14, 'max': 6500.0},\n", " '-4.5': {'hdp': -4.5, 'home': 1.833, 'away': 2.06, 'max': 6500.0},\n", " '-5.5': {'hdp': -5.5, 'home': 1.99, 'away': 1.892, 'max': 6500.0},\n", " '-6.0': {'hdp': -6.0, 'home': 2.07, 'away': 1.819, 'max': 6500.0},\n", " '-6.5': {'hdp': -6.5, 'home': 2.15, 'away': 1.751, 'max': 6500.0},\n", " '-7.0': {'hdp': -7.0, 'home': 2.24, 'away': 1.694, 'max': 6500.0}},\n", " 'totals': {'109.0': {'points': 109.0,\n", " 'over': 1.9,\n", " 'under': 1.99,\n", " 'max': 2000.0},\n", " '107.0': {'points': 107.0, 'over': 1.675, 'under': 2.28, 'max': 2000.0},\n", " '107.5': {'points': 107.5, 'over': 1.735, 'under': 2.19, 'max': 2000.0},\n", " '108.0': {'points': 108.0, 'over': 1.781, 'under': 2.12, 'max': 2000.0},\n", " '108.5': {'points': 108.5, 'over': 1.84, 'under': 2.05, 'max': 2000.0},\n", " '109.5': {'points': 109.5, 'over': 1.952, 'under': 1.917, 'max': 2000.0},\n", " '110.0': {'points': 110.0, 'over': 2.02, 'under': 1.862, 'max': 2000.0},\n", " '110.5': {'points': 110.5, 'over': 2.08, 'under': 1.806, 'max': 2000.0},\n", " '111.0': {'points': 111.0, 'over': 2.16, 'under': 1.746, 'max': 2000.0}},\n", " 'team_total': {'home': {'points': 57.5, 'over': 1.943, 'under': 1.909},\n", " 'away': {'points': 52.5, 'over': 2.01, 'under': 1.854}},\n", " 'meta': {'number': 1,\n", " 'max_spread': 6500.0,\n", " 'max_money_line': 3500.0,\n", " 'max_total': 2000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_3': {'line_id': 2067360478,\n", " 'number': 3,\n", " 'cutoff': '2023-04-15T17:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.465, 'draw': None, 'away': 2.86},\n", " 'spreads': {'-3.0': {'hdp': -3.0,\n", " 'home': 1.909,\n", " 'away': 1.98,\n", " 'max': 3000.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.578, 'away': 2.47, 'max': 3000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.657, 'away': 2.3, 'max': 3000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.724, 'away': 2.2, 'max': 3000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 1.813, 'away': 2.07, 'max': 3000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 1.99, 'away': 1.877, 'max': 3000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.11, 'away': 1.787, 'max': 3000.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.2, 'away': 1.714, 'max': 3000.0},\n", " '-5.0': {'hdp': -5.0, 'home': 2.35, 'away': 1.632, 'max': 3000.0}},\n", " 'totals': {'55.0': {'points': 55.0,\n", " 'over': 1.961,\n", " 'under': 1.925,\n", " 'max': 1000.0},\n", " '53.0': {'points': 53.0, 'over': 1.675, 'under': 2.29, 'max': 1000.0},\n", " '53.5': {'points': 53.5, 'over': 1.746, 'under': 2.17, 'max': 1000.0},\n", " '54.0': {'points': 54.0, 'over': 1.806, 'under': 2.09, 'max': 1000.0},\n", " '54.5': {'points': 54.5, 'over': 1.877, 'under': 2.0, 'max': 1000.0},\n", " '55.5': {'points': 55.5, 'over': 2.04, 'under': 1.847, 'max': 1000.0},\n", " '56.0': {'points': 56.0, 'over': 2.14, 'under': 1.769, 'max': 1000.0},\n", " '56.5': {'points': 56.5, 'over': 2.22, 'under': 1.714, 'max': 1000.0},\n", " '57.0': {'points': 57.0, 'over': 2.35, 'under': 1.641, 'max': 1000.0}},\n", " 'team_total': {'home': {'points': 29.0, 'over': 1.917, 'under': 1.934},\n", " 'away': {'points': 26.0, 'over': 1.98, 'under': 1.877}},\n", " 'meta': {'number': 3,\n", " 'max_spread': 3000.0,\n", " 'max_money_line': 1500.0,\n", " 'max_total': 1000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_4': {'line_id': 2067360489,\n", " 'number': 4,\n", " 'cutoff': '2023-04-15T17:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.581, 'draw': None, 'away': 2.51},\n", " 'spreads': {'-2.5': {'hdp': -2.5,\n", " 'home': 1.99,\n", " 'away': 1.9,\n", " 'max': 500.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.649, 'away': 2.32, 'max': 500.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.709, 'away': 2.21, 'max': 500.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.8, 'away': 2.09, 'max': 500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.884, 'away': 1.99, 'max': 500.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.09, 'away': 1.8, 'max': 500.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.19, 'away': 1.729, 'max': 500.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.33, 'away': 1.645, 'max': 500.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.44, 'away': 1.591, 'max': 500.0}},\n", " 'totals': {'54.5': {'points': 54.5,\n", " 'over': 1.943,\n", " 'under': 1.943,\n", " 'max': 500.0},\n", " '52.5': {'points': 52.5, 'over': 1.653, 'under': 2.33, 'max': 500.0},\n", " '53.0': {'points': 53.0, 'over': 1.704, 'under': 2.23, 'max': 500.0},\n", " '53.5': {'points': 53.5, 'over': 1.787, 'under': 2.12, 'max': 500.0},\n", " '54.0': {'points': 54.0, 'over': 1.862, 'under': 2.03, 'max': 500.0},\n", " '55.0': {'points': 55.0, 'over': 2.04, 'under': 1.847, 'max': 500.0},\n", " '55.5': {'points': 55.5, 'over': 2.13, 'under': 1.775, 'max': 500.0},\n", " '56.0': {'points': 56.0, 'over': 2.25, 'under': 1.694, 'max': 500.0},\n", " '56.5': {'points': 56.5, 'over': 2.36, 'under': 1.636, 'max': 500.0}},\n", " 'team_total': {'home': {'points': 28.5, 'over': 1.961, 'under': 1.892},\n", " 'away': {'points': 26.5, 'over': 2.03, 'under': 1.833}},\n", " 'meta': {'number': 4,\n", " 'max_spread': 500.0,\n", " 'max_money_line': 500.0,\n", " 'max_total': 500.0,\n", " 'max_team_total': 500.0}}}},\n", " {'event_id': 1570671683,\n", " 'sport_id': 3,\n", " 'league_id': 487,\n", " 'league_name': 'NBA',\n", " 'starts': '2023-04-16T00:40:00',\n", " 'last': 1681570378,\n", " 'home': 'Sacramento Kings',\n", " 'away': 'Golden State Warriors',\n", " 'event_type': 'prematch',\n", " 'parent_id': None,\n", " 'resulting_unit': 'Regular',\n", " 'is_have_odds': True,\n", " 'periods': {'num_0': {'line_id': 2067336986,\n", " 'number': 0,\n", " 'cutoff': '2023-04-16T00:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.952, 'draw': None, 'away': 1.952},\n", " 'spreads': {'-1.0': {'hdp': -1.0,\n", " 'home': 1.98,\n", " 'away': 1.925,\n", " 'max': 25000.0},\n", " '3.0': {'hdp': 3.0, 'home': 1.657, 'away': 2.33, 'max': 25000.0},\n", " '2.5': {'hdp': 2.5, 'home': 1.709, 'away': 2.23, 'max': 25000.0},\n", " '2.0': {'hdp': 2.0, 'home': 1.763, 'away': 2.15, 'max': 25000.0},\n", " '1.5': {'hdp': 1.5, 'home': 1.826, 'away': 2.08, 'max': 25000.0},\n", " '1.0': {'hdp': 1.0, 'home': 1.869, 'away': 2.03, 'max': 25000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 2.04, 'away': 1.869, 'max': 25000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 2.12, 'away': 1.793, 'max': 25000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.2, 'away': 1.735, 'max': 25000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.29, 'away': 1.675, 'max': 25000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.4, 'away': 1.625, 'max': 25000.0}},\n", " 'totals': {'237.5': {'points': 237.5,\n", " 'over': 1.917,\n", " 'under': 1.97,\n", " 'max': 5000.0},\n", " '235.0': {'points': 235.0, 'over': 1.689, 'under': 2.25, 'max': 5000.0},\n", " '235.5': {'points': 235.5, 'over': 1.735, 'under': 2.18, 'max': 5000.0},\n", " '236.0': {'points': 236.0, 'over': 1.769, 'under': 2.13, 'max': 5000.0},\n", " '236.5': {'points': 236.5, 'over': 1.819, 'under': 2.08, 'max': 5000.0},\n", " '237.0': {'points': 237.0, 'over': 1.862, 'under': 2.02, 'max': 5000.0},\n", " '238.0': {'points': 238.0, 'over': 1.961, 'under': 1.917, 'max': 5000.0},\n", " '238.5': {'points': 238.5, 'over': 2.01, 'under': 1.877, 'max': 5000.0},\n", " '239.0': {'points': 239.0, 'over': 2.06, 'under': 1.826, 'max': 5000.0},\n", " '239.5': {'points': 239.5, 'over': 2.11, 'under': 1.787, 'max': 5000.0},\n", " '240.0': {'points': 240.0, 'over': 2.17, 'under': 1.74, 'max': 5000.0}},\n", " 'team_total': {'home': {'points': 118.5, 'over': 1.862, 'under': 2.0},\n", " 'away': {'points': 118.5, 'over': 1.877, 'under': 1.98}},\n", " 'meta': {'number': 0,\n", " 'max_spread': 25000.0,\n", " 'max_money_line': 15000.0,\n", " 'max_total': 5000.0,\n", " 'max_team_total': 2000.0}},\n", " 'num_1': {'line_id': 2067336990,\n", " 'number': 1,\n", " 'cutoff': '2023-04-16T00:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.892, 'draw': None, 'away': 2.0},\n", " 'spreads': {'-0.5': {'hdp': -0.5,\n", " 'home': 1.97,\n", " 'away': 1.917,\n", " 'max': 6500.0},\n", " '2.0': {'hdp': 2.0, 'home': 1.645, 'away': 2.33, 'max': 6500.0},\n", " '1.5': {'hdp': 1.5, 'home': 1.694, 'away': 2.24, 'max': 6500.0},\n", " '1.0': {'hdp': 1.0, 'home': 1.751, 'away': 2.16, 'max': 6500.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.819, 'away': 2.08, 'max': 6500.0},\n", " '-1.0': {'hdp': -1.0, 'home': 2.05, 'away': 1.833, 'max': 6500.0},\n", " '-1.5': {'hdp': -1.5, 'home': 2.13, 'away': 1.769, 'max': 6500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 2.22, 'away': 1.704, 'max': 6500.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.32, 'away': 1.653, 'max': 6500.0}},\n", " 'totals': {'117.5': {'points': 117.5,\n", " 'over': 1.952,\n", " 'under': 1.934,\n", " 'max': 2000.0},\n", " '115.5': {'points': 115.5, 'over': 1.699, 'under': 2.24, 'max': 2000.0},\n", " '116.0': {'points': 116.0, 'over': 1.746, 'under': 2.16, 'max': 2000.0},\n", " '116.5': {'points': 116.5, 'over': 1.813, 'under': 2.08, 'max': 2000.0},\n", " '117.0': {'points': 117.0, 'over': 1.877, 'under': 2.0, 'max': 2000.0},\n", " '118.0': {'points': 118.0, 'over': 2.02, 'under': 1.862, 'max': 2000.0},\n", " '118.5': {'points': 118.5, 'over': 2.09, 'under': 1.806, 'max': 2000.0},\n", " '119.0': {'points': 119.0, 'over': 2.17, 'under': 1.746, 'max': 2000.0},\n", " '119.5': {'points': 119.5, 'over': 2.24, 'under': 1.699, 'max': 2000.0}},\n", " 'team_total': {'home': {'points': 58.5, 'over': 1.847, 'under': 2.01},\n", " 'away': {'points': 58.5, 'over': 1.917, 'under': 1.934}},\n", " 'meta': {'number': 1,\n", " 'max_spread': 6500.0,\n", " 'max_money_line': 3500.0,\n", " 'max_total': 2000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_3': {'line_id': 2067327510,\n", " 'number': 3,\n", " 'cutoff': '2023-04-16T00:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.917, 'draw': None, 'away': 1.97},\n", " 'spreads': {'-0.5': {'hdp': -0.5,\n", " 'home': 2.02,\n", " 'away': 1.869,\n", " 'max': 3000.0},\n", " '2.0': {'hdp': 2.0, 'home': 1.574, 'away': 2.48, 'max': 3000.0},\n", " '1.5': {'hdp': 1.5, 'home': 1.657, 'away': 2.3, 'max': 3000.0},\n", " '1.0': {'hdp': 1.0, 'home': 1.729, 'away': 2.19, 'max': 3000.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.819, 'away': 2.06, 'max': 3000.0},\n", " '-1.0': {'hdp': -1.0, 'home': 2.12, 'away': 1.775, 'max': 3000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 2.22, 'away': 1.709, 'max': 3000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 2.37, 'away': 1.625, 'max': 3000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.48, 'away': 1.578, 'max': 3000.0}},\n", " 'totals': {'58.5': {'points': 58.5,\n", " 'over': 1.909,\n", " 'under': 1.98,\n", " 'max': 1000.0},\n", " '56.5': {'points': 56.5, 'over': 1.649, 'under': 2.33, 'max': 1000.0},\n", " '57.0': {'points': 57.0, 'over': 1.694, 'under': 2.25, 'max': 1000.0},\n", " '57.5': {'points': 57.5, 'over': 1.763, 'under': 2.15, 'max': 1000.0},\n", " '58.0': {'points': 58.0, 'over': 1.826, 'under': 2.07, 'max': 1000.0},\n", " '59.0': {'points': 59.0, 'over': 1.98, 'under': 1.9, 'max': 1000.0},\n", " '59.5': {'points': 59.5, 'over': 2.05, 'under': 1.833, 'max': 1000.0},\n", " '60.0': {'points': 60.0, 'over': 2.15, 'under': 1.757, 'max': 1000.0},\n", " '60.5': {'points': 60.5, 'over': 2.24, 'under': 1.704, 'max': 1000.0}},\n", " 'team_total': {'home': {'points': 29.5, 'over': 1.934, 'under': 1.917},\n", " 'away': {'points': 29.5, 'over': 1.952, 'under': 1.9}},\n", " 'meta': {'number': 3,\n", " 'max_spread': 3000.0,\n", " 'max_money_line': 1500.0,\n", " 'max_total': 1000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_4': {'line_id': 2067327542,\n", " 'number': 4,\n", " 'cutoff': '2023-04-16T00:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.925, 'draw': None, 'away': 1.961},\n", " 'spreads': {'-0.5': {'hdp': -0.5,\n", " 'home': 2.02,\n", " 'away': 1.869,\n", " 'max': 500.0},\n", " '2.0': {'hdp': 2.0, 'home': 1.598, 'away': 2.43, 'max': 500.0},\n", " '1.5': {'hdp': 1.5, 'home': 1.675, 'away': 2.27, 'max': 500.0},\n", " '1.0': {'hdp': 1.0, 'home': 1.746, 'away': 2.17, 'max': 500.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.833, 'away': 2.05, 'max': 500.0},\n", " '-1.0': {'hdp': -1.0, 'home': 2.13, 'away': 1.769, 'max': 500.0},\n", " '-1.5': {'hdp': -1.5, 'home': 2.23, 'away': 1.704, 'max': 500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 2.38, 'away': 1.621, 'max': 500.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.49, 'away': 1.571, 'max': 500.0}},\n", " 'totals': {'58.5': {'points': 58.5,\n", " 'over': 2.01,\n", " 'under': 1.877,\n", " 'max': 500.0},\n", " '56.5': {'points': 56.5, 'over': 1.714, 'under': 2.21, 'max': 500.0},\n", " '57.0': {'points': 57.0, 'over': 1.775, 'under': 2.12, 'max': 500.0},\n", " '57.5': {'points': 57.5, 'over': 1.854, 'under': 2.03, 'max': 500.0},\n", " '58.0': {'points': 58.0, 'over': 1.925, 'under': 1.952, 'max': 500.0},\n", " '59.0': {'points': 59.0, 'over': 2.11, 'under': 1.793, 'max': 500.0},\n", " '59.5': {'points': 59.5, 'over': 2.19, 'under': 1.735, 'max': 500.0},\n", " '60.0': {'points': 60.0, 'over': 2.31, 'under': 1.662, 'max': 500.0},\n", " '60.5': {'points': 60.5, 'over': 2.41, 'under': 1.613, 'max': 500.0}},\n", " 'team_total': {'home': {'points': 29.5, 'over': 2.02, 'under': 1.84},\n", " 'away': {'points': 29.5, 'over': 2.04, 'under': 1.826}},\n", " 'meta': {'number': 4,\n", " 'max_spread': 500.0,\n", " 'max_money_line': 500.0,\n", " 'max_total': 500.0,\n", " 'max_team_total': 500.0}}}},\n", " {'event_id': 1570671684,\n", " 'sport_id': 3,\n", " 'league_id': 487,\n", " 'league_name': 'NBA',\n", " 'starts': '2023-04-17T00:10:00',\n", " 'last': 1681568411,\n", " 'home': 'Phoenix Suns',\n", " 'away': 'Los Angeles Clippers',\n", " 'event_type': 'prematch',\n", " 'parent_id': None,\n", " 'resulting_unit': 'Regular',\n", " 'is_have_odds': True,\n", " 'periods': {'num_0': {'line_id': 2066957075,\n", " 'number': 0,\n", " 'cutoff': '2023-04-17T00:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.358, 'draw': None, 'away': 3.42},\n", " 'spreads': {'-7.5': {'hdp': -7.5,\n", " 'home': 2.0,\n", " 'away': 1.909,\n", " 'max': 20000.0},\n", " '-5.0': {'hdp': -5.0, 'home': 1.653, 'away': 2.34, 'max': 20000.0},\n", " '-5.5': {'hdp': -5.5, 'home': 1.704, 'away': 2.24, 'max': 20000.0},\n", " '-6.0': {'hdp': -6.0, 'home': 1.757, 'away': 2.16, 'max': 20000.0},\n", " '-6.5': {'hdp': -6.5, 'home': 1.826, 'away': 2.08, 'max': 20000.0},\n", " '-7.0': {'hdp': -7.0, 'home': 1.909, 'away': 1.99, 'max': 20000.0},\n", " '-8.0': {'hdp': -8.0, 'home': 2.1, 'away': 1.819, 'max': 20000.0},\n", " '-8.5': {'hdp': -8.5, 'home': 2.19, 'away': 1.746, 'max': 20000.0},\n", " '-9.0': {'hdp': -9.0, 'home': 2.28, 'away': 1.684, 'max': 20000.0},\n", " '-9.5': {'hdp': -9.5, 'home': 2.38, 'away': 1.632, 'max': 20000.0},\n", " '-10.0': {'hdp': -10.0, 'home': 2.48, 'away': 1.588, 'max': 20000.0}},\n", " 'totals': {'226.0': {'points': 226.0,\n", " 'over': 1.97,\n", " 'under': 1.917,\n", " 'max': 5000.0},\n", " '223.5': {'points': 223.5, 'over': 1.735, 'under': 2.18, 'max': 5000.0},\n", " '224.0': {'points': 224.0, 'over': 1.769, 'under': 2.13, 'max': 5000.0},\n", " '224.5': {'points': 224.5, 'over': 1.819, 'under': 2.07, 'max': 5000.0},\n", " '225.0': {'points': 225.0, 'over': 1.869, 'under': 2.02, 'max': 5000.0},\n", " '225.5': {'points': 225.5, 'over': 1.917, 'under': 1.961, 'max': 5000.0},\n", " '226.5': {'points': 226.5, 'over': 2.02, 'under': 1.862, 'max': 5000.0},\n", " '227.0': {'points': 227.0, 'over': 2.08, 'under': 1.813, 'max': 5000.0},\n", " '227.5': {'points': 227.5, 'over': 2.13, 'under': 1.769, 'max': 5000.0},\n", " '228.0': {'points': 228.0, 'over': 2.19, 'under': 1.729, 'max': 5000.0},\n", " '228.5': {'points': 228.5, 'over': 2.24, 'under': 1.694, 'max': 5000.0}},\n", " 'team_total': {'home': {'points': 116.5, 'over': 1.99, 'under': 1.869},\n", " 'away': {'points': 109.5, 'over': 1.917, 'under': 1.934}},\n", " 'meta': {'number': 0,\n", " 'max_spread': 20000.0,\n", " 'max_money_line': 12000.0,\n", " 'max_total': 5000.0,\n", " 'max_team_total': 2000.0}},\n", " 'num_1': {'line_id': 2065216317,\n", " 'number': 1,\n", " 'cutoff': '2023-04-17T00:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.446, 'draw': None, 'away': 2.93},\n", " 'spreads': {'-4.5': {'hdp': -4.5,\n", " 'home': 1.97,\n", " 'away': 1.917,\n", " 'max': 4000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 1.694, 'away': 2.24, 'max': 4000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 1.746, 'away': 2.15, 'max': 4000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 1.813, 'away': 2.07, 'max': 4000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 1.884, 'away': 1.99, 'max': 4000.0},\n", " '-5.0': {'hdp': -5.0, 'home': 2.05, 'away': 1.84, 'max': 4000.0},\n", " '-5.5': {'hdp': -5.5, 'home': 2.13, 'away': 1.769, 'max': 4000.0},\n", " '-6.0': {'hdp': -6.0, 'home': 2.22, 'away': 1.704, 'max': 4000.0},\n", " '-6.5': {'hdp': -6.5, 'home': 2.31, 'away': 1.653, 'max': 4000.0}},\n", " 'totals': {'110.5': {'points': 110.5,\n", " 'over': 1.97,\n", " 'under': 1.917,\n", " 'max': 1500.0},\n", " '108.5': {'points': 108.5, 'over': 1.699, 'under': 2.24, 'max': 1500.0},\n", " '109.0': {'points': 109.0, 'over': 1.751, 'under': 2.16, 'max': 1500.0},\n", " '109.5': {'points': 109.5, 'over': 1.819, 'under': 2.07, 'max': 1500.0},\n", " '110.0': {'points': 110.0, 'over': 1.884, 'under': 1.99, 'max': 1500.0},\n", " '111.0': {'points': 111.0, 'over': 2.03, 'under': 1.854, 'max': 1500.0},\n", " '111.5': {'points': 111.5, 'over': 2.1, 'under': 1.8, 'max': 1500.0},\n", " '112.0': {'points': 112.0, 'over': 2.18, 'under': 1.735, 'max': 1500.0},\n", " '112.5': {'points': 112.5, 'over': 2.25, 'under': 1.694, 'max': 1500.0}},\n", " 'team_total': {'home': {'points': 57.5, 'over': 1.952, 'under': 1.9},\n", " 'away': {'points': 53.5, 'over': 2.02, 'under': 1.84}},\n", " 'meta': {'number': 1,\n", " 'max_spread': 4000.0,\n", " 'max_money_line': 2000.0,\n", " 'max_total': 1500.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_3': {'line_id': 2066958217,\n", " 'number': 3,\n", " 'cutoff': '2023-04-17T00:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.543, 'draw': None, 'away': 2.61},\n", " 'spreads': {'-2.5': {'hdp': -2.5,\n", " 'home': 1.943,\n", " 'away': 1.943,\n", " 'max': 3000.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.613, 'away': 2.39, 'max': 3000.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.671, 'away': 2.28, 'max': 3000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.763, 'away': 2.14, 'max': 3000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.84, 'away': 2.04, 'max': 3000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.04, 'away': 1.84, 'max': 3000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.14, 'away': 1.763, 'max': 3000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.27, 'away': 1.675, 'max': 3000.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.38, 'away': 1.621, 'max': 3000.0}},\n", " 'totals': {'55.5': {'points': 55.5,\n", " 'over': 1.943,\n", " 'under': 1.943,\n", " 'max': 1000.0},\n", " '53.5': {'points': 53.5, 'over': 1.671, 'under': 2.29, 'max': 1000.0},\n", " '54.0': {'points': 54.0, 'over': 1.724, 'under': 2.2, 'max': 1000.0},\n", " '54.5': {'points': 54.5, 'over': 1.8, 'under': 2.1, 'max': 1000.0},\n", " '55.0': {'points': 55.0, 'over': 1.862, 'under': 2.02, 'max': 1000.0},\n", " '56.0': {'points': 56.0, 'over': 2.03, 'under': 1.854, 'max': 1000.0},\n", " '56.5': {'points': 56.5, 'over': 2.11, 'under': 1.787, 'max': 1000.0},\n", " '57.0': {'points': 57.0, 'over': 2.21, 'under': 1.719, 'max': 1000.0},\n", " '57.5': {'points': 57.5, 'over': 2.3, 'under': 1.666, 'max': 1000.0}},\n", " 'team_total': {'home': {'points': 29.0, 'over': 1.934, 'under': 1.917},\n", " 'away': {'points': 26.5, 'over': 1.925, 'under': 1.925}},\n", " 'meta': {'number': 3,\n", " 'max_spread': 3000.0,\n", " 'max_money_line': 1500.0,\n", " 'max_total': 1000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_4': {'line_id': 2067164531,\n", " 'number': 4,\n", " 'cutoff': '2023-04-17T00:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.649, 'draw': None, 'away': 2.36},\n", " 'spreads': {'-1.5': {'hdp': -1.5,\n", " 'home': 1.892,\n", " 'away': 2.0,\n", " 'max': 500.0},\n", " '1.0': {'hdp': 1.0, 'home': 1.515, 'away': 2.63, 'max': 500.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.588, 'away': 2.45, 'max': 500.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.724, 'away': 2.2, 'max': 500.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.793, 'away': 2.1, 'max': 500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.98, 'away': 1.892, 'max': 500.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.08, 'away': 1.806, 'max': 500.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.2, 'away': 1.719, 'max': 500.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.31, 'away': 1.653, 'max': 500.0}},\n", " 'totals': {'55.0': {'points': 55.0,\n", " 'over': 1.97,\n", " 'under': 1.917,\n", " 'max': 500.0},\n", " '53.0': {'points': 53.0, 'over': 1.649, 'under': 2.33, 'max': 500.0},\n", " '53.5': {'points': 53.5, 'over': 1.724, 'under': 2.2, 'max': 500.0},\n", " '54.0': {'points': 54.0, 'over': 1.793, 'under': 2.11, 'max': 500.0},\n", " '54.5': {'points': 54.5, 'over': 1.884, 'under': 2.0, 'max': 500.0},\n", " '55.5': {'points': 55.5, 'over': 2.06, 'under': 1.833, 'max': 500.0},\n", " '56.0': {'points': 56.0, 'over': 2.17, 'under': 1.751, 'max': 500.0},\n", " '56.5': {'points': 56.5, 'over': 2.26, 'under': 1.689, 'max': 500.0},\n", " '57.0': {'points': 57.0, 'over': 2.4, 'under': 1.617, 'max': 500.0}},\n", " 'team_total': {'home': {'points': 28.5, 'over': 1.961, 'under': 1.892},\n", " 'away': {'points': 27.0, 'over': 2.06, 'under': 1.806}},\n", " 'meta': {'number': 4,\n", " 'max_spread': 500.0,\n", " 'max_money_line': 500.0,\n", " 'max_total': 500.0,\n", " 'max_team_total': 500.0}}}},\n", " {'event_id': 1570671685,\n", " 'sport_id': 3,\n", " 'league_id': 487,\n", " 'league_name': 'NBA',\n", " 'starts': '2023-04-15T22:10:00',\n", " 'last': 1681571621,\n", " 'home': 'Cleveland Cavaliers',\n", " 'away': 'New York Knicks',\n", " 'event_type': 'prematch',\n", " 'parent_id': None,\n", " 'resulting_unit': 'Regular',\n", " 'is_have_odds': True,\n", " 'periods': {'num_0': {'line_id': 2067381755,\n", " 'number': 0,\n", " 'cutoff': '2023-04-15T22:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.473, 'draw': None, 'away': 2.87},\n", " 'spreads': {'-5.5': {'hdp': -5.5,\n", " 'home': 1.961,\n", " 'away': 1.943,\n", " 'max': 15000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 1.625, 'away': 2.4, 'max': 15000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 1.675, 'away': 2.3, 'max': 15000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 1.729, 'away': 2.21, 'max': 15000.0},\n", " '-4.5': {'hdp': -4.5, 'home': 1.793, 'away': 2.12, 'max': 15000.0},\n", " '-5.0': {'hdp': -5.0, 'home': 1.869, 'away': 2.03, 'max': 15000.0},\n", " '-6.0': {'hdp': -6.0, 'home': 2.05, 'away': 1.854, 'max': 15000.0},\n", " '-6.5': {'hdp': -6.5, 'home': 2.14, 'away': 1.781, 'max': 15000.0},\n", " '-7.0': {'hdp': -7.0, 'home': 2.23, 'away': 1.714, 'max': 15000.0},\n", " '-7.5': {'hdp': -7.5, 'home': 2.32, 'away': 1.662, 'max': 15000.0},\n", " '-8.0': {'hdp': -8.0, 'home': 2.42, 'away': 1.613, 'max': 15000.0}},\n", " 'totals': {'217.0': {'points': 217.0,\n", " 'over': 1.917,\n", " 'under': 1.97,\n", " 'max': 4000.0},\n", " '214.5': {'points': 214.5, 'over': 1.704, 'under': 2.23, 'max': 4000.0},\n", " '215.0': {'points': 215.0, 'over': 1.74, 'under': 2.18, 'max': 4000.0},\n", " '215.5': {'points': 215.5, 'over': 1.781, 'under': 2.12, 'max': 4000.0},\n", " '216.0': {'points': 216.0, 'over': 1.819, 'under': 2.07, 'max': 4000.0},\n", " '216.5': {'points': 216.5, 'over': 1.869, 'under': 2.02, 'max': 4000.0},\n", " '217.5': {'points': 217.5, 'over': 1.97, 'under': 1.909, 'max': 4000.0},\n", " '218.0': {'points': 218.0, 'over': 2.03, 'under': 1.854, 'max': 4000.0},\n", " '218.5': {'points': 218.5, 'over': 2.08, 'under': 1.806, 'max': 4000.0},\n", " '219.0': {'points': 219.0, 'over': 2.15, 'under': 1.757, 'max': 4000.0},\n", " '219.5': {'points': 219.5, 'over': 2.2, 'under': 1.719, 'max': 4000.0}},\n", " 'team_total': {'home': {'points': 110.5, 'over': 1.84, 'under': 2.02},\n", " 'away': {'points': 106.5, 'over': 1.98, 'under': 1.877}},\n", " 'meta': {'number': 0,\n", " 'max_spread': 15000.0,\n", " 'max_money_line': 7500.0,\n", " 'max_total': 4000.0,\n", " 'max_team_total': 2000.0}},\n", " 'num_1': {'line_id': 2067398065,\n", " 'number': 1,\n", " 'cutoff': '2023-04-15T22:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.552, 'draw': None, 'away': 2.58},\n", " 'spreads': {'-2.5': {'hdp': -2.5,\n", " 'home': 1.869,\n", " 'away': 2.03,\n", " 'max': 5000.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.613, 'away': 2.39, 'max': 5000.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.666, 'away': 2.29, 'max': 5000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.724, 'away': 2.2, 'max': 5000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.793, 'away': 2.11, 'max': 5000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 1.943, 'away': 1.934, 'max': 5000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.01, 'away': 1.862, 'max': 5000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.09, 'away': 1.793, 'max': 5000.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.18, 'away': 1.735, 'max': 5000.0}},\n", " 'totals': {'111.0': {'points': 111.0,\n", " 'over': 2.0,\n", " 'under': 1.892,\n", " 'max': 2000.0},\n", " '109.0': {'points': 109.0, 'over': 1.751, 'under': 2.16, 'max': 2000.0},\n", " '109.5': {'points': 109.5, 'over': 1.806, 'under': 2.08, 'max': 2000.0},\n", " '110.0': {'points': 110.0, 'over': 1.862, 'under': 2.02, 'max': 2000.0},\n", " '110.5': {'points': 110.5, 'over': 1.917, 'under': 1.961, 'max': 2000.0},\n", " '111.5': {'points': 111.5, 'over': 2.06, 'under': 1.826, 'max': 2000.0},\n", " '112.0': {'points': 112.0, 'over': 2.16, 'under': 1.757, 'max': 2000.0},\n", " '112.5': {'points': 112.5, 'over': 2.23, 'under': 1.704, 'max': 2000.0},\n", " '113.0': {'points': 113.0, 'over': 2.34, 'under': 1.645, 'max': 2000.0}},\n", " 'team_total': {'home': {'points': 57.0, 'over': 1.925, 'under': 1.925},\n", " 'away': {'points': 53.5, 'over': 1.869, 'under': 1.98}},\n", " 'meta': {'number': 1,\n", " 'max_spread': 5000.0,\n", " 'max_money_line': 2000.0,\n", " 'max_total': 2000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_3': {'line_id': 2067372965,\n", " 'number': 3,\n", " 'cutoff': '2023-04-15T22:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.625, 'draw': None, 'away': 2.41},\n", " 'spreads': {'-2.0': {'hdp': -2.0,\n", " 'home': 1.952,\n", " 'away': 1.934,\n", " 'max': 3000.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.558, 'away': 2.52, 'max': 3000.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.694, 'away': 2.24, 'max': 3000.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.763, 'away': 2.14, 'max': 3000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.854, 'away': 2.02, 'max': 3000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.04, 'away': 1.833, 'max': 3000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.17, 'away': 1.746, 'max': 3000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.27, 'away': 1.675, 'max': 3000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.43, 'away': 1.595, 'max': 3000.0}},\n", " 'totals': {'56.0': {'points': 56.0,\n", " 'over': 2.01,\n", " 'under': 1.884,\n", " 'max': 1000.0},\n", " '54.0': {'points': 54.0, 'over': 1.704, 'under': 2.24, 'max': 1000.0},\n", " '54.5': {'points': 54.5, 'over': 1.775, 'under': 2.13, 'max': 1000.0},\n", " '55.0': {'points': 55.0, 'over': 1.84, 'under': 2.05, 'max': 1000.0},\n", " '55.5': {'points': 55.5, 'over': 1.917, 'under': 1.961, 'max': 1000.0},\n", " '56.5': {'points': 56.5, 'over': 2.1, 'under': 1.8, 'max': 1000.0},\n", " '57.0': {'points': 57.0, 'over': 2.21, 'under': 1.729, 'max': 1000.0},\n", " '57.5': {'points': 57.5, 'over': 2.29, 'under': 1.671, 'max': 1000.0},\n", " '58.0': {'points': 58.0, 'over': 2.43, 'under': 1.602, 'max': 1000.0}},\n", " 'team_total': {'home': {'points': 29.0, 'over': 1.98, 'under': 1.877},\n", " 'away': {'points': 26.5, 'over': 1.854, 'under': 2.0}},\n", " 'meta': {'number': 3,\n", " 'max_spread': 3000.0,\n", " 'max_money_line': 1500.0,\n", " 'max_total': 1000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_4': {'line_id': 2067398089,\n", " 'number': 4,\n", " 'cutoff': '2023-04-15T22:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.694, 'draw': None, 'away': 2.27},\n", " 'spreads': {'-1.0': {'hdp': -1.0,\n", " 'home': 1.862,\n", " 'away': 2.03,\n", " 'max': 500.0},\n", " '1.5': {'hdp': 1.5, 'home': 1.51, 'away': 2.65, 'max': 500.0},\n", " '1.0': {'hdp': 1.0, 'home': 1.552, 'away': 2.53, 'max': 500.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.632, 'away': 2.37, 'max': 500.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.775, 'away': 2.13, 'max': 500.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.943, 'away': 1.925, 'max': 500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 2.05, 'away': 1.833, 'max': 500.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.15, 'away': 1.751, 'max': 500.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.28, 'away': 1.671, 'max': 500.0}},\n", " 'totals': {'55.5': {'points': 55.5,\n", " 'over': 1.99,\n", " 'under': 1.9,\n", " 'max': 500.0},\n", " '53.5': {'points': 53.5, 'over': 1.671, 'under': 2.29, 'max': 500.0},\n", " '54.0': {'points': 54.0, 'over': 1.724, 'under': 2.2, 'max': 500.0},\n", " '54.5': {'points': 54.5, 'over': 1.806, 'under': 2.09, 'max': 500.0},\n", " '55.0': {'points': 55.0, 'over': 1.884, 'under': 1.99, 'max': 500.0},\n", " '56.0': {'points': 56.0, 'over': 2.09, 'under': 1.806, 'max': 500.0},\n", " '56.5': {'points': 56.5, 'over': 2.19, 'under': 1.74, 'max': 500.0},\n", " '57.0': {'points': 57.0, 'over': 2.32, 'under': 1.657, 'max': 500.0},\n", " '57.5': {'points': 57.5, 'over': 2.43, 'under': 1.606, 'max': 500.0}},\n", " 'team_total': {'home': {'points': 28.5, 'over': 1.97, 'under': 1.884},\n", " 'away': {'points': 27.0, 'over': 1.952, 'under': 1.9}},\n", " 'meta': {'number': 4,\n", " 'max_spread': 500.0,\n", " 'max_money_line': 500.0,\n", " 'max_total': 500.0,\n", " 'max_team_total': 500.0}}}},\n", " {'event_id': 1570794181,\n", " 'sport_id': 3,\n", " 'league_id': 487,\n", " 'league_name': 'NBA',\n", " 'starts': '2023-04-15T19:40:00',\n", " 'last': 1681570462,\n", " 'home': 'Boston Celtics',\n", " 'away': 'Atlanta Hawks',\n", " 'event_type': 'prematch',\n", " 'parent_id': None,\n", " 'resulting_unit': 'Regular',\n", " 'is_have_odds': True,\n", " 'periods': {'num_0': {'line_id': 2067326363,\n", " 'number': 0,\n", " 'cutoff': '2023-04-15T19:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.247, 'draw': None, 'away': 4.36},\n", " 'spreads': {'-9.5': {'hdp': -9.5,\n", " 'home': 1.97,\n", " 'away': 1.934,\n", " 'max': 25000.0},\n", " '-7.0': {'hdp': -7.0, 'home': 1.632, 'away': 2.38, 'max': 25000.0},\n", " '-7.5': {'hdp': -7.5, 'home': 1.68, 'away': 2.28, 'max': 25000.0},\n", " '-8.0': {'hdp': -8.0, 'home': 1.735, 'away': 2.2, 'max': 25000.0},\n", " '-8.5': {'hdp': -8.5, 'home': 1.8, 'away': 2.11, 'max': 25000.0},\n", " '-9.0': {'hdp': -9.0, 'home': 1.877, 'away': 2.02, 'max': 25000.0},\n", " '-10.0': {'hdp': -10.0, 'home': 2.06, 'away': 1.847, 'max': 25000.0},\n", " '-10.5': {'hdp': -10.5, 'home': 2.15, 'away': 1.769, 'max': 25000.0},\n", " '-11.0': {'hdp': -11.0, 'home': 2.24, 'away': 1.709, 'max': 25000.0},\n", " '-11.5': {'hdp': -11.5, 'home': 2.33, 'away': 1.657, 'max': 25000.0},\n", " '-12.0': {'hdp': -12.0, 'home': 2.44, 'away': 1.606, 'max': 25000.0}},\n", " 'totals': {'231.0': {'points': 231.0,\n", " 'over': 1.98,\n", " 'under': 1.909,\n", " 'max': 5000.0},\n", " '228.5': {'points': 228.5, 'over': 1.74, 'under': 2.16, 'max': 5000.0},\n", " '229.0': {'points': 229.0, 'over': 1.781, 'under': 2.11, 'max': 5000.0},\n", " '229.5': {'points': 229.5, 'over': 1.826, 'under': 2.06, 'max': 5000.0},\n", " '230.0': {'points': 230.0, 'over': 1.877, 'under': 2.01, 'max': 5000.0},\n", " '230.5': {'points': 230.5, 'over': 1.917, 'under': 1.952, 'max': 5000.0},\n", " '231.5': {'points': 231.5, 'over': 2.03, 'under': 1.854, 'max': 5000.0},\n", " '232.0': {'points': 232.0, 'over': 2.09, 'under': 1.806, 'max': 5000.0},\n", " '232.5': {'points': 232.5, 'over': 2.14, 'under': 1.769, 'max': 5000.0},\n", " '233.0': {'points': 233.0, 'over': 2.21, 'under': 1.719, 'max': 5000.0},\n", " '233.5': {'points': 233.5, 'over': 2.26, 'under': 1.684, 'max': 5000.0}},\n", " 'team_total': {'home': {'points': 119.5, 'over': 1.854, 'under': 2.0},\n", " 'away': {'points': 110.5, 'over': 1.925, 'under': 1.925}},\n", " 'meta': {'number': 0,\n", " 'max_spread': 25000.0,\n", " 'max_money_line': 15000.0,\n", " 'max_total': 5000.0,\n", " 'max_team_total': 2000.0}},\n", " 'num_1': {'line_id': 2067339777,\n", " 'number': 1,\n", " 'cutoff': '2023-04-15T19:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.369, 'draw': None, 'away': 3.29},\n", " 'spreads': {'-5.0': {'hdp': -5.0,\n", " 'home': 1.917,\n", " 'away': 1.97,\n", " 'max': 6500.0},\n", " '-3.0': {'hdp': -3.0, 'home': 1.649, 'away': 2.32, 'max': 6500.0},\n", " '-3.5': {'hdp': -3.5, 'home': 1.704, 'away': 2.22, 'max': 6500.0},\n", " '-4.0': {'hdp': -4.0, 'home': 1.769, 'away': 2.14, 'max': 6500.0},\n", " '-4.5': {'hdp': -4.5, 'home': 1.833, 'away': 2.05, 'max': 6500.0},\n", " '-5.5': {'hdp': -5.5, 'home': 1.99, 'away': 1.884, 'max': 6500.0},\n", " '-6.0': {'hdp': -6.0, 'home': 2.07, 'away': 1.813, 'max': 6500.0},\n", " '-6.5': {'hdp': -6.5, 'home': 2.15, 'away': 1.746, 'max': 6500.0},\n", " '-7.0': {'hdp': -7.0, 'home': 2.24, 'away': 1.694, 'max': 6500.0}},\n", " 'totals': {'118.0': {'points': 118.0,\n", " 'over': 1.943,\n", " 'under': 1.943,\n", " 'max': 2000.0},\n", " '116.0': {'points': 116.0, 'over': 1.714, 'under': 2.22, 'max': 2000.0},\n", " '116.5': {'points': 116.5, 'over': 1.763, 'under': 2.14, 'max': 2000.0},\n", " '117.0': {'points': 117.0, 'over': 1.813, 'under': 2.08, 'max': 2000.0},\n", " '117.5': {'points': 117.5, 'over': 1.869, 'under': 2.01, 'max': 2000.0},\n", " '118.5': {'points': 118.5, 'over': 2.01, 'under': 1.869, 'max': 2000.0},\n", " '119.0': {'points': 119.0, 'over': 2.1, 'under': 1.8, 'max': 2000.0},\n", " '119.5': {'points': 119.5, 'over': 2.17, 'under': 1.746, 'max': 2000.0},\n", " '120.0': {'points': 120.0, 'over': 2.27, 'under': 1.68, 'max': 2000.0}},\n", " 'team_total': {'home': {'points': 61.5, 'over': 1.877, 'under': 1.98},\n", " 'away': {'points': 56.5, 'over': 1.961, 'under': 1.892}},\n", " 'meta': {'number': 1,\n", " 'max_spread': 6500.0,\n", " 'max_money_line': 3500.0,\n", " 'max_total': 2000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_3': {'line_id': 2067247663,\n", " 'number': 3,\n", " 'cutoff': '2023-04-15T19:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.478, 'draw': None, 'away': 2.81},\n", " 'spreads': {'-3.0': {'hdp': -3.0,\n", " 'home': 1.934,\n", " 'away': 1.952,\n", " 'max': 3000.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.598, 'away': 2.43, 'max': 3000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.68, 'away': 2.26, 'max': 3000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.751, 'away': 2.16, 'max': 3000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 1.84, 'away': 2.04, 'max': 3000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.02, 'away': 1.854, 'max': 3000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.14, 'away': 1.763, 'max': 3000.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.24, 'away': 1.694, 'max': 3000.0},\n", " '-5.0': {'hdp': -5.0, 'home': 2.39, 'away': 1.613, 'max': 3000.0}},\n", " 'totals': {'59.0': {'points': 59.0,\n", " 'over': 1.9,\n", " 'under': 1.98,\n", " 'max': 1000.0},\n", " '57.0': {'points': 57.0, 'over': 1.645, 'under': 2.34, 'max': 1000.0},\n", " '57.5': {'points': 57.5, 'over': 1.709, 'under': 2.22, 'max': 1000.0},\n", " '58.0': {'points': 58.0, 'over': 1.763, 'under': 2.15, 'max': 1000.0},\n", " '58.5': {'points': 58.5, 'over': 1.833, 'under': 2.06, 'max': 1000.0},\n", " '59.5': {'points': 59.5, 'over': 1.98, 'under': 1.9, 'max': 1000.0},\n", " '60.0': {'points': 60.0, 'over': 2.06, 'under': 1.826, 'max': 1000.0},\n", " '60.5': {'points': 60.5, 'over': 2.14, 'under': 1.763, 'max': 1000.0},\n", " '61.0': {'points': 61.0, 'over': 2.25, 'under': 1.694, 'max': 1000.0}},\n", " 'team_total': {'home': {'points': 31.0, 'over': 1.9, 'under': 1.952},\n", " 'away': {'points': 28.0, 'over': 1.892, 'under': 1.961}},\n", " 'meta': {'number': 3,\n", " 'max_spread': 3000.0,\n", " 'max_money_line': 1500.0,\n", " 'max_total': 1000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_4': {'line_id': 2067247692,\n", " 'number': 4,\n", " 'cutoff': '2023-04-15T19:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.546, 'draw': None, 'away': 2.6},\n", " 'spreads': {'-2.5': {'hdp': -2.5,\n", " 'home': 1.934,\n", " 'away': 1.952,\n", " 'max': 500.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.613, 'away': 2.39, 'max': 500.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.666, 'away': 2.28, 'max': 500.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.751, 'away': 2.15, 'max': 500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.833, 'away': 2.05, 'max': 500.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.02, 'away': 1.854, 'max': 500.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.13, 'away': 1.775, 'max': 500.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.25, 'away': 1.684, 'max': 500.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.36, 'away': 1.628, 'max': 500.0}},\n", " 'totals': {'58.5': {'points': 58.5,\n", " 'over': 1.884,\n", " 'under': 2.0,\n", " 'max': 500.0},\n", " '56.5': {'points': 56.5, 'over': 1.625, 'under': 2.39, 'max': 500.0},\n", " '57.0': {'points': 57.0, 'over': 1.671, 'under': 2.29, 'max': 500.0},\n", " '57.5': {'points': 57.5, 'over': 1.746, 'under': 2.18, 'max': 500.0},\n", " '58.0': {'points': 58.0, 'over': 1.806, 'under': 2.09, 'max': 500.0},\n", " '59.0': {'points': 59.0, 'over': 1.97, 'under': 1.909, 'max': 500.0},\n", " '59.5': {'points': 59.5, 'over': 2.06, 'under': 1.826, 'max': 500.0},\n", " '60.0': {'points': 60.0, 'over': 2.17, 'under': 1.746, 'max': 500.0},\n", " '60.5': {'points': 60.5, 'over': 2.27, 'under': 1.684, 'max': 500.0}},\n", " 'team_total': {'home': {'points': 30.5, 'over': 1.884, 'under': 1.97},\n", " 'away': {'points': 28.5, 'over': 2.02, 'under': 1.84}},\n", " 'meta': {'number': 4,\n", " 'max_spread': 500.0,\n", " 'max_money_line': 500.0,\n", " 'max_total': 500.0,\n", " 'max_team_total': 500.0}}}},\n", " {'event_id': 1570800108,\n", " 'sport_id': 3,\n", " 'league_id': 487,\n", " 'league_name': 'NBA',\n", " 'starts': '2023-04-16T19:10:00',\n", " 'last': 1681567037,\n", " 'home': 'Memphis Grizzlies',\n", " 'away': 'Los Angeles Lakers',\n", " 'event_type': 'prematch',\n", " 'parent_id': None,\n", " 'resulting_unit': 'Regular',\n", " 'is_have_odds': True,\n", " 'periods': {'num_0': {'line_id': 2067039020,\n", " 'number': 0,\n", " 'cutoff': '2023-04-16T19:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.613, 'draw': None, 'away': 2.46},\n", " 'spreads': {'-3.5': {'hdp': -3.5,\n", " 'home': 1.9,\n", " 'away': 2.01,\n", " 'max': 20000.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.609, 'away': 2.42, 'max': 20000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.641, 'away': 2.37, 'max': 20000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.684, 'away': 2.28, 'max': 20000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 1.74, 'away': 2.2, 'max': 20000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 1.813, 'away': 2.1, 'max': 20000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 1.98, 'away': 1.909, 'max': 20000.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.07, 'away': 1.833, 'max': 20000.0},\n", " '-5.0': {'hdp': -5.0, 'home': 2.15, 'away': 1.763, 'max': 20000.0},\n", " '-5.5': {'hdp': -5.5, 'home': 2.24, 'away': 1.709, 'max': 20000.0},\n", " '-6.0': {'hdp': -6.0, 'home': 2.33, 'away': 1.657, 'max': 20000.0}},\n", " 'totals': {'227.5': {'points': 227.5,\n", " 'over': 1.9,\n", " 'under': 1.99,\n", " 'max': 5000.0},\n", " '225.0': {'points': 225.0, 'over': 1.675, 'under': 2.27, 'max': 5000.0},\n", " '225.5': {'points': 225.5, 'over': 1.719, 'under': 2.2, 'max': 5000.0},\n", " '226.0': {'points': 226.0, 'over': 1.757, 'under': 2.15, 'max': 5000.0},\n", " '226.5': {'points': 226.5, 'over': 1.806, 'under': 2.09, 'max': 5000.0},\n", " '227.0': {'points': 227.0, 'over': 1.847, 'under': 2.04, 'max': 5000.0},\n", " '228.0': {'points': 228.0, 'over': 1.943, 'under': 1.934, 'max': 5000.0},\n", " '228.5': {'points': 228.5, 'over': 1.99, 'under': 1.884, 'max': 5000.0},\n", " '229.0': {'points': 229.0, 'over': 2.04, 'under': 1.84, 'max': 5000.0},\n", " '229.5': {'points': 229.5, 'over': 2.09, 'under': 1.8, 'max': 5000.0},\n", " '230.0': {'points': 230.0, 'over': 2.15, 'under': 1.751, 'max': 5000.0}},\n", " 'team_total': {'home': {'points': 115.5, 'over': 1.884, 'under': 1.97},\n", " 'away': {'points': 112.5, 'over': 1.952, 'under': 1.9}},\n", " 'meta': {'number': 0,\n", " 'max_spread': 20000.0,\n", " 'max_money_line': 12000.0,\n", " 'max_total': 5000.0,\n", " 'max_team_total': 2000.0}},\n", " 'num_1': {'line_id': 2067039017,\n", " 'number': 1,\n", " 'cutoff': '2023-04-16T19:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.645, 'draw': None, 'away': 2.37},\n", " 'spreads': {'-2.0': {'hdp': -2.0,\n", " 'home': 1.909,\n", " 'away': 1.98,\n", " 'max': 5000.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.602, 'away': 2.42, 'max': 5000.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.699, 'away': 2.23, 'max': 5000.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.763, 'away': 2.14, 'max': 5000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.833, 'away': 2.06, 'max': 5000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 1.99, 'away': 1.892, 'max': 5000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.06, 'away': 1.819, 'max': 5000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.15, 'away': 1.751, 'max': 5000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.23, 'away': 1.699, 'max': 5000.0}},\n", " 'totals': {'117.0': {'points': 117.0,\n", " 'over': 1.952,\n", " 'under': 1.934,\n", " 'max': 2000.0},\n", " '115.0': {'points': 115.0, 'over': 1.729, 'under': 2.19, 'max': 2000.0},\n", " '115.5': {'points': 115.5, 'over': 1.781, 'under': 2.11, 'max': 2000.0},\n", " '116.0': {'points': 116.0, 'over': 1.833, 'under': 2.06, 'max': 2000.0},\n", " '116.5': {'points': 116.5, 'over': 1.884, 'under': 1.99, 'max': 2000.0},\n", " '117.5': {'points': 117.5, 'over': 2.01, 'under': 1.869, 'max': 2000.0},\n", " '118.0': {'points': 118.0, 'over': 2.1, 'under': 1.8, 'max': 2000.0},\n", " '118.5': {'points': 118.5, 'over': 2.17, 'under': 1.74, 'max': 2000.0},\n", " '119.0': {'points': 119.0, 'over': 2.28, 'under': 1.68, 'max': 2000.0}},\n", " 'team_total': {'home': {'points': 59.0, 'over': 1.9, 'under': 1.952},\n", " 'away': {'points': 57.0, 'over': 1.934, 'under': 1.917}},\n", " 'meta': {'number': 1,\n", " 'max_spread': 5000.0,\n", " 'max_money_line': 2000.0,\n", " 'max_total': 2000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_3': {'line_id': 2067039018,\n", " 'number': 3,\n", " 'cutoff': '2023-04-16T19:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.68, 'draw': None, 'away': 2.3},\n", " 'spreads': {'-1.5': {'hdp': -1.5,\n", " 'home': 1.934,\n", " 'away': 1.952,\n", " 'max': 3000.0},\n", " '1.0': {'hdp': 1.0, 'home': 1.531, 'away': 2.59, 'max': 3000.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.613, 'away': 2.4, 'max': 3000.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.757, 'away': 2.15, 'max': 3000.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.833, 'away': 2.05, 'max': 3000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 2.03, 'away': 1.847, 'max': 3000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.13, 'away': 1.775, 'max': 3000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.26, 'away': 1.684, 'max': 3000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.37, 'away': 1.625, 'max': 3000.0}},\n", " 'totals': {'58.5': {'points': 58.5,\n", " 'over': 1.9,\n", " 'under': 1.99,\n", " 'max': 1000.0},\n", " '56.5': {'points': 56.5, 'over': 1.649, 'under': 2.33, 'max': 1000.0},\n", " '57.0': {'points': 57.0, 'over': 1.699, 'under': 2.24, 'max': 1000.0},\n", " '57.5': {'points': 57.5, 'over': 1.769, 'under': 2.14, 'max': 1000.0},\n", " '58.0': {'points': 58.0, 'over': 1.826, 'under': 2.06, 'max': 1000.0},\n", " '59.0': {'points': 59.0, 'over': 1.98, 'under': 1.9, 'max': 1000.0},\n", " '59.5': {'points': 59.5, 'over': 2.06, 'under': 1.833, 'max': 1000.0},\n", " '60.0': {'points': 60.0, 'over': 2.15, 'under': 1.757, 'max': 1000.0},\n", " '60.5': {'points': 60.5, 'over': 2.23, 'under': 1.704, 'max': 1000.0}},\n", " 'team_total': {'home': {'points': 30.0, 'over': 1.9, 'under': 1.952},\n", " 'away': {'points': 28.5, 'over': 1.892, 'under': 1.961}},\n", " 'meta': {'number': 3,\n", " 'max_spread': 3000.0,\n", " 'max_money_line': 1500.0,\n", " 'max_total': 1000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_4': {'line_id': 2067039019,\n", " 'number': 4,\n", " 'cutoff': '2023-04-16T19:10:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.793, 'draw': None, 'away': 2.12},\n", " 'spreads': {'-0.5': {'hdp': -0.5,\n", " 'home': 1.877,\n", " 'away': 2.01,\n", " 'max': 500.0},\n", " '2.0': {'hdp': 2.0, 'home': 1.512, 'away': 2.65, 'max': 500.0},\n", " '1.5': {'hdp': 1.5, 'home': 1.581, 'away': 2.46, 'max': 500.0},\n", " '1.0': {'hdp': 1.0, 'home': 1.636, 'away': 2.36, 'max': 500.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.714, 'away': 2.21, 'max': 500.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.97, 'away': 1.9, 'max': 500.0},\n", " '-1.5': {'hdp': -1.5, 'home': 2.07, 'away': 1.819, 'max': 500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 2.19, 'away': 1.724, 'max': 500.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.3, 'away': 1.662, 'max': 500.0}},\n", " 'totals': {'58.5': {'points': 58.5,\n", " 'over': 1.99,\n", " 'under': 1.9,\n", " 'max': 500.0},\n", " '56.5': {'points': 56.5, 'over': 1.694, 'under': 2.25, 'max': 500.0},\n", " '57.0': {'points': 57.0, 'over': 1.751, 'under': 2.16, 'max': 500.0},\n", " '57.5': {'points': 57.5, 'over': 1.833, 'under': 2.06, 'max': 500.0},\n", " '58.0': {'points': 58.0, 'over': 1.9, 'under': 1.97, 'max': 500.0},\n", " '59.0': {'points': 59.0, 'over': 2.09, 'under': 1.813, 'max': 500.0},\n", " '59.5': {'points': 59.5, 'over': 2.18, 'under': 1.74, 'max': 500.0},\n", " '60.0': {'points': 60.0, 'over': 2.31, 'under': 1.662, 'max': 500.0},\n", " '60.5': {'points': 60.5, 'over': 2.41, 'under': 1.613, 'max': 500.0}},\n", " 'team_total': {'home': {'points': 29.5, 'over': 1.909, 'under': 1.943},\n", " 'away': {'points': 29.0, 'over': 2.03, 'under': 1.833}},\n", " 'meta': {'number': 4,\n", " 'max_spread': 500.0,\n", " 'max_money_line': 500.0,\n", " 'max_total': 500.0,\n", " 'max_team_total': 500.0}}}},\n", " {'event_id': 1571130758,\n", " 'sport_id': 3,\n", " 'league_id': 487,\n", " 'league_name': 'NBA',\n", " 'starts': '2023-04-16T21:40:00',\n", " 'last': 1681565359,\n", " 'home': 'Milwaukee Bucks',\n", " 'away': 'Miami Heat',\n", " 'event_type': 'prematch',\n", " 'parent_id': None,\n", " 'resulting_unit': 'Regular',\n", " 'is_have_odds': True,\n", " 'periods': {'num_0': {'line_id': 2066966502,\n", " 'number': 0,\n", " 'cutoff': '2023-04-16T21:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.256, 'draw': None, 'away': 4.26},\n", " 'spreads': {'-9.0': {'hdp': -9.0,\n", " 'home': 1.917,\n", " 'away': 1.99,\n", " 'max': 15000.0},\n", " '-6.5': {'hdp': -6.5, 'home': 1.595, 'away': 2.46, 'max': 15000.0},\n", " '-7.0': {'hdp': -7.0, 'home': 1.641, 'away': 2.36, 'max': 15000.0},\n", " '-7.5': {'hdp': -7.5, 'home': 1.694, 'away': 2.26, 'max': 15000.0},\n", " '-8.0': {'hdp': -8.0, 'home': 1.757, 'away': 2.17, 'max': 15000.0},\n", " '-8.5': {'hdp': -8.5, 'home': 1.826, 'away': 2.08, 'max': 15000.0},\n", " '-9.5': {'hdp': -9.5, 'home': 2.0, 'away': 1.892, 'max': 15000.0},\n", " '-10.0': {'hdp': -10.0, 'home': 2.09, 'away': 1.813, 'max': 15000.0},\n", " '-10.5': {'hdp': -10.5, 'home': 2.17, 'away': 1.751, 'max': 15000.0},\n", " '-11.0': {'hdp': -11.0, 'home': 2.26, 'away': 1.694, 'max': 15000.0},\n", " '-11.5': {'hdp': -11.5, 'home': 2.36, 'away': 1.645, 'max': 15000.0}},\n", " 'totals': {'219.0': {'points': 219.0,\n", " 'over': 1.952,\n", " 'under': 1.934,\n", " 'max': 3000.0},\n", " '216.5': {'points': 216.5, 'over': 1.719, 'under': 2.2, 'max': 3000.0},\n", " '217.0': {'points': 217.0, 'over': 1.757, 'under': 2.15, 'max': 3000.0},\n", " '217.5': {'points': 217.5, 'over': 1.806, 'under': 2.08, 'max': 3000.0},\n", " '218.0': {'points': 218.0, 'over': 1.847, 'under': 2.04, 'max': 3000.0},\n", " '218.5': {'points': 218.5, 'over': 1.892, 'under': 1.98, 'max': 3000.0},\n", " '219.5': {'points': 219.5, 'over': 2.0, 'under': 1.877, 'max': 3000.0},\n", " '220.0': {'points': 220.0, 'over': 2.06, 'under': 1.833, 'max': 3000.0},\n", " '220.5': {'points': 220.5, 'over': 2.11, 'under': 1.787, 'max': 3000.0},\n", " '221.0': {'points': 221.0, 'over': 2.17, 'under': 1.74, 'max': 3000.0},\n", " '221.5': {'points': 221.5, 'over': 2.22, 'under': 1.704, 'max': 3000.0}},\n", " 'team_total': {'home': {'points': 113.5, 'over': 1.877, 'under': 1.97},\n", " 'away': {'points': 104.5, 'over': 1.869, 'under': 1.99}},\n", " 'meta': {'number': 0,\n", " 'max_spread': 15000.0,\n", " 'max_total': 3000.0,\n", " 'max_money_line': 7500.0,\n", " 'max_team_total': 1500.0}},\n", " 'num_1': {'line_id': 2066966507,\n", " 'number': 1,\n", " 'cutoff': '2023-04-16T21:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.366, 'draw': None, 'away': 3.31},\n", " 'spreads': {'-5.5': {'hdp': -5.5,\n", " 'home': 1.952,\n", " 'away': 1.934,\n", " 'max': 5000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 1.666, 'away': 2.29, 'max': 5000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 1.719, 'away': 2.2, 'max': 5000.0},\n", " '-4.5': {'hdp': -4.5, 'home': 1.781, 'away': 2.11, 'max': 5000.0},\n", " '-5.0': {'hdp': -5.0, 'home': 1.854, 'away': 2.03, 'max': 5000.0},\n", " '-6.0': {'hdp': -6.0, 'home': 2.04, 'away': 1.847, 'max': 5000.0},\n", " '-6.5': {'hdp': -6.5, 'home': 2.13, 'away': 1.775, 'max': 5000.0},\n", " '-7.0': {'hdp': -7.0, 'home': 2.21, 'away': 1.709, 'max': 5000.0},\n", " '-7.5': {'hdp': -7.5, 'home': 2.3, 'away': 1.657, 'max': 5000.0}},\n", " 'totals': {'112.5': {'points': 112.5,\n", " 'over': 1.917,\n", " 'under': 1.97,\n", " 'max': 1500.0},\n", " '110.5': {'points': 110.5, 'over': 1.714, 'under': 2.22, 'max': 1500.0},\n", " '111.0': {'points': 111.0, 'over': 1.751, 'under': 2.16, 'max': 1500.0},\n", " '111.5': {'points': 111.5, 'over': 1.813, 'under': 2.09, 'max': 1500.0},\n", " '112.0': {'points': 112.0, 'over': 1.862, 'under': 2.02, 'max': 1500.0},\n", " '113.0': {'points': 113.0, 'over': 1.99, 'under': 1.884, 'max': 1500.0},\n", " '113.5': {'points': 113.5, 'over': 2.07, 'under': 1.819, 'max': 1500.0},\n", " '114.0': {'points': 114.0, 'over': 2.16, 'under': 1.746, 'max': 1500.0},\n", " '114.5': {'points': 114.5, 'over': 2.25, 'under': 1.694, 'max': 1500.0}},\n", " 'team_total': {'home': {'points': 59.0, 'over': 1.98, 'under': 1.877},\n", " 'away': {'points': 53.5, 'over': 1.952, 'under': 1.892}},\n", " 'meta': {'number': 1,\n", " 'max_spread': 5000.0,\n", " 'max_money_line': 2500.0,\n", " 'max_total': 1500.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_3': {'line_id': 2066955419,\n", " 'number': 3,\n", " 'cutoff': '2023-04-16T21:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.446, 'draw': None, 'away': 2.93},\n", " 'spreads': {'-3.5': {'hdp': -3.5,\n", " 'home': 1.97,\n", " 'away': 1.917,\n", " 'max': 3000.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.636, 'away': 2.35, 'max': 3000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.694, 'away': 2.24, 'max': 3000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 1.787, 'away': 2.11, 'max': 3000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 1.862, 'away': 2.01, 'max': 3000.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.07, 'away': 1.819, 'max': 3000.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.17, 'away': 1.746, 'max': 3000.0},\n", " '-5.0': {'hdp': -5.0, 'home': 2.31, 'away': 1.657, 'max': 3000.0},\n", " '-5.5': {'hdp': -5.5, 'home': 2.42, 'away': 1.602, 'max': 3000.0}},\n", " 'totals': {'56.5': {'points': 56.5,\n", " 'over': 1.917,\n", " 'under': 1.97,\n", " 'max': 1000.0},\n", " '54.5': {'points': 54.5, 'over': 1.662, 'under': 2.31, 'max': 1000.0},\n", " '55.0': {'points': 55.0, 'over': 1.709, 'under': 2.22, 'max': 1000.0},\n", " '55.5': {'points': 55.5, 'over': 1.781, 'under': 2.12, 'max': 1000.0},\n", " '56.0': {'points': 56.0, 'over': 1.847, 'under': 2.04, 'max': 1000.0},\n", " '57.0': {'points': 57.0, 'over': 2.0, 'under': 1.884, 'max': 1000.0},\n", " '57.5': {'points': 57.5, 'over': 2.09, 'under': 1.813, 'max': 1000.0},\n", " '58.0': {'points': 58.0, 'over': 2.18, 'under': 1.735, 'max': 1000.0},\n", " '58.5': {'points': 58.5, 'over': 2.27, 'under': 1.684, 'max': 1000.0}},\n", " 'team_total': {'home': {'points': 30.0, 'over': 1.934, 'under': 1.917},\n", " 'away': {'points': 26.5, 'over': 1.884, 'under': 1.97}},\n", " 'meta': {'number': 3,\n", " 'max_spread': 3000.0,\n", " 'max_money_line': 1500.0,\n", " 'max_total': 1000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_4': {'line_id': 2066966510,\n", " 'number': 4,\n", " 'cutoff': '2023-04-16T21:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.571, 'draw': None, 'away': 2.53},\n", " 'spreads': {'-2.5': {'hdp': -2.5,\n", " 'home': 1.97,\n", " 'away': 1.917,\n", " 'max': 500.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.641, 'away': 2.34, 'max': 500.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.699, 'away': 2.23, 'max': 500.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.787, 'away': 2.11, 'max': 500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.869, 'away': 2.0, 'max': 500.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.07, 'away': 1.813, 'max': 500.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.17, 'away': 1.74, 'max': 500.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.31, 'away': 1.657, 'max': 500.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.42, 'away': 1.602, 'max': 500.0}},\n", " 'totals': {'56.0': {'points': 56.0,\n", " 'over': 1.934,\n", " 'under': 1.952,\n", " 'max': 500.0},\n", " '54.0': {'points': 54.0, 'over': 1.636, 'under': 2.36, 'max': 500.0},\n", " '54.5': {'points': 54.5, 'over': 1.709, 'under': 2.23, 'max': 500.0},\n", " '55.0': {'points': 55.0, 'over': 1.769, 'under': 2.14, 'max': 500.0},\n", " '55.5': {'points': 55.5, 'over': 1.847, 'under': 2.04, 'max': 500.0},\n", " '56.5': {'points': 56.5, 'over': 2.01, 'under': 1.869, 'max': 500.0},\n", " '57.0': {'points': 57.0, 'over': 2.12, 'under': 1.781, 'max': 500.0},\n", " '57.5': {'points': 57.5, 'over': 2.22, 'under': 1.714, 'max': 500.0},\n", " '58.0': {'points': 58.0, 'over': 2.36, 'under': 1.636, 'max': 500.0}},\n", " 'team_total': {'home': {'points': 29.0, 'over': 1.9, 'under': 1.952},\n", " 'away': {'points': 26.5, 'over': 1.833, 'under': 2.03}},\n", " 'meta': {'number': 4,\n", " 'max_spread': 500.0,\n", " 'max_money_line': 500.0,\n", " 'max_total': 500.0,\n", " 'max_team_total': 500.0}}}},\n", " {'event_id': 1571135863,\n", " 'sport_id': 3,\n", " 'league_id': 487,\n", " 'league_name': 'NBA',\n", " 'starts': '2023-04-17T02:40:00',\n", " 'last': 1681571641,\n", " 'home': 'Denver Nuggets',\n", " 'away': 'Minnesota Timberwolves',\n", " 'event_type': 'prematch',\n", " 'parent_id': None,\n", " 'resulting_unit': 'Regular',\n", " 'is_have_odds': True,\n", " 'periods': {'num_0': {'line_id': 2067398680,\n", " 'number': 0,\n", " 'cutoff': '2023-04-17T02:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.353, 'draw': None, 'away': 3.45},\n", " 'spreads': {'-7.5': {'hdp': -7.5,\n", " 'home': 1.961,\n", " 'away': 1.943,\n", " 'max': 6500.0},\n", " '-5.0': {'hdp': -5.0, 'home': 1.621, 'away': 2.4, 'max': 6500.0},\n", " '-5.5': {'hdp': -5.5, 'home': 1.671, 'away': 2.3, 'max': 6500.0},\n", " '-6.0': {'hdp': -6.0, 'home': 1.724, 'away': 2.21, 'max': 6500.0},\n", " '-6.5': {'hdp': -6.5, 'home': 1.787, 'away': 2.12, 'max': 6500.0},\n", " '-7.0': {'hdp': -7.0, 'home': 1.869, 'away': 2.04, 'max': 6500.0},\n", " '-8.0': {'hdp': -8.0, 'home': 2.05, 'away': 1.854, 'max': 6500.0},\n", " '-8.5': {'hdp': -8.5, 'home': 2.14, 'away': 1.781, 'max': 6500.0},\n", " '-9.0': {'hdp': -9.0, 'home': 2.22, 'away': 1.714, 'max': 6500.0},\n", " '-9.5': {'hdp': -9.5, 'home': 2.32, 'away': 1.666, 'max': 6500.0},\n", " '-10.0': {'hdp': -10.0, 'home': 2.42, 'away': 1.613, 'max': 6500.0}},\n", " 'totals': {'224.5': {'points': 224.5,\n", " 'over': 1.943,\n", " 'under': 1.943,\n", " 'max': 2000.0},\n", " '222.0': {'points': 222.0, 'over': 1.714, 'under': 2.21, 'max': 2000.0},\n", " '222.5': {'points': 222.5, 'over': 1.757, 'under': 2.15, 'max': 2000.0},\n", " '223.0': {'points': 223.0, 'over': 1.8, 'under': 2.09, 'max': 2000.0},\n", " '223.5': {'points': 223.5, 'over': 1.847, 'under': 2.04, 'max': 2000.0},\n", " '224.0': {'points': 224.0, 'over': 1.892, 'under': 1.99, 'max': 2000.0},\n", " '225.0': {'points': 225.0, 'over': 1.99, 'under': 1.884, 'max': 2000.0},\n", " '225.5': {'points': 225.5, 'over': 2.04, 'under': 1.84, 'max': 2000.0},\n", " '226.0': {'points': 226.0, 'over': 2.1, 'under': 1.793, 'max': 2000.0},\n", " '226.5': {'points': 226.5, 'over': 2.15, 'under': 1.757, 'max': 2000.0},\n", " '227.0': {'points': 227.0, 'over': 2.21, 'under': 1.709, 'max': 2000.0}},\n", " 'team_total': {'home': {'points': 115.5, 'over': 1.877, 'under': 1.98},\n", " 'away': {'points': 108.5, 'over': 1.917, 'under': 1.934}},\n", " 'meta': {'number': 0,\n", " 'max_spread': 6500.0,\n", " 'max_money_line': 3500.0,\n", " 'max_total': 2000.0,\n", " 'max_team_total': 1000.0}},\n", " 'num_1': {'line_id': 2067398688,\n", " 'number': 1,\n", " 'cutoff': '2023-04-17T02:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.467, 'draw': None, 'away': 2.85},\n", " 'spreads': {'-4.0': {'hdp': -4.0,\n", " 'home': 1.917,\n", " 'away': 1.97,\n", " 'max': 3000.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.645, 'away': 2.33, 'max': 3000.0},\n", " '-2.5': {'hdp': -2.5, 'home': 1.694, 'away': 2.24, 'max': 3000.0},\n", " '-3.0': {'hdp': -3.0, 'home': 1.757, 'away': 2.15, 'max': 3000.0},\n", " '-3.5': {'hdp': -3.5, 'home': 1.833, 'away': 2.06, 'max': 3000.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.01, 'away': 1.877, 'max': 3000.0},\n", " '-5.0': {'hdp': -5.0, 'home': 2.09, 'away': 1.8, 'max': 3000.0},\n", " '-5.5': {'hdp': -5.5, 'home': 2.18, 'away': 1.729, 'max': 3000.0},\n", " '-6.0': {'hdp': -6.0, 'home': 2.26, 'away': 1.68, 'max': 3000.0}},\n", " 'totals': {'115.0': {'points': 115.0,\n", " 'over': 1.952,\n", " 'under': 1.934,\n", " 'max': 1000.0},\n", " '113.0': {'points': 113.0, 'over': 1.724, 'under': 2.2, 'max': 1000.0},\n", " '113.5': {'points': 113.5, 'over': 1.775, 'under': 2.12, 'max': 1000.0},\n", " '114.0': {'points': 114.0, 'over': 1.826, 'under': 2.06, 'max': 1000.0},\n", " '114.5': {'points': 114.5, 'over': 1.884, 'under': 2.0, 'max': 1000.0},\n", " '115.5': {'points': 115.5, 'over': 2.01, 'under': 1.869, 'max': 1000.0},\n", " '116.0': {'points': 116.0, 'over': 2.1, 'under': 1.8, 'max': 1000.0},\n", " '116.5': {'points': 116.5, 'over': 2.17, 'under': 1.74, 'max': 1000.0},\n", " '117.0': {'points': 117.0, 'over': 2.28, 'under': 1.68, 'max': 1000.0}},\n", " 'team_total': {'home': {'points': 59.5, 'over': 1.917, 'under': 1.934},\n", " 'away': {'points': 55.5, 'over': 1.943, 'under': 1.909}},\n", " 'meta': {'number': 1,\n", " 'max_spread': 3000.0,\n", " 'max_money_line': 1500.0,\n", " 'max_total': 1000.0,\n", " 'max_team_total': 500.0}},\n", " 'num_3': {'line_id': 2067398001,\n", " 'number': 3,\n", " 'cutoff': '2023-04-17T02:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.54, 'draw': None, 'away': 2.62},\n", " 'spreads': {'-2.5': {'hdp': -2.5,\n", " 'home': 1.934,\n", " 'away': 1.952,\n", " 'max': 1500.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.609, 'away': 2.4, 'max': 1500.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.666, 'away': 2.29, 'max': 1500.0},\n", " '-1.5': {'hdp': -1.5, 'home': 1.757, 'away': 2.15, 'max': 1500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 1.833, 'away': 2.05, 'max': 1500.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.03, 'away': 1.847, 'max': 1500.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.13, 'away': 1.775, 'max': 1500.0},\n", " '-4.0': {'hdp': -4.0, 'home': 2.26, 'away': 1.684, 'max': 1500.0},\n", " '-4.5': {'hdp': -4.5, 'home': 2.37, 'away': 1.625, 'max': 1500.0}},\n", " 'totals': {'57.5': {'points': 57.5,\n", " 'over': 1.9,\n", " 'under': 1.99,\n", " 'max': 750.0},\n", " '55.5': {'points': 55.5, 'over': 1.645, 'under': 2.34, 'max': 750.0},\n", " '56.0': {'points': 56.0, 'over': 1.694, 'under': 2.25, 'max': 750.0},\n", " '56.5': {'points': 56.5, 'over': 1.769, 'under': 2.14, 'max': 750.0},\n", " '57.0': {'points': 57.0, 'over': 1.826, 'under': 2.07, 'max': 750.0},\n", " '58.0': {'points': 58.0, 'over': 1.98, 'under': 1.9, 'max': 750.0},\n", " '58.5': {'points': 58.5, 'over': 2.06, 'under': 1.826, 'max': 750.0},\n", " '59.0': {'points': 59.0, 'over': 2.15, 'under': 1.757, 'max': 750.0},\n", " '59.5': {'points': 59.5, 'over': 2.24, 'under': 1.704, 'max': 750.0}},\n", " 'team_total': {'home': {'points': 30.0, 'over': 1.884, 'under': 1.961},\n", " 'away': {'points': 27.5, 'over': 1.9, 'under': 1.952}},\n", " 'meta': {'number': 3,\n", " 'max_spread': 1500.0,\n", " 'max_money_line': 750.0,\n", " 'max_total': 750.0,\n", " 'max_team_total': 500.0}},\n", " 'num_4': {'line_id': 2067398697,\n", " 'number': 4,\n", " 'cutoff': '2023-04-17T02:40:00Z',\n", " 'period_status': 1,\n", " 'money_line': {'home': 1.68, 'draw': None, 'away': 2.3},\n", " 'spreads': {'-1.5': {'hdp': -1.5,\n", " 'home': 1.934,\n", " 'away': 1.952,\n", " 'max': 500.0},\n", " '1.0': {'hdp': 1.0, 'home': 1.54, 'away': 2.56, 'max': 500.0},\n", " '0.5': {'hdp': 0.5, 'home': 1.617, 'away': 2.39, 'max': 500.0},\n", " '-0.5': {'hdp': -0.5, 'home': 1.757, 'away': 2.15, 'max': 500.0},\n", " '-1.0': {'hdp': -1.0, 'home': 1.833, 'away': 2.05, 'max': 500.0},\n", " '-2.0': {'hdp': -2.0, 'home': 2.03, 'away': 1.847, 'max': 500.0},\n", " '-2.5': {'hdp': -2.5, 'home': 2.13, 'away': 1.775, 'max': 500.0},\n", " '-3.0': {'hdp': -3.0, 'home': 2.26, 'away': 1.684, 'max': 500.0},\n", " '-3.5': {'hdp': -3.5, 'home': 2.36, 'away': 1.625, 'max': 500.0}},\n", " 'totals': {'57.0': {'points': 57.0,\n", " 'over': 1.97,\n", " 'under': 1.917,\n", " 'max': 500.0},\n", " '55.0': {'points': 55.0, 'over': 1.671, 'under': 2.29, 'max': 500.0},\n", " '55.5': {'points': 55.5, 'over': 1.746, 'under': 2.17, 'max': 500.0},\n", " '56.0': {'points': 56.0, 'over': 1.813, 'under': 2.09, 'max': 500.0},\n", " '56.5': {'points': 56.5, 'over': 1.892, 'under': 1.99, 'max': 500.0},\n", " '57.5': {'points': 57.5, 'over': 2.05, 'under': 1.84, 'max': 500.0},\n", " '58.0': {'points': 58.0, 'over': 2.16, 'under': 1.757, 'max': 500.0},\n", " '58.5': {'points': 58.5, 'over': 2.25, 'under': 1.694, 'max': 500.0},\n", " '59.0': {'points': 59.0, 'over': 2.39, 'under': 1.621, 'max': 500.0}},\n", " 'team_total': {'home': {'points': 29.5, 'over': 2.0, 'under': 1.854},\n", " 'away': {'points': 28.0, 'over': 2.02, 'under': 1.84}},\n", " 'meta': {'number': 4,\n", " 'max_spread': 500.0,\n", " 'max_money_line': 500.0,\n", " 'max_total': 500.0,\n", " 'max_team_total': 500.0}}}}]}" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "current_json = current.json()\n", "current_json\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Wow, that's a lot of stuff. OK, now this is the tricky part. How do we get this thing into a `pandas` DataFrame? This is where we really have to think carefully. What do we actually want? Remember, a DataFrame, at its simplest, looks like a spreadsheet, with rows and columns. How could this thing possibly look like that?" ] }, { "cell_type": "code", "execution_count": 154, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sport_idsport_namelastlast_callevents
03Basketball16815717051681571706[{'event_id': 1570671674, 'sport_id': 3, 'leag...
\n", "
" ], "text/plain": [ " sport_id sport_name last last_call \\\n", "0 3 Basketball 1681571705 1681571706 \n", "\n", " events \n", "0 [{'event_id': 1570671674, 'sport_id': 3, 'leag... " ] }, "execution_count": 154, "metadata": {}, "output_type": "execute_result" } ], "source": [ "current_df = pd.json_normalize(data = current_json)\n", "current_df\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "We need to **flatten** this file. JSON files are nested. That's what all those brackets are doing. Let's think a little more about that.\n", "\n", "```{figure} ../images/07-json.png\n", "---\n", "name: 07-json.png\n", "align: center\n", "---\n", "JSON structure. Source: https://towardsdatascience.com/all-pandas-json-normalize-you-should-know-for-flattening-json-13eae1dfb7dd\n", "```\n", "\n", "JSON files are like dictionaries, as you can see in the picture above. There's a key and a value. However, they can get complicated where there's a list of dictionaries embedded in the same data structure. You can think of navigating them like working through the branches of a tree. Which branch do you want?\n", "\n", "To do this, we'll use the [pd.json_normalize](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.json_normalize.html) method. We've just used it, but that was with a simple JSON file. It didn't really work with the current odds data, unless we add more arguments.\n", "\n", "You can read more [here](https://towardsdatascience.com/all-pandas-json-normalize-you-should-know-for-flattening-json-13eae1dfb7dd).\n", "\n", "Everything is packed into that *events* column. Let's flatten it. This will take every item in it and convert it into a new column. Keys will be combined together to create compound names that combine different levels. " ] }, { "cell_type": "code", "execution_count": 155, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
event_idsport_idleague_idleague_namestartslasthomeawayevent_typeparent_id...periods.num_0.totals.222.0.underperiods.num_0.totals.222.0.maxperiods.num_0.totals.222.5.pointsperiods.num_0.totals.222.5.overperiods.num_0.totals.222.5.underperiods.num_0.totals.222.5.maxperiods.num_0.totals.223.0.pointsperiods.num_0.totals.223.0.overperiods.num_0.totals.223.0.underperiods.num_0.totals.223.0.max
015706716743487NBA2023-04-15T17:10:001681571077Philadelphia 76ersBrooklyn NetsprematchNone...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
115706716833487NBA2023-04-16T00:40:001681570378Sacramento KingsGolden State WarriorsprematchNone...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
215706716843487NBA2023-04-17T00:10:001681568411Phoenix SunsLos Angeles ClippersprematchNone...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
315706716853487NBA2023-04-15T22:10:001681571621Cleveland CavaliersNew York KnicksprematchNone...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
415707941813487NBA2023-04-15T19:40:001681570462Boston CelticsAtlanta HawksprematchNone...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
515708001083487NBA2023-04-16T19:10:001681567037Memphis GrizzliesLos Angeles LakersprematchNone...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
615711307583487NBA2023-04-16T21:40:001681565359Milwaukee BucksMiami HeatprematchNone...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
715711358633487NBA2023-04-17T02:40:001681571641Denver NuggetsMinnesota TimberwolvesprematchNone...2.212000.0222.51.7572.152000.0223.01.82.092000.0
\n", "

8 rows × 856 columns

\n", "
" ], "text/plain": [ " event_id sport_id league_id league_name starts \\\n", "0 1570671674 3 487 NBA 2023-04-15T17:10:00 \n", "1 1570671683 3 487 NBA 2023-04-16T00:40:00 \n", "2 1570671684 3 487 NBA 2023-04-17T00:10:00 \n", "3 1570671685 3 487 NBA 2023-04-15T22:10:00 \n", "4 1570794181 3 487 NBA 2023-04-15T19:40:00 \n", "5 1570800108 3 487 NBA 2023-04-16T19:10:00 \n", "6 1571130758 3 487 NBA 2023-04-16T21:40:00 \n", "7 1571135863 3 487 NBA 2023-04-17T02:40:00 \n", "\n", " last home away event_type \\\n", "0 1681571077 Philadelphia 76ers Brooklyn Nets prematch \n", "1 1681570378 Sacramento Kings Golden State Warriors prematch \n", "2 1681568411 Phoenix Suns Los Angeles Clippers prematch \n", "3 1681571621 Cleveland Cavaliers New York Knicks prematch \n", "4 1681570462 Boston Celtics Atlanta Hawks prematch \n", "5 1681567037 Memphis Grizzlies Los Angeles Lakers prematch \n", "6 1681565359 Milwaukee Bucks Miami Heat prematch \n", "7 1681571641 Denver Nuggets Minnesota Timberwolves prematch \n", "\n", " parent_id ... periods.num_0.totals.222.0.under \\\n", "0 None ... NaN \n", "1 None ... NaN \n", "2 None ... NaN \n", "3 None ... NaN \n", "4 None ... NaN \n", "5 None ... NaN \n", "6 None ... NaN \n", "7 None ... 2.21 \n", "\n", " periods.num_0.totals.222.0.max periods.num_0.totals.222.5.points \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 NaN NaN \n", "5 NaN NaN \n", "6 NaN NaN \n", "7 2000.0 222.5 \n", "\n", " periods.num_0.totals.222.5.over periods.num_0.totals.222.5.under \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 NaN NaN \n", "5 NaN NaN \n", "6 NaN NaN \n", "7 1.757 2.15 \n", "\n", " periods.num_0.totals.222.5.max periods.num_0.totals.223.0.points \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 NaN NaN \n", "5 NaN NaN \n", "6 NaN NaN \n", "7 2000.0 223.0 \n", "\n", " periods.num_0.totals.223.0.over periods.num_0.totals.223.0.under \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 NaN NaN \n", "5 NaN NaN \n", "6 NaN NaN \n", "7 1.8 2.09 \n", "\n", " periods.num_0.totals.223.0.max \n", "0 NaN \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "5 NaN \n", "6 NaN \n", "7 2000.0 \n", "\n", "[8 rows x 856 columns]" ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "current_df_events = pd.json_normalize(data = current_json, record_path=['events'])\n", "current_df_events" ] }, { "cell_type": "code", "execution_count": 156, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['event_id',\n", " 'sport_id',\n", " 'league_id',\n", " 'league_name',\n", " 'starts',\n", " 'last',\n", " 'home',\n", " 'away',\n", " 'event_type',\n", " 'parent_id',\n", " 'resulting_unit',\n", " 'is_have_odds',\n", " 'periods.num_0.line_id',\n", " 'periods.num_0.number',\n", " 'periods.num_0.cutoff',\n", " 'periods.num_0.period_status',\n", " 'periods.num_0.money_line.home',\n", " 'periods.num_0.money_line.draw',\n", " 'periods.num_0.money_line.away',\n", " 'periods.num_0.spreads.-8.5.hdp',\n", " 'periods.num_0.spreads.-8.5.home',\n", " 'periods.num_0.spreads.-8.5.away',\n", " 'periods.num_0.spreads.-8.5.max',\n", " 'periods.num_0.spreads.-6.0.hdp',\n", " 'periods.num_0.spreads.-6.0.home',\n", " 'periods.num_0.spreads.-6.0.away',\n", " 'periods.num_0.spreads.-6.0.max',\n", " 'periods.num_0.spreads.-6.5.hdp',\n", " 'periods.num_0.spreads.-6.5.home',\n", " 'periods.num_0.spreads.-6.5.away',\n", " 'periods.num_0.spreads.-6.5.max',\n", " 'periods.num_0.spreads.-7.0.hdp',\n", " 'periods.num_0.spreads.-7.0.home',\n", " 'periods.num_0.spreads.-7.0.away',\n", " 'periods.num_0.spreads.-7.0.max',\n", " 'periods.num_0.spreads.-7.5.hdp',\n", " 'periods.num_0.spreads.-7.5.home',\n", " 'periods.num_0.spreads.-7.5.away',\n", " 'periods.num_0.spreads.-7.5.max',\n", " 'periods.num_0.spreads.-8.0.hdp',\n", " 'periods.num_0.spreads.-8.0.home',\n", " 'periods.num_0.spreads.-8.0.away',\n", " 'periods.num_0.spreads.-8.0.max',\n", " 'periods.num_0.spreads.-9.0.hdp',\n", " 'periods.num_0.spreads.-9.0.home',\n", " 'periods.num_0.spreads.-9.0.away',\n", " 'periods.num_0.spreads.-9.0.max',\n", " 'periods.num_0.spreads.-9.5.hdp',\n", " 'periods.num_0.spreads.-9.5.home',\n", " 'periods.num_0.spreads.-9.5.away',\n", " 'periods.num_0.spreads.-9.5.max',\n", " 'periods.num_0.spreads.-10.0.hdp',\n", " 'periods.num_0.spreads.-10.0.home',\n", " 'periods.num_0.spreads.-10.0.away',\n", " 'periods.num_0.spreads.-10.0.max',\n", " 'periods.num_0.spreads.-10.5.hdp',\n", " 'periods.num_0.spreads.-10.5.home',\n", " 'periods.num_0.spreads.-10.5.away',\n", " 'periods.num_0.spreads.-10.5.max',\n", " 'periods.num_0.spreads.-11.0.hdp',\n", " 'periods.num_0.spreads.-11.0.home',\n", " 'periods.num_0.spreads.-11.0.away',\n", " 'periods.num_0.spreads.-11.0.max',\n", " 'periods.num_0.totals.213.5.points',\n", " 'periods.num_0.totals.213.5.over',\n", " 'periods.num_0.totals.213.5.under',\n", " 'periods.num_0.totals.213.5.max',\n", " 'periods.num_0.totals.211.0.points',\n", " 'periods.num_0.totals.211.0.over',\n", " 'periods.num_0.totals.211.0.under',\n", " 'periods.num_0.totals.211.0.max',\n", " 'periods.num_0.totals.211.5.points',\n", " 'periods.num_0.totals.211.5.over',\n", " 'periods.num_0.totals.211.5.under',\n", " 'periods.num_0.totals.211.5.max',\n", " 'periods.num_0.totals.212.0.points',\n", " 'periods.num_0.totals.212.0.over',\n", " 'periods.num_0.totals.212.0.under',\n", " 'periods.num_0.totals.212.0.max',\n", " 'periods.num_0.totals.212.5.points',\n", " 'periods.num_0.totals.212.5.over',\n", " 'periods.num_0.totals.212.5.under',\n", " 'periods.num_0.totals.212.5.max',\n", " 'periods.num_0.totals.213.0.points',\n", " 'periods.num_0.totals.213.0.over',\n", " 'periods.num_0.totals.213.0.under',\n", " 'periods.num_0.totals.213.0.max',\n", " 'periods.num_0.totals.214.0.points',\n", " 'periods.num_0.totals.214.0.over',\n", " 'periods.num_0.totals.214.0.under',\n", " 'periods.num_0.totals.214.0.max',\n", " 'periods.num_0.totals.214.5.points',\n", " 'periods.num_0.totals.214.5.over',\n", " 'periods.num_0.totals.214.5.under',\n", " 'periods.num_0.totals.214.5.max',\n", " 'periods.num_0.totals.215.0.points',\n", " 'periods.num_0.totals.215.0.over',\n", " 'periods.num_0.totals.215.0.under',\n", " 'periods.num_0.totals.215.0.max',\n", " 'periods.num_0.totals.215.5.points',\n", " 'periods.num_0.totals.215.5.over',\n", " 'periods.num_0.totals.215.5.under',\n", " 'periods.num_0.totals.215.5.max',\n", " 'periods.num_0.totals.216.0.points',\n", " 'periods.num_0.totals.216.0.over',\n", " 'periods.num_0.totals.216.0.under',\n", " 'periods.num_0.totals.216.0.max',\n", " 'periods.num_0.team_total.home.points',\n", " 'periods.num_0.team_total.home.over',\n", " 'periods.num_0.team_total.home.under',\n", " 'periods.num_0.team_total.away.points',\n", " 'periods.num_0.team_total.away.over',\n", " 'periods.num_0.team_total.away.under',\n", " 'periods.num_0.meta.number',\n", " 'periods.num_0.meta.max_spread',\n", " 'periods.num_0.meta.max_money_line',\n", " 'periods.num_0.meta.max_total',\n", " 'periods.num_0.meta.max_team_total',\n", " 'periods.num_1.line_id',\n", " 'periods.num_1.number',\n", " 'periods.num_1.cutoff',\n", " 'periods.num_1.period_status',\n", " 'periods.num_1.money_line.home',\n", " 'periods.num_1.money_line.draw',\n", " 'periods.num_1.money_line.away',\n", " 'periods.num_1.spreads.-5.0.hdp',\n", " 'periods.num_1.spreads.-5.0.home',\n", " 'periods.num_1.spreads.-5.0.away',\n", " 'periods.num_1.spreads.-5.0.max',\n", " 'periods.num_1.spreads.-3.0.hdp',\n", " 'periods.num_1.spreads.-3.0.home',\n", " 'periods.num_1.spreads.-3.0.away',\n", " 'periods.num_1.spreads.-3.0.max',\n", " 'periods.num_1.spreads.-3.5.hdp',\n", " 'periods.num_1.spreads.-3.5.home',\n", " 'periods.num_1.spreads.-3.5.away',\n", " 'periods.num_1.spreads.-3.5.max',\n", " 'periods.num_1.spreads.-4.0.hdp',\n", " 'periods.num_1.spreads.-4.0.home',\n", " 'periods.num_1.spreads.-4.0.away',\n", " 'periods.num_1.spreads.-4.0.max',\n", " 'periods.num_1.spreads.-4.5.hdp',\n", " 'periods.num_1.spreads.-4.5.home',\n", " 'periods.num_1.spreads.-4.5.away',\n", " 'periods.num_1.spreads.-4.5.max',\n", " 'periods.num_1.spreads.-5.5.hdp',\n", " 'periods.num_1.spreads.-5.5.home',\n", " 'periods.num_1.spreads.-5.5.away',\n", " 'periods.num_1.spreads.-5.5.max',\n", " 'periods.num_1.spreads.-6.0.hdp',\n", " 'periods.num_1.spreads.-6.0.home',\n", " 'periods.num_1.spreads.-6.0.away',\n", " 'periods.num_1.spreads.-6.0.max',\n", " 'periods.num_1.spreads.-6.5.hdp',\n", " 'periods.num_1.spreads.-6.5.home',\n", " 'periods.num_1.spreads.-6.5.away',\n", " 'periods.num_1.spreads.-6.5.max',\n", " 'periods.num_1.spreads.-7.0.hdp',\n", " 'periods.num_1.spreads.-7.0.home',\n", " 'periods.num_1.spreads.-7.0.away',\n", " 'periods.num_1.spreads.-7.0.max',\n", " 'periods.num_1.totals.109.0.points',\n", " 'periods.num_1.totals.109.0.over',\n", " 'periods.num_1.totals.109.0.under',\n", " 'periods.num_1.totals.109.0.max',\n", " 'periods.num_1.totals.107.0.points',\n", " 'periods.num_1.totals.107.0.over',\n", " 'periods.num_1.totals.107.0.under',\n", " 'periods.num_1.totals.107.0.max',\n", " 'periods.num_1.totals.107.5.points',\n", " 'periods.num_1.totals.107.5.over',\n", " 'periods.num_1.totals.107.5.under',\n", " 'periods.num_1.totals.107.5.max',\n", " 'periods.num_1.totals.108.0.points',\n", " 'periods.num_1.totals.108.0.over',\n", " 'periods.num_1.totals.108.0.under',\n", " 'periods.num_1.totals.108.0.max',\n", " 'periods.num_1.totals.108.5.points',\n", " 'periods.num_1.totals.108.5.over',\n", " 'periods.num_1.totals.108.5.under',\n", " 'periods.num_1.totals.108.5.max',\n", " 'periods.num_1.totals.109.5.points',\n", " 'periods.num_1.totals.109.5.over',\n", " 'periods.num_1.totals.109.5.under',\n", " 'periods.num_1.totals.109.5.max',\n", " 'periods.num_1.totals.110.0.points',\n", " 'periods.num_1.totals.110.0.over',\n", " 'periods.num_1.totals.110.0.under',\n", " 'periods.num_1.totals.110.0.max',\n", " 'periods.num_1.totals.110.5.points',\n", " 'periods.num_1.totals.110.5.over',\n", " 'periods.num_1.totals.110.5.under',\n", " 'periods.num_1.totals.110.5.max',\n", " 'periods.num_1.totals.111.0.points',\n", " 'periods.num_1.totals.111.0.over',\n", " 'periods.num_1.totals.111.0.under',\n", " 'periods.num_1.totals.111.0.max',\n", " 'periods.num_1.team_total.home.points',\n", " 'periods.num_1.team_total.home.over',\n", " 'periods.num_1.team_total.home.under',\n", " 'periods.num_1.team_total.away.points',\n", " 'periods.num_1.team_total.away.over',\n", " 'periods.num_1.team_total.away.under',\n", " 'periods.num_1.meta.number',\n", " 'periods.num_1.meta.max_spread',\n", " 'periods.num_1.meta.max_money_line',\n", " 'periods.num_1.meta.max_total',\n", " 'periods.num_1.meta.max_team_total',\n", " 'periods.num_3.line_id',\n", " 'periods.num_3.number',\n", " 'periods.num_3.cutoff',\n", " 'periods.num_3.period_status',\n", " 'periods.num_3.money_line.home',\n", " 'periods.num_3.money_line.draw',\n", " 'periods.num_3.money_line.away',\n", " 'periods.num_3.spreads.-3.0.hdp',\n", " 'periods.num_3.spreads.-3.0.home',\n", " 'periods.num_3.spreads.-3.0.away',\n", " 'periods.num_3.spreads.-3.0.max',\n", " 'periods.num_3.spreads.-1.0.hdp',\n", " 'periods.num_3.spreads.-1.0.home',\n", " 'periods.num_3.spreads.-1.0.away',\n", " 'periods.num_3.spreads.-1.0.max',\n", " 'periods.num_3.spreads.-1.5.hdp',\n", " 'periods.num_3.spreads.-1.5.home',\n", " 'periods.num_3.spreads.-1.5.away',\n", " 'periods.num_3.spreads.-1.5.max',\n", " 'periods.num_3.spreads.-2.0.hdp',\n", " 'periods.num_3.spreads.-2.0.home',\n", " 'periods.num_3.spreads.-2.0.away',\n", " 'periods.num_3.spreads.-2.0.max',\n", " 'periods.num_3.spreads.-2.5.hdp',\n", " 'periods.num_3.spreads.-2.5.home',\n", " 'periods.num_3.spreads.-2.5.away',\n", " 'periods.num_3.spreads.-2.5.max',\n", " 'periods.num_3.spreads.-3.5.hdp',\n", " 'periods.num_3.spreads.-3.5.home',\n", " 'periods.num_3.spreads.-3.5.away',\n", " 'periods.num_3.spreads.-3.5.max',\n", " 'periods.num_3.spreads.-4.0.hdp',\n", " 'periods.num_3.spreads.-4.0.home',\n", " 'periods.num_3.spreads.-4.0.away',\n", " 'periods.num_3.spreads.-4.0.max',\n", " 'periods.num_3.spreads.-4.5.hdp',\n", " 'periods.num_3.spreads.-4.5.home',\n", " 'periods.num_3.spreads.-4.5.away',\n", " 'periods.num_3.spreads.-4.5.max',\n", " 'periods.num_3.spreads.-5.0.hdp',\n", " 'periods.num_3.spreads.-5.0.home',\n", " 'periods.num_3.spreads.-5.0.away',\n", " 'periods.num_3.spreads.-5.0.max',\n", " 'periods.num_3.totals.55.0.points',\n", " 'periods.num_3.totals.55.0.over',\n", " 'periods.num_3.totals.55.0.under',\n", " 'periods.num_3.totals.55.0.max',\n", " 'periods.num_3.totals.53.0.points',\n", " 'periods.num_3.totals.53.0.over',\n", " 'periods.num_3.totals.53.0.under',\n", " 'periods.num_3.totals.53.0.max',\n", " 'periods.num_3.totals.53.5.points',\n", " 'periods.num_3.totals.53.5.over',\n", " 'periods.num_3.totals.53.5.under',\n", " 'periods.num_3.totals.53.5.max',\n", " 'periods.num_3.totals.54.0.points',\n", " 'periods.num_3.totals.54.0.over',\n", " 'periods.num_3.totals.54.0.under',\n", " 'periods.num_3.totals.54.0.max',\n", " 'periods.num_3.totals.54.5.points',\n", " 'periods.num_3.totals.54.5.over',\n", " 'periods.num_3.totals.54.5.under',\n", " 'periods.num_3.totals.54.5.max',\n", " 'periods.num_3.totals.55.5.points',\n", " 'periods.num_3.totals.55.5.over',\n", " 'periods.num_3.totals.55.5.under',\n", " 'periods.num_3.totals.55.5.max',\n", " 'periods.num_3.totals.56.0.points',\n", " 'periods.num_3.totals.56.0.over',\n", " 'periods.num_3.totals.56.0.under',\n", " 'periods.num_3.totals.56.0.max',\n", " 'periods.num_3.totals.56.5.points',\n", " 'periods.num_3.totals.56.5.over',\n", " 'periods.num_3.totals.56.5.under',\n", " 'periods.num_3.totals.56.5.max',\n", " 'periods.num_3.totals.57.0.points',\n", " 'periods.num_3.totals.57.0.over',\n", " 'periods.num_3.totals.57.0.under',\n", " 'periods.num_3.totals.57.0.max',\n", " 'periods.num_3.team_total.home.points',\n", " 'periods.num_3.team_total.home.over',\n", " 'periods.num_3.team_total.home.under',\n", " 'periods.num_3.team_total.away.points',\n", " 'periods.num_3.team_total.away.over',\n", " 'periods.num_3.team_total.away.under',\n", " 'periods.num_3.meta.number',\n", " 'periods.num_3.meta.max_spread',\n", " 'periods.num_3.meta.max_money_line',\n", " 'periods.num_3.meta.max_total',\n", " 'periods.num_3.meta.max_team_total',\n", " 'periods.num_4.line_id',\n", " 'periods.num_4.number',\n", " 'periods.num_4.cutoff',\n", " 'periods.num_4.period_status',\n", " 'periods.num_4.money_line.home',\n", " 'periods.num_4.money_line.draw',\n", " 'periods.num_4.money_line.away',\n", " 'periods.num_4.spreads.-2.5.hdp',\n", " 'periods.num_4.spreads.-2.5.home',\n", " 'periods.num_4.spreads.-2.5.away',\n", " 'periods.num_4.spreads.-2.5.max',\n", " 'periods.num_4.spreads.-0.5.hdp',\n", " 'periods.num_4.spreads.-0.5.home',\n", " 'periods.num_4.spreads.-0.5.away',\n", " 'periods.num_4.spreads.-0.5.max',\n", " 'periods.num_4.spreads.-1.0.hdp',\n", " 'periods.num_4.spreads.-1.0.home',\n", " 'periods.num_4.spreads.-1.0.away',\n", " 'periods.num_4.spreads.-1.0.max',\n", " 'periods.num_4.spreads.-1.5.hdp',\n", " 'periods.num_4.spreads.-1.5.home',\n", " 'periods.num_4.spreads.-1.5.away',\n", " 'periods.num_4.spreads.-1.5.max',\n", " 'periods.num_4.spreads.-2.0.hdp',\n", " 'periods.num_4.spreads.-2.0.home',\n", " 'periods.num_4.spreads.-2.0.away',\n", " 'periods.num_4.spreads.-2.0.max',\n", " 'periods.num_4.spreads.-3.0.hdp',\n", " 'periods.num_4.spreads.-3.0.home',\n", " 'periods.num_4.spreads.-3.0.away',\n", " 'periods.num_4.spreads.-3.0.max',\n", " 'periods.num_4.spreads.-3.5.hdp',\n", " 'periods.num_4.spreads.-3.5.home',\n", " 'periods.num_4.spreads.-3.5.away',\n", " 'periods.num_4.spreads.-3.5.max',\n", " 'periods.num_4.spreads.-4.0.hdp',\n", " 'periods.num_4.spreads.-4.0.home',\n", " 'periods.num_4.spreads.-4.0.away',\n", " 'periods.num_4.spreads.-4.0.max',\n", " 'periods.num_4.spreads.-4.5.hdp',\n", " 'periods.num_4.spreads.-4.5.home',\n", " 'periods.num_4.spreads.-4.5.away',\n", " 'periods.num_4.spreads.-4.5.max',\n", " 'periods.num_4.totals.54.5.points',\n", " 'periods.num_4.totals.54.5.over',\n", " 'periods.num_4.totals.54.5.under',\n", " 'periods.num_4.totals.54.5.max',\n", " 'periods.num_4.totals.52.5.points',\n", " 'periods.num_4.totals.52.5.over',\n", " 'periods.num_4.totals.52.5.under',\n", " 'periods.num_4.totals.52.5.max',\n", " 'periods.num_4.totals.53.0.points',\n", " 'periods.num_4.totals.53.0.over',\n", " 'periods.num_4.totals.53.0.under',\n", " 'periods.num_4.totals.53.0.max',\n", " 'periods.num_4.totals.53.5.points',\n", " 'periods.num_4.totals.53.5.over',\n", " 'periods.num_4.totals.53.5.under',\n", " 'periods.num_4.totals.53.5.max',\n", " 'periods.num_4.totals.54.0.points',\n", " 'periods.num_4.totals.54.0.over',\n", " 'periods.num_4.totals.54.0.under',\n", " 'periods.num_4.totals.54.0.max',\n", " 'periods.num_4.totals.55.0.points',\n", " 'periods.num_4.totals.55.0.over',\n", " 'periods.num_4.totals.55.0.under',\n", " 'periods.num_4.totals.55.0.max',\n", " 'periods.num_4.totals.55.5.points',\n", " 'periods.num_4.totals.55.5.over',\n", " 'periods.num_4.totals.55.5.under',\n", " 'periods.num_4.totals.55.5.max',\n", " 'periods.num_4.totals.56.0.points',\n", " 'periods.num_4.totals.56.0.over',\n", " 'periods.num_4.totals.56.0.under',\n", " 'periods.num_4.totals.56.0.max',\n", " 'periods.num_4.totals.56.5.points',\n", " 'periods.num_4.totals.56.5.over',\n", " 'periods.num_4.totals.56.5.under',\n", " 'periods.num_4.totals.56.5.max',\n", " 'periods.num_4.team_total.home.points',\n", " 'periods.num_4.team_total.home.over',\n", " 'periods.num_4.team_total.home.under',\n", " 'periods.num_4.team_total.away.points',\n", " 'periods.num_4.team_total.away.over',\n", " 'periods.num_4.team_total.away.under',\n", " 'periods.num_4.meta.number',\n", " 'periods.num_4.meta.max_spread',\n", " 'periods.num_4.meta.max_money_line',\n", " 'periods.num_4.meta.max_total',\n", " 'periods.num_4.meta.max_team_total',\n", " 'periods.num_0.spreads.-1.0.hdp',\n", " 'periods.num_0.spreads.-1.0.home',\n", " 'periods.num_0.spreads.-1.0.away',\n", " 'periods.num_0.spreads.-1.0.max',\n", " 'periods.num_0.spreads.3.0.hdp',\n", " 'periods.num_0.spreads.3.0.home',\n", " 'periods.num_0.spreads.3.0.away',\n", " 'periods.num_0.spreads.3.0.max',\n", " 'periods.num_0.spreads.2.5.hdp',\n", " 'periods.num_0.spreads.2.5.home',\n", " 'periods.num_0.spreads.2.5.away',\n", " 'periods.num_0.spreads.2.5.max',\n", " 'periods.num_0.spreads.2.0.hdp',\n", " 'periods.num_0.spreads.2.0.home',\n", " 'periods.num_0.spreads.2.0.away',\n", " 'periods.num_0.spreads.2.0.max',\n", " 'periods.num_0.spreads.1.5.hdp',\n", " 'periods.num_0.spreads.1.5.home',\n", " 'periods.num_0.spreads.1.5.away',\n", " 'periods.num_0.spreads.1.5.max',\n", " 'periods.num_0.spreads.1.0.hdp',\n", " 'periods.num_0.spreads.1.0.home',\n", " 'periods.num_0.spreads.1.0.away',\n", " 'periods.num_0.spreads.1.0.max',\n", " 'periods.num_0.spreads.-1.5.hdp',\n", " 'periods.num_0.spreads.-1.5.home',\n", " 'periods.num_0.spreads.-1.5.away',\n", " 'periods.num_0.spreads.-1.5.max',\n", " 'periods.num_0.spreads.-2.0.hdp',\n", " 'periods.num_0.spreads.-2.0.home',\n", " 'periods.num_0.spreads.-2.0.away',\n", " 'periods.num_0.spreads.-2.0.max',\n", " 'periods.num_0.spreads.-2.5.hdp',\n", " 'periods.num_0.spreads.-2.5.home',\n", " 'periods.num_0.spreads.-2.5.away',\n", " 'periods.num_0.spreads.-2.5.max',\n", " 'periods.num_0.spreads.-3.0.hdp',\n", " 'periods.num_0.spreads.-3.0.home',\n", " 'periods.num_0.spreads.-3.0.away',\n", " 'periods.num_0.spreads.-3.0.max',\n", " 'periods.num_0.spreads.-3.5.hdp',\n", " 'periods.num_0.spreads.-3.5.home',\n", " 'periods.num_0.spreads.-3.5.away',\n", " 'periods.num_0.spreads.-3.5.max',\n", " 'periods.num_0.totals.237.5.points',\n", " 'periods.num_0.totals.237.5.over',\n", " 'periods.num_0.totals.237.5.under',\n", " 'periods.num_0.totals.237.5.max',\n", " 'periods.num_0.totals.235.0.points',\n", " 'periods.num_0.totals.235.0.over',\n", " 'periods.num_0.totals.235.0.under',\n", " 'periods.num_0.totals.235.0.max',\n", " 'periods.num_0.totals.235.5.points',\n", " 'periods.num_0.totals.235.5.over',\n", " 'periods.num_0.totals.235.5.under',\n", " 'periods.num_0.totals.235.5.max',\n", " 'periods.num_0.totals.236.0.points',\n", " 'periods.num_0.totals.236.0.over',\n", " 'periods.num_0.totals.236.0.under',\n", " 'periods.num_0.totals.236.0.max',\n", " 'periods.num_0.totals.236.5.points',\n", " 'periods.num_0.totals.236.5.over',\n", " 'periods.num_0.totals.236.5.under',\n", " 'periods.num_0.totals.236.5.max',\n", " 'periods.num_0.totals.237.0.points',\n", " 'periods.num_0.totals.237.0.over',\n", " 'periods.num_0.totals.237.0.under',\n", " 'periods.num_0.totals.237.0.max',\n", " 'periods.num_0.totals.238.0.points',\n", " 'periods.num_0.totals.238.0.over',\n", " 'periods.num_0.totals.238.0.under',\n", " 'periods.num_0.totals.238.0.max',\n", " 'periods.num_0.totals.238.5.points',\n", " 'periods.num_0.totals.238.5.over',\n", " 'periods.num_0.totals.238.5.under',\n", " 'periods.num_0.totals.238.5.max',\n", " 'periods.num_0.totals.239.0.points',\n", " 'periods.num_0.totals.239.0.over',\n", " 'periods.num_0.totals.239.0.under',\n", " 'periods.num_0.totals.239.0.max',\n", " 'periods.num_0.totals.239.5.points',\n", " 'periods.num_0.totals.239.5.over',\n", " 'periods.num_0.totals.239.5.under',\n", " 'periods.num_0.totals.239.5.max',\n", " 'periods.num_0.totals.240.0.points',\n", " 'periods.num_0.totals.240.0.over',\n", " 'periods.num_0.totals.240.0.under',\n", " 'periods.num_0.totals.240.0.max',\n", " 'periods.num_1.spreads.-0.5.hdp',\n", " 'periods.num_1.spreads.-0.5.home',\n", " 'periods.num_1.spreads.-0.5.away',\n", " 'periods.num_1.spreads.-0.5.max',\n", " 'periods.num_1.spreads.2.0.hdp',\n", " 'periods.num_1.spreads.2.0.home',\n", " 'periods.num_1.spreads.2.0.away',\n", " 'periods.num_1.spreads.2.0.max',\n", " 'periods.num_1.spreads.1.5.hdp',\n", " 'periods.num_1.spreads.1.5.home',\n", " 'periods.num_1.spreads.1.5.away',\n", " 'periods.num_1.spreads.1.5.max',\n", " 'periods.num_1.spreads.1.0.hdp',\n", " 'periods.num_1.spreads.1.0.home',\n", " 'periods.num_1.spreads.1.0.away',\n", " 'periods.num_1.spreads.1.0.max',\n", " 'periods.num_1.spreads.0.5.hdp',\n", " 'periods.num_1.spreads.0.5.home',\n", " 'periods.num_1.spreads.0.5.away',\n", " 'periods.num_1.spreads.0.5.max',\n", " 'periods.num_1.spreads.-1.0.hdp',\n", " 'periods.num_1.spreads.-1.0.home',\n", " 'periods.num_1.spreads.-1.0.away',\n", " 'periods.num_1.spreads.-1.0.max',\n", " 'periods.num_1.spreads.-1.5.hdp',\n", " 'periods.num_1.spreads.-1.5.home',\n", " 'periods.num_1.spreads.-1.5.away',\n", " 'periods.num_1.spreads.-1.5.max',\n", " 'periods.num_1.spreads.-2.0.hdp',\n", " 'periods.num_1.spreads.-2.0.home',\n", " 'periods.num_1.spreads.-2.0.away',\n", " 'periods.num_1.spreads.-2.0.max',\n", " 'periods.num_1.spreads.-2.5.hdp',\n", " 'periods.num_1.spreads.-2.5.home',\n", " 'periods.num_1.spreads.-2.5.away',\n", " 'periods.num_1.spreads.-2.5.max',\n", " 'periods.num_1.totals.117.5.points',\n", " 'periods.num_1.totals.117.5.over',\n", " 'periods.num_1.totals.117.5.under',\n", " 'periods.num_1.totals.117.5.max',\n", " 'periods.num_1.totals.115.5.points',\n", " 'periods.num_1.totals.115.5.over',\n", " 'periods.num_1.totals.115.5.under',\n", " 'periods.num_1.totals.115.5.max',\n", " 'periods.num_1.totals.116.0.points',\n", " 'periods.num_1.totals.116.0.over',\n", " 'periods.num_1.totals.116.0.under',\n", " 'periods.num_1.totals.116.0.max',\n", " 'periods.num_1.totals.116.5.points',\n", " 'periods.num_1.totals.116.5.over',\n", " 'periods.num_1.totals.116.5.under',\n", " 'periods.num_1.totals.116.5.max',\n", " 'periods.num_1.totals.117.0.points',\n", " 'periods.num_1.totals.117.0.over',\n", " 'periods.num_1.totals.117.0.under',\n", " 'periods.num_1.totals.117.0.max',\n", " 'periods.num_1.totals.118.0.points',\n", " 'periods.num_1.totals.118.0.over',\n", " 'periods.num_1.totals.118.0.under',\n", " 'periods.num_1.totals.118.0.max',\n", " 'periods.num_1.totals.118.5.points',\n", " 'periods.num_1.totals.118.5.over',\n", " 'periods.num_1.totals.118.5.under',\n", " 'periods.num_1.totals.118.5.max',\n", " 'periods.num_1.totals.119.0.points',\n", " 'periods.num_1.totals.119.0.over',\n", " 'periods.num_1.totals.119.0.under',\n", " 'periods.num_1.totals.119.0.max',\n", " 'periods.num_1.totals.119.5.points',\n", " 'periods.num_1.totals.119.5.over',\n", " 'periods.num_1.totals.119.5.under',\n", " 'periods.num_1.totals.119.5.max',\n", " 'periods.num_3.spreads.-0.5.hdp',\n", " 'periods.num_3.spreads.-0.5.home',\n", " 'periods.num_3.spreads.-0.5.away',\n", " 'periods.num_3.spreads.-0.5.max',\n", " 'periods.num_3.spreads.2.0.hdp',\n", " 'periods.num_3.spreads.2.0.home',\n", " 'periods.num_3.spreads.2.0.away',\n", " 'periods.num_3.spreads.2.0.max',\n", " 'periods.num_3.spreads.1.5.hdp',\n", " 'periods.num_3.spreads.1.5.home',\n", " 'periods.num_3.spreads.1.5.away',\n", " 'periods.num_3.spreads.1.5.max',\n", " 'periods.num_3.spreads.1.0.hdp',\n", " 'periods.num_3.spreads.1.0.home',\n", " 'periods.num_3.spreads.1.0.away',\n", " 'periods.num_3.spreads.1.0.max',\n", " 'periods.num_3.spreads.0.5.hdp',\n", " 'periods.num_3.spreads.0.5.home',\n", " 'periods.num_3.spreads.0.5.away',\n", " 'periods.num_3.spreads.0.5.max',\n", " 'periods.num_3.totals.58.5.points',\n", " 'periods.num_3.totals.58.5.over',\n", " 'periods.num_3.totals.58.5.under',\n", " 'periods.num_3.totals.58.5.max',\n", " 'periods.num_3.totals.57.5.points',\n", " 'periods.num_3.totals.57.5.over',\n", " 'periods.num_3.totals.57.5.under',\n", " 'periods.num_3.totals.57.5.max',\n", " 'periods.num_3.totals.58.0.points',\n", " 'periods.num_3.totals.58.0.over',\n", " 'periods.num_3.totals.58.0.under',\n", " 'periods.num_3.totals.58.0.max',\n", " 'periods.num_3.totals.59.0.points',\n", " 'periods.num_3.totals.59.0.over',\n", " 'periods.num_3.totals.59.0.under',\n", " 'periods.num_3.totals.59.0.max',\n", " 'periods.num_3.totals.59.5.points',\n", " 'periods.num_3.totals.59.5.over',\n", " 'periods.num_3.totals.59.5.under',\n", " 'periods.num_3.totals.59.5.max',\n", " 'periods.num_3.totals.60.0.points',\n", " 'periods.num_3.totals.60.0.over',\n", " 'periods.num_3.totals.60.0.under',\n", " 'periods.num_3.totals.60.0.max',\n", " 'periods.num_3.totals.60.5.points',\n", " 'periods.num_3.totals.60.5.over',\n", " 'periods.num_3.totals.60.5.under',\n", " 'periods.num_3.totals.60.5.max',\n", " 'periods.num_4.spreads.2.0.hdp',\n", " 'periods.num_4.spreads.2.0.home',\n", " 'periods.num_4.spreads.2.0.away',\n", " 'periods.num_4.spreads.2.0.max',\n", " 'periods.num_4.spreads.1.5.hdp',\n", " 'periods.num_4.spreads.1.5.home',\n", " 'periods.num_4.spreads.1.5.away',\n", " 'periods.num_4.spreads.1.5.max',\n", " 'periods.num_4.spreads.1.0.hdp',\n", " 'periods.num_4.spreads.1.0.home',\n", " 'periods.num_4.spreads.1.0.away',\n", " 'periods.num_4.spreads.1.0.max',\n", " 'periods.num_4.spreads.0.5.hdp',\n", " 'periods.num_4.spreads.0.5.home',\n", " 'periods.num_4.spreads.0.5.away',\n", " 'periods.num_4.spreads.0.5.max',\n", " 'periods.num_4.totals.58.5.points',\n", " 'periods.num_4.totals.58.5.over',\n", " 'periods.num_4.totals.58.5.under',\n", " 'periods.num_4.totals.58.5.max',\n", " 'periods.num_4.totals.57.0.points',\n", " 'periods.num_4.totals.57.0.over',\n", " 'periods.num_4.totals.57.0.under',\n", " 'periods.num_4.totals.57.0.max',\n", " 'periods.num_4.totals.57.5.points',\n", " 'periods.num_4.totals.57.5.over',\n", " 'periods.num_4.totals.57.5.under',\n", " 'periods.num_4.totals.57.5.max',\n", " 'periods.num_4.totals.58.0.points',\n", " 'periods.num_4.totals.58.0.over',\n", " 'periods.num_4.totals.58.0.under',\n", " 'periods.num_4.totals.58.0.max',\n", " 'periods.num_4.totals.59.0.points',\n", " 'periods.num_4.totals.59.0.over',\n", " 'periods.num_4.totals.59.0.under',\n", " 'periods.num_4.totals.59.0.max',\n", " 'periods.num_4.totals.59.5.points',\n", " 'periods.num_4.totals.59.5.over',\n", " 'periods.num_4.totals.59.5.under',\n", " 'periods.num_4.totals.59.5.max',\n", " 'periods.num_4.totals.60.0.points',\n", " 'periods.num_4.totals.60.0.over',\n", " 'periods.num_4.totals.60.0.under',\n", " 'periods.num_4.totals.60.0.max',\n", " 'periods.num_4.totals.60.5.points',\n", " 'periods.num_4.totals.60.5.over',\n", " 'periods.num_4.totals.60.5.under',\n", " 'periods.num_4.totals.60.5.max',\n", " 'periods.num_0.spreads.-5.0.hdp',\n", " 'periods.num_0.spreads.-5.0.home',\n", " 'periods.num_0.spreads.-5.0.away',\n", " 'periods.num_0.spreads.-5.0.max',\n", " 'periods.num_0.spreads.-5.5.hdp',\n", " 'periods.num_0.spreads.-5.5.home',\n", " 'periods.num_0.spreads.-5.5.away',\n", " 'periods.num_0.spreads.-5.5.max',\n", " 'periods.num_0.totals.226.0.points',\n", " 'periods.num_0.totals.226.0.over',\n", " 'periods.num_0.totals.226.0.under',\n", " 'periods.num_0.totals.226.0.max',\n", " 'periods.num_0.totals.223.5.points',\n", " 'periods.num_0.totals.223.5.over',\n", " 'periods.num_0.totals.223.5.under',\n", " 'periods.num_0.totals.223.5.max',\n", " 'periods.num_0.totals.224.0.points',\n", " 'periods.num_0.totals.224.0.over',\n", " 'periods.num_0.totals.224.0.under',\n", " 'periods.num_0.totals.224.0.max',\n", " 'periods.num_0.totals.224.5.points',\n", " 'periods.num_0.totals.224.5.over',\n", " 'periods.num_0.totals.224.5.under',\n", " 'periods.num_0.totals.224.5.max',\n", " 'periods.num_0.totals.225.0.points',\n", " 'periods.num_0.totals.225.0.over',\n", " 'periods.num_0.totals.225.0.under',\n", " 'periods.num_0.totals.225.0.max',\n", " 'periods.num_0.totals.225.5.points',\n", " 'periods.num_0.totals.225.5.over',\n", " 'periods.num_0.totals.225.5.under',\n", " 'periods.num_0.totals.225.5.max',\n", " 'periods.num_0.totals.226.5.points',\n", " 'periods.num_0.totals.226.5.over',\n", " 'periods.num_0.totals.226.5.under',\n", " 'periods.num_0.totals.226.5.max',\n", " 'periods.num_0.totals.227.0.points',\n", " 'periods.num_0.totals.227.0.over',\n", " 'periods.num_0.totals.227.0.under',\n", " 'periods.num_0.totals.227.0.max',\n", " 'periods.num_0.totals.227.5.points',\n", " 'periods.num_0.totals.227.5.over',\n", " 'periods.num_0.totals.227.5.under',\n", " 'periods.num_0.totals.227.5.max',\n", " 'periods.num_0.totals.228.0.points',\n", " 'periods.num_0.totals.228.0.over',\n", " 'periods.num_0.totals.228.0.under',\n", " 'periods.num_0.totals.228.0.max',\n", " 'periods.num_0.totals.228.5.points',\n", " 'periods.num_0.totals.228.5.over',\n", " 'periods.num_0.totals.228.5.under',\n", " 'periods.num_0.totals.228.5.max',\n", " 'periods.num_1.totals.111.5.points',\n", " 'periods.num_1.totals.111.5.over',\n", " 'periods.num_1.totals.111.5.under',\n", " 'periods.num_1.totals.111.5.max',\n", " 'periods.num_1.totals.112.0.points',\n", " 'periods.num_1.totals.112.0.over',\n", " 'periods.num_1.totals.112.0.under',\n", " 'periods.num_1.totals.112.0.max',\n", " 'periods.num_1.totals.112.5.points',\n", " 'periods.num_1.totals.112.5.over',\n", " 'periods.num_1.totals.112.5.under',\n", " 'periods.num_1.totals.112.5.max',\n", " 'periods.num_0.spreads.-4.0.hdp',\n", " 'periods.num_0.spreads.-4.0.home',\n", " 'periods.num_0.spreads.-4.0.away',\n", " 'periods.num_0.spreads.-4.0.max',\n", " 'periods.num_0.spreads.-4.5.hdp',\n", " 'periods.num_0.spreads.-4.5.home',\n", " 'periods.num_0.spreads.-4.5.away',\n", " 'periods.num_0.spreads.-4.5.max',\n", " 'periods.num_0.totals.217.0.points',\n", " 'periods.num_0.totals.217.0.over',\n", " 'periods.num_0.totals.217.0.under',\n", " 'periods.num_0.totals.217.0.max',\n", " 'periods.num_0.totals.216.5.points',\n", " 'periods.num_0.totals.216.5.over',\n", " 'periods.num_0.totals.216.5.under',\n", " 'periods.num_0.totals.216.5.max',\n", " 'periods.num_0.totals.217.5.points',\n", " 'periods.num_0.totals.217.5.over',\n", " 'periods.num_0.totals.217.5.under',\n", " 'periods.num_0.totals.217.5.max',\n", " 'periods.num_0.totals.218.0.points',\n", " 'periods.num_0.totals.218.0.over',\n", " 'periods.num_0.totals.218.0.under',\n", " 'periods.num_0.totals.218.0.max',\n", " 'periods.num_0.totals.218.5.points',\n", " 'periods.num_0.totals.218.5.over',\n", " 'periods.num_0.totals.218.5.under',\n", " 'periods.num_0.totals.218.5.max',\n", " 'periods.num_0.totals.219.0.points',\n", " 'periods.num_0.totals.219.0.over',\n", " 'periods.num_0.totals.219.0.under',\n", " 'periods.num_0.totals.219.0.max',\n", " 'periods.num_0.totals.219.5.points',\n", " 'periods.num_0.totals.219.5.over',\n", " 'periods.num_0.totals.219.5.under',\n", " 'periods.num_0.totals.219.5.max',\n", " 'periods.num_1.totals.113.0.points',\n", " 'periods.num_1.totals.113.0.over',\n", " 'periods.num_1.totals.113.0.under',\n", " 'periods.num_1.totals.113.0.max',\n", " 'periods.num_0.spreads.-11.5.hdp',\n", " 'periods.num_0.spreads.-11.5.home',\n", " 'periods.num_0.spreads.-11.5.away',\n", " 'periods.num_0.spreads.-11.5.max',\n", " 'periods.num_0.spreads.-12.0.hdp',\n", " 'periods.num_0.spreads.-12.0.home',\n", " 'periods.num_0.spreads.-12.0.away',\n", " 'periods.num_0.spreads.-12.0.max',\n", " 'periods.num_0.totals.231.0.points',\n", " 'periods.num_0.totals.231.0.over',\n", " 'periods.num_0.totals.231.0.under',\n", " 'periods.num_0.totals.231.0.max',\n", " 'periods.num_0.totals.229.0.points',\n", " 'periods.num_0.totals.229.0.over',\n", " 'periods.num_0.totals.229.0.under',\n", " 'periods.num_0.totals.229.0.max',\n", " 'periods.num_0.totals.229.5.points',\n", " 'periods.num_0.totals.229.5.over',\n", " 'periods.num_0.totals.229.5.under',\n", " 'periods.num_0.totals.229.5.max',\n", " 'periods.num_0.totals.230.0.points',\n", " 'periods.num_0.totals.230.0.over',\n", " 'periods.num_0.totals.230.0.under',\n", " 'periods.num_0.totals.230.0.max',\n", " 'periods.num_0.totals.230.5.points',\n", " 'periods.num_0.totals.230.5.over',\n", " 'periods.num_0.totals.230.5.under',\n", " 'periods.num_0.totals.230.5.max',\n", " 'periods.num_0.totals.231.5.points',\n", " 'periods.num_0.totals.231.5.over',\n", " 'periods.num_0.totals.231.5.under',\n", " 'periods.num_0.totals.231.5.max',\n", " 'periods.num_0.totals.232.0.points',\n", " 'periods.num_0.totals.232.0.over',\n", " 'periods.num_0.totals.232.0.under',\n", " 'periods.num_0.totals.232.0.max',\n", " 'periods.num_0.totals.232.5.points',\n", " 'periods.num_0.totals.232.5.over',\n", " 'periods.num_0.totals.232.5.under',\n", " 'periods.num_0.totals.232.5.max',\n", " 'periods.num_0.totals.233.0.points',\n", " 'periods.num_0.totals.233.0.over',\n", " 'periods.num_0.totals.233.0.under',\n", " 'periods.num_0.totals.233.0.max',\n", " 'periods.num_0.totals.233.5.points',\n", " 'periods.num_0.totals.233.5.over',\n", " 'periods.num_0.totals.233.5.under',\n", " 'periods.num_0.totals.233.5.max',\n", " 'periods.num_1.totals.120.0.points',\n", " 'periods.num_1.totals.120.0.over',\n", " 'periods.num_1.totals.120.0.under',\n", " 'periods.num_1.totals.120.0.max',\n", " 'periods.num_3.totals.61.0.points',\n", " 'periods.num_3.totals.61.0.over',\n", " 'periods.num_3.totals.61.0.under',\n", " 'periods.num_3.totals.61.0.max',\n", " 'periods.num_1.totals.115.0.points',\n", " 'periods.num_1.totals.115.0.over',\n", " 'periods.num_1.totals.115.0.under',\n", " 'periods.num_1.totals.115.0.max',\n", " 'periods.num_0.totals.220.0.points',\n", " 'periods.num_0.totals.220.0.over',\n", " 'periods.num_0.totals.220.0.under',\n", " 'periods.num_0.totals.220.0.max',\n", " 'periods.num_0.totals.220.5.points',\n", " 'periods.num_0.totals.220.5.over',\n", " 'periods.num_0.totals.220.5.under',\n", " 'periods.num_0.totals.220.5.max',\n", " 'periods.num_0.totals.221.0.points',\n", " 'periods.num_0.totals.221.0.over',\n", " 'periods.num_0.totals.221.0.under',\n", " 'periods.num_0.totals.221.0.max',\n", " 'periods.num_0.totals.221.5.points',\n", " 'periods.num_0.totals.221.5.over',\n", " 'periods.num_0.totals.221.5.under',\n", " 'periods.num_0.totals.221.5.max',\n", " 'periods.num_1.spreads.-7.5.hdp',\n", " 'periods.num_1.spreads.-7.5.home',\n", " 'periods.num_1.spreads.-7.5.away',\n", " 'periods.num_1.spreads.-7.5.max',\n", " 'periods.num_1.totals.113.5.points',\n", " 'periods.num_1.totals.113.5.over',\n", " 'periods.num_1.totals.113.5.under',\n", " 'periods.num_1.totals.113.5.max',\n", " 'periods.num_1.totals.114.0.points',\n", " 'periods.num_1.totals.114.0.over',\n", " 'periods.num_1.totals.114.0.under',\n", " 'periods.num_1.totals.114.0.max',\n", " 'periods.num_1.totals.114.5.points',\n", " 'periods.num_1.totals.114.5.over',\n", " 'periods.num_1.totals.114.5.under',\n", " 'periods.num_1.totals.114.5.max',\n", " 'periods.num_3.spreads.-5.5.hdp',\n", " 'periods.num_3.spreads.-5.5.home',\n", " 'periods.num_3.spreads.-5.5.away',\n", " 'periods.num_3.spreads.-5.5.max',\n", " 'periods.num_0.totals.222.0.points',\n", " 'periods.num_0.totals.222.0.over',\n", " 'periods.num_0.totals.222.0.under',\n", " 'periods.num_0.totals.222.0.max',\n", " 'periods.num_0.totals.222.5.points',\n", " 'periods.num_0.totals.222.5.over',\n", " 'periods.num_0.totals.222.5.under',\n", " 'periods.num_0.totals.222.5.max',\n", " 'periods.num_0.totals.223.0.points',\n", " 'periods.num_0.totals.223.0.over',\n", " 'periods.num_0.totals.223.0.under',\n", " 'periods.num_0.totals.223.0.max']" ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(current_df_events)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "That's a lot of columns! Do you see what it did? When I flattened the file, it worked its way through the dictionary and key values. So, periods to num_0 to totals to the various over/under values, etc. It then combined those permutations to create new columns, where each value is separated by a period. Then value at the end of the chain is what goes into the DataFrame. \n", "\n", "That's a quick introduction to Rapid API and dealing with its JSON output. Every API is different - you'll have to play around." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Data on Kaggle\n", "\n", "[Kaggle](https://www.kaggle.com) is also a great source for data. You can search their [data sets here](https://www.kaggle.com/datasets).\n", "\n", "Searching for finance, I see one on [consumer finance complaints](https://www.kaggle.com/datasets/kaggle/us-consumer-finance-complaints) that looks interesting. The Kaggle page describes the data, gives you a data dictionary, and some examples. \n", "\n", "The data for Kaggle contests is usually pretty clean already. That said, you'll usually have to do at least some work to get it ready to look at.\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "base", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.13" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "40d3a090f54c6569ab1632332b64b2c03c39dcf918b08424e98f38b5ae0af88f" } } }, "nbformat": 4, "nbformat_minor": 2 }