Methodology
How Climate by Place turns NOAA files into pages. Every rule below is read from the same settings the build code uses.
Data
Each place uses NOAA NCEI's U.S. Climate Normals 1991–2020 for one station: the monthly normals file and the annual/seasonal normals file (frost dates). The files are downloaded by a script, logged with their URL, SHA-256 checksum and retrieval time, and converted by a second script into one JSON file per place. See data sources for every file and citation.
Station choice
Each place uses the main first-order weather station that serves the city, usually its primary airport (NOAA IDs starting with USW), checked against NOAA's station inventory. This is not always the nearest station; first-order stations carry the full set of normals, including frost dates. The distance shown on each page is the straight-line (great-circle) distance from the station to the city's center point, which is the “internal point” the US Census 2024 Gazetteer gives for the city. For San Francisco and Anchorage that point is not downtown, and the page says so.
Missing values
NOAA uses -9999 for “missing or insufficient data”. The build turns it into an empty value, pages show “–” or “no data”, and a check fails the build if -9999 ever reaches a page. Six stations have no NOAA snowfall normal; their pages say so instead of showing zero.
Units and rounding
Values are shown as NOAA publishes them: °F with one decimal, inches with two decimals for precipitation and one for snowfall. Celsius, millimetre and centimetre values are converted by the code and rounded. Day counts are averages, so they have decimals.
Hottest, coldest, wettest
- Hottest and coldest month: by monthly mean temperature (MLY-TAVG-NORMAL); ties go to the earlier month. The summer answer uses the month with the highest normal daily high.
- Wettest and driest month: by monthly precipitation normal (MLY-PRCP-NORMAL); ties go to the earlier month.
Character words
Words such as “cold winters” or “semi-arid” come from fixed bands. In each band the lower bound is included and the upper bound is not.
| Word for | Based on | Bands |
|---|---|---|
| Winter | mean temperature of the coldest month, F | very cold: below 20°F; cold: 20 to under 32°F; cool: 32 to under 45°F; mild: 45 to under 60°F; warm: 60°F or more |
| Summer | mean daily high of the hottest month (by high), F | cool: below 70°F; mild: 70 to under 80°F; warm: 80 to under 90°F; hot: 90 to under 100°F; very hot: 100°F or more |
| Precipitation | annual precipitation normal, inches (sum of months if no annual value) | arid: below 10 in; semi-arid: 10 to under 20 in; moderate: 20 to under 40 in; wet: 40 to under 60 in; very wet: 60 in or more |
| Snow | annual snowfall normal, inches; 'no data' when NOAA publishes no snowfall normal | rare or none: below 1 in; light: 1 to under 12 in; moderate: 12 to under 36 in; heavy: 36 to under 72 in; very heavy: 72 in or more |
Mild months (comfort range)
A month is in the comfort range when its normal daily high is from 65°F to 85°F, its normal daily low is 45°F or higher, and it averages fewer than 10 days with 0.10 in or more of precipitation. If no month qualifies, the page names the month whose normal daily high is closest to 75°F. A month that fails only one of these thresholds, by 1°F or 1 day or less, is named with the value that kept it out. Humidity, wind and sunshine are not in this data set, so they are not considered.
Frost dates
NOAA computes frost probabilities for nights at or below 36, 32, 28, 24, 20 and 16°F. In NOAA's words (normals readme):
- PRBLST: “Earliest date on which the last frost-freeze of the cold season will occur given probability and temperature threshold.” A 10% date means a 10% chance that the last such night comes on or after it.
- PRBFST: “Latest date on which the first frost-freeze of the cold season will occur at the given probability and temperature threshold.” A 10% date means a 10% chance that the first such night has come by it.
- PRBGSL: “Length of growing season with given probability and temperature threshold.” The 50% value is the median season length.
Each threshold at each place falls into one class, and pages word it accordingly:
- normal: NOAA publishes P50 dates and the median season (P50) is shorter than 365 days.
- rare: NOAA publishes dates, but the median season is the full year (365 days): at least half of years have no such night, while a few years do, and the median spring and fall dates can cross. Dates are not shown as a season.
- none: NOAA publishes no dates because too few years reach the threshold (flag Y).
- year_round: NOAA flags a year-round risk (flag V, too cold to compute).
- nodata: NOAA publishes no usable value.
A place counts as frost-free when NOAA publishes no 32°F dates for its station (flag Y: too few years with such a night) and either its median 32°F season is 365 days or its normal number of nights at or below 32°F rounds to 0.0 a year. A place counts as freeze rare when NOAA publishes 32°F dates but the median 32°F season is 365 days: at least half of years have no 32°F night, the median spring and autumn dates cross, and the page does not present them as a frost season.
The median season length (NOAA's P50) differs a little from the number of days between the two median dates, because a median of lengths is not the span between median dates. Pages quote NOAA's median season length.
Nearby and similar places
Nearby places are the three other places on this site whose weather stations are closest by great-circle distance. They can be far away: this site covers a small set of places.
Similar places are chosen in two steps. First, only places whose winter, summer and precipitation words (see the bands above) are each at most one band away from this place's words qualify, so a desert city is not matched with a humid one. Second, of those, up to three with the smallest climate distance are listed: the square root of the sum, over the 12 months, of the squared difference in normal mean temperature (°F) plus the squared difference in normal precipitation (inches) times 10. One inch of monthly precipitation counts like 10°F. If no place qualifies, none is listed.
Checks before publishing
- Pipeline tests compare known values with the raw NOAA files (for example Chicago O'Hare: median last spring 32°F frost April 16, median first autumn frost October 28; July normal high 84.5°F and precipitation 3.71 in) and check that every place has 12 complete months and a citation naming its station.
- A quality gate runs on the built site: no broken internal links, every page has a title, description and canonical URL, the HTML is well formed, structured data parses, and no page contains
-9999,nanor other placeholder text. - No person reviews each page before it is published. See the AI disclosure.
Limits
Normals are averages for 1991–2020 at one station. They are not forecasts or records, and they leave out humidity, wind, sunshine and day length. Thresholds such as the comfort range are this site's choices, published above, not NOAA's.