Working With Bay Area Rainfall Data

If you have ever tried to compile accurate precipitation totals for the San Francisco Bay Area, you already know how messy this data gets. The region spans from coastal fog zones to inland valleys to mountain ridges, and no single station tells the whole story. The Soaked Bay Area A Deep Dive Into Precipitation Totals is really just a reminder that weather stations lie by omission—they record where they sit, not where the rain actually falls. I spent several months pulling daily and monthly rainfall records for a hydrology project covering the entire bay region. The first thing I learned was that the NOAA co-op network has roughly 40 active rain gauges in the greater Bay Area, but they are clustered heavily around airports and flat urban land. Elevations above 500 feet have almost no coverage. That means a storm that drops three inches in Oakland might drop eleven inches on the eastern slopes of Mt. Tamalpais, and the gauge network misses the difference entirely. My workflow started with downloading raw data from the National Weather Service climate database. I filtered by year, extracted daily sums, and then cross-referenced adjacent stations to catch gaps. A lot of people skip the cross-reference step and just take the nearest station at face value. That is how you end up with a winter total for San Jose that is off by forty percent when a pine tree starts growing next to the gauge.

I ran into a specific problem last winter when I was compiling totals for December through February. Station 060741 near Concord recorded zero rainfall on January 17th, but every gauge within a twenty mile radius logged between one and two inches that day. I pulled the metadata and found the recorder had been clogged with debris after a flash event two days prior. The fix was to replace that day with a weighted average of the surrounding stations based on inverse distance, then flag the gap in my final spreadsheet. Without that check, the month total would have been wrong by nearly half an inch for the northern East Bay. Another issue that trips people up is how different agencies define storm events. Some datasets report hourly totals, some report daily sums reset at 7 AM local time, and others use the 9 AM rational period used by the National Weather Service. If you are merging datasets from multiple sources without standardizing the timestamp, you will double count precipitation that fell right after midnight and lose rain that fell right before. I convert everything to local standard time and align to the 9 AM rational period before doing any aggregation. That usually takes about ten minutes per station but prevents hours of debugging later. Spatial interpolation is where most projects either succeed or fail. The simplest approach is nearest neighbor, which works fine for flat terrain but falls apart quickly in the Bay Area because of orographic lift. A better method for this region is Thiessen polygons weighted by elevation. I use a simple script that assigns each point in the study area to the closest gauge, then adjusts the contribution based on the elevation difference between the gauge and the target point. Stations above 2000 feet get less weight because they are often isolated and do not represent valley conditions. This adjustment usually shifts winter totals by one to three inches compared to unweighted interpolation, which is the difference between a design storm that holds up and one that does not.

There are commercial datasets that claim to solve this problem. PRISM provides gridded precipitation estimates at 4 kilometer resolution and does a reasonable job for the central valley, but it tends to underperform in the coastal redwood zones and the complex terrain around the North Bay. The NWS Phase III radar product covers the whole region but has significant artifacts over water and in the shadow of the coastal range. Neither dataset replaces ground truth, and both should be validated against co-op stations before being used for engineering or compliance work. One counter-intuitive thing I discovered is that summer precipitation in the Bay Area can be just as problematic as winter precipitation if you are tracking total annual water balance. Fog drip and marine layer moisture are not captured by rain gauges, but they contribute meaningfully to soil moisture in the coastal hills. A project I worked on in 2023 required accounting for all forms of precipitation, including fog drip measured with occult precipitation gauges. Those gauges cost about eighty dollars each and need monthly cleaning. Skipping them saved money upfront but required a correction factor of roughly 0.4 inches per month during the dry season, which we derived from a small calibration study. The biggest bottleneck in this work is data availability latency. Most co-op stations report within 24 hours, but some rural stations have delays of three to five days. If you are doing real-time analysis or rapid flood assessment, you will need to work with a feed that pushes data faster, such as the NWS Advanced Hydrologic Prediction Service or a private network like Davis Instruments stations. Private networks vary in quality and often lack the metadata discipline of the official co-op, so they are useful for spot checks but not for final reports.

Get the Full Details

Rain totals: How wet the Bay Area is expected to get this week | KRON4
Rain totals: How wet the Bay Area is expected to get this week | KRON4

If you want to replicate this, start by downloading the 2020 through 2025 daily summaries from the NOAA climate data online portal. Filter for the Bay Area county FIPS codes, export to CSV, and load into a spreadsheet or Python environment. Clean the missing data flags first, then apply your interpolation method. I use a open-source Python library called hydrofunctions for the heavy lifting, which handles gap filling and timestamp alignment automatically. The whole pipeline from raw download to interpolated map takes about 45 minutes on a standard laptop for a five-year span with roughly 40 stations. Data quality remains the primary constraint. Old analog recorders were replaced in many locations starting in 2018, and the transition period produced inconsistent records at several stations. Check the station history notes before trusting any pre-2019 data from those locations. The inconsistencies usually show up as abrupt step changes in the time series that do not match nearby stations. When you find them, either exclude the affected period or manually adjust using the preceding consistent record. The Bay Area precipitation dataset is usable if you respect its limitations. It is not complete, it is not uniform, and it requires manual validation at key points. But with proper gap handling, elevation-aware interpolation, and awareness of the measurement biases, you can produce totals that are accurate enough for planning and reporting. The effort is in the details, and the details are where most projects go sideways.