diff --git a/power-stats.ipynb b/power-stats.ipynb
index 24a2d965e03d42c9be7d80eb5be2e2b3f95e19d3..60efb6849dd42c3810ecacb7488a4b09fb9add74 100644
--- a/power-stats.ipynb
+++ b/power-stats.ipynb
@@ -86,8 +86,18 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "startdate = '2020/01/01 00:00:00'\n",
-    "enddate = '2021/02/21 00:00:00'"
+    "startdate = '2021/01/01 00:00:00'\n",
+    "enddate = '2021/04/8 00:00:00'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "displaystart = '2021-02-01'\n",
+    "displaystop = '2021-04-08'"
    ]
   },
   {
@@ -109,7 +119,11 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "response = requests.get('https://master:8081/rest/v1/monitoring/dump', params=params, cert=cert, verify=False)"
+    "if os.path.exists(\"ipower_data.csv\"):\n",
+    "    df = pd.read_csv(\"power_data.csv\")\n",
+    "else:\n",
+    "    response = requests.get('https://master:8081/rest/v1/monitoring/dump', params=params, cert=cert, verify=False)\n",
+    "    df = pd.DataFrame(response.json()[\"data\"])"
    ]
   },
   {
@@ -119,15 +133,6 @@
     "Simply read the json response into a dataframe for futher parsing."
    ]
   },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "df = pd.DataFrame(response.json()[\"data\"])"
-   ]
-  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -148,6 +153,15 @@
     "#df = df.loc[df['raw'] <  10000]"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -192,7 +206,7 @@
     "m6_hourly_pwr=pd.DataFrame(np.zeros((1,len(hourly_idx))).T, index=hourly_idx, columns=['sum'])\n",
     "\n",
     "for num, entity in enumerate(sorted(df.entity.unique())):\n",
-    "    if entity not in ['c0108', 'c0009']:\n",
+    "    if entity not in ['c0009']:\n",
     "        node_pwr=df[df.entity==entity].set_index(\"datetime\")\n",
     "        node_pwr=node_pwr[['raw']].resample('H').mean()\n",
     "        node_pwr=node_pwr[startdate:enddate].fillna(method=\"ffill\")\n",
@@ -204,11 +218,20 @@
     "        m6_hourly_pwr[entity]= node_pwr[startdate:enddate]\n"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "m6_hourly_pwr"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "## Plot Per-node Hourly\n",
+    "## Plot Per-node Hourly for Row 5 Rack 1\n",
     "\n",
     "This is just to see the data for each node in one plot and get a feel for how the nodes behave relative to each other.  Plot nodes in individual subplotes to decern individual behavior of specific nodes. It does give a sense of how the total power adds up. \n",
     "\n",
@@ -228,7 +251,7 @@
     "num_nodes=36\n",
     "fig, axes = plt.subplots(num_nodes,1, sharex=True, figsize=(20,30))\n",
     "for i in range(num_nodes):\n",
-    "    m6_hourly_pwr['2020-02-01':'2021-02-21'].iloc[:,i+1:i+2].plot(ax=axes[i], legend=True)\n",
+    "    m6_hourly_pwr[displaystart:displaystop].iloc[:,i+1:i+2].plot(ax=axes[i], legend=True)\n",
     "    axes[i].legend(loc='lower left')"
    ]
   },
@@ -245,7 +268,61 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "m6_hourly_pwr['2020-02-01':'2021-02-21'].iloc[:,1:2].plot()"
+    "select_node=\"c0022\""
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df[df.entity==select_node].set_index(\"datetime\")[\"2020-09-01\":\"2020-10-04\"]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "m6_hourly_pwr[displaystart:displaystop].iloc[:,3:4][\"2020-10-03\":\"2020-10-04\"]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "m6_hourly_pwr[displaystart:displaystop].iloc[:,3:4][\"2020-09-28\":\"2020-10-14\"].plot()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "m6_hourly_pwr[displaystart:displaystop].iloc[:,3:4].plot()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df[df[\"entity\"]==\"c0001\"]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df[df[\"entity\"]==\"c0001\"][\"datetime\"].max()"
    ]
   },
   {
@@ -263,7 +340,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "nan_mask = m6_hourly_pwr['2021-02-01':'2021-02-02'].isna()"
+    "nan_mask = m6_hourly_pwr[\"2021-03-22\":\"2021-03-23\"].isna()"
    ]
   },
   {
@@ -275,6 +352,15 @@
     "power_missing = nan_mask[nan_mask].apply(lambda row: row[row == True].index, axis=1)[1]"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(*power_missing,sep=\", \")"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": null,
@@ -288,6 +374,54 @@
     "    axes[i].legend(loc='lower left')"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "node"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df[df[\"entity\"]==node][\"datetime\"].max()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "lastreport = pd.DataFrame(columns=('node', 'datetime'))\n",
+    "\n",
+    "for i, node in enumerate(power_missing):\n",
+    "    lastreport.loc[i] = [node, df[df[\"entity\"]==node][\"datetime\"].max()]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "lastreport.sort_values(by=\"datetime\") #[\"datetime\"].sort()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(\"{}:\\t{}\".format(node, df[df[\"entity\"]==node][\"datetime\"].max()))"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -309,7 +443,7 @@
     "for i, node in enumerate(m6_hourly_pwr.iloc[:,1:].columns):\n",
     "    if (i == num_nodes):\n",
     "        break\n",
-    "    m6_hourly_pwr[node]['2020-02-01':'2021-02-21'].plot(ax=axes[i], legend=True)\n",
+    "    m6_hourly_pwr[node][displaystart:displaystop].plot(ax=axes[i], legend=True)\n",
     "    axes[i].legend(loc='lower left')\n"
    ]
   },
@@ -331,7 +465,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "kW = m6_hourly_pwr['2020-02-01':'2021-02-21'].sum(axis=1)/1000"
+    "kW = m6_hourly_pwr[displaystart:displaystop].sum(axis=1)/1000"
    ]
   },
   {
@@ -388,6 +522,33 @@
     "ax.set_ylabel('Power (kW)')\n",
     "ax.set_title('Cheaha Trends in Electricity Consumption');"
    ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Save Hourly Power to Dataframe\n",
+    "\n",
+    "This makes it easy to use the data in other analysis and learning efforts."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "m6_hourly_pwr.to_pickle(\"m6_hourly_pwr.gz\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df.to_pickle(\"power_stats_raw_df.gz\")"
+   ]
   }
  ],
  "metadata": {