Last active
September 8, 2025 08:10
-
-
Save cavedave/a11fa410a471b4fb50b656e76e3edbe0 to your computer and use it in GitHub Desktop.
Revisions
-
cavedave revised this gist
Jul 28, 2025 . No changes.There are no files selected for viewing
-
cavedave revised this gist
Jul 28, 2025 . 1 changed file with 85 additions and 0 deletions.There are no files selected for viewing
LoadingSorry, something went wrong. Reload?Sorry, we cannot display this file.Sorry, this file is invalid so it cannot be displayed. -
cavedave revised this gist
Jul 28, 2025 . 1 changed file with 34 additions and 12 deletions.There are no files selected for viewing
-
cavedave revised this gist
Jul 28, 2025 . 1 changed file with 146 additions and 11 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -4,7 +4,7 @@ "metadata": { "colab": { "provenance": [], "authorship_tag": "ABX9TyPHIx1KZxvDPT13ej2Pfdm8", "include_colab_link": true }, "kernelspec": { @@ -73,11 +73,11 @@ "cell_type": "code", "metadata": { "id": "d69c314c", "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "outputId": "66ee5d72-1def-414c-b09f-ab4e618b55cc" }, "source": [ "import pandas as pd\n", @@ -108,7 +108,7 @@ ], "text/html": [ "\n", " <div id=\"df-21ca6b15-ae58-4874-9be6-3f9a3906bf8c\" class=\"colab-df-container\">\n", " <div>\n", "<style scoped>\n", " .dataframe tbody tr th:only-of-type {\n", @@ -175,7 +175,7 @@ " <div class=\"colab-df-buttons\">\n", "\n", " <div class=\"colab-df-container\">\n", " <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-21ca6b15-ae58-4874-9be6-3f9a3906bf8c')\"\n", " title=\"Convert this dataframe to an interactive table.\"\n", " style=\"display:none;\">\n", "\n", @@ -227,12 +227,12 @@ "\n", " <script>\n", " const buttonEl =\n", " document.querySelector('#df-21ca6b15-ae58-4874-9be6-3f9a3906bf8c button.colab-df-convert');\n", " buttonEl.style.display =\n", " google.colab.kernel.accessAllowed ? 'block' : 'none';\n", "\n", " async function convertToInteractive(key) {\n", " const element = document.querySelector('#df-21ca6b15-ae58-4874-9be6-3f9a3906bf8c');\n", " const dataTable =\n", " await google.colab.kernel.invokeFunction('convertToInteractive',\n", " [key], {});\n", @@ -252,8 +252,8 @@ " </div>\n", "\n", "\n", " <div id=\"df-1ac674bb-d601-4afe-ab01-1191b01bed61\">\n", " <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-1ac674bb-d601-4afe-ab01-1191b01bed61')\"\n", " title=\"Suggest charts\"\n", " style=\"display:none;\">\n", "\n", @@ -372,7 +372,7 @@ " }\n", " (() => {\n", " let quickchartButtonEl =\n", " document.querySelector('#df-1ac674bb-d601-4afe-ab01-1191b01bed61 button');\n", " quickchartButtonEl.style.display =\n", " google.colab.kernel.accessAllowed ? 'block' : 'none';\n", " })();\n", @@ -452,7 +452,7 @@ "metadata": { "id": "sTNDDL3Xjlf5" }, "execution_count": 3, "outputs": [] }, { @@ -558,6 +558,141 @@ ] } ] }, { "cell_type": "markdown", "source": [ "## one picture" ], "metadata": { "id": "BODzFHpIi1oM" } }, { "cell_type": "code", "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# Assume df is your DataFrame and ts = df['Anomaly'], indexed by Year\n", "\n", "# 1) Identify every record-breaking year ≥ 1980\n", "post80 = ts.where(ts.index >= 1980)\n", "current = -np.inf\n", "records = []\n", "values = []\n", "\n", "for yr, val in post80.items():\n", " if np.isnan(val): continue\n", " if val >= current:\n", " current = val\n", " records.append(yr)\n", " values.append(val)\n", "\n", "# 2) Build steps between successive records\n", "all_steps = list(zip(records, records[1:], values))\n", "\n", "# 3) Keep only multi‑year flats (>=3 yr)\n", "steps = [(s, e, y) for s, e, y in all_steps if (e - s) >= 3]\n", "\n", "# 4) Plot once, statically\n", "fig, ax = plt.subplots(figsize=(10, 6))\n", "\n", "# zero‑line highlight\n", "ax.axhline(0, linestyle='--', linewidth=1, alpha=0.3)\n", "\n", "# full anomaly series\n", "ax.plot(ts.index, ts.values, lw=1, color='lightgray')\n", "\n", "# draw and label each plateau\n", "for s, e, y in steps:\n", " ax.hlines(y, s, e, linewidth=3, color='C0')\n", " mid = s + (e - s) / 2\n", " ax.text(\n", " mid, y + 0.02,\n", " f\"{e - s}yr\",\n", " ha='center', va='bottom',\n", " fontweight='bold', fontsize=11\n", " )\n", "\n", "# lock your limits\n", "ax.set_xlim(ts.index.min(), ts.index.max())\n", "ax.set_ylim(ts.min() - 0.1, ts.max() + 0.1)\n", "\n", "# labels & title\n", "ax.set_xlabel('Year')\n", "ax.set_ylabel('Temperature anomaly (°C)')\n", "ax.set_title(\n", " \"Staircase of Denial\\n\"\n", " \"“no warming in years” plateaus highlighted\",\n", " fontsize=14, fontweight='bold'\n", ")\n", "\n", "# save\n", "output_path = '/content/staircase_static.png'\n", "fig.savefig(output_path, dpi=150, bbox_inches='tight')\n", "plt.show()\n", "\n", "print(\"Saved static image to\", output_path)" ], "metadata": { "id": "dCnfGQMOi2uW", "outputId": "d69b407b-10e8-4035-e888-ee5d416aff97", "colab": { "base_uri": "https://localhost:8080/", "height": 583 } }, "execution_count": 5, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "<Figure size 1000x600 with 1 Axes>" ], "image/png": "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dX19dO3aVcrJyfF6jDVr1gT1+mgMbazbBm831+c1nM/9559/3uu2HTp0kHr06OHzvdNcsGtiC3Peeecp/y8pKUGXLl3Qp08fDBgwAP369cOwYcPQuXNnt33kMQyuWbJJkyahf//+AIDExERleXp6Oq644gp06tQJKSkpUKvVOHnyJNatW4fS0lKcPHkSDz30EFatWhVy27dv345zzjkHV1xxBSRJglqtBgD885//xEcffaRs17ZtW/ztb39DYmIifv31V3z44Yduxwm1jRs2bEBxcTEAIDk5GbNmzUJqaioKCgpw8OBBbN++3e3477zzDh555BHl71GjRmHIkCEoKirCa6+9BpPJhO3bt+O2227Diy++GPBxf/3111i0aJHyC3K7du1w7bXXwmQy4dVXX0V1dTUqKirw97//HYcPH0ZycjKWL1+OI0eOYPXq1cpx/ud//gfJycmhnHK/rrzySiQnJytZgy+//FJZF4lz8M0336Bbt2648sor8eOPPyq/4JaWlmLNmjVBdYXUaDTo06cP+vfvj1atWiEhIQFmsxnffPON0t4HH3wQN9xwA7Kzs8M+F8EK9jEdPnwY06dPh9VqBQCkpqYqGY3XXnsNJSUlsFqtmDlzJvr16xewO+SwYcOU/x86dAhFRUXIyMjweO1+/fXXGDduHM6cOYPffvvN6/5JSUkYOXIkunfvjuTkZOh0OhQVFWHTpk3Iz89HZWUl7rrrLq+/uAPAvn37oNFoMH36dOTm5uLgwYMwGAwe2+3ZswejR4/GgAED8PLLL+PUqVMAgJtvvhkAMH78eJxzzjl45plnYDKZIEkSli9fjuHDh/s9F97s2LEDw4cPx+DBg7F582Yl6/n1119j165duOCCCwAATz31lNs569WrFyZMmID9+/fjP//5T8j3G2obBwwYgFGjRuHLL79Uxn8eOnQImzdvxuTJk/3u379/f1xwwQXYtWsXAODll1/GihUrANR2D33//feVbV1//Z4+fTp+/PFHAEB8fDymTJmCNm3a4JtvvsGWLVsgiiJuu+029O/fH0OGDAEAqFQqdO/eHQMHDkRmZiaSkpJgsViwb98+fPDBB5AkCa+++ipuuukmDBw40Gt7vV3vDxw4oGQFVCoVZsyYgS5duqCkpARHjx71moX85JNPAACPPfYY2rZtC7PZjG+//RZarRavvvoqNJrw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raisrHS7ERERERERBatFBWKPP/44TCYTrrnmGmXZ+eefj7Vr12LLli14/vnncfToUQwdOhRVVVU+j7Ns2TIkJiYqN07mTEREREREoRAkSZLOdiPCIQgCNm3ahIkTJwa1/VtvvYXZs2fj/fffx4gRI3xuV15ejvbt22PFihW44YYbvG5jtVphtVqVv+VJ2yoqKjiPGBERERFRC1ZZWYnExMSAsUGTGiMWrnfeeQc33ngj3nvvPb9BGAAkJSWhS5cuOHz4sM9t9Ho99Hp9pJtJREREREQtRLPvmvj2229j1qxZePvttzFu3LiA25tMJhw5cgStW7dugNYREREREVFL1KQyYiaTyS1TdfToUfz4449ISUlBu3btsHjxYpw8eRKvv/46gNruiDNnzsRTTz2F888/H4WFhQAAo9GIxMREAMDtt9+OK664Au3bt0dBQQGWLFkCtVqNa6+9tuEfIBERERERtQhNKiP2ww8/oG/fvkrp+UWLFqFv3764//77AQCnTp1yq3j44osvwuFwYP78+WjdurVyW7hwobLNiRMncO2116Jr16645pprkJqail27dqFVq1YN++CIiIiIiKjFaLLFOhqTYAfkERERERFR8xZsbNCkMmJERERERETNAQMxIiIiIiKiBsZAjIiIiIiIqIExECMiIiIiImpgDMSIiIiIiIgaGAMxIiIiIiKiBtakJnQmIiIiIiJqjCRJQlVVFY4ePRrU9gzEiIiIiIiIwiQHYKdPn4bFYgl6PwZiREREREREYaipqcHJkydhsVgQGxuLnJwciKIY1L4MxIiIiIiIiMJw+vRpiKKIDh06IDY2FgBQWVkZ1L4s1kFERERERBQiSZJQXV2NpKQkJQgLBQMxIiIiIiKiEFmtVjidTsTExIS1PwMxIiIiIiKiEFVXVwMAAzEiIiIiIqKGYjabYTQaoVKFF1IxECMiIiIiIgpRdXV12NkwgIEYERERERFRSGw2G+x2e1hFOmQMxIiIiIiIiEJQ3/FhAAMxIiIiIiKikFRXV0Ov10OjCX9aZgZiREREREREITCbzfXKhgEMxIiIiIiIiILmcDhgtVoZiBERERERETUUeXxYfQp1AAzEiIiIiIiIglZdXQ2NRgOtVluv4zAQIyIiIiIiCpLZbEZsbCwEQajXcRiIERERERERBUEURVgslnqPDwMYiBEREREREQWlpqYGkiTVe3wYwECMiIiIiIgoKGazGSqVCnq9vt7HYiBGREREREQUhOrqasTExNR7fBjAQIyIiIiIiCggSZJQXV0dkW6JAAMxIiIiIiKigJxOJ0RRhE6ni8jxGIgREREREREFIIoiAECtVkfkeAzEiIiIiIiIAnA6nQAYiBERERERETUYBmJEREREREQNTA7EVKrIhFAMxIiIiIiIiAJgRoyIiIiIiKiBiaIIlUoVkTnEAAZiREREREREATmdzohlwwAGYkRERERERAExECMiIiIiImpgTqczYoU6AAZiREREREREATEjRkRERERE1MBEUWQgRkRERERE1JCYESMiIiIiImpgDMSIiIiIiIgaGIt1EBERERERNSBRFCFJEjNiREREREREDUUURQBgIEZERERERNRQnE4nAAZiREREREREDabFB2Jff/01rrjiCmRlZUEQBGzevDngPtu2bcN5550HvV6Pzp07Y+3atR7bPPfcc8jJyYHBYMD555+P7777LvKNJyIiIiKiJkkOxFpssQ6z2YzevXvjueeeC2r7o0ePYty4cRg2bBh+/PFH3Hrrrbjxxhvx6aefKtusW7cOixYtwpIlS7B371707t0bo0aNwunTp6P1MIiIiIiIqJ4EQfB785aACVc0MmKaiB2pAYwZMwZjxowJevvVq1ejQ4cOeOKJJwAA3bt3x44dO/Dkk09i1KhRAIAVK1Zg9uzZmDVrlrLPRx99hFdeeQV333135B8EERERERFFXVxcXMSOJRfraLEZsVDt3LkTI0aMcFs2atQo7Ny5EwBgs9mwZ88et21UKhVGjBihbOON1WpFZWWl242IiIiIiBqOJEket27dugEAkpKSMHbs2IjdlzyZs91uV4Ky+mrWgVhhYSEyMjLclmVkZKCyshI1NTUoKSmB0+n0uk1hYaHP4y5btgyJiYnKrW3btlFpPxERERERBeeLL77AwYMHAQDXXXcdYmJi3NZXVlYiLi4OgiBg6tSpbutuueUWCIIArVaLwsJC5OXlKV0c77vvPixbtgyXXHIJDAZDxJIwzToQi5bFixejoqJCuR0/fvxsN4mIiIiIqEV7/vnnAdSOHZs3b57H+oSEBEybNg0AsGnTJlRUVACozaxt3LgRQG3vuczMTLf9Vq1ahSeffBKnT5+GJEkRa2+zDsQyMzNRVFTktqyoqAgJCQkwGo1IS0uDWq32uk3dJ8CVXq9HQkKC242IiIiIiM6OU6dOKRXVhw8fji5dunjdbv78+QCAmpoavPXWWwBqhzOdPHkSQG0mra6ysjI88sgj+Omnn3DgwAHExsZGpM3NOhAbNGgQtm7d6rbss88+w6BBgwAAOp0O/fr1c9tGFEVs3bpV2YaIiIiIiBq3l19+GQ6HAwC8ZsNkPXv2xNChQwEAa9asAQCsX78eAJCSkoLx48d77DNy5EhMnjwZiYmJ6NatG7RabUTa3KQCMZPJhB9//BE//vgjgNry9D/++CPy8/MB1HYZnDFjhrL9TTfdhD///BN33nknDh48iFWrVuHdd9/FbbfdpmyzaNEivPTSS3jttddw4MABzJs3D2azWamiSEREREREjZfT6cSLL74IAMjOzvYaTLmSs2J79uzB/v37sWHDBgDA5MmTodPpPLbv3bs3RFGMaOl6oImVr//hhx8wbNgw5e9FixYBAGbOnIm1a9fi1KlTSlAGAB06dMBHH32E2267DU899RTatGmDl19+WSldDwCTJk1CcXEx7r//fhQWFqJPnz7YsmWLRwEPIiIiIiJqfD744AOcOHECADBnzhxoNP5DnCuvvBKZmZkoLCzEggULlPjBW7dEADAajUrVxEgSpEiOOGuhKisrkZiYiIqKCo4XIyIiIiJqQKNGjcJ///tfaLVaHDt2DK1btw64z5IlS7B06VLl7x49euDXX39V/s7Ly0OHDh2UbSdNmoTU1FSkp6cHPHawsUGT6ppIREREREQkO3z4MD777DMAwMSJE4MKwgDPzNnMmTN9bitJUlQyYgzEiIiIiIioSXrhhReUkvI333xz0PtlZ2djwoQJAAC1Wo3p06cH3KdFjxEjIiIiIiKSLV++HMuXLw95P1EUUVxcDAAYO3asRyYtJydHCfDsdjt+//13BmJEREREREThGj58OH766SeUlJRAEATcddddfrd3Op0AIp8RY9dEIiIiIiJqMY4cOYLS0lLk5OTg5ZdfxpAhQ/xuH61AjBkxIiIiIiJqMfLy8kLaXg7EVKrI5rAYiBERERERUZNSarI22H2VV1lQYXGivMYBlVVEapw+IsdlIEZERERERE1Kv4c+Pwv3WjtpdN6/x0XkaAzEiIiIiIioSZAkCUePHj3bzYgIFusgIiIiIqImwWq1orq6+mw3IyIYiBERERERUZNgtTbc2LBoY9dEIiIiIiJqEiwWCwDgravbokuXLhAEIazjnDx5ElVVVejUqRO0Wm3AbUVRRNu2bcO6L18YiBERERERUZNgsVigVquRoAdiNRKMRkPIxzCZTFDZq5FoUCNeJyA21n8VxEqdAI1GH7FqiTJ2TSQiIiIioibBYrEgMTERAFBTUxPy/qIooqCgAEajEQBgs9kC7uN0OiM+mTPAQIyIiIiIiJoAp9MJu90Oo9EIg8EQVtGO0tJS2Gw2ZGdnQ61Ww263B3W/DMSIiIiIiKhFkgt1GAwGxMTEhJwRs9vtKC4uRmpqKgwGA7RabdCBmEoV+bCJgRgRERERETV6cqEOvV4Po9EIq9UKp9MZ9P6FhYVQqVRIT08HAOh0uoCBmCRJEEWRGTEiIiIiImqZLBYL9Ho9VCoVYmJiACDo7okmkwkVFRXIyMhQgqpgMmKiKAIAAzEiIiIiImqZ5EAMqM1mqdXqoLsnFhcXw2g0IikpSVmm1Wphs9kgSZLP/eSMGwMxIiIiIiJqcSRJgsVigcFQW65eEAQYjcagM2JWqxVxcXFu845ptVpIkuS3eyMDMSIiIiIiarEcDgdEUVQCMQBKwQ5/GS2gNphyOBxKNk0mT+Tsr3uiHIixWAcREREREbU4cqEO10DMaDTC6XQGnAtMXq/T6dyWy3/7C8Q4RoyIiIiIiFosi8UClUqlZLEAKAU7Ao0TkwOxuhkxtVoNQRCCyogxECMiIiIiohZHLtThOsZLrVZDp9MFHCdmtVqhVqs9gilBEJSCHb7Ic4i53m+kMBAjIiIiIqJGzWq1unVLlAUzsbPVavXIhskClbB3Op1RyYYBDMSIiIiIiKgRkyTJZyBmNBpRU1OjjOXyxmazeYwPkwUTiEWjUAfAQIyIiIiIiBoxq9UKSZJ8ZsSAv4p51CUHcb4yYjqdjhkxIiIiIiKiuuQgy1swZTAYIAiCz3FiTqcToij6zYjJpfG9EUWRgRgREREREbU8FosFGo0GGo3GY12giZ2tVisA70EcEHguMWbEiIiIiIioRfI1PkwWExPjMxDzNYeYjIEYERERERGRFxaLJWAg5nA4vJaht1qt0Gq1PgtuBBOIsVgHERERERG1KE6nE3a7PWAgBsBrVsxfxUQAUKlU0Gg0PgMxjhEjIiIiIqIWx1+hDplGo/E5sbO/iokyX5M6S5LEQIyIiIiIiFqeQMU2ZN7GiUmSBJvNFlQg5i0j5nQ6AYCBGBERERERtSxy18JA47RiYmJgsViU4AmoHfclSZLfrokAAzEiIiIiIiI3NptNKajhT2xsLAD3cWJyd8NAGTF5UmdJktyWy4EYi3UQEREREVGLYrfbA2a0gNpgSq1WuwViVqsVgiAEDOS0Wi0kSXLLpgHMiBERERERUQsVbEZMEASPcWJyt0ZBEPzuKx+/bsEOURQBMBAjIiIiIqIWxOl0wul0BpURA2rHidXU1ChdDK1Wa1D7+ppLjF0TiYiIiIioxZEDo2AyYkBtICaKolLyPpjS9UBtxksQBI9ArKamBlqtNmBGLVwMxIiIiIiIqNGRA6NgM2JGoxGCIKC6uhqiKAY9vkwQBKVgh+t9l5eXIyUlJbzGB4GBGBERERERNTo2mw2CIECj0QS1vUqlgtFoRHV1ddAVE2V1S9iXlJRApVIxECMiIiIiopbFbreH3DUwJiYGZrNZCcSCzaZptVplH4fDgTNnziA1NTVqhToABmJERERERNQIBVsx0VVMTAwcDgdMJhNUKlXQ2TTXjFhJSQkEQYhqNgxgIEZERERERI1QsGO8XMXExAAAKioqgipdL9NqtXA6nbDb7Thz5gxSUlKCDuLCxUCMiIiIiIganXAyYhqNBjqdDk6nM+jxYcBfXRgLCwshSRLS0tJCut9wMBAjIiIiIqJGJdQ5xFzJWbFQ9pUDvoqKigbJhgFNMBB77rnnkJOTA4PBgPPPPx/fffedz20vueQSCILgcRs3bpyyzXXXXeexfvTo0Q3xUIiIiIiIyItQ5xBzJQdioWTE5PsRBKFBsmFAEwvE1q1bh0WLFmHJkiXYu3cvevfujVGjRuH06dNet9+4cSNOnTql3H755Reo1WpcffXVbtuNHj3abbu33367IR4OEREREVGTtnbtWq+JD0EQMHHixLCPG+ocYq7i4uKgVqthNBqD3keeSyw5OTms4C8c0c+5RdCKFSswe/ZszJo1CwCwevVqfPTRR3jllVdw9913e2xft9LJO++8g5iYGI9ATK/XIzMzM3oNJyIiIiKioIU6h5grnU6H7t27h7xfhw4dolquvq4mkxGz2WzYs2cPRowYoSxTqVQYMWIEdu7cGdQx1qxZg8mTJyM2NtZt+bZt25Ceno6uXbti3rx5KC0t9Xscq9WKyspKtxsRERERUUvVvn17SJLkdtu8eXPYx/M3h5jNZoMoivVorXdarRYqVcOFR00mECspKYHT6URGRobb8oyMDBQWFgbc/7vvvsMvv/yCG2+80W356NGj8frrr2Pr1q149NFH8dVXX2HMmDFwOp0+j7Vs2TIkJiYqt7Zt24b3oIiIiIiIWpDKykrExcVBEARMnTrVbd0tt9wCQRCg1Wpx4sQJFBUVKd0c77vvPtx///3Izs6GwWBoFomQJhOI1deaNWvQs2dPDBw40G355MmTMX78ePTs2RMTJ07Ehx9+iO+//x7btm3zeazFixejoqJCuR0/fjzKrSciIiIiarwKCgqQmpoKnU6HLl264P7774fVavXYLiEhAdOmTQMAbNq0CRUVFQAASZKwceNGAMCoUaOQlJTkNlZr1apVePDBB1FQUABJkhrgEUVfkwnE0tLSoFarUVRU5La8qKgo4Pgus9mMd955BzfccEPA++nYsSPS0tJw+PBhn9vo9XokJCS43YiIiIiIWip5ImS73Y5Dhw7hwQcfxIQJE7xuO3/+fABATU0N3nrrLQDAzp07cfLkSQC1Vc3tdrvb+LCysjKsXr0alZWVOHDggMdQo6aoyQRiOp0O/fr1w9atW5Vloihi69atGDRokN9933vvPVitViX69ufEiRMoLS1F69at691mIiIiIqLmLDc3F2vWrEFeXh6qq6vx5ZdfKkOJPv30U6+9zHr27ImhQ4cCqO21BgDr168HUFtsb9y4cR5ziI0cORJz585FfHw8unXr1mCVDaOpyQRiALBo0SK89NJLeO2113DgwAHMmzcPZrNZqaI4Y8YMLF682GO/NWvWYOLEiUhNTXVbbjKZcMcdd2DXrl3Iy8vD1q1bMWHCBHTu3BmjRo1qkMdERERERNRUDRkyBNdffz3at28Po9GISy65BAsXLlTWf//99173k7Nie/bswf79+7FhwwYAtcOG5AIdrhmx3r17R+shnDVNqnz9pEmTUFxcjPvvvx+FhYXo06cPtmzZokTd+fn5HpVOfv/9d+zYsQP//e9/PY6nVqvx008/4bXXXkN5eTmysrIwcuRIPPjggyFNAEdERERE1BKJoujx/du10qG3qocAcOWVVyIzMxOFhYVYsGAB8vPzAdR2S7TZbADcJ3MOZU6wpqJJBWIAsGDBAixYsMDrOm+pz65du/oc0Gc0GvHp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Wc3jC1jzGpa+9rWvQVGUZT/nGNc/xvyuK82K8eV3XWlPPfUUbr75Zvz+97/H448/jnQ6ja1bt1r+PXb48GFs374db3vb27Bv3z7ccsst+MAHPoDHHnusqc+3FawY471792JwcBDf//738cILL+CTn/wk7rzzTnzjG98w7tOwMRbU8QCIRx99NO9nZ599tvjc5z6X97MLLrhAfPKTnzT+++KLLxZ33XVXyeP++c9/FgDEs88+a/zsv/7rv4SiKGJiYsKak+8AtY6v1+sV//7v/553n97eXvHd735XCMHxzVU4xgcOHBAAxP79+42f6bouBgYGjPFbXFwUdrtd/PjHPzbu8+KLLwoAYs+ePUIIIX7xi18IVVXF9PS0cZ9vfetbwu/3i2Qy2eBn1T5qGd9iHn74YeFwOEQ6nRZCcHxz1TPGzz33nFizZo2YmppadhyO8Sm1jjG/68ypdXz5XWfe7OysACCeeuopIYR132Mf//jHxdlnn533WH/7t38rLrvsskY/pbZTyxgX8+EPf1i87W1vM/67UWPMjNgK9frXvx47d+7ExMQEhBB48skn8dJLL2Hr1q0AgNnZWTz99NMYHBzE61//egwNDeEtb3kLfvOb3xjH2LNnDwKBAC666CLjZ5deeilUVcXTTz/d9OfUTiqNr7zPj370IwSDQWSzWTz00ENIJBJ461vfCoDjW04ymQQAuFwu42eqqsLpdBqv0b179yKdTuPSSy817rNp0yaMj49jz549AE6O8bnnnouhoSHjPpdddhlCoRBeeOGFZjyVtmRmfItZWlqC3++HzWYDwPEtx+wYx2IxvOc978H999+P4eHhZcfhGJdmZoz5XVc7s69hfteZJ0u7e3t7AVj3PbZnz568Y8j7yGOsJrWMcanjyGMAjRtjBmIr1H333YfNmzdjbGwMDocD27Ztw/333483v/nNAIBXXnkFAPDZz34WN954I3bt2oULLrgAl1xyiVH/PT09jcHBwbzj2mw29Pb2Ynp6urlPqM1UGl8AePjhh5FOp9HX1wen04kPfvCDePTRR7FhwwYAHN9y5IfknXfeiYWFBaRSKXzxi1/E8ePHMTU1BeDk+DkcDgQCgbzfHRoaMsZveno678tL3i5vW63MjG+hubk53H333XnlRBzf0syO8a233orXv/71eOc731n0OBzj0syMMb/ramf2NczvOnOy2SxuueUWvOENb8A555wDwLrvsVL3CYVCeWshV7pax7jQ7373O/zoRz8y9X1X7xgzEFuh7rvvPvz+97/Hzp07sXfvXnz5y1/GzTffjCeeeALAyRcrAHzwgx/E9ddfj/PPPx9f/epXceaZZ+J73/teK0+9I1QaXwD41Kc+hcXFRTzxxBP4wx/+gNtuuw3vete78Pzzz7fwzDuD3W7HT37yE7z00kvo7e2Fx+PBk08+icsvvzxvXQfVptrxDYVC2L59OzZv3ozPfvazzT/hDmRmjHfu3Indu3fja1/7WmtPtkOZGWN+19XO7OcEv+vMufnmm7F//3489NBDrT6VFcuKMd6/fz/e+c534jOf+UxelVOj2Br+CNR08Xgc//iP/4hHH30U27dvBwCcd9552LdvH+69915ceumlGBkZAQBs3rw573fPOussHDt2DAAwPDyM2dnZvNszmQyCwWDREprVwsz4Hjp0CN/4xjewf/9+nH322QCA1772tfj1r3+N+++/H9/+9rc5vhVceOGF2LdvH5aWlpBKpTAwMICLL77YKG8ZHh5GKpXC4uJi3pWumZkZY/yGh4fxzDPP5B1Xdkpa7WNcaXylcDiMbdu2wefz4dFHH4Xdbjdu4/iWV2mMd+/ejUOHDi27UnvVVVfhTW96E375y19yjCuoNMb8rqtPpfHld505O3bsMJqUjI2NGT+36ntseHh4WafFmZkZ+P1+uN3uRjyltlPPGEt//vOfcckll+Cmm27CXXfdlXdbo8aYl5ZXoHQ6jXQ6vezKtqZpxtXB9evXY3R0dFmLz5deegnr1q0DAGzZsgWLi4vYu3evcfvu3buRzWZx8cUXN/hZtC8z4xuLxQCg7H04vuZ0d3djYGAAL7/8Mv7whz8YJVwXXngh7HY7/ud//se474EDB3Ds2DFs2bIFwMkxfv755/MmAY8//jj8fv+yidlqVWp8gZOZsK1bt8LhcGDnzp15a0UAjq9Zpcb4E5/4BP70pz9h3759xj8A+OpXv4oHHngAAMfYrFJjzO86a5QaX37XlSeEwI4dO/Doo49i9+7dOO200/Jut+p7bMuWLXnHkPeRx1jJrBhjAHjhhRfwtre9De9///vx+c9/ftnjNGyM62r1QS0TDofFc889J5577jkBQHzlK18Rzz33nDh69KgQQoi3vOUt4uyzzxZPPvmkeOWVV8QDDzwgXC6X+OY3v2kc46tf/arw+/3ixz/+sXj55ZfFXXfdJVwulzh48KBxn23btonzzz9fPP300+I3v/mN2Lhxo7j66qub/nybrd7xTaVSYsOGDeJNb3qTePrpp8XBgwfFvffeKxRFEf/5n/9pPM5qHV8hKo/xww8/LJ588klx6NAh8dOf/lSsW7dOXHnllXnH+NCHPiTGx8fF7t27xR/+8AexZcsWsWXLFuP2TCYjzjnnHLF161axb98+sWvXLjEwMCDuvPPOpj7XVqh3fJeWlsTFF18szj33XHHw4EExNTVl/MtkMkKI1T2+QljzGi6Egs51HOP6x5jfdaXVO778rivv7/7u70R3d7f45S9/mfcZGovFjPtY8T32yiuvCI/HIz72sY+JF198Udx///1C0zSxa9eupj7fVrBijJ9//nkxMDAg3vve9+YdY3Z21rhPo8aYgViHevLJJwWAZf/e//73CyGEmJqaEtddd50YHR0VLpdLnHnmmeLLX/6yyGazece55557xNjYmPB4PGLLli3i17/+dd7t8/Pz4uqrrxZdXV3C7/eL66+/XoTD4WY9zZaxYnxfeuklceWVV4rBwUHh8XjEeeedt6zF72odXyEqj/HXv/51MTY2Jux2uxgfHxd33XXXsnbd8XhcfPjDHxY9PT3C4/GIv/mbvxFTU1N59zly5Ii4/PLLhdvtFv39/eL222832q+vZPWOb6nfByAOHz5s3G+1jq8Q1ryGCxUGYkJwjK0YY37XFWfF+PK7rrRSn6EPPPCAcR+rvseefPJJ8brXvU44HA5x+umn5z3GSmbFGH/mM58peox169blPVYjxlj5/58EERERERERNQnXiBERERERETUZAzEiIiIiIqImYyBGRERERETUZAzEiIiIiIiImoyBGBERERERUZMxECMiIiIiImoyBmJERERERERNxkCMiIiIiIioyRiIERERERERNRkDMSIiohxCCFx66aW47LLLlt32zW9+E4FAAMePH2/BmRER0UrCQIyIiCiHoih44IEH8PTTT+Of//mfjZ8fPnwYH//4x3HfffdhbGzM0sdMp9OWHo+IiNofAzEiIqICa9euxde//nX8wz/8Aw4fPgwhBG644QZs3boV559/Pi6//HJ0dXVhaGgI73vf+zA3N2f87q5du/DGN74RgUAAfX19+Ou//mscOnTIuP3IkSNQFAU/+tGP8Ja3vAUulws/+MEPWvE0iYiohRQhhGj1SRAREbWjK664AktLS7jyyitx991344UXXsDZZ5+ND3zgA7j22msRj8dxxx13IJPJYPfu3QCARx55BIqi4LzzzkMkEsGnP/1pHDlyBPv27YOqqjhy5AhOO+00rF+/Hl/+8pdx/vnnw+VyYWRkpMXPloiImomBGBERUQmzs7M4++yzEQwG8cgjj2D//v349a9/jccee8y4z/Hjx7F27VocOHAAr3nNa5YdY25uDgMDA3j++edxzjnnGIHY1772Nfz93/99M58OERG1EZYmEhERlTA4OIgPfvCDOOuss3DFFVfgj3/8I5588kl0dXUZ/zZt2gQARvnhyy+/jKuvvhqnn346/H4/1q9fDwA4duxY3rEvuuiipj4XIiJqL7ZWnwAREVE7s9lssNlOfl1GIhG84x3vwBe/+MVl95Olhe94xzuwbt06fPe738Xo6Ciy2SzOOeccpFKpvPt7vd7GnzwREbUtBmJEREQmXXDBBXjkkUewfv16IzjLNT8/jwMHDuC73/0u3vSmNwEAfvOb3zT7NImIqAOwNJGIiMikm2++GcFgEFdffTWeffZZHDp0CI899hiuv/566LqOnp4e9PX14Tvf+Q4OHjyI3bt347bbbmv1aRMRURtiIEZERGTS6Ogofvvb30LXdWzduhXnnnsubrnlFgQCAaiqClVV8dBDD2Hv3r0455xzcOutt+JLX/pSq0+biIjaELsmEhERERERNRkzYkRERERERE3GQIyIiIiIiKjJGIgRERERERE1GQMxIiIiIiKiJmMgRkRERERE1GQMxIiIiIiIiJqMgRgREREREVGTMRAjIiIiIiJqMgZiRERERERETcZAjIiIiIiIqMkYiBERERERETXZ/wfdkDWPktexKgAAAABJRU5ErkJggg==\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "Saved static image to /content/staircase_static.png\n" ] } ] }, { "cell_type": "code", "source": [ "# Print out each plateau’s start, end and length\n", "for s, e, y in steps:\n", " print(f\"{s} → {e} : {e - s} years at {y:.3f} °C\")\n" ], "metadata": { "id": "huOlXlJ_mxUu", "outputId": "a93b0499-592e-4845-a662-14f2a9ea9fca", "colab": { "base_uri": "https://localhost:8080/" } }, "execution_count": 6, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "1981 → 1988 : 7 years at 0.250 °C\n", "1990 → 1995 : 5 years at 0.361 °C\n", "1998 → 2005 : 7 years at 0.577 °C\n", "2005 → 2010 : 5 years at 0.607 °C\n", "2010 → 2015 : 5 years at 0.680 °C\n", "2016 → 2023 : 7 years at 0.933 °C\n" ] } ] } ] } -
cavedave revised this gist
Jul 28, 2025 . 1 changed file with 351 additions and 9 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -4,7 +4,7 @@ "metadata": { "colab": { "provenance": [], "authorship_tag": "ABX9TyOmlio1BHxzjE+4jzenTRCh", "include_colab_link": true }, "kernelspec": { @@ -72,7 +72,12 @@ { "cell_type": "code", "metadata": { "id": "d69c314c", "outputId": "354f73e2-7557-4e0c-accc-9a13761bb932", "colab": { "base_uri": "https://localhost:8080/", "height": 206 } }, "source": [ "import pandas as pd\n", @@ -81,12 +86,315 @@ "df = pd.read_csv(url)\n", "display(df.head())" ], "execution_count": 1, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ " Time Anomaly (deg C) Lower confidence limit (2.5%) \\\n", "0 1850 -0.417711 -0.589256 \n", "1 1851 -0.233350 -0.411868 \n", "2 1852 -0.229399 -0.409382 \n", "3 1853 -0.270354 -0.430009 \n", "4 1854 -0.291521 -0.432712 \n", "\n", " Upper confidence limit (97.5%) \n", "0 -0.246166 \n", "1 -0.054832 \n", "2 -0.049416 \n", "3 -0.110700 \n", "4 -0.150330 " ], "text/html": [ "\n", " <div id=\"df-fc8a6d7b-f142-48a0-99b4-f399c4301419\" class=\"colab-df-container\">\n", " <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>Anomaly (deg C)</th>\n", " <th>Lower confidence limit (2.5%)</th>\n", " <th>Upper confidence limit (97.5%)</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>1850</td>\n", " <td>-0.417711</td>\n", " <td>-0.589256</td>\n", " <td>-0.246166</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>1851</td>\n", " <td>-0.233350</td>\n", " <td>-0.411868</td>\n", " <td>-0.054832</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>1852</td>\n", " <td>-0.229399</td>\n", " <td>-0.409382</td>\n", " <td>-0.049416</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>1853</td>\n", " <td>-0.270354</td>\n", " <td>-0.430009</td>\n", " <td>-0.110700</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>1854</td>\n", " <td>-0.291521</td>\n", " <td>-0.432712</td>\n", " <td>-0.150330</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>\n", " <div class=\"colab-df-buttons\">\n", "\n", " <div class=\"colab-df-container\">\n", " <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-fc8a6d7b-f142-48a0-99b4-f399c4301419')\"\n", " title=\"Convert this dataframe to an interactive table.\"\n", " style=\"display:none;\">\n", "\n", " <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n", " <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n", " </svg>\n", " </button>\n", "\n", " <style>\n", " .colab-df-container {\n", " display:flex;\n", " gap: 12px;\n", " }\n", "\n", " .colab-df-convert {\n", " background-color: #E8F0FE;\n", " border: none;\n", " border-radius: 50%;\n", " cursor: pointer;\n", " display: none;\n", " fill: #1967D2;\n", " height: 32px;\n", " padding: 0 0 0 0;\n", " width: 32px;\n", " }\n", "\n", " .colab-df-convert:hover {\n", " background-color: #E2EBFA;\n", " box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", " fill: #174EA6;\n", " }\n", "\n", " .colab-df-buttons div {\n", " margin-bottom: 4px;\n", " }\n", "\n", " [theme=dark] .colab-df-convert {\n", " background-color: #3B4455;\n", " fill: #D2E3FC;\n", " }\n", "\n", " [theme=dark] .colab-df-convert:hover {\n", " background-color: #434B5C;\n", " box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", " filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", " fill: #FFFFFF;\n", " }\n", " </style>\n", "\n", " <script>\n", " const buttonEl =\n", " document.querySelector('#df-fc8a6d7b-f142-48a0-99b4-f399c4301419 button.colab-df-convert');\n", " buttonEl.style.display =\n", " google.colab.kernel.accessAllowed ? 'block' : 'none';\n", "\n", " async function convertToInteractive(key) {\n", " const element = document.querySelector('#df-fc8a6d7b-f142-48a0-99b4-f399c4301419');\n", " const dataTable =\n", " await google.colab.kernel.invokeFunction('convertToInteractive',\n", " [key], {});\n", " if (!dataTable) return;\n", "\n", " const docLinkHtml = 'Like what you see? Visit the ' +\n", " '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", " + ' to learn more about interactive tables.';\n", " element.innerHTML = '';\n", " dataTable['output_type'] = 'display_data';\n", " await google.colab.output.renderOutput(dataTable, element);\n", " const docLink = document.createElement('div');\n", " docLink.innerHTML = docLinkHtml;\n", " element.appendChild(docLink);\n", " }\n", " </script>\n", " </div>\n", "\n", "\n", " <div id=\"df-661091b8-86d9-44ae-a313-a6cb3c4fd92e\">\n", " <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-661091b8-86d9-44ae-a313-a6cb3c4fd92e')\"\n", " title=\"Suggest charts\"\n", " style=\"display:none;\">\n", "\n", "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", " width=\"24px\">\n", " <g>\n", " <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n", " </g>\n", "</svg>\n", " </button>\n", "\n", "<style>\n", " .colab-df-quickchart {\n", " --bg-color: #E8F0FE;\n", " --fill-color: #1967D2;\n", " --hover-bg-color: #E2EBFA;\n", " --hover-fill-color: #174EA6;\n", " --disabled-fill-color: #AAA;\n", " --disabled-bg-color: #DDD;\n", " }\n", "\n", " [theme=dark] .colab-df-quickchart {\n", " --bg-color: #3B4455;\n", " --fill-color: #D2E3FC;\n", " --hover-bg-color: #434B5C;\n", " --hover-fill-color: #FFFFFF;\n", " --disabled-bg-color: #3B4455;\n", " --disabled-fill-color: #666;\n", " }\n", "\n", " .colab-df-quickchart {\n", " background-color: var(--bg-color);\n", " border: none;\n", " border-radius: 50%;\n", " cursor: pointer;\n", " display: none;\n", " fill: var(--fill-color);\n", " height: 32px;\n", " padding: 0;\n", " width: 32px;\n", " }\n", "\n", " .colab-df-quickchart:hover {\n", " background-color: var(--hover-bg-color);\n", " box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n", " fill: var(--button-hover-fill-color);\n", " }\n", "\n", " .colab-df-quickchart-complete:disabled,\n", " .colab-df-quickchart-complete:disabled:hover {\n", " background-color: var(--disabled-bg-color);\n", " fill: var(--disabled-fill-color);\n", " box-shadow: none;\n", " }\n", "\n", " .colab-df-spinner {\n", " border: 2px solid var(--fill-color);\n", " border-color: transparent;\n", " border-bottom-color: var(--fill-color);\n", " animation:\n", " spin 1s steps(1) infinite;\n", " }\n", "\n", " @keyframes spin {\n", " 0% {\n", " border-color: transparent;\n", " border-bottom-color: var(--fill-color);\n", " border-left-color: var(--fill-color);\n", " }\n", " 20% {\n", " border-color: transparent;\n", " border-left-color: var(--fill-color);\n", " border-top-color: var(--fill-color);\n", " }\n", " 30% {\n", " border-color: transparent;\n", " border-left-color: var(--fill-color);\n", " border-top-color: var(--fill-color);\n", " border-right-color: var(--fill-color);\n", " }\n", " 40% {\n", " border-color: transparent;\n", " border-right-color: var(--fill-color);\n", " border-top-color: var(--fill-color);\n", " }\n", " 60% {\n", " border-color: transparent;\n", " border-right-color: var(--fill-color);\n", " }\n", " 80% {\n", " border-color: transparent;\n", " border-right-color: var(--fill-color);\n", " border-bottom-color: var(--fill-color);\n", " }\n", " 90% {\n", " border-color: transparent;\n", " border-bottom-color: var(--fill-color);\n", " }\n", " }\n", "</style>\n", "\n", " <script>\n", " async function quickchart(key) {\n", " const quickchartButtonEl =\n", " document.querySelector('#' + key + ' button');\n", " quickchartButtonEl.disabled = true; // To prevent multiple clicks.\n", " quickchartButtonEl.classList.add('colab-df-spinner');\n", " try {\n", " const charts = await google.colab.kernel.invokeFunction(\n", " 'suggestCharts', [key], {});\n", " } catch (error) {\n", " console.error('Error during call to suggestCharts:', error);\n", " }\n", " quickchartButtonEl.classList.remove('colab-df-spinner');\n", " quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n", " }\n", " (() => {\n", " let quickchartButtonEl =\n", " document.querySelector('#df-661091b8-86d9-44ae-a313-a6cb3c4fd92e button');\n", " quickchartButtonEl.style.display =\n", " google.colab.kernel.accessAllowed ? 'block' : 'none';\n", " })();\n", " </script>\n", " </div>\n", "\n", " </div>\n", " </div>\n" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "dataframe", "summary": "{\n \"name\": \"display(df\",\n \"rows\": 5,\n \"fields\": [\n {\n \"column\": \"Time\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 1850,\n \"max\": 1854,\n \"num_unique_values\": 5,\n \"samples\": [\n 1851,\n 1854,\n 1852\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Anomaly (deg C)\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.07676006671244463,\n \"min\": -0.4177114,\n \"max\": -0.22939907,\n \"num_unique_values\": 5,\n \"samples\": [\n -0.2333498,\n -0.29152083,\n -0.22939907\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Lower confidence limit (2.5%)\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.07597173954235004,\n \"min\": -0.58925647,\n \"max\": -0.40938243,\n \"num_unique_values\": 5,\n \"samples\": [\n -0.41186792,\n -0.4327115,\n -0.40938243\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Upper confidence limit (97.5%)\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.08081957301408688,\n \"min\": -0.2461663,\n \"max\": -0.04941572,\n \"num_unique_values\": 5,\n \"samples\": [\n -0.054831687,\n -0.15033019,\n -0.04941572\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" } }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import imageio\n", @@ -101,7 +409,7 @@ "metadata": { "id": "017GpJsNLoBY" }, "execution_count": 2, "outputs": [] }, { @@ -113,6 +421,40 @@ "id": "srGGdU8cwj1Y" } }, { "cell_type": "code", "source": [ "# 1) find every record‐breaking year ≥ 1980\n", "post80 = ts.where(ts.index >= 1980)\n", "current_max = -np.inf\n", "record_years = []\n", "record_values = []\n", "\n", "for yr, val in post80.items():\n", " if np.isnan(val):\n", " continue\n", " if val >= current_max:\n", " current_max = val\n", " record_years.append(yr)\n", " record_values.append(val)\n", "\n", "# 2) build ALL steps\n", "all_steps = [(s, e, y) for s, e, y in zip(record_years, record_years[1:], record_values)]\n", "\n", "# 3) filter to only multi‑year “flat” periods (>=3 yr)\n", "steps = [(s, e, y) for (s, e, y) in all_steps if (e - s) >= 3]\n", "\n", "# 4) pre‑compute limits & frame list\n", "xmin, xmax = ts.index.min(), ts.index.max()\n", "ymin, ymax = ts.min() - 0.1, ts.max() + 0.1\n", "frame_files = []" ], "metadata": { "id": "sTNDDL3Xjlf5" }, "execution_count": 6, "outputs": [] }, { "cell_type": "code", "source": [ @@ -183,7 +525,7 @@ "metadata": { "id": "l76R5v5GujNI" }, "execution_count": 7, "outputs": [] }, { @@ -203,15 +545,15 @@ "base_uri": "https://localhost:8080/" }, "id": "Jaq21m9jungW", "outputId": "ac0e173b-334a-4b74-ef32-cdcd2734c9a6" }, "execution_count": 8, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/tmp/ipython-input-8-3463716466.py:8: DeprecationWarning: Starting with ImageIO v3 the behavior of this function will switch to that of iio.v3.imread. To keep the current behavior (and make this warning disappear) use `import imageio.v2 as imageio` or call `imageio.v2.imread` directly.\n", " writer.append_data(imageio.imread(fn))\n" ] } -
cavedave revised this gist
Jul 25, 2025 . 1 changed file with 24 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,24 @@ # 1) find every record‐breaking year ≥ 1980 post80 = ts.where(ts.index >= 1980) current_max = -np.inf record_years = [] record_values = [] for yr, val in post80.items(): if np.isnan(val): continue if val >= current_max: current_max = val record_years.append(yr) record_values.append(val) # 2) build ALL steps all_steps = [(s, e, y) for s, e, y in zip(record_years, record_years[1:], record_values)] # 3) filter to only multi‑year “flat” periods (>=3 yr) steps = [(s, e, y) for (s, e, y) in all_steps if (e - s) >= 3] # 4) pre‑compute limits & frame list xmin, xmax = ts.index.min(), ts.index.max() ymin, ymax = ts.min() - 0.1, ts.max() + 0.1 frame_files = [] -
cavedave revised this gist
Jul 25, 2025 . 1 changed file with 0 additions and 33 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -112,39 +112,6 @@ "metadata": { "id": "srGGdU8cwj1Y" } }, { "cell_type": "code", -
cavedave revised this gist
Jul 25, 2025 . 1 changed file with 0 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -142,7 +142,6 @@ "# 4) pre‑compute limits & frame list", "xmin, xmax = ts.index.min(), ts.index.max()", "ymin, ymax = ts.min() - 0.1, ts.max() + 0.1", ], "execution_count": null, "outputs": [] -
cavedave revised this gist
Jul 25, 2025 . 1 changed file with 20 additions and 20 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -119,30 +119,30 @@ "id": "d69c314c" }, "source": [ "# 1) find every record‐breaking year ≥ 1980", "post80 = ts.where(ts.index >= 1980)", "current_max = -np.inf", "record_years = []", "record_values = []", "for yr, val in post80.items():", "if np.isnan(val):", "continue", "if val >= current_max:", "current_max = val", "record_years.append(yr)", "record_values.append(val)", "# 2) build ALL steps", "all_steps = [(s, e, y) for s, e, y in zip(record_years, record_years[1:], record_values)]", "# 3) filter to only multi‑year “flat” periods (>=3 yr)", "steps = [(s, e, y) for (s, e, y) in all_steps if (e - s) >= 3]", "# 4) pre‑compute limits & frame list", "xmin, xmax = ts.index.min(), ts.index.max()", "ymin, ymax = ts.min() - 0.1, ts.max() + 0.1", "frame_files = []", ], "execution_count": null, "outputs": [] -
cavedave revised this gist
Jul 25, 2025 . 1 changed file with 34 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -87,7 +87,6 @@ { "cell_type": "code", "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import imageio\n", @@ -113,6 +112,40 @@ "metadata": { "id": "srGGdU8cwj1Y" } }, { "cell_type": "code", "metadata": { "id": "d69c314c" }, "source": [ # 1) find every record‐breaking year ≥ 1980 post80 = ts.where(ts.index >= 1980) current_max = -np.inf record_years = [] record_values = [] for yr, val in post80.items(): if np.isnan(val): continue if val >= current_max: current_max = val record_years.append(yr) record_values.append(val) # 2) build ALL steps all_steps = [(s, e, y) for s, e, y in zip(record_years, record_years[1:], record_values)] # 3) filter to only multi‑year “flat” periods (>=3 yr) steps = [(s, e, y) for (s, e, y) in all_steps if (e - s) >= 3] # 4) pre‑compute limits & frame list xmin, xmax = ts.index.min(), ts.index.max() ymin, ymax = ts.min() - 0.1, ts.max() + 0.1 frame_files = [] ], "execution_count": null, "outputs": [] }, { "cell_type": "code", -
cavedave revised this gist
Jul 24, 2025 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -184,7 +184,7 @@ "metadata": { "id": "l76R5v5GujNI" }, "execution_count": null, "outputs": [] }, { @@ -206,7 +206,7 @@ "id": "Jaq21m9jungW", "outputId": "45d77e7d-be05-4be7-d5db-58f0f846418b" }, "execution_count": null, "outputs": [ { "output_type": "stream", -
cavedave revised this gist
Jul 24, 2025 . 1 changed file with 12 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -4,7 +4,8 @@ "metadata": { "colab": { "provenance": [], "authorship_tag": "ABX9TyNv3w0Sagj1PRZ2d9ZxKnZa", "include_colab_link": true }, "kernelspec": { "name": "python3", @@ -15,6 +16,16 @@ } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "<a href=\"https://colab.research.google.com/gist/cavedave/a11fa410a471b4fb50b656e76e3edbe0/staircase.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" ] }, { "cell_type": "markdown", "source": [ -
cavedave created this gist
Jul 24, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,211 @@ { "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "authorship_tag": "ABX9TyNv3w0Sagj1PRZ2d9ZxKnZa" }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "lets make a staircase of denial gif and share the code\n", "\n", "the idea is that between every el nino hot year people go 'look it hasnt gotten warmer in X years global warming is disproven. Checkmate now, king me'\n", "\n", "And i want to make a way to easily show that warming continues inside the el nino cyscle and new record year is coming." ], "metadata": { "id": "QpovhOROUzWI" } }, { "cell_type": "markdown", "source": [ "## staircase" ], "metadata": { "id": "a1l5rz8vKgQW" } }, { "cell_type": "markdown", "source": [ "I heard about the escalator of denial here and wanted to update it and make the code public https://skepticalscience.com/graphics.php?g=465\n", "\n", "and this tweet also shows it https://x.com/RARohde/status/1614991656583041024\n", "\n" ], "metadata": { "id": "15WdK15XKh4T" } }, { "cell_type": "markdown", "source": [ "hadcrut data https://www.metoffice.gov.uk/hadobs/hadcrut5/data/HadCRUT.5.0.2.0/download.html" ], "metadata": { "id": "QG8tIYGLKnfG" } }, { "cell_type": "code", "metadata": { "id": "d69c314c" }, "source": [ "import pandas as pd\n", "\n", "url = \"https://www.metoffice.gov.uk/hadobs/hadcrut5/data/HadCRUT.5.0.2.0/analysis/diagnostics/HadCRUT.5.0.2.0.analysis.summary_series.global.annual.csv\"\n", "df = pd.read_csv(url)\n", "display(df.head())" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import imageio\n", "from scipy.signal import argrelextrema\n", "\n", "\n", "# rename columns\n", "df = df.rename(columns={'Time':'Year', 'Anomaly (deg C)':'Anomaly'})\n", "df.set_index('Year', inplace=True)\n", "ts = df['Anomaly']" ], "metadata": { "id": "017GpJsNLoBY" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Make the years" ], "metadata": { "id": "srGGdU8cwj1Y" } }, { "cell_type": "code", "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import imageio\n", "\n", "# …after loading df and computing ts, steps, xmin,xmax,ymin,ymax…\n", "\n", "frame_files = []\n", "\n", "for year in ts.index:\n", " if year < 1980:\n", " continue\n", " fig, ax = plt.subplots(figsize=(8,5))\n", " ax.set_position([0.12, 0.15, 0.80, 0.75])\n", "\n", " # 1) Zero line\n", " ax.axhline(0, color='black', linestyle='--', linewidth=1, alpha=0.1)\n", "\n", " # 2) full series\n", " ax.plot(ts.index, ts.values, color='lightgray', lw=1)\n", "\n", " # 3) staircase steps\n", " for s, e, y in steps:\n", " if e <= year:\n", " ax.hlines(y, s, e, lw=3, color='C0')\n", " elif s <= year < e:\n", " ax.hlines(y, s, year, lw=4, color='tomato')\n", " ax.text(\n", " year, y + 0.02,\n", " f\"No warming in {year - s} yr\",\n", " ha='right', va='bottom',\n", " color='tomato', fontsize=11, fontweight='bold'\n", " )\n", "\n", " # 4) lock axes\n", " ax.set_xlim(xmin, xmax)\n", " ax.set_ylim(ymin, ymax)\n", "\n", " # 5) titles & labels\n", " ax.set_title(\n", " \"Staircase of Denial — “No warming in years”\\n\",\n", " loc='center', fontsize=16, fontweight='bold',\n", " y=0.94, pad=5\n", " )\n", " ax.set_xlabel('Year', fontsize=12)\n", " ax.set_ylabel('Temperature anomaly (°C)', fontsize=12)\n", "\n", " # 6) source & notes\n", " ax.text(0.99, -0.1,\n", " \"Source: HadCRUT5 by @iamreddave\",\n", " ha='right', va='top',\n", " transform=ax.transAxes,\n", " fontsize=9, color='gray')\n", " ax.text(0.20, -0.1,\n", " \"Anomalies relative to 1961-1990\",\n", " ha='right', va='top',\n", " transform=ax.transAxes,\n", " fontsize=9, color='gray')\n", "\n", " # 7) save\n", " fname = f'frame_{year}.png'\n", " fig.savefig(fname, dpi=120)\n", " plt.close(fig)\n", " frame_files.append(fname)" ], "metadata": { "id": "l76R5v5GujNI" }, "execution_count": 50, "outputs": [] }, { "cell_type": "code", "source": [ "output_path = '/content/staircase_hadcrut5.gif'\n", "with imageio.get_writer(\n", " '/content/staircase_hadcrut5.gif',\n", " mode='I',\n", " fps=7\n", ") as writer:\n", " for fn in frame_files:\n", " writer.append_data(imageio.imread(fn))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Jaq21m9jungW", "outputId": "45d77e7d-be05-4be7-d5db-58f0f846418b" }, "execution_count": 53, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/tmp/ipython-input-53-3463716466.py:8: DeprecationWarning: Starting with ImageIO v3 the behavior of this function will switch to that of iio.v3.imread. To keep the current behavior (and make this warning disappear) use `import imageio.v2 as imageio` or call `imageio.v2.imread` directly.\n", " writer.append_data(imageio.imread(fn))\n" ] } ] } ] }