{"id":20080106,"url":"https://github.com/garyo/sea-surface-temp-viz","last_synced_at":"2026-05-09T15:23:57.864Z","repository":{"id":221596774,"uuid":"754842033","full_name":"garyo/sea-surface-temp-viz","owner":"garyo","description":"Sea Surface Temp Visualization","archived":false,"fork":false,"pushed_at":"2026-04-14T13:51:31.000Z","size":5375,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-14T14:25:42.485Z","etag":null,"topics":["climate-change","climate-data-analysis","global-warming","python","sea-surface-temperature","visualization"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/garyo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-02-08T21:36:25.000Z","updated_at":"2026-04-14T12:58:31.000Z","dependencies_parsed_at":"2024-02-08T23:19:27.388Z","dependency_job_id":"64cf4819-ab38-4112-8c7e-1371088a20fc","html_url":"https://github.com/garyo/sea-surface-temp-viz","commit_stats":null,"previous_names":["garyo/sea-surface-temp-viz"],"tags_count":789,"template":false,"template_full_name":null,"purl":"pkg:github/garyo/sea-surface-temp-viz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garyo%2Fsea-surface-temp-viz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garyo%2Fsea-surface-temp-viz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garyo%2Fsea-surface-temp-viz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garyo%2Fsea-surface-temp-viz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/garyo","download_url":"https://codeload.github.com/garyo/sea-surface-temp-viz/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garyo%2Fsea-surface-temp-viz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32301330,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["climate-change","climate-data-analysis","global-warming","python","sea-surface-temperature","visualization"],"created_at":"2024-11-13T15:26:12.431Z","updated_at":"2026-04-26T15:01:56.237Z","avatar_url":"https://github.com/garyo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sea Surface Temperature Visualization\n\n![Build](https://github.com/garyo/sea-surface-temp-viz/actions/workflows/python-app.yml/badge.svg)\n\nSea surface temperatures are a key indicator of climate change. The\nworld's oceans are a significant reservoir of heat, warming and\ncooling much more slowly than the atmosphere. Ocean heat drives larger\nstorms, adds more moisture to the air above the ocean, and affects sea\nlife and ocean chemistry. Monitoring ocean temperature is important to\nunderstand the drivers and impacts of climate change.\n\nNOAA's [National Centers for Environmental\nInformation](https://www.ncei.noaa.gov/) maintains datasets of daily\nglobal ocean temperatures, derived mostly from satellites and updated\nusing ship and buoy based observations. The raw data is filtered and\nresampled onto a 1/4-degree grid over the whole globe, and is\navailable for every day from 1981 through the present at [their\nwebsite](https://www.ncei.noaa.gov/products/climate-data-records/sea-surface-temperature-optimum-interpolation)\nwith one or two days lag. It is an amazing testament to the incredible\nwork of scientists and engineers worldwide that we have access to\nreal-time data like this.\n\nThis tool produces a set of visualizations of that data: maps of the\nlatest temperature, and a set of time series of average temps for all\nyears. For each of those, it shows the actual temperatures as well as\nthe variance or \"anomaly\" from the mean value from the 1971-2000 time\nperiod. The anomalies are computed cell by cell by subtracting the\nmean value at that grid cell over the 1971-2000 period.\n\n![SST temp graph](https://github.com/garyo/sea-surface-temp-viz/releases/latest/download/sst-all.png)\n![SST anomaly graph](https://github.com/garyo/sea-surface-temp-viz/releases/latest/download/sst-all-anom.png)\n![SST temp map](https://github.com/garyo/sea-surface-temp-viz/releases/latest/download/sst-sst-map.webp)\n![SST anomaly map](https://github.com/garyo/sea-surface-temp-viz/releases/latest/download/sst-anom-map.webp)\n\nTo see the above maps on a 3d interactive globe, visit https://globe-viz.oberbrunner.com.\n\nSeveral things stand out from the time series graphs:\n\n- Ocean temperatures have been steadily increasing over the 40-year\n  recorded time span, visible in the graph as the later years are\n  shaded darker blue.\n- Sea surface temperatures have been rising significantly since 2023,\n  reaching daily records every day since spring of that year. (This\n  acceleration beyond the global climate change signal is largely due\n  to [El Niño](https://oceanservice.noaa.gov/facts/ninonina.html), but\n  also somewhat to the underwater eruption of the [Hunga-Tonga\n  volcano](https://volcano.si.edu/volcano.cfm?vn=243040) in 2022 and\n  slightly affected by the 2020 [regulation of\n  sulfur](https://www.imo.org/en/MediaCentre/PressBriefings/pages/02-IMO-2020.aspx)\n  in marine fuels, which had been masking temperature rises.)\n- The all-time record for temperature was set in April 2024, and the\n  all-time record for temperature variance from the mean was set in\n  January 2024. Both records are likely to be broken as 2024\n  progresses.\n\nFor technical details on data sources and how this code works, see [below](#technical-details).\n\n**NOTE**: As of July 4, 2024, the time-series graphs are now\ndate-aligned, so July 4 2024 lines up with July 4 2023, even though\n2024 is a leap year. This is done by \"stretching\" the non-leap year\ndates, which avoids skipping any data. Previously, the graph's X axis\nwas just the day number in the year.\n\n**NOTE**: As of April 27, 2024, the time-series graphs do _not_ mask\nout cells with ice \u003e 50%. After some discussion with the folks at\n[Climate Reanalyzer](https://climatereanalyzer.com), we noticed that\non some dates, the original dataset from NOAA is missing the ice map\n(it's false everywhere). And further, masking out ice cells did not\nseem scientifically reasonable. This change does significantly affect\nrecord temp dates. You can see all the historical graphs on this site,\nto compare the results before and after this change. The python code\ncan optionally still use ice masking if you pass the `-i` command-line\nargument.\n\nHere are the latest files, auto-produced daily by a github action (run\ndaily at 15:05 UTC, just after the daily data update from NOAA). You can use\nthese directly on the web via these URLs:\n\n- https://github.com/garyo/sea-surface-temp-viz/releases/latest/download/sst-map.png\n- https://github.com/garyo/sea-surface-temp-viz/releases/latest/download/sst-anom-map.png\n- https://github.com/garyo/sea-surface-temp-viz/releases/latest/download/sst-all.png\n- https://github.com/garyo/sea-surface-temp-viz/releases/latest/download/sst-all-anom.png\n\n\nFor older examples, see the `doc` subdir.\n\n# Technical Details\n\nThis python code downloads daily worldwide sea surface temp datasets\nand visualizes them either as a world map on a given day, or as a time\nseries per year.\n\nIt downloads the sea surface temp data from\nhttps://www.ncei.noaa.gov/data/sea-surface-temperature-optimum-interpolation/v2.1/access/avhrr.\nThat contains daily HDF datasets containing .25° lat/lon cells over\nthe entire Earth surface for each day since 1982, including temp and\ntemperature anomaly compared to the historical mean for that date.\n\nIt processes those datasets into maps for any given day, or\nline charts with temp per day for the entire time period. The processing steps include:\n- limiting to +/- 60° latitude, to ignore the polar regions\n- (optionally) removing cells containing \u003e 50% ice cover (off by default since 2024-04-27)\n- weighting each cell by its actual area (cells closer to the poles are smaller)\n\nBecause it takes a while to download all the datasets, it keeps a disk\ncache in `./sst-data-cache.json`. If you want to re-run from scratch,\njust delete that file. It does process datasets in parallel using\n`asyncio` but to get all the global datasets since 1981 takes around\n20 minutes on my machine.\n\nYou can also use the included [prune-cache.py](./prune-cache.py)\nutility to prune out the most recent N days from the cache so those\nwill be re-fetched on the next run. This is useful because sometimes\nthe dataset's recent data is re-analyzed to fix data quality issues.\nThe automatic updates of the images above are set to always re-fetch\nthe most recent 90 days of data.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaryo%2Fsea-surface-temp-viz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgaryo%2Fsea-surface-temp-viz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgaryo%2Fsea-surface-temp-viz/lists"}