From c7cc70f1b9ae3b4db756dbe65a6a1ed92296f343 Mon Sep 17 00:00:00 2001 From: Josh Okrend Date: Fri, 3 Oct 2025 16:45:23 -0400 Subject: [PATCH 1/4] added notebook --- Okrend_ATMS523_Module3_Project.ipynb | 254 +++++++++++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100644 Okrend_ATMS523_Module3_Project.ipynb diff --git a/Okrend_ATMS523_Module3_Project.ipynb b/Okrend_ATMS523_Module3_Project.ipynb new file mode 100644 index 0000000..8ed4390 --- /dev/null +++ b/Okrend_ATMS523_Module3_Project.ipynb @@ -0,0 +1,254 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "bbc1470f", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "017fbb12", + "metadata": {}, + "outputs": [], + "source": [ + "def fetchGHCNStationData(stationId):\n", + " df = pd.read_csv(\n", + " f\"http://noaa-ghcn-pds.s3.amazonaws.com/csv/by_station/{stationId}.csv\"\n", + " )\n", + "\n", + " df = df[[\"DATE\", \"ELEMENT\", \"DATA_VALUE\"]]\n", + " df = df[(df[\"DATE\"] >= 19910101) & (df[\"DATE\"] <= 20201231)]\n", + " df = df[df[\"ELEMENT\"].isin([\"TMAX\", \"TMIN\"])]\n", + " df[\"DATE\"] = pd.to_datetime(df[\"DATE\"], format=\"%Y%m%d\")\n", + "\n", + " pivot = df.pivot(index=\"DATE\", columns=\"ELEMENT\", values=\"DATA_VALUE\").reset_index()\n", + " pivot[\"TMAX\"] = pivot[\"TMAX\"] / 10\n", + " pivot[\"TMIN\"] = pivot[\"TMIN\"] / 10\n", + " pivot[\"md\"] = pivot[\"DATE\"].dt.strftime(\"%m-%d\")\n", + "\n", + " dailyagg = pivot.groupby([\"md\"], as_index=False).agg(\n", + " record_max_temp=(\"TMAX\", \"max\"),\n", + " record_min_temp=(\"TMIN\", \"min\"),\n", + " average_max_temp=(\"TMAX\", \"mean\"),\n", + " average_min_temp=(\"TMIN\", \"mean\"),\n", + " )\n", + "\n", + " return dailyagg" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ce336902", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/8t/4dcpfx6j29d858grh_vp_d_m0000gn/T/ipykernel_75689/2318973544.py:2: DtypeWarning: Columns (5) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " df = pd.read_csv(\n" + ] + }, + { + "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", + "
mdrecord_max_temprecord_min_tempaverage_max_tempaverage_min_temp
001-0119.4-11.710.083333-1.400000
101-0219.4-13.29.016667-0.806667
201-0322.8-12.28.410000-1.306667
301-0421.7-11.19.426667-1.670000
401-0519.4-12.29.073333-1.653333
..................
36112-2721.7-8.910.300000-1.433333
36212-2819.4-9.410.130000-0.766667
36312-2921.7-8.311.4666670.190000
36412-3020.0-8.99.620000-1.226667
36512-3121.1-10.610.376667-0.673333
\n", + "

366 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " md record_max_temp record_min_temp average_max_temp \\\n", + "0 01-01 19.4 -11.7 10.083333 \n", + "1 01-02 19.4 -13.2 9.016667 \n", + "2 01-03 22.8 -12.2 8.410000 \n", + "3 01-04 21.7 -11.1 9.426667 \n", + "4 01-05 19.4 -12.2 9.073333 \n", + ".. ... ... ... ... \n", + "361 12-27 21.7 -8.9 10.300000 \n", + "362 12-28 19.4 -9.4 10.130000 \n", + "363 12-29 21.7 -8.3 11.466667 \n", + "364 12-30 20.0 -8.9 9.620000 \n", + "365 12-31 21.1 -10.6 10.376667 \n", + "\n", + " average_min_temp \n", + "0 -1.400000 \n", + "1 -0.806667 \n", + "2 -1.306667 \n", + "3 -1.670000 \n", + "4 -1.653333 \n", + ".. ... \n", + "361 -1.433333 \n", + "362 -0.766667 \n", + "363 0.190000 \n", + "364 -1.226667 \n", + "365 -0.673333 \n", + "\n", + "[366 rows x 5 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "avl_stid = \"USW00003812\"\n", + "df = fetchGHCNStationData(avl_stid)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e9ef46b8", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.13.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 5597bc36cf8939d54bdeaf82c36f92c98a574150 Mon Sep 17 00:00:00 2001 From: Josh Okrend Date: Sun, 5 Oct 2025 16:50:53 -0400 Subject: [PATCH 2/4] Created plot and added comments --- Okrend_ATMS523_Module3_Project.ipynb | 230 +++++++++++++++++++++++++-- 1 file changed, 221 insertions(+), 9 deletions(-) diff --git a/Okrend_ATMS523_Module3_Project.ipynb b/Okrend_ATMS523_Module3_Project.ipynb index 8ed4390..67c0e1f 100644 --- a/Okrend_ATMS523_Module3_Project.ipynb +++ b/Okrend_ATMS523_Module3_Project.ipynb @@ -20,20 +20,29 @@ "outputs": [], "source": [ "def fetchGHCNStationData(stationId):\n", + " \"\"\"Returns a DataFrame with record max temp, record min temp,\n", + " average max temp, and average min temp\n", + " from the 1991-2020 period from the provided GHCNd Station Id\n", + " \"\"\"\n", + "\n", + " # Reads a GHCNd csv file at selected Station Id from AWS S3 Bucket.\n", " df = pd.read_csv(\n", " f\"http://noaa-ghcn-pds.s3.amazonaws.com/csv/by_station/{stationId}.csv\"\n", " )\n", "\n", + " # Select date, element, and data value columns and select the 1991-2020 period.\n", " df = df[[\"DATE\", \"ELEMENT\", \"DATA_VALUE\"]]\n", " df = df[(df[\"DATE\"] >= 19910101) & (df[\"DATE\"] <= 20201231)]\n", " df = df[df[\"ELEMENT\"].isin([\"TMAX\", \"TMIN\"])]\n", " df[\"DATE\"] = pd.to_datetime(df[\"DATE\"], format=\"%Y%m%d\")\n", "\n", + " # Create pivot table from Element column and convert data to degrees Celcius.\n", " pivot = df.pivot(index=\"DATE\", columns=\"ELEMENT\", values=\"DATA_VALUE\").reset_index()\n", " pivot[\"TMAX\"] = pivot[\"TMAX\"] / 10\n", " pivot[\"TMIN\"] = pivot[\"TMIN\"] / 10\n", " pivot[\"md\"] = pivot[\"DATE\"].dt.strftime(\"%m-%d\")\n", "\n", + " # Compute record max temp, record min temp, average max temp, and average min temp\n", " dailyagg = pivot.groupby([\"md\"], as_index=False).agg(\n", " record_max_temp=(\"TMAX\", \"max\"),\n", " record_min_temp=(\"TMIN\", \"min\"),\n", @@ -41,7 +50,7 @@ " average_min_temp=(\"TMIN\", \"mean\"),\n", " )\n", "\n", - " return dailyagg" + " return pivot, dailyagg" ] }, { @@ -54,10 +63,155 @@ "name": "stderr", "output_type": "stream", "text": [ - "/var/folders/8t/4dcpfx6j29d858grh_vp_d_m0000gn/T/ipykernel_75689/2318973544.py:2: DtypeWarning: Columns (5) have mixed types. Specify dtype option on import or set low_memory=False.\n", + "/var/folders/8t/4dcpfx6j29d858grh_vp_d_m0000gn/T/ipykernel_92128/1540462304.py:8: DtypeWarning: Columns (5) have mixed types. Specify dtype option on import or set low_memory=False.\n", " df = pd.read_csv(\n" ] }, + { + "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", + "
ELEMENTDATETMAXTMINmd
01991-01-015.0-3.901-01
11991-01-0213.92.201-02
21991-01-036.12.201-03
31991-01-047.83.901-04
41991-01-058.93.301-05
...............
109532020-12-2710.6-6.612-27
109542020-12-2811.1-1.012-28
109552020-12-2913.92.812-29
109562020-12-304.41.712-30
109572020-12-3118.96.712-31
\n", + "

10958 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + "ELEMENT DATE TMAX TMIN md\n", + "0 1991-01-01 5.0 -3.9 01-01\n", + "1 1991-01-02 13.9 2.2 01-02\n", + "2 1991-01-03 6.1 2.2 01-03\n", + "3 1991-01-04 7.8 3.9 01-04\n", + "4 1991-01-05 8.9 3.3 01-05\n", + "... ... ... ... ...\n", + "10953 2020-12-27 10.6 -6.6 12-27\n", + "10954 2020-12-28 11.1 -1.0 12-28\n", + "10955 2020-12-29 13.9 2.8 12-29\n", + "10956 2020-12-30 4.4 1.7 12-30\n", + "10957 2020-12-31 18.9 6.7 12-31\n", + "\n", + "[10958 rows x 4 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get Asheville, NC Airport Station Id and call the fetch function.\n", + "avl_stid = \"USW00003812\"\n", + "df, agg = fetchGHCNStationData(avl_stid)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "21b18077", + "metadata": {}, + "outputs": [ { "data": { "text/html": [ @@ -210,24 +364,82 @@ "[366 rows x 5 columns]" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "avl_stid = \"USW00003812\"\n", - "df = fetchGHCNStationData(avl_stid)\n", - "df" + "agg" ] }, { "cell_type": "code", - "execution_count": null, - "id": "e9ef46b8", + "execution_count": 5, + "id": "29d3b2ad", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "# Select a year from the Asheville Airport data\n", + "df = df[(df[\"DATE\"] >= \"2016-01-01\") & (df[\"DATE\"] <= \"2016-12-31\")]\n", + "\n", + "# Compute range of record, average, and actual max and min temperatures.\n", + "record_range = agg[\"record_max_temp\"] - agg[\"record_min_temp\"]\n", + "average_range = agg[\"average_max_temp\"] - agg[\"average_min_temp\"]\n", + "actual_range = df[\"TMAX\"] - df[\"TMIN\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ba7e80c6", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAKyCAYAAAAEvm1SAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAk4RJREFUeJzs3Xl4E/X69/FPCnRjKUtLyw6yiQiIoFgQ2XcQD6Igi+w/FBcQFUFRwMOiCIpHBTcEF0A8CiJVWVREWcQii6LoEQWLLILILms7zx88iUmbtkmaTCbJ+3VdXBedTGbumSSTmTvfuW+bYRiGAAAAAAAAABNFBTsAAAAAAAAARB6SUgAAAAAAADAdSSkAAAAAAACYjqQUAAAAAAAATEdSCgAAAAAAAKYjKQUAAAAAAADTkZQCAAAAAACA6UhKAQAAAAAAwHQkpQAAAAAAAGA6klIAJEnz58+XzWZz/IuNjVVKSopatWqladOm6dChQz4v+/PPP5fNZtPnn3/umDZx4kTZbDY/RH7JwIEDXeKPjo5W9erV9cADD+jEiRN+W4+ZWrZsqZYtWxZ4OaNHj5bNZlPXrl0LHhT8qmrVqho4cKDH8//555+KiYmRzWbT5s2bfV7v7NmzNX/+fJ+f7w37sWXPnj0ezZfbdnXt2lVVq1Z1mebt/nPWsmVLXXnllT4910zujp/u5Lf/gsH5mJzXv/y2LZx99NFHmjhxYrDDKJDx48ercuXKKly4sEqWLGnaev3x3WY/F/nzzz/9GJln3H3H22w2l/eDp5//grKfQ9WtW1eZmZk5HrfZbLr77rtzTP/jjz80duxY1atXT8WKFVNsbKxq1qypkSNH6ueff85znf7etszMTD399NPq2LGjKlasqPj4eNWpU0djx47VsWPH3D7nueee0+WXX66YmBhVq1ZNkyZN0oULF1zm+f333zVq1Ci1aNFCJUuWlM1my/P78/Tp03rsscdUq1YtxcTEqEyZMmrVqlW++wOIZIWDHQAAa5k3b54uv/xyXbhwQYcOHdK6dev05JNPasaMGVq8eLHatm3r9TKvvvpqbdy4UVdccUUAIv5HXFycPvvsM0nSsWPH9O6772rmzJn69ttvtWrVqoCu26ouXLigt956S5K0YsUK7du3TxUqVAhyVPDVm2++qfPnz0uS5s6dq8aNG/u0nNmzZysxMdHnhI5VLF26VCVKlAh2GMjFxo0bXf7+97//rTVr1jiO03aB/m6wso8++kgvvPBCyCamli1bpilTpuiRRx5Rp06dFBMTY8p6w+G7bfbs2cEOIYcffvhB8+fP15AhQ/Kd9+uvv1bXrl1lGIbuvvtupaamKjo6Wj/99JPeeustXXvttTp69Giuz/f3ueGZM2c0ceJE3XbbbRo6dKgSExO1ZcsWTZ48WcuXL9fmzZsVFxfnmH/KlCl69NFHNXbsWLVv317p6ekaP3689u3bp5dfftkx365du7RgwQJdddVV6ty5sxYtWpRrDKdOnVKrVq20f/9+jR07VvXr19fx48e1YcMG/f33337ZTiAckZQC4OLKK690udC9+eabdd999+n6669Xjx499PPPPys5OdmrZZYoUULXXXedv0PNISoqymU9HTt21K+//qrVq1dr9+7dqlatWsBj8MaZM2cUGxvr1xFj2S1btkyHDx9Wly5d9OGHH+r111/Xww8/HLD1uZOZmamLFy+adrESzl577TWVLVtWVapU0aJFi/T000+7nGRHmoYNGwY7BOQh+3E/KSkpx3E63Pz999+Kj48PdhimxbFjxw5J0r333quyZcv6ZZmexG6F77aCsloytmjRorr66qs1YcIE9enTJ8/vlhMnTqh79+6KjY3Vhg0bVLFiRcdjLVu21PDhw/Xuu+/muT5/nxvGxcVp9+7dKlOmjEsslStX1i233KL33ntP/fr1kyQdOXJEkydP1rBhwzR16lTHvBcuXND48eM1atQox+tzww036PDhw5KkzZs355mUGj9+vHbu3Klvv/1Wl112mWP6jTfe6LftBMIRt+8ByFflypU1c+ZMnTx5Ui+99JJj+ubNm9W7d29VrVpVcXFxqlq1qm677Tb99ttvLs/3ZIj2kCFDVLp0abe/JLVu3Vp169b1KXZ7gu2PP/5wmb548WKlpqaqaNGiKlasmDp06KCtW7fmeP6mTZvUrVs3lSlTRrGxsapevbpGjRrlMs+6devUpk0bFS9eXPHx8WratKk+/PBDl3nst9asWrVKgwcPVlJSkuLj43Xu3DkZhqHp06erSpUqio2N1dVXX62PP/7Yp+3Nbu7cuYqOjta8efNUqVIlzZs3T4ZhSJIOHz6s6OhoPfroozme9+OPP8pms+k///mPY9rBgwc1fPhwVaxYUdHR0Y6h7hcvXnTMs2fPHtlsNk2fPl2TJ09WtWrVFBMTozVr1ujs2bO6//77ddVVVykhIUGlS5dWamqqli1blmP9x44dc7wnihUrpi5duujXX3/NcWuDJP3888/q06ePypYtq5iYGNWpU0cvvPCCz/vM0/e1/TVds2aN7rzzTiUmJqpMmTLq0aOH9u/f7zLvhQsXNGbMGKWkpCg+Pl7XX3+9vv76a6/i2rRpk3bs2KH+/ftr2LBhOn78uN57770c82VlZem5557TVVddpbi4OJUsWVLXXXedPvjgA0mXbnn7/vvvtXbtWsftU/bb4nK71c7dZ3j16tXq3r27KlasqNjYWNWoUUPDhw839TYYd7fvff/992rfvr3i4+OVlJSku+66Sx9++GGux6D09HQ1b95c8fHxuuyyy/TEE08oKysr33W/8MILuuGGG1S2bFkVLVpU9erV0/Tp03Pc+mG/TdCT9fz444/q2LGj4uPjlZiYqDvuuEMnT570er/kJb/j1YkTJ1S4cGE99dRTjml//vmnoqKilJCQ4PJ5v/fee5WUlOQ4pvji/Pnzmjx5suMWmqSkJA0aNMhxEWhXtWpVde3aVWlpaWrYsKHi4uJUp04dpaWlSbr03q1Tp46KFi2qa6+9NsdtjAMHDlSxYsX0/fffq02bNipatKiSkpJ099135/jeMQxDs2fPdnyGSpUqpZ49e+rXX391mc/+2n7xxRdq2rSp4uPjNXjwYEmXvmPat2+vcuXKOWIdO3asTp8+7RKT/VjlfDvjnj17HMdSd7cJZT8O2m9B27Jli3r27KlSpUqpevXqXm3L1q1b1bVrV8dxtHz58urSpYt+//33XF+7qlWravz48ZKk5ORkl7iysrI0ffp0x+tatmxZ3X777TmWl9c+zEte3212WVlZmjx5smrXru04FtavX1/PPvtsjuX98ccfuu2225SQkKDk5GQNHjxYx48fd5nHk305atQoFS1a1G3ZgF69eik5OdlxjCjILfqbN2/WjTfeqNKlSys2NlYNGzbUO++849OynD355JPat2+f233k7JVXXtHBgwc1ffp0l4SUs549e+a5DHffK/bP6a5du9S5c2cVK1ZMlSpV0v33369z587lubxChQq5JKTsrr32WknS3r17HdNWrFihs2fPatCgQS7zDho0SIZh6P3333dMi4ry7HL577//1quvvqpbbrnFJSEFIH8kpQB4pHPnzipUqJC++OILx7Q9e/aodu3amjVrllauXKknn3xSBw4c0DXXXOP1henIkSN19OhRLVy40GX6Dz/8oDVr1uiuu+7yKe7du3ercOHCLicIU6dO1W233aYrrrhC77zzjt58802dPHlSzZs31w8//OCYb+XKlWrevLkyMjL09NNP6+OPP9b48eNdElxr165V69atdfz4cc2dO1eLFi1S8eLF1a1bNy1evDhHPIMHD1aRIkX05ptv6t1331WRIkU0adIkPfTQQ2rXrp3ef/993XnnnRo2bJh++uknn7bZ7vfff9eqVavUvXt3JSUlacCAAdq1a5fjNUxKSlLXrl31+uuv57g4njdvnqKjo9W3b19JlxJS1157rVauXKnHHntMH3/8sYYMGaJp06Zp2LBhOdb9n//8R5999plmzJihjz/+WJdffrnOnTunv/76Sw888IDef/99LVq0yDEC74033nA8NysrS926ddPChQv10EMPaenSpWrSpIk6duyYYz0//PCDrrnmGu3YsUMzZ85UWlqaunTponvvvVeTJk3yab95+74eOnSoihQpooULF2r69On6/PPPHb/G2g0bNkwzZszQ7bffrmXLlunmm29Wjx498ry1Ibu5c+dKuvQe6t27t+Lj4x3TnA0cOFAjR47UNddco8WLF+vtt9/WjTfe6Eg0LV26VJdddpkaNmyojRs3auPGjVq6dKkXe+iSX375RampqZozZ45WrVqlxx57TJs2bdL111+fIzHjDfvIuuz/PEl8HDhwQC1atNBPP/2kOXPm6I033tDJkyfd1kKRLr2v+/btq379+umDDz5Qp06dNG7cOMdtQXn55Zdf1KdPH7355ptKS0vTkCFD9NRTT2n48OE+reePP/5QixYttGPHDs2ePVtvvvmmTp06lWvsvvDkeFWiRAldc801+uSTTxzP+/TTTxUTE6OTJ0+6JFM/+eQTtW7d2ufRnllZWerevbueeOIJ9enTRx9++KGeeOIJrV69Wi1bttSZM2dc5t++fbvGjRunhx56SEuWLFFCQoJ69OihCRMm6NVXX9XUqVO1YMECHT9+XF27ds3x/AsXLqhz585q06aN3n//fd1999166aWX1KtXL5f5hg8frlGjRqlt27Z6//33NXv2bH3//fdq2rRpjh84Dhw4oH79+qlPnz766KOPNGLECEmXkuWdO3fW3LlztWLFCo0aNUrvvPOOunXr5njuo48+6rhwt38WN27cqHLlyvm0P3v06KEaNWrov//9r1588UWPt+X06dNq166d/vjjD73wwgtavXq1Zs2apcqVK+eZFF26dKnjNq8VK1Zo48aNGjp0qCTpzjvvdHyvffDBB/r3v/+tFStWqGnTpjmOo7ntw9zk991mN336dMftXB9++KEWL16sIUOGuK0vdPPNN6tWrVp67733NHbsWC1cuFD33Xefyzye7MvBgwfr77//zpEgOnbsmJYtW6Z+/fqpSJEieW5fftasWaNmzZrp2LFjevHFF7Vs2TJdddVV6tWrV4FrBaampupf//qXnnzySf3111+5zrdq1SoVKlTI5f3sLxcuXNCNN96oNm3aaNmyZRo8eLCeeeYZPfnkkz4tz367sPOPm/YRfvXq1XOZt1y5ckpMTHQ87o1vvvlGp0+fVs2aNXXnnXeqVKlSio6OVuPGjXP8UAkgGwMADMOYN2+eIclIT0/PdZ7k5GSjTp06uT5+8eJF49SpU0bRokWNZ5991jF9zZo1hiRjzZo1jmkTJkwwsh+CWrRoYVx11VUu0+68806jRIkSxsmTJ/OMf8CAAUbRokWNCxcuGBcuXDD+/PNPY86cOUZUVJTx8MMPO+bLyMgwChcubNxzzz0uzz958qSRkpJi3HrrrY5p1atXN6pXr26cOXMm1/Ved911RtmyZV3iu3jxonHllVcaFStWNLKysgzD+Gf/3n777S7PP3r0qBEbG2v861//cpm+fv16Q5LRokWLPLc7L48//rghyVixYoVhGIbx66+/Gjabzejfv79jng8++MCQZKxatcol/vLlyxs333yzY9rw4cONYsWKGb/99pvLOmbMmGFIMr7//nvDMAxj9+7dhiSjevXqxvnz5/OM7+LFi8aFCxeMIUOGGA0bNnRM//DDDw1Jxpw5c1zmnzZtmiHJmDBhgmNahw4djIoVKxrHjx93mffuu+82YmNjjb/++ivPGDyR2/va/pqOGDHCZf7p06cbkowDBw4YhmEYO3fuNCQZ9913n8t8CxYsMCQZAwYMyDeG06dPGyVKlDCuu+46x7QBAwYYNpvN2LVrl2PaF198YUgyHnnkkTyXV7duXbfvLfs27d6922W6u8+ws6ysLOPChQvGb7/9Zkgyli1blu8yc1t3Xv+qVKni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5u5Y99lnn2n//v36/PPPHaOjJLmtZZSb3D6LeR0zssfizbbUq1dPb7/9tgzD0Lfffqv58+fr8ccfV1xcnMux0BP2fXngwIEcP+zs378/3+/FvHjz3Va4cGGNHj1ao0eP1rFjx/TJJ5/o4YcfVocOHbR3716vuhN6sy9LlSql7t2764033tDkyZM1b948xcbG5jpi0xv2fTdu3Dj16NHD7TyenjPlpVy5cho1apSeeOIJ3X///Tke79Chg1atWqXly5erd+/eBV6fPx09elRt27bV7t279emnnzpGLzuz15L67rvv1KRJE8d0ezLclxFt7tZjZxiGxwXTgUjEpwNAvjIyMvTAAw8oISHBcbJns9lkGEaOk7NXX33VMWrDF0OHDnUU2P7pp58KVOQ3JiZGL7zwgs6ePavJkydLunQiVbhwYf3yyy9uR2PYk1q1atVS9erV9dprr+Xa8aVo0aJq0qSJlixZ4vLLd1ZWlt566y1VrFhRtWrVyjPG6667TrGxsVqwYIHL9A0bNng9VN3u6NGjWrp0qZo1a6Y1a9bk+Ne3b1+lp6c7CnnWqVNHTZo00bx587Rw4UKdO3cuxy+6Xbt21Y4dO1S9enW3+yx7Usodm82m6OholwuQgwcP5ui+Z7+Iy14o/u2333b5Oz4+Xq1atdLWrVtVv359t3F5OhLJOUZ/v6/tidzsr/E777zj0sksN/aLsFdeeSXHa/nRRx+pSJEieu211yTJcTvlnDlz8lxmbqOB7EnQb7/91mW6vXOfnf01zL6fnLtzBoO9UHj224+yv3cKyt32G4ahV155xedltmrVSt9//722b9/uMj178wdfeXu8atu2rb755hu99957jlv0ihYtquuuu07PPfec9u/fX6Bb96RLx5UjR44oMzPT7efXHxfX2WX/HNr3r/1z2rVrVxmGoX379rmNKXthZHe8+XxkH5Fjl5ycrNjY2ByfRXfdSnPjy7bYbDY1aNBAzzzzjEqWLOnT6A77rXjZGwakp6dr586datOmjdfLlLz/bnNWsmRJ9ezZU3fddZf++uuvHB1G8+Ptvhw0aJD279+vjz76SG+99Zb+9a9/qWTJkj5tt7PatWurZs2a2r59e67nMP5K5j700EMqXbq026TkkCFDlJKSojFjxmjfvn1un28fGWgme0Lq119/1apVq9SwYUO383Xs2FGxsbE5CsPbO9DedNNNXq+7XLlySk1N1fr1611uFf3777+1du1aXXfddV4vE4gUjJQC4GLHjh2O+gSHDh3Sl19+qXnz5qlQoUJaunSpYwRRiRIldMMNN+ipp55SYmKiqlatqrVr12ru3LkFOvEqWbKkbr/9ds2ZM0dVqlQpcGeXFi1aqHPnzpo3b57Gjh2ratWq6fHHH9cjjzyiX3/9VR07dlSpUqX0xx9/6Ouvv1bRokUdXdteeOEFdevWTdddd53uu+8+Va5cWRkZGVq5cqXjwmbatGlq166dWrVqpQceeEDR0dGaPXu2duzYoUWLFuX7C3CpUqX0wAMPaPLkyRo6dKhuueUW7d27VxMnTnR7207Lli21du3aPDuRLViwQGfPntW9997rtt10mTJltGDBAs2dO1fPPPOMpEv1iYYPH679+/eradOmOS4GH3/8ca1evVpNmzbVvffeq9q1a+vs2bPas2ePPvroI7344ot53uooXTqpX7JkiUaMGKGePXtq7969+ve//61y5crp559/dszXsWNHNWvWTPfff79OnDihRo0aaePGjY4Ofc6/Nj777LO6/vrr1bx5c915552qWrWqTp48qV27dmn58uWOrjue7rtAvK/r1Kmjfv36adasWSpSpIjatm2rHTt2aMaMGSpRokSez7148aLeeOMN1alTx9HVKrtu3brpgw8+0OHDh9W8eXP1799fkydP1h9//KGuXbsqJiZGW7duVXx8vO655x5J/4yKWLx4sS677DLFxsaqXr16uuaaa1S7dm098MADunjxokqVKqWlS5c6RmrZXX755apevbrGjh0rwzBUunRpLV++3FFvKFhGjRql1157TZ06ddLjjz+u5ORkLVy4UD/++KMkz1t756ddu3aKjo7WbbfdpjFjxujs2bOaM2eOV90Uc4u9S5cumjx5spKTk7VgwQJH7J767LPP3F5wd+7c2avjVZs2bZSZmalPP/1Ur7/+umN627ZtNWHCBNlsNo/rAOWmd+/eWrBggTp37qyRI0fq2muvVZEiRfT7779rzZo16t69u/71r38VaB3OoqOjNXPmTJ06dUrXXHONNmzYoMmTJ6tTp06OmmXNmjXT//3f/2nQoEHavHmzbrjhBhUtWlQHDhzQunXrVK9ePd155515rqdp06YqVaqU7rjjDk2YMEFFihTRggULciQcpX9GbDz55JPq1KmTChUqpPr16ys6Olr9+vXTa6+9purVq6tBgwb6+uuvvUpSerotaWlpmj17tm666SZddtllMgxDS5Ys0bFjxxx1m7xRu3Zt/d///Z+ee+45RUVFqVOnTtqzZ48effRRVapUKUdXO095+93WrVs3XXnllWrcuLGSkpL022+/adasWapSpYpq1qzp1bq9fV+0b99eFStW1IgRI3Tw4EG/3Lpn99JLL6lTp07q0KGDBg4cqAoVKuivv/7Szp07tWXLFv33v/91zGv/ocHbJJx06fvwkUcecft6JSQkaNmyZeratasaNmyou+++W6mpqYqOjtbPP/+st956S9u3b891NFcgnDlzRh06dNDWrVs1a9YsXbx40aWuZFJSkqpXry7p0i2/48eP16OPPqrSpUurffv2Sk9P18SJEzV06NAcdQnfffddSZdqxUnS5s2bHbX57B00JWnGjBlq1aqVOnTooIceekg2m00zZ87Un3/+SU0pIC9mVlUHYF3ZO19FR0cbZcuWNVq0aGFMnTrVOHToUI7n/P7778bNN99slCpVyihevLjRsWNHY8eOHTk6Ynnafc/u888/NyQZTzzxhMfxZ+/q5Oy7774zoqKijEGDBjmmvf/++0arVq2MEiVKGDExMUaVKlWMnj17Gp988onLczdu3Gh06tTJSEhIMGJiYozq1avn6KL25ZdfGq1btzaKFi1qxMXFGdddd52xfPlyl3ny6oyVlZVlTJs2zahUqZIRHR1t1K9f31i+fLnbzjyNGjXKt+PNVVddZZQtW9Y4d+5crvNcd911RmJiomOe48ePG3FxcYYk45VXXnH7nMOHDxv33nuvUa1aNaNIkSJG6dKljUaNGhmPPPKIcerUKcMw/ukY9dRTT7ldxhNPPGFUrVrViImJMerUqWO88sorbt8Lf/31lzFo0CCjZMmSRnx8vNGuXTvjq6++cts9a/fu3cbgwYONChUqGEWKFDGSkpKMpk2bGpMnT/Z63xmG5+/r3F5Td+/3c+fOGffff79RtmxZIzY21rjuuuuMjRs35lhmdvYuYrNmzcp1nhUrVrh0hcrMzDSeeeYZ48orrzSio6ONhIQEIzU11eU9uWfPHqN9+/ZG8eLFc3S1+9///me0b9/eKFGihJGUlGTcc889jo6Iztv0ww8/GO3atTOKFy9ulCpVyrjllluMjIyMHN2j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z0wy6gtWwvsSVsb7E1bHexShgvcqrI73KKwsHN6fhmHo5MmTKl++fI5Gdc4YKZVNVFRUjrpVoa5EiRIh+0ZG+OJ9CSvj/Qmr4z2KUMF7FVbHexRWFurvz7xGSNnlnq4CAAAAAAAAAoSkFAAAAAAAAExHUiqMxcTEaMKECYqJiQl2KIAD70tYGe9PWB3vUYQK3quwOt6jsLJIen9S6BwAAAAAAACmY6QUAAAAAAAATEdSCgAAAAAAAKYjKQUAAAAAAADTkZQy2bRp03TNNdeoePHiKlu2rG666Sb99NNPLvMYhqGJEyeqfPnyiouLU8uWLfX999+7zPPyyy+rZcuWKlGihGw2m44dO+Z2fR9++KGaNGmiuLg4JSYmqkePHvnG+N1336lFixaKi4tThQoV9Pjjj8u59NiBAwfUp08f1a5dW1FRURo1apTX+wHWEg7vy3Xr1qlZs2YqU6aM4uLidPnll+uZZ57xfmfAcsLh/fn555/LZrPl+Pfjjz96v0NgOeHwHh04cKDb92jdunW93yGwrHB4r0rSCy+8oDp16iguLk61a9fWG2+84d2OgGVZ/T169uxZDRw4UPXq1VPhwoV100035ZiHa6XwZdb7M7fzRpvNpvT09DxjDMVreZJSJlu7dq3uuusuffXVV1q9erUuXryo9u3b6/Tp0455pk+frqefflrPP/+80tPTlZKSonbt2unkyZOOef7++2917NhRDz/8cK7reu+999S/f38NGjRI27dv1/r169WnT5884ztx4oTatWun8uXLKz09Xc8995xmzJihp59+2jHPuXPnlJSUpEceeUQNGjQowN6AVYTD+7Jo0aK6++679cUXX2jnzp0aP368xo8fr5dffrkAewZWEA7vT7uffvpJBw4ccPyrWbOmD3sEVhMO79Fnn33W5b25d+9elS5dWrfccksB9gysJhzeq3PmzNG4ceM0ceJEff/995o0aZLuuusuLV++vAB7BlZh9fdoZmam4uLidO+996pt27Zu5+FaKXyZ9f5s2rSpy3fygQMHNHToUFWtWlWNGzfONb6QvZY3EFSHDh0yJBlr1641DMMwsrKyjJSUFOOJJ55wzHP27FkjISHBePHFF3M8f82aNYYk4+jRoy7TL1y4YFSoUMF49dVXvYpn9uzZRkJCgnH27FnHtGnTphnly5c3srKycszfokULY+TI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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot record, average, and actual max and min temperatures.\n", + "plt.figure(figsize=(12, 7))\n", + "\n", + "plt.bar(\n", + " df[\"DATE\"],\n", + " record_range,\n", + " bottom=agg[\"record_min_temp\"],\n", + " color=\"lightsteelblue\",\n", + " label=\"Record\",\n", + ")\n", + "\n", + "plt.bar(\n", + " df[\"DATE\"],\n", + " average_range,\n", + " bottom=agg[\"average_min_temp\"],\n", + " color=\"cornflowerblue\",\n", + " label=\"Average\",\n", + ")\n", + "\n", + "plt.bar(\n", + " df[\"DATE\"], actual_range, bottom=df[\"TMIN\"], color=\"navy\", label=\"Actual\", alpha=0.6\n", + ")\n", + "\n", + "plt.ylabel(\"Temperature (°C)\")\n", + "plt.xlabel(\"Day\")\n", + "plt.title(\n", + " \"Daily Record, Average, and Actual High and Low Temperatures for Asheville, NC in 2016\"\n", + ")\n", + "plt.legend()\n", + "plt.tight_layout()\n", + "\n", + "plt.show()" + ] } ], "metadata": { From a0dcf974b024ae2a9930deb7d18dacd8a9fbbf4d Mon Sep 17 00:00:00 2001 From: Josh Okrend Date: Sun, 5 Oct 2025 17:01:21 -0400 Subject: [PATCH 3/4] updated readme --- Okrend_ATMS523_Module3_Project.ipynb | 4 ++-- README.md | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Okrend_ATMS523_Module3_Project.ipynb b/Okrend_ATMS523_Module3_Project.ipynb index 67c0e1f..bc60dbd 100644 --- a/Okrend_ATMS523_Module3_Project.ipynb +++ b/Okrend_ATMS523_Module3_Project.ipynb @@ -14,7 +14,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "017fbb12", "metadata": {}, "outputs": [], @@ -22,7 +22,7 @@ "def fetchGHCNStationData(stationId):\n", " \"\"\"Returns a DataFrame with record max temp, record min temp,\n", " average max temp, and average min temp\n", - " from the 1991-2020 period from the provided GHCNd Station Id\n", + " from the 1991-2020 period from the provided GHCN-D Station Id\n", " \"\"\"\n", "\n", " # Reads a GHCNd csv file at selected Station Id from AWS S3 Bucket.\n", diff --git a/README.md b/README.md index 3dbf7ef..aa456b5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ -# ATMS 523 Module-3 +# ATMS-523-Module-2 Project 2 -Code, notebooks, and homework for ATMS 523 Module 3. +This project finds the record, average, and actual max and min temperatures +for a given year using Global Historical Climatology Network Daily (GHCN-D) data +from a given Station Id and creates a plot. + +## Dataset +- NOAA Global Historical Climatology Network Daily (GHCN-D) on AWS +- Store: `https://noaa-ghcn-pds.s3.amazonaws.com/index.html` \ No newline at end of file From 4f3c6c9ed50d92b866fee094b7374a72dda6044a Mon Sep 17 00:00:00 2001 From: Josh Okrend Date: Mon, 6 Oct 2025 16:02:28 -0400 Subject: [PATCH 4/4] updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa456b5..e6521c7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ATMS-523-Module-2 Project 2 +# ATMS-523-Module-3 Project This project finds the record, average, and actual max and min temperatures for a given year using Global Historical Climatology Network Daily (GHCN-D) data