{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6389d088",
   "metadata": {},
   "source": [
    "# LMP Pricing Data\n",
    "\n",
    "## Support\n",
    "\n",
    "Below are the currently support LMP markets\n",
    "\n",
    "<!-- LMP AVAILABILITY TABLE START -->\n",
    "|                                       | Markets                                                    |\n",
    "|:--------------------------------------|:-----------------------------------------------------------|\n",
    "| Midcontinent ISO                      | `REAL_TIME_5_MIN`, `DAY_AHEAD_HOURLY`                      |\n",
    "| California ISO                        | `REAL_TIME_15_MIN`, `REAL_TIME_HOURLY`, `DAY_AHEAD_HOURLY` |\n",
    "| PJM                                   | `REAL_TIME_5_MIN`, `REAL_TIME_HOURLY`, `DAY_AHEAD_HOURLY`  |\n",
    "| Electric Reliability Council of Texas |                                                            |\n",
    "| Southwest Power Pool                  |                                                            |\n",
    "| New York ISO                          | `REAL_TIME_5_MIN`, `DAY_AHEAD_HOURLY`                      |\n",
    "| ISO New England                       | `REAL_TIME_5_MIN`, `REAL_TIME_HOURLY`, `DAY_AHEAD_HOURLY`  |\n",
    "<!-- LMP AVAILABILITY TABLE END -->\n",
    "\n",
    "\n",
    "## How to use\n",
    "\n",
    "We are currently adding Locational Marginal Price (LMP). Even though each BA offers different markets, but you can query them with a standardized API"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "40012847",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Time</th>\n",
       "      <th>Market</th>\n",
       "      <th>Location</th>\n",
       "      <th>Location Type</th>\n",
       "      <th>LMP</th>\n",
       "      <th>Energy</th>\n",
       "      <th>Congestion</th>\n",
       "      <th>Loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2022-10-28 00:05:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>CAPITL</td>\n",
       "      <td>Zone</td>\n",
       "      <td>32.94</td>\n",
       "      <td>31.70</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-10-28 00:05:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>CENTRL</td>\n",
       "      <td>Zone</td>\n",
       "      <td>32.72</td>\n",
       "      <td>31.71</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-10-28 00:05:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>DUNWOD</td>\n",
       "      <td>Zone</td>\n",
       "      <td>33.77</td>\n",
       "      <td>31.71</td>\n",
       "      <td>0.00</td>\n",
       "      <td>2.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-10-28 00:05:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>GENESE</td>\n",
       "      <td>Zone</td>\n",
       "      <td>33.26</td>\n",
       "      <td>31.71</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.55</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-10-28 00:05:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>H Q</td>\n",
       "      <td>Zone</td>\n",
       "      <td>31.23</td>\n",
       "      <td>31.70</td>\n",
       "      <td>0.00</td>\n",
       "      <td>-0.47</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2590</th>\n",
       "      <td>2022-10-28 15:45:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>NORTH</td>\n",
       "      <td>Zone</td>\n",
       "      <td>40.60</td>\n",
       "      <td>40.84</td>\n",
       "      <td>0.00</td>\n",
       "      <td>-0.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2591</th>\n",
       "      <td>2022-10-28 15:45:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>NPX</td>\n",
       "      <td>Zone</td>\n",
       "      <td>41.20</td>\n",
       "      <td>40.84</td>\n",
       "      <td>1.44</td>\n",
       "      <td>1.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2592</th>\n",
       "      <td>2022-10-28 15:45:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>O H</td>\n",
       "      <td>Zone</td>\n",
       "      <td>39.74</td>\n",
       "      <td>40.84</td>\n",
       "      <td>0.00</td>\n",
       "      <td>-1.10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2593</th>\n",
       "      <td>2022-10-28 15:45:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>PJM</td>\n",
       "      <td>Zone</td>\n",
       "      <td>42.61</td>\n",
       "      <td>40.83</td>\n",
       "      <td>-0.14</td>\n",
       "      <td>1.64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2594</th>\n",
       "      <td>2022-10-28 15:45:00-04:00</td>\n",
       "      <td>REAL_TIME_5_MIN</td>\n",
       "      <td>WEST</td>\n",
       "      <td>Zone</td>\n",
       "      <td>40.80</td>\n",
       "      <td>40.84</td>\n",
       "      <td>0.00</td>\n",
       "      <td>-0.04</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2595 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                          Time           Market Location Location Type    LMP  \\\n",
       "0    2022-10-28 00:05:00-04:00  REAL_TIME_5_MIN   CAPITL          Zone  32.94   \n",
       "1    2022-10-28 00:05:00-04:00  REAL_TIME_5_MIN   CENTRL          Zone  32.72   \n",
       "2    2022-10-28 00:05:00-04:00  REAL_TIME_5_MIN   DUNWOD          Zone  33.77   \n",
       "3    2022-10-28 00:05:00-04:00  REAL_TIME_5_MIN   GENESE          Zone  33.26   \n",
       "4    2022-10-28 00:05:00-04:00  REAL_TIME_5_MIN      H Q          Zone  31.23   \n",
       "...                        ...              ...      ...           ...    ...   \n",
       "2590 2022-10-28 15:45:00-04:00  REAL_TIME_5_MIN    NORTH          Zone  40.60   \n",
       "2591 2022-10-28 15:45:00-04:00  REAL_TIME_5_MIN      NPX          Zone  41.20   \n",
       "2592 2022-10-28 15:45:00-04:00  REAL_TIME_5_MIN      O H          Zone  39.74   \n",
       "2593 2022-10-28 15:45:00-04:00  REAL_TIME_5_MIN      PJM          Zone  42.61   \n",
       "2594 2022-10-28 15:45:00-04:00  REAL_TIME_5_MIN     WEST          Zone  40.80   \n",
       "\n",
       "      Energy  Congestion  Loss  \n",
       "0      31.70        0.00  1.24  \n",
       "1      31.71        0.00  1.01  \n",
       "2      31.71        0.00  2.06  \n",
       "3      31.71        0.00  1.55  \n",
       "4      31.70        0.00 -0.47  \n",
       "...      ...         ...   ...  \n",
       "2590   40.84        0.00 -0.24  \n",
       "2591   40.84        1.44  1.80  \n",
       "2592   40.84        0.00 -1.10  \n",
       "2593   40.83       -0.14  1.64  \n",
       "2594   40.84        0.00 -0.04  \n",
       "\n",
       "[2595 rows x 8 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import gridstatus\n",
    "nyiso = gridstatus.NYISO()\n",
    "nyiso.get_lmp(date=\"today\", market=\"REAL_TIME_5_MIN\", locations=\"ALL\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75c2f6af",
   "metadata": {},
   "source": [
    "And here is querying CAISO"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d6202952",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Time</th>\n",
       "      <th>Market</th>\n",
       "      <th>Location</th>\n",
       "      <th>Location Type</th>\n",
       "      <th>LMP</th>\n",
       "      <th>Energy</th>\n",
       "      <th>Congestion</th>\n",
       "      <th>Loss</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2022-10-28 00:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_NP15_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>64.75486</td>\n",
       "      <td>66.42586</td>\n",
       "      <td>-0.64805</td>\n",
       "      <td>-1.02296</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2022-10-28 00:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_SP15_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>62.63366</td>\n",
       "      <td>66.42586</td>\n",
       "      <td>-1.42744</td>\n",
       "      <td>-2.36476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2022-10-28 00:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_ZP26_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>64.45966</td>\n",
       "      <td>66.42586</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>-1.96621</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2022-10-28 01:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_NP15_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>61.02912</td>\n",
       "      <td>62.07561</td>\n",
       "      <td>-0.14018</td>\n",
       "      <td>-0.90630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2022-10-28 01:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_SP15_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>58.14009</td>\n",
       "      <td>62.07561</td>\n",
       "      <td>-1.79391</td>\n",
       "      <td>-2.14161</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>67</th>\n",
       "      <td>2022-10-28 22:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_SP15_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>74.89360</td>\n",
       "      <td>78.67836</td>\n",
       "      <td>-0.26784</td>\n",
       "      <td>-3.51692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>68</th>\n",
       "      <td>2022-10-28 22:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_ZP26_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>76.34948</td>\n",
       "      <td>78.67836</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>-2.32888</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>2022-10-28 23:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_NP15_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>70.66335</td>\n",
       "      <td>70.93785</td>\n",
       "      <td>0.76119</td>\n",
       "      <td>-1.03569</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>2022-10-28 23:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_SP15_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>66.47173</td>\n",
       "      <td>70.93785</td>\n",
       "      <td>-1.45836</td>\n",
       "      <td>-3.00777</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>2022-10-28 23:00:00-07:00</td>\n",
       "      <td>DAY_AHEAD_HOURLY</td>\n",
       "      <td>TH_ZP26_GEN-APND</td>\n",
       "      <td>Trading Hub</td>\n",
       "      <td>68.88066</td>\n",
       "      <td>70.93785</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>-2.05720</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>72 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                        Time            Market          Location  \\\n",
       "0  2022-10-28 00:00:00-07:00  DAY_AHEAD_HOURLY  TH_NP15_GEN-APND   \n",
       "1  2022-10-28 00:00:00-07:00  DAY_AHEAD_HOURLY  TH_SP15_GEN-APND   \n",
       "2  2022-10-28 00:00:00-07:00  DAY_AHEAD_HOURLY  TH_ZP26_GEN-APND   \n",
       "3  2022-10-28 01:00:00-07:00  DAY_AHEAD_HOURLY  TH_NP15_GEN-APND   \n",
       "4  2022-10-28 01:00:00-07:00  DAY_AHEAD_HOURLY  TH_SP15_GEN-APND   \n",
       "..                       ...               ...               ...   \n",
       "67 2022-10-28 22:00:00-07:00  DAY_AHEAD_HOURLY  TH_SP15_GEN-APND   \n",
       "68 2022-10-28 22:00:00-07:00  DAY_AHEAD_HOURLY  TH_ZP26_GEN-APND   \n",
       "69 2022-10-28 23:00:00-07:00  DAY_AHEAD_HOURLY  TH_NP15_GEN-APND   \n",
       "70 2022-10-28 23:00:00-07:00  DAY_AHEAD_HOURLY  TH_SP15_GEN-APND   \n",
       "71 2022-10-28 23:00:00-07:00  DAY_AHEAD_HOURLY  TH_ZP26_GEN-APND   \n",
       "\n",
       "   Location Type       LMP    Energy  Congestion     Loss  \n",
       "0    Trading Hub  64.75486  66.42586    -0.64805 -1.02296  \n",
       "1    Trading Hub  62.63366  66.42586    -1.42744 -2.36476  \n",
       "2    Trading Hub  64.45966  66.42586     0.00000 -1.96621  \n",
       "3    Trading Hub  61.02912  62.07561    -0.14018 -0.90630  \n",
       "4    Trading Hub  58.14009  62.07561    -1.79391 -2.14161  \n",
       "..           ...       ...       ...         ...      ...  \n",
       "67   Trading Hub  74.89360  78.67836    -0.26784 -3.51692  \n",
       "68   Trading Hub  76.34948  78.67836     0.00000 -2.32888  \n",
       "69   Trading Hub  70.66335  70.93785     0.76119 -1.03569  \n",
       "70   Trading Hub  66.47173  70.93785    -1.45836 -3.00777  \n",
       "71   Trading Hub  68.88066  70.93785     0.00000 -2.05720  \n",
       "\n",
       "[72 rows x 8 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import gridstatus\n",
    "caiso = gridstatus.CAISO()\n",
    "locations = [\"TH_NP15_GEN-APND\", \"TH_SP15_GEN-APND\", \"TH_ZP26_GEN-APND\"]\n",
    "caiso.get_lmp(date=\"today\", market='DAY_AHEAD_HOURLY', locations=locations)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcfd863f",
   "metadata": {},
   "source": [
    "You can see what markets are available by accessing the `markets` property of an iso. For, example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "87f0a63d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<Markets.REAL_TIME_15_MIN: 'REAL_TIME_15_MIN'>,\n",
       " <Markets.REAL_TIME_HOURLY: 'REAL_TIME_HOURLY'>,\n",
       " <Markets.DAY_AHEAD_HOURLY: 'DAY_AHEAD_HOURLY'>]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "caiso.markets"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ac4104d",
   "metadata": {},
   "source": [
    "The possible lmp query methods are `ISO.get_latest_lmp`, `ISO.get_lmp_today`, and `ISO.get_lmp`."
   ]
  }
 ],
 "metadata": {
  "file_format": "mystnb",
  "kernelspec": {
   "display_name": "python3",
   "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.8.6"
  },
  "source_map": [
   5,
   30,
   34,
   38,
   43,
   47,
   49
  ]
 },
 "nbformat": 4,
 "nbformat_minor": 5
}